koKekkoh
@koKekkoh (コケッコゥ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Sphinxの古いバージョンにあったsphinx.addnodes.termsepクラスについて

解決したいこと

2015年当時のSphinxにあった shpinx.addnodes.termsep について調べたいのですが、当時のSphinxを現在のSphinxを上書きしないようにインストールする方法を教えてください。

背景

2015年当時のSphinxで動作していたYogosyuというSphinx拡張モジュールを、最新のSphinx4.1.2でも(一応)動くように修正ました。

手持ちのreSTファイルでは特に問題なさそうなのですが、最新版のSphinxにはない sphinx.addnodes.termsep の代替えとして使ったものが妥当なのか分かりません。

代替えの方法でいいのであれば、わざわざ sphinx.addnodes.termsep を使う必要なかったはず。また最新版のSphinxにはないということは、必要性がないか他の機能でまかなえるような気がします。

発生している問題・エラー

該当するソースコード

yogosyu.py に対して修正した内容です。 diff -u で取ったものです。

--- /usr/local/lib/python3.8/site-packages/sphinxcontrib/yogosyu/yogosyu.py     2021-09-04 05:48:45.887059500 +0900
+++ ext/yogosyu/yogosyu.py      2021-09-04 11:06:43.052697600 +0900
@@ -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

自分で試したこと

「sphinx termsep」と検索して、古い版のSphinxドキュメントから説明を見つけたくらいです。

class sphinx.addnodes.termsep(rawsource='', *children, **attributes)¶
    Separates two terms within a <term> node.

その他

この機能を初めて利用します。「Q&A」と「意見交換」の使い分けをよく理解していませんが、今回は「Q&A」を選択しました。

以上

0

1Answer

自己解決

最新版のSphinx4.1.2のsite-package/sphinx/domain/std.pyにかかれているGlossaryをコード追っていて気付いたのですが、最新版ではglossaryディレクティブに必要な機能が実装されていました。

このため「sphinx.addnodes.termsep」の代替え手段の妥当性について判断する必要がなくなりました。

読みの指定方法

.. glossary::

   用語 : よ
     説明内容をアレコレ。

このように「:」と区切って読み(最初の一文字のみ)を追記することで、読みで分類されます。該当の関数は split_term_classifiers() です。

何故かは分かりませんが、「:」を挟む半角スペースはそれぞれ「1文字以上」が必須となっています。

留意点

次のページを読む限りは「1.4から実装」「実験的な機能」のようです。

0Like

Your answer might help someone💌