6

私はepydocからsphinxに移行しようとしているpythonパッケージを持っています。パッケージ自体は、sphinx automodule 関数で文書化されています。ここで、モジュール内のすべてのクラスの要約を、文書化されたモジュールの冒頭にある単純なリスト/テーブルにまとめたいと思います。

私の自動モジュール部分(pymunk.rst内)は次のようになります

.. automodule:: pymunk
    :members:
    :undoc-members:
    :show-inheritance:
    :inherited-members:

次に pymunk.constraint.rst に

.. automodule:: pymunk.constraint
    :members:
    :undoc-members:
    :show-inheritance:
    :inherited-members:

等々。各ファイルには、すべてのクラスのリストが必要なので、ドキュメント全体や巨大なインデックスをスクロールしなくても、利用可能なものの概要を簡単に把握できます。最終結果のようなもの

pymunk
    pymunk.Space
    pymunk.Circle
    ...

私の主な目標は、html にビルドすることです。

今、リストを抽出して挿入するために JavaScript を使って何か賢いことを考えていますが、もっと良い方法があるに違いありません。

(ドキュメントの現在の状態: http://pymunk.readthedocs.org/en/latest/pymunk.html )

4

2 に答える 2

2

jQuery は、これを行う簡単な方法であることが判明しました。

これを、インデックスが必要な生の rst ファイルに追加しました。

.. container:: custom-index

    .. raw:: html

        <script type="text/javascript" src='_static/pymunk.js'></script> 

このようにして div が html 出力に挿入されるため、このインデックスが必要なすべてのファイルにスクリプトを配置し、上部にヘッダーを配置できます。

次に、pymunk.js でクラス、関数、およびデータ タグを抽出し、インデックスに入れました。

この問題に対する JavaScript アプローチの欠点は、現在のページからインデックスに含める項目を選択するだけなので、TOC サイドバーに完全なクラス インデックスを表示するのが難しいことです。また、ページが読み込まれるたびにインデックスを作成するのも少し手間がかかります。大きなモジュールの場合、ブラウザによっては遅く感じるかもしれません。

以下の完全な js コード:

$(function (){
var createList = function(selector){

    var ul = $('<ul>');
    var selected = $(selector);

    if (selected.length === 0){
        return;
    }

    selected.clone().each(function (i,e){

        var p = $(e).children('.descclassname');
        var n = $(e).children('.descname');
        var l = $(e).children('.headerlink');

        var a = $('<a>');
        a.attr('href',l.attr('href')).attr('title', 'Link to this definition');

        a.append(p).append(n);

        var entry = $('<li>').append(a);
        ul.append(entry);
    });
    return ul;
}


var c = $('<div style="float:left; min-width: 300px;">');

var ul0 = c.clone().append($('.submodule-index'))

customIndex = $('.custom-index');
customIndex.empty();
customIndex.append(ul0);

var x = [];
x.push(['Classes','dl.class > dt']);
x.push(['Functions','dl.function > dt']);
x.push(['Variables','dl.data > dt']);

x.forEach(function (e){
    var l = createList(e[1]);
    if (l) {        
        var ul = c.clone()
            .append('<p class="rubric">'+e[0]+'</p>')
            .append(l);
    }
    customIndex.append(ul);
});

});
于 2012-09-17T13:04:13.557 に答える