pygments
octubre 21, 2015
Pygments¶
Librería que permite exportar código de python con formato (Syntax Highlighter) a HTML o latex
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
Generar código python en un documento html
ejemplo_codigo = 'print "Corre lola, corre"'
# Argumentos (código, lexer, formato)
code_html = highlight(ejemplo_codigo, PythonLexer(), HtmlFormatter())
Resultado en el explorador:
print "Corre lola, corre"
Modificar el estilo del código¶
from pygments.lexers import get_lexer_by_name
ejemplo_codigo = 'print "Corre lola, corre"'
lexer = get_lexer_by_name("python", stripall=True)
formatter = HtmlFormatter(linenos=True, cssclass="source")
result = highlight(ejemplo_codigo, lexer, formatter)
Código generado:
<table class="sourcetable">
<tr>
<td class="linenos">
<div class="linenodiv">
<pre>1</pre>
</div>
</td>
<td class="code">
<div class="source">
<pre>
<span class="k">print</span> <span class="s">"Corre lola, corre"</span>
</pre>
</div>
</td>
</tr>
</table>
1 | print "Corre lola, corre" |
Lexer¶
Los lexer dividen el código en fragmentos de tipos determinados como: comentarios, palabras clave, números, etc. A cada uno de estos grupos (tokens) se le puede dar un formato en específico y dependen directamente del tipo de lenguaje usado.
import pygments.lexers as pl
# Se obtiene el lexer para código Python
pl.get_lexer_by_name('python')
Nombres de los lexers disponibles relacionados con python
- python, py, sage
- python3, py3
- numpy
- cython, pyx, pyrex (extensiones .pyx, .pxd, .pxi)
- pycon (formato de salida de consola de python)
También se puede obtener un lexer a partir de un archivo:
# Se obtiene un lexer para código ruby
pl.get_lexer_for_filename('spam.rb')
Crear estilo¶
Se debe crear una clase que hereda la clase Style del módulo pygments.style y se define en este un diccionario con las carácterísticas que se quieren editar como clave.
from pygments.style import Style
import pygments.token as pt
class MyStyle(Style):
default_style = ""
styles = {
pt.Comment: 'italic #727272',
pt.Keyword: 'bold #191966',
pt.Name: '#f00',
pt.Name.Function: '#0f0',
pt.Name.Class: 'bold #0f0',
pt.String: '#007F00'
}
Algunos parámetros para modificar el estilo del código en el documento HTML
- bold Negrita
- nobold Sin negrita
- italic Itálica o cursiva
- noitalic No itálica o cursiva
- underline Subrayado
- nounderline No subrayado
- bg: Fondo transparente
- bg:#000000 Fondo color #000000 (negro)
- border: Borde transparente
- border:#ffffff Borde color #ffffff (blanco)
- #ff0000 Color de texto #ff0000 (rojo)
- noinherit No heredar estilo por defecto
Generar código con el nuevo estilo¶
# Código a agregar
ejemplo_codigo = '# Se imprime el nombre \nprint "Corre lola, corre"'
# Se agrega la clase MyStyle como el nuevo estilo a HtmlFormatter
formatter = HtmlFormatter(style=MyStyle)
# Se desactiva el uso del CSS por defecto
formatter.noclasses = True
code_html = highlight(ejemplo_codigo, PythonLexer(), formatter)
# Se imprime el nombre
print "Corre lola, corre"
Exportar un archivo completo de python a HTML¶
Se crea el archivo de ejemplo sample.py con el siguiente código:
# Se generan datos de ejemplo, un dataframe de 4 columnas y 1000 filas
rnd_1 = [random.randrange(1,20) for x in xrange(1000)]
rnd_2 = [random.randrange(1,20) for x in xrange(1000)]
rnd_3 = [random.randrange(1,20) for x in xrange(1000)]
fecha = pd.date_range('2012-4-10', '2015-1-4')
data = pd.DataFrame({'fecha':fecha, 'rnd_1': rnd_1, 'rnd_2': rnd_2, 'rnd_3': rnd_3})
Desde consola, en el mismo directorio del archivo creado se ejecuta:
pygmentize -f html -O full -o sample.html sample.py
-f html es para crear un archivo html de nombre sample.html a partir del archivo sample.py
-O full crea un archivo html completo (estructura head, body) y estilo (código css). Sin esta opción solo transcribe el texto contenido en sample.py
0 comments