0

私はSphinxで拡張機能を実行しようとしています.拡張機能がセクションのタイトルを検出し、それらを折り畳みセクションに変換するという考えです.セクション。

test_fold
=============

.. fold:: 

    * First Section 
        Hae duae provinciae bello quondam piratico catervis mixtae praedonum 
        a Servilio pro consule missae sub iugum factae sunt vectigales. 
        et hae quidem regiones velut in prominenti terrarum lingua positae 
        ob orbe eoo monte Amano disparantur.

    * Second Section
        Itaque tum Scaevola cum in eam ipsam mentionem incidisset, exposuit 
        nobis sermonem Laeli de amicitia habitum ab illo secum et cum altero 
        genero, C. Fannio Marci filio, paucis diebus post mortem Africani. 
        Eius disputationis sententias memoriae mandavi, quas hoc libro 
        exposui arbitratu meo; quasi enim ipsos induxi loquentes, ne 
        'inquam' et 'inquit' saepius interponeretur, atque ut tamquam 
        a praesentibus coram haberi sermo videretur.

    * Third Section
        Et interdum acciderat, ut siquid in penetrali secreto nullo citerioris 
        vitae ministro praesente paterfamilias uxori susurrasset in aurem, 
        velut Amphiarao referente aut Marcio, quondam vatibus inclitis, 
        postridie disceret imperator. ideoque etiam parietes arcanorum 
        soli conscii timebantur.

私はこのような拡張機能を書き始めました:

from docutils.nodes import raw
from docutils.parsers.rst import Directive

FOLD = "*"
foldSize = len(FOLD)

def removeSpace(_str):
    if _str[0]==" ":
        return removeSpace(_str[1:])
    else:
        return _str

class FoldDirective(Directive):

   # this enables content in the directive
   has_content = True

   def run(self):

    titles = []
    mains = []
    newMain = ""

    #loop
    for indexInt in xrange(len(self.content)):

        #get
        string = self.content[indexInt]
        if indexInt>0:
            previousString = self.content[indexInt-1]
        else:
            previousString = ""

        #Check
        if len(string)>0:
            if string[0] == FOLD:
                titles.append(string[foldSize:])
                if indexInt>0:
                    mains.append(newMain)
                newMain = ""
            elif previousString[0] == FOLD:
                newMain = string
            else:
                newMain += string

    #append the last
    mains.append(newMain)

    #return
    return [raw('',"<table><tr>",format='html')]+map(
        lambda title,main:
        raw('',"<td><button/></td><td><div>"+str(title)+"</div><td>     <tr><td></td><td><div>"+str(main)+"</div></td></tr>",format='html'),
        titles,mains
    )+[raw('',"</tr></table>",format='html')]

def setup(app):
    app.add_directive('fold', FoldDirective)

しかし、ここでの問題: - クリックするとメインが消える onClick 関数でボタンをバインドする方法がわかりません。- メインは未加工の html にドロップされるだけですが、これは最適ではありません。サブ ディレクティブも含まれている場合、それらは処理されないためです。- sphinx のドキュメントは、選択しなければならない場合、理解するのが非常に難しいため、その場合はノードのいくつかの呼び出し.General インスタンスですが、正確にはわかりません。

ありがとう

4

2 に答える 2

1

クラウド テーマでどのようにダウンしているかを知ることができます: http://pythonhosted.org/cloud_sptheme/cloud_theme_test.html#toggleable-section

于 2015-10-06T07:10:09.817 に答える