置換定義を含む次の再構成されたテキスト スニペットを使用したいと思います。
text = """
|python|
.. |python| image:: python.jpg
"""
定義を解決して、置換テキストが表示されるようにします。
resolved_text = """
.. image:: python.jpg
"""
docutils またはこれを実行できる別のモジュールに関数またはユーティリティはありますか?
置換定義を含む次の再構成されたテキスト スニペットを使用したいと思います。
text = """
|python|
.. |python| image:: python.jpg
"""
定義を解決して、置換テキストが表示されるようにします。
resolved_text = """
.. image:: python.jpg
"""
docutils またはこれを実行できる別のモジュールに関数またはユーティリティはありますか?
docutils
docutils をライブラリとして使用するパブリッシャー関数を提供します。
したがって、使用docutils.core.publish_string
はユースケースのオプションになる可能性があります。
In [90]: from docutils import core
In [91]: text = '|python|\n\n.. |python| image:: python.jpg\n'
In [92]: print core.publish_string(text)
<document source="<string>">
<paragraph>
<image alt="python" uri="python.jpg">
<substitution_definition names="python">
<image alt="python" uri="python.jpg">
デフォルトでは、出力で確認できるライターをpuplish_string
使用します。pseudoxml
ただし、質問からのプレーン テキスト出力が本当に必要な場合は、から派生したカスタム ライター クラスが必要ですdocutils.writers.Writer
。これを実装する方法がわかりません。おそらくSphinx
TextWriterが出発点になる可能性があります。
本当に単純な置換だけが必要な場合はreplace
、テキストで使用する方が簡単な解決策になるようです。より複雑なものが必要な場合は、docutils を使用してこれを実装するのも複雑です。
Docutilsハッカーガイドをご覧ください。docutilsがどのように機能するかを説明しています。
Transform
入力ファイルを解析することによって生成されるノードツリーに適切なものを適用することで逃げることができるかもしれません。変換を適用した後、Writer
オブジェクトを使用してReStructuredTextを再度出力する必要があります。このライターはまだ存在しないため、最初に作成する必要があります。
質問を完全に理解しているかどうかはわかりませんが、リスト内包表記を使用した抽出の例を次に示します。
extracted_line = [x for x in text.split("\n") if x[:2] == ".."][0]
resolved_text = """{}""".format(extracted_line.replace("|python|",""))
サブ定義が複数回発生することが予想される場合は、いくつかのロジックを追加する必要があります。