2011-11-30 8 views
9

ファイル名の降順でtoctreeを注文するオプションはありますか? は、昇順の場合は、我々は使用することができます。グロブ:このようなオプションは:Sphinxのドキュメントでは、「glob」フラグオプションによって提供されるtoctreeの順序を元に戻すにはどうすればよいですか?

.. toctree: 
    :glob: 

    2011* 

これはSphinxのドキュメント内で報告されるべきである再編テキストで書かれた日常のメモに便利だろう。

答えて

10

toctreeを逆ソートする単純なオプションはありません。しかし、ファイルに書き込まれる前に文書の構造を変更することでそれを行うことができます。ここに提案があります。 conf.pyに次のコードを追加しますdoctree-resolvedイベントが発生したときに

def reverse_toctree(app, doctree, docname): 
    """Reverse the order of entries in the root toctree if 'glob' is used.""" 
    if docname == "index": 
     for node in doctree.traverse(): 
      if node.tagname == "toctree" and node.get("glob"): 
       node["entries"].reverse() 
       break 

def setup(app): 
    app.connect("doctree-resolved", reverse_toctree) 

reverse_toctree()コールバック関数が呼び出されます。この関数は、文書ツリー内のtoctreeノードを探し、インプレースで変更します。スフィンクスとDocutilsのAPIに関する

詳細:

+0

ニース。しかし、これはすべてのtoctreeを逆にしませんか?おそらく ':reversed: 'パラメータのチェックをtoctreeノードに追加して、この振る舞いを制御することはできますか? –

+0

@Kevin Horn:glob:オプションが使用されている場合、コードは "索引"(ルート)文書のtoctreeを元に戻します。 OPは詳細な要件を指定していないため、私はこの答えを謙虚な提案以上にするつもりはありませんでした。私はそれを微調整する方法がたくさんあると確信しています。コメントとupvoteをありがとう! – mzjn

+3

しかしこれは、サイドバーのToCを元に戻しません。 – Adobe

11

これはtoctreeに反転オプションが追加されます。

あなたが行うことができます
from sphinx.directives import TocTree 
from docutils.parsers.rst import directives 

class NewTocTree(TocTree): 
    option_spec = dict(TocTree.option_spec, 
         reversed=directives.flag) 

    def run(self): 
     rst = super(NewTocTree, self).run() 
     if 'reversed' in self.options: 
      rst[0][0]['entries'].reverse() 
     return rst 

def setup(app): 
    app.add_directive('toctree', NewTocTree) 

:スフィンクスのよう

Contents: 

.. toctree:: 
    :maxdepth: 2 
    :reversed: 
    :glob: 

    20* 
+0

これはサイドバーのtoctreeも元に戻します。 – brandones

1

1.5+あなたはtoctreeに追加できるビルトイン:reversed:フラグがあります:

.. toctree:: 
    :glob: 
    :reversed: 

    2011* 

は、詳細については、 the Sphinx documentationを参照してください。

+0

この機能はSphinx 1.5(1.5a2):http://www.sphinx-doc.org/en/stable/changes.html#id30で追加されました。 – mzjn

関連する問題