2009-11-06 19 views
6

如何在Pygments突出顯示的Sphinx代碼片段的HTML輸出中設置製表符寬度? 默認情況下,它是令人討厭的8,但我想要4. 在Sphinx conf.py中找不到關於此設置的字樣。獅身人面像(文檔工具):在輸出中設置製表符寬度

+1

與S.洛特一致,即使在Java世界中,您也可以使用空格而不是製表符。 http://java.sun.com/docs/codeconv/html/CodeConventions.doc3.html#262 – 2009-11-06 13:14:56

+2

對於某些人來說,切換到空格可能並不那麼容易:整個團隊的代碼庫可以很好地使用製表符,並提供使用空格的文檔不一致。將所有代碼更改爲使用一個代碼是不切實際的並且可能具有破壞性。獅身人面像適用於許多不同的語言和環境。最好的敘述文檔工具如果不支持製表符,那麼它就不會被破壞,這是因爲「PEP8,這就是爲什麼」的代碼已經被破壞,這是充其量只是短視和適得其反的結果。 – Shabbyrobe 2012-05-17 02:00:48

+1

此外,我知道tabtil替代發生在docutils,而不是在獅身人面像,但獅身人面像受到嚴重影響的問題,應承擔一定的責任來處理它。 – Shabbyrobe 2012-05-17 02:04:30

回答

0

您將需要編寫一個獅身人面像擴展。 Add your custom Lexer,並將其與VisibleWhitespaceFilter一起使用。

+0

我更新了獅身人面像到0.6.3和Pygments到1.1.1(pygmentize -V)。 感動我的所有文件,然後將此添加到conf.py: 畫質設置(應用程序): 從pygments.filters從pygments.lexers.compiled進口JavaLexer sphinx.highlighting進口詞法分析器 導入VisibleWhitespaceFilter myLexer = JavaLexer () myLexer.add_filter(VisibleWhitespaceFilter(spaces ='!')); app.add_lexer('java',myLexer); 這將我的Java代碼中的所有選項卡替換爲八個「!」和「!」的所有空間 如預期。 當我嘗試選項標籤='!'時,沒有任何改變。 當我嘗試選項tabsize = 4時,沒有任何改變。 – jbasko 2009-11-09 15:13:01

+1

看起來標籤已被 之前的某個地方的空間替換。 因此,我試圖添加此過濾器到其他詞法分析器(其餘,沒有)[與 詞法分析器['rest']。add_filter(...)],但沒有任何影響 選項卡或製表符。 – jbasko 2009-11-09 15:13:39

2

添加這樣的事情你conf.py:

import re 

def process_docstring(app, what, name, obj, options, lines): 
    spaces_pat = re.compile(r"({8})") 
    ll = [] 
    for l in lines: 
     ll.append(spaces_pat.sub(" ",l)) 
    lines[:] = ll 

def setup(app): 
    app.connect('autodoc-process-docstring', process_docstring) 

又見獅身人面像Docstring preprocessing文檔。