kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

Sphinx拡張を作ったときに参考にしたモノ

sphinxcontrib-xlsxtableを作る際に参考にしたところ。 最終的にはdocutilsのソースコードまで見ました。

あと、開発時は見てないけど、以下がもっそい参考になりそう。

いろいろとWebを漁りながらやっていましたが、どうも非公式のドキュメントを結構見てたみたいです。 リファレンスに全然書いてねぇ...とか思ってたけど、そもそも公式じゃなかった。 もうちょっとdocutilsの公式リファレンスを漁ったほうがよかった。

sphinxcontrib-xlsxtableはいうなれば、CSVファイルがExcelになったようなモノなので、 CSV Table DirectiveとTable Directiveを参考にしました。

特にソースを追いかけたのはTable DirectiveのRSTTableクラス。 作成したクラスの継承元でもありますが、そもそもTable Directiveがかなりシンプルな構文なので、 参考にしやすいです。

# https://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils/docutils/parsers/rst/directives/tables.py
# RSTTable classのrunメソッド
def run(self):
    ...

    # Table Captionの取得とかはそのまま流用
    title, messages = self.make_title()
    # この辺を順番にいじったり、デバッグしながら動作を確認
    node = nodes.Element()
    self.state.nested_parse(self.content, self.content_offset, node)

    ...

    table_node = node[0]
    table_node['classes'] += self.options.get('class', [])
    self.set_table_width(table_node)
    if 'align' in self.options:
        table_node['align'] = self.options.get('align')
    tgroup = table_node[0]

    ...

    self.add_name(table_node)
    if title:
        table_node.insert(0, title)
    return [table_node] + messages

見返すと結構見るべきドキュメントを取りこぼしてる感じだけど、 当初は理解の仕方を理解してなかったところがあるので、理解するのは無理だったかも。 一から理解して~というよりも、とりあえず動かしてみたいってのも強かった。