0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

🗑【Sphinx】yogosyu(用語集)をSphinx4.1.2で使えるように修正する

Last updated at Posted at 2021-09-04

後日談(最新)

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.参考

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?