後日談(最新)
yogosyuの機能を含んだSphinx拡張を作りました。
本記事は「開発日誌」的な意味合い以外では、特に読む必要はありません。
後日談
Sphinx4.1.2(2021-09-05現在の最新)の glossary
ディレクティブに、読みを指定する機能がありました。
以下のように読み(最初の一文字)を書くことで期待する動作をします。
.. glossary::
用語 : よ
用語についてアレコレ
拡張 : か
拡張とは云々
「ネズミの嫁入り」のような話でした。。
※「実験的な機能」と説明されているので要注意。機能そのものはなくなるとは思いませんが、読みの指定方法が変わるかもしれません。
※「実験的な機能」と説明していながら、Sphinx1.4から実装されているようです。
1.はじめに
Sphinxの索引は、例えば「国際単位系」という用語を記載すると「こ」ではなく「国」で表示されます。これを対処したのが yogosyu
というSphinx拡張です。ですが、古い(2015年最終更新)のでエラーになります。
どうにか使えるようにしたので、共有します。
2.補足
とりあえずエラーがでなくなるように対処したら動くようになりました。もっとスマートな対処があるかもしれません。そもそも、最新のSphinxであれが既にある機能で対応できるのかもしれません。
3.環境
- Windows10/cygwin64
- Python 3.8.10
- pip 21.2.4
- Sphinx 4.1.2
- yogosyu 2.0.5
4.セットアップ
方針など
モジュールの修正が必要なので、オリジナルをコピーしてコピーしたファイルを編集します。
変更内容は diff -u
の出力です。見ればなんとなく分かります。
手順
まずはお呪いとして
$ python -m pip install --upgrade pip
$ python -m pip install --upgrade sphinx
yogosyu
をインストール
python -m pip install --upgrade yogosyu
以降は、Sphinxのプロジェクトディレクトリに居るものとします。
$ mkdir ext
$ cp -r /usr/local/lib/python3.8/site-packages/sphinxcontrib/yogosyu ext
$ vi ext/yogosyu/yogosyu.py
$ vi source/conf.py
ext/yogosyu/yogosyu.py
の変更内容
@@ -46,10 +46,9 @@
They're only used to sort.
"""
-from docutils.parsers.rst import directives
+from docutils.parsers.rst import directives, Directive
from docutils.statemachine import ViewList
from docutils import nodes
-from sphinx.util.compat import Directive
from sphinx import addnodes
_sort_order_obj = None # Place Holder, and internal only.
@@ -81,11 +80,11 @@
# add an index entry too
indexnode = addnodes.index()
- indexnode['entries'] = [('single', termtext, new_id, 'main')]
+ indexnode['entries'] = [('single', termtext, new_id, 'main', yomi[:1])]
new_termnodes = []
new_termnodes.append(indexnode)
new_termnodes.extend(node.children)
- new_termnodes.append(addnodes.termsep())
+ new_termnodes.extend(node)
for termnode in new_termnodes:
termnode.source, termnode.line = node.source, node.line
@@ -320,4 +319,4 @@
import sphinx.domains.std
sphinx.domains.std.make_refnode = wrap_make_refnode(sphinx.util.nodes.make_refnode)
sphinx.domains.std.StandardDomain.get_objects = my_domains_std_StandardDomain_get_objects
- return {'version': '2.0.5', 'parallel_read_safe': False}
+ return {'version': '2.0.5k1', 'parallel_read_safe': False}
source/conf.py
に追記する内容
sys.path.insert(0, './ext/yogosyu')
extensions.append('user_ordered_index_patch')
extensions.append('yogosyu')
5.サンプル
.. yogosyu::
:sorted:
:yomimark: 、
国際協調、こくさいきょうちょう
国際的に協調すること
日進月歩、にっしんげっぽ
月日が過ぎていくのは早い
5.お願い
より良い方法があったら教えてください。伝え方はご自由に。
Qiitaユーザーであればご自分の記事として作成して、その中でリンクを貼るのでもOKです。他サイトであれば、コメントにリンクを貼るなど。
6.参考