2009-11-06 11 views
6

¿Cómo se establece el ancho de la pestaña en la salida HTML de los fragmentos de código Sphinx resaltados por Pygments? Por defecto es el 8 molesto, pero quiero 4. No encontré una palabra sobre esta configuración en Sphinx conf.py.Sphinx (herramienta de documentación): establecer el ancho de la pestaña en la salida

+1

De acuerdo con S. Lott, incluso en el mundo de Java puede utilizar espacios en lugar de pestañas. http://java.sun.com/docs/codeconv/html/CodeConventions.doc3.html#262 –

+2

Puede que para algunos no sea tan fácil simplemente cambiar a espacios: la base de código de todo su equipo podría usar pestañas y suministrar la documentación que usa espacios es inconsistente. Cambiar todo el código para usar uno sobre el otro no es práctico y potencialmente destructivo. Sphinx es útil para muchos idiomas y entornos diferentes. El argumento de que las mejores herramientas de documentación narrativa no se rompen si no admiten pestañas, es su código que está roto porque "PEP8, es por eso" es miope y contraproducente en el mejor de los casos. – Shabbyrobe

+1

Además, soy consciente de que la sustitución de pestañas ocurre en docutils, no en sphinx, pero sphinx se ve gravemente afectado por el problema y debe asumir cierta responsabilidad al tratarlo. – Shabbyrobe

Respuesta

0

Tendrá que escribir una extensión de Sphinx. Add your custom Lexer, y aplicarlo con VisibleWhitespaceFilter.

+0

Actualicé mi Sphinx a 0.6.3 y Pygments a 1.1.1 (pygmentize -V). Tocados todos mis archivos, entonces añadidos este a conf.py: configuración def (app): de sphinx.highlighting lexers importación de pygments.lexers.compiled JavaLexer importación de pygments.filters importar VisibleWhitespaceFilter myLexer = JavaLexer() myLexer.add_filter (VisibleWhitespaceFilter (spaces = '!')); app.add_lexer ('java', myLexer); Esto reemplazó todas las pestañas de mi código Java con ocho "!" y todos los espacios con "!" como se esperaba. Cuando probé las pestañas de opciones = '!', Nada cambió. Cuando probé la opción tabsize = 4, nada cambió. – jbasko

+1

Parece que las pestañas han sido reemplazadas por espacios en algún lugar anterior en de la cadena. Así que traté de agregar este filtro a otros lexers (rest, none) [con lexers ['rest']. Add_filter (...)], pero nada de eso tuvo ningún efecto en las pestañas o tabsize. – jbasko

0

Hice la misma pregunta en el grupo sphinx-dev y resulta que es un problema con Docutils que es utilizado por Sphinx. Docutils reemplaza todas las pestañas con 8 espacios y actualmente no hay forma de cambiar ese valor de Sphinx.

http://groups.google.com/group/sphinx-dev/browse_thread/thread/35b8071ffe9a8feb

La única solución viable parece ser la de seguir el consejo de S. Lott y John Paulett en los comentarios a la pregunta - espacios de uso en lugar de pestañas.

2

añadir algo como esto a su 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) 

Véase también Esfinge Docstring preprocessing documentación.

Cuestiones relacionadas