7

置換定義を含む次の再構成されたテキスト スニペットを使用したいと思います。

text = """

|python|

.. |python| image:: python.jpg
"""

定義を解決して、置換テキストが表示されるようにします。

resolved_text = """
.. image:: python.jpg

"""

docutils またはこれを実行できる別のモジュールに関数またはユーティリティはありますか?

4

3 に答える 3

2

docutilsdocutils をライブラリとして使用するパブリッシャー関数を提供します。

したがって、使用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 を使用してこれを実装するのも複雑です。

于 2013-03-18T16:36:20.920 に答える
1

Docutilsハッカーガイドをご覧ください。docutilsがどのように機能するかを説明しています。

Transform入力ファイルを解析することによって生成されるノードツリーに適切なものを適用することで逃げることができるかもしれません。変換を適用した後、Writerオブジェクトを使用してReStructuredTextを再度出力する必要があります。このライターはまだ存在しないため、最初に作成する必要があります。

于 2013-03-12T22:51:40.060 に答える
1

質問を完全に理解しているかどうかはわかりませんが、リスト内包表記を使用した抽出の例を次に示します。

extracted_line = [x for x in text.split("\n") if x[:2] == ".."][0]
resolved_text = """{}""".format(extracted_line.replace("|python|",""))

サブ定義が複数回発生することが予想される場合は、いくつかのロジックを追加する必要があります。

于 2013-03-15T05:15:36.050 に答える