6

我想通過reST生成文檔,但不想手動編寫reST源代碼,但讓python腳本執行該操作,然後使用sphinx生成其他格式(HTML,PDF)。如何從python生成reST/sphinx源代碼?

想象一下,我有一個二進制格式的電話簿。現在我用一個python腳本解析這個併產生所有的名字和號碼的文檔:

phone_book = PhonebookParser("somefile.bin") 

    restdoc = restProducer.NewDocument() 
    for entry in phone_book: 
    restdoc.add_section(title = entry.name, body = entry.number) 

    restdoc.write_to_file("phonebook.rst") 

然後我會去調用獅身人面像生成PDF和HTML:

> sphinx phonebook.rst -o phonebook.pdf 
    > sphinx phonebook.rst -o phonebook.html 

有一個python模塊(上面的例子中的restProducer)提供了一個用於生成reST的API?或者是通過幾個打印語句轉儲reST標記的最佳方法?

+0

你能解釋一下你想從什麼格式生成reST格式嗎? – 2011-03-13 22:02:11

+0

基本上來自程序的內部狀態。我有一些散列和列表,現在它想要遍歷這些並可能在文檔中爲這些數據結構中的每個條目生成一個部分。 – dantje 2011-03-15 05:40:26

回答

4
  1. 請參閱Automatically Generating Documentation for All Python Package Contents

  2. 即將發佈的Sphinx 1.1版本包含sphinx-apidoc.py腳本。

編輯:

現在你已經多一點說明了問題,我會說:「通過一對夫婦的打印報表,傾倒的reST標記」選項去的。你似乎已經在思考這些問題了。爲什麼不嘗試實施簡約restProducer

+0

這不是我想要記錄的python模塊或包。 python腳本只是具有一些知識,它應該將其格式化爲一個重要的來源。 – dantje 2011-03-13 21:46:51

+0

@dantje:「知識」從哪裏來? – mzjn 2011-03-14 15:57:23

+0

應用程序讀取其他文件,解析它們,然後生成文檔。 – dantje 2011-03-15 05:38:36

3

如果你想要docs-without-writing-docs(最好給你一個API參考而不是真實文檔),那麼Sphinx的autosummaryautodoc擴展名可能就是你所追求的。

0

如果您的目的是以編程方式編寫一次文檔,並且能夠以多種格式輸出,您可以在PyQt Framework中查看QTextDocument。儘管如此,這是一種矯枉過正的行爲。

from PyQt4.QtGui import * 
import sys 

doc = QTextDocument() 
cur = QTextCursor(doc) 

d_font = QFont('Times New Roman') 
doc.setDefaultFont(d_font) 

table_fmt = QTextTableFormat() 
table_fmt.setColumnWidthConstraints([ 
    QTextLength(QTextLength.PercentageLength, 30), 
    QTextLength(QTextLength.PercentageLength, 70) 
    ]) 
table = cur.insertTable(5,2, table_fmt) 
cur.insertText('sample text 1') 
cur.movePosition(cur.NextCell) 
cur.insertText('sample text 2') 

# Print to a pdf file 
# QPrinter: Must construct a QApplication before a QPaintDevice 
app = QApplication(sys.argv) 
printer = QPrinter(QPrinter.HighResolution) 
printer.setOutputFormat(QPrinter.PdfFormat) 
printer.setOutputFileName('sample.pdf') 

# Save to file 
writer = QTextDocumentWriter() 
writer.setFormat(writer.supportedDocumentFormats()[1]) 
writer.setFileName('sample.odt') 
writer.write(doc) 

QTextDocumentWriter支持明文,html和ODF。可以使用QPrinter打印到物理打印機或PDF文件。

然而,像你提到的Jinja2這樣的模板引擎是一個更好的方法。