【问题标题】:Sphinx extension to use GitHub markdown emoji in Sphinx?Sphinx 扩展在 Sphinx 中使用 GitHub 降价表情符号?
【发布时间】:2017-02-07 10:31:01
【问题描述】:

问题

我一直在使用(Python) Sphinx docCommonMark 解析器来编写包含用reStructuredText 和Markdown 编写的文件的Sphinx 文档。到目前为止一切顺利,效果非常好 (see this line in an example of Sphinx conf.py file)。

然而,CommonMark 对 GitHub 风格的 Markdown (GFM) 的支持并不完美,它缺少的一项重要功能是 emoji。 我搜索了其他 Markdown 解析器,更具体到 GFM,例如 py-gfm,但它们似乎都不支持表情符号。

例如,下面的屏幕截图在左侧显示了 Sphinx 输出,在右侧显示了 GitHub 渲染版本:

所以我的问题是:

  • 有谁知道可以在 rST 和/或 Markdown 中添加对类似 GFM 的表情符号的支持的 Sphinx 扩展? (即,像 :boom: 这样写的表情符号)。
  • 或者我可以用来将任何表情符号(例如:boom:)转换为小图像的技巧? (因为这就是 GitHub 正在做的事情,例如,参见 the :boom: image)这个技巧可能应该在 Sphinx 创建的 HTML 页面上,而不是在源 Markdown 文件上(我希望它们仍然可以通过 GitHub 文件查看器读取)。

提前致谢。 问候。


2个部分解决方案

  • 部分解决方案是我写的this small Python script,使用carpedm20's emoji 包。 如果可能,它会将任何 :emoji: 别名(写为 :like_this:) 转换为其 UTF-8 版本。

  • 我也试过用pymdownx.emoji包,写this second script。 它将任何 :emoji: 别名转换为一段 HTML 代码,加载一个遥远的 PNG(或 SVG)版本(来自 JsDelivr 的 CDN)。仍然不完美,大小/缩放不好,甚至...中的表情符号都被替换了。 (我会改进)。

两者都可以与这个小型 Bash for 循环一起使用:

BUILDDIR=_build/html  # Adapt to the location of your Sphinx output
for i in "$BUILDDIR"/*.html; do
    emojize.py "$i" > "$i".new
    # or emojize_pngorsvg.py "$i" > "$i".new
    wdiff -3 "$i" "$i".new;
    mv -vf "$i".new "$i"
done

演示:

  • 使用 UTF-8 编码的表情符号:
  • 带有表情符号的PNG图像(仍然不完美):

【问题讨论】:

  • 问完之后有没有发现什么有趣的事情?仍在寻找 2019 年,但我没有发现任何东西(我也试图避免声明 |substitution|)。
  • 嗨@Peque,很遗憾,没有,我没有找到任何新工具(但我没有积极寻找它)。我仍在为 smpybandits.github.io 使用相同的 hack 脚本。

标签: python-sphinx emoji github-flavored-markdown


【解决方案1】:

没有找到任何东西,所以结束了creating an extension

安装它:

pip install sphinxemoji

然后,在你的 Sphinx 的conf.py

extensions = [
    '...',
    'sphinxemoji.sphinxemoji',
]

然后您可以开始在文档中使用表情符号代码(请注意,您需要在表情符号代码周围使用条形):

This text includes a smily face |:smile:| and a snake too! |:snake:|

Don't you love it? |:heart_eyes:|

如果您想要一致的表情符号风格,可以将其添加到您的conf.py

sphinxemoji_style = 'twemoji'

【讨论】:

  • 这很棒。没有一个表情符号怎么能写出一篇像样的用户文档,这是人类无法理解的。
  • 这太棒了?
  • 应该补充一点,它适用于 .rst 文件但不处理 .md 文件(CommonMarkParser)
  • @kraymer 随时open an issue。 ;-)
【解决方案2】:

您无需将表情符号转换为小图像或使用扩展程序,因为 Sphinx 实际上支持表情符号,因为它们是开箱即用的复制粘贴。

如果您复制任何表情符号并将其添加到文档文件中,您的编辑器可能无法正确显示它,但只要插入了表情符号,它就会显示在您的文档中。

用警笛表情符号试试吧:

?

我知道这适用于 reStructuredText 文件,所以希望它也适用于 Markdown 文件。

使这更容易的一件事是在您的rst_epilog 中为 reStructuredText 文件替换您想要使用的所有表情符号。这样您就可以在 Epilog 中使用类似的内容:

.. |siren| replace:: ? 

每次您想在 reStructuredText 文档中使用警报器时,只需使用 |siren|

【讨论】:

  • 嗨,谢谢,但这不是我的目标... - 我知道表情符号可以直接输入源中,但是 1. 我不想经常复制和粘贴它们(例如来自 emoji-cheat-sheet.com),2. 我想编写纯 ascii 文件以避免编码噩梦,3. 我喜欢 GitHub 如何呈现用:siren: 编写的表情符号。 - 如果您有少量别名,使用 rst_epilog 和别名很好,但我希望支持所有表情符号,而不必定义 600 个别名。此外,它可能不适用于使用 commonmark 解析器读取的 .md 文件(rst_epilog 用于 .rst)。
  • 不幸的是,我认为我的回答是最接近可用表情符号的答案。您可以尝试做的一件事是获取每个表情符号的所有名称信息以及它的艺术作品,然后在 Sphinx 中编写一个扩展名,将 emoji:`emoji-name` 之类的内容解析到具有该名称的相关文件中。
  • PyMdown(例如,用于 MkDocs)具有此扩展名:facelessuser.github.io/pymdown-extensions/extensions/emoji,并且 Sphinx 可以使用 PyMdown 而不是 Recommonmark 来阅读和使用 Markdown 文档。还有一个 Python 模块可以将 ascii 别名 (:emoji:) 转换为 UTF-8 代码,github.com/carpedm20/emoji。我将尝试编写一个小型后处理器(或一个 durty bash 脚本)来将 Sphinx 生成的 HTML 输出中的 ascii 表情符号转换为 UTF-8 代码。
猜你喜欢
  • 2021-09-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2020-03-15
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多