Sphinxを理解するためにはdocutilsも読んでおかないといけなさそうなので読 んでみたが、拡張書くだけだったらnodes.pyをおさえておけばいいだけかも
ApplicationError, DataError, SettingSpec, TransformSpec, Componentとい うクラスが定義されている
言語の設定関連
直接インポートするかサブクラス化することで使う。あまりちゃんと読んでない。
docutilsのクライアントコードの実例
例えばrst2html.pyはcoreのpublish_cmdlineを呼び出しているだけ。
publish_cmdline(writer_name='html', description=description)
Publisherというクラスが重要
TODO:readerとparserの関係がよくわからん。
def set_reader(self, reader_name, parser, parser_name):
"""Set `self.reader` by name."""
reader_class = readers.get_reader_class(reader_name)
self.reader = reader_class(parser, parser_name)
self.parser = self.reader.parser
publishが主な処理の流れ
self.set_io()
self.document = self.reader.read(self.source, self.parser,
self.settings)
self.apply_transforms()
output = self.writer.write(self.document, self.destination)
self.writer.assemble_parts()
publish_cmdlineもpublish_fileもこれを呼んでるだけ。プログラミングの時に使うのが publish_programmaticallyらしい。
Readerクラスが定義されていて、これはscanしてparseする役割をもっている。 readで呼び出す
def read(self, source, parser, settings):
self.source = source
if not self.parser:
self.parser = parser
self.settings = settings
self.input = self.source.read()
self.parse()
return self.document
PEPのReader
pythonのソース用のReader
Standalone file Reader for the reStructuredText markup syntax.