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

# 後日談（最新）

yogosyuの機能を含んだSphinx拡張を作りました。

https://qiita.com/koKekkoh/items/4563b63fdb8eaa3ef4f9

本記事は「開発日誌」的な意味合い以外では、特に読む必要はありません。

# 後日談
Sphinx4.1.2（2021-09-05現在の最新）の ```glossary``` ディレクティブに、読みを指定する機能がありました。

https://qiita.com/koKekkoh/questions/978fbf7310f12293c25a
 
以下のように読み（最初の一文字）を書くことで期待する動作をします。

```rst
.. glossary::

   用語 : よ
     用語についてアレコレ

   拡張 : か
     拡張とは云々
```

「ネズミの嫁入り」のような話でした。。

※「実験的な機能」と説明されているので要注意。機能そのものはなくなるとは思いませんが、読みの指定方法が変わるかもしれません。
※「実験的な機能」と説明していながら、Sphinx1.4から実装されているようです。

---
# １．はじめに

Sphinxの索引は、例えば「国際単位系」という用語を記載すると「こ」ではなく「国」で表示されます。これを対処したのが ```yogosyu``` というSphinx拡張です。ですが、古い（2015年最終更新）のでエラーになります。

どうにか使えるようにしたので、共有します。

# ２．補足

とりあえずエラーがでなくなるように対処したら動くようになりました。もっとスマートな対処があるかもしれません。そもそも、最新のSphinxであれが既にある機能で対応できるのかもしれません。

# ３．環境

- Windows10/cygwin64
- Python 3.8.10
- pip 21.2.4
- Sphinx 4.1.2
- yogosyu 2.0.5

# ４．セットアップ
## 方針など
モジュールの修正が必要なので、オリジナルをコピーしてコピーしたファイルを編集します。

変更内容は ```diff -u``` の出力です。見ればなんとなく分かります。


## 手順

まずはお呪いとして

```bash
$ python -m pip install --upgrade pip
$ python -m pip install --upgrade sphinx
```

```yogosyu``` をインストール

```bash
python -m pip install --upgrade yogosyu
```

以降は、Sphinxのプロジェクトディレクトリに居るものとします。

```bash
$ 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``` の変更内容

```diff
@@ -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``` に追記する内容

```python
sys.path.insert(0, './ext/yogosyu')
```

```python
extensions.append('user_ordered_index_patch')
extensions.append('yogosyu')
```

# ５．サンプル

```sphinx
.. yogosyu::
   :sorted:
   :yomimark: 、

   国際協調、こくさいきょうちょう
     国際的に協調すること

   日進月歩、にっしんげっぽ
     月日が過ぎていくのは早い
```

# ５．お願い
より良い方法があったら教えてください。伝え方はご自由に。

Qiitaユーザーであればご自分の記事として作成して、その中でリンクを貼るのでもOKです。他サイトであれば、コメントにリンクを貼るなど。

# ６．参考

https://h12u.com/sphinx/yogosyu/README_ja.html

https://h12u.com/sphinx/

https://sphinx-users.jp/reverse-dict/writing/indexing.html

# 以上