Sphinx拡張を作ったときに参考にしたモノ
sphinxcontrib-xlsxtableを作る際に参考にしたところ。 最終的にはdocutilsのソースコードまで見ました。
- 導入その1はSphinx-Users.jpの拡張開発最初の一歩
- 導入その2はSphinxのドキュメントExtending Sphinx
- PyPIのパッケージに関してはPyPIのヘルプから飛んだPyPAのドキュメント
- docutilsのソース
- reSTのドキュメント
あと、開発時は見てないけど、以下がもっそい参考になりそう。
いろいろと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
見返すと結構見るべきドキュメントを取りこぼしてる感じだけど、 当初は理解の仕方を理解してなかったところがあるので、理解するのは無理だったかも。 一から理解して~というよりも、とりあえず動かしてみたいってのも強かった。