2016-09-27 8 views
2

ディレクティブを別のディレクティブに変換する代替(または同様のもの)を作成したいと思います。例えばあるディレクティブを別のディレクティブに置き換えることは可能ですか?

たちのスフィンクスベースのドキュメントでは、我々は特定のノートと警告ボックスを作成するためにAdmonitionsを使用しています。

我々は

.. note:: This is a Note 

を使用する場合は、ボックスのタイトルは、およびこれは注意あるが、最初の段落になっています。これとは対照的に

、このディレクティブ

.. admonition:: This is a Note 
    :class: note 

は、所望のタイトルとメモボックスを生成します。

他のエディタを簡単にするために、最初のものを2番目のものに置き換える置換を作成したいと思います。

これは、スフィンクスで何かできますか?

答えて

2

はい、できます。カスタムディレクティブをSphinxに追加する必要があります。以下で(conf.pyへ次のようなmydirectives.py)Pythonモジュールを作成します。

import os 
import os.path 
import re 
import subprocess 

import docutils.core 
import docutils.nodes 
import docutils.parsers.rst 

class AbstractDirective(docutils.parsers.rst.Directive): 
    has_content = True 
    required_arguments = 0 
    optional_arguments = 0 
    option_spec = {} 
    final_argument_whitespace = False 

    node_class = docutils.nodes.container 

    def run(self): 
     self.assert_has_content() 
     text = '\n'.join(self.content) 
     admonition_node = self.node_class(rawsource=text) 
     self.state.nested_parse(self.content, self.content_offset, 
           admonition_node) 
     admonition_node.set_class("abstract") 
     return [admonition_node] 


def setup(app): 
    app.add_directive('abstract', AbstractDirective) 

にもタイトルを追加するにはいくつかの方法が存在しなければなりません。おそらく タイトルノードを自分で追加する必要があります。ドキュメントはそこに欠けている、 source for admonitions をよく見るとあなたはdocutilsのための気持ちを得るでしょう。

カスタムテキストノードでは、独自のノートディレクティブを作成することができます。

+0

ありがとうございました。私は時間があるとすぐにそれを見ていきます –

関連する問題