Skip to content

Instantly share code, notes, and snippets.

@tk0miya
Created November 18, 2019 15:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tk0miya/1bf7b63235768f46b1b3aee7459be040 to your computer and use it in GitHub Desktop.
Save tk0miya/1bf7b63235768f46b1b3aee7459be040 to your computer and use it in GitHub Desktop.

Sphinx でも絵文字を使ってみたい

github っぽく emoji を使ってみたいので、 GitHub の emoji ライブラリ gemoji から絵文字の定義リストを拝借して Sphinx に突っ込んで見るテスト。substitution 文法を拝借したので |+1| とすると絵文字が出ます。

Unicode の文字をそのまま埋め込んでいるので、PDF 出力する場合は Unicode 対応の LaTeX エンジンといい感じのフォントを使ってください。 つまり、デフォルトでは動作しません。

使い方

curl -LO https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json

special thanks!!

@hnakamur2

# extension testbed
import json
from docutils import nodes
from docutils.transforms.references import Substitutions
from sphinx.transforms import SphinxTransform
_EMOJI_CHARACTERS = {}
class EmojiTransform(SphinxTransform):
default_priority = Substitutions.default_priority - 1
def apply(self):
for node in self.document.traverse(nodes.substitution_reference):
refname = node['refname']
if refname in self.document.substitution_defs:
pass
else:
if refname in _EMOJI_CHARACTERS:
emoji = _EMOJI_CHARACTERS[refname]
node.replace_self(nodes.Text(emoji))
def load_emoji_database(app):
with open('emoji.json') as f:
for character in json.load(f):
for alias in character["aliases"]:
_EMOJI_CHARACTERS[alias] = character["emoji"]
def setup(app):
app.connect('builder-inited', load_emoji_database)
app.add_transform(EmojiTransform)
@tk0miya
Copy link
Author

tk0miya commented Nov 18, 2019

これが
スクリーンショット 2019-11-19 0 10 35
こうこうなります
スクリーンショット 2019-11-19 0 10 41

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment