Pygments es una librería, plugin y utilidad, todo en uno, que nos permite embellecer nuestro código, añadiendo resaltado de palabras claves y colores que facilitan la lectura del mismo. Es especialmente útil para foros, wikis, blogs o cualquier sistema de enseñanza on-line que necesiten mostrar código fuente. por ejemplo, lo usa mi repositorio de código favorito, bitbucket.
Pygments está escrito en Python, pero entiende muchos tipos de lenguaje, incluyendo los lenguajes de programación más populares como Python, Ruby, JavaScript, C, C++, C#, Java, Lua, Perl, lenguajes clásicos como Pascal, Common Lisp o Fortran, lenguajes nuevos como CoffeeScript o Clojure, lenguajes de plantillas como los de Django, Jinja, ERB (Ruby templating), Mako o Myghty y mil cosas más: ficheros de configuración de Apache, hojas de estilo CSS, SQL, etc... Esta variedad viene dada por lo sencillo que resulta escribir nuevos analizadores léxicos; la mayoría de los lenguajes solo necesitan definir algunas expresiones regulares.
Puede usarse como herramienta de línea de comandos: pygmentize, como librería para uso interno o como plugin o añadido para sistemas ya existentes: Wordpress, MoinMoin y REsT entre otros. Es muy fácil tanto de utilizar como de extender; puedes personalizar la hoja de estilos para reflejar tus gustos estéticos (Pero recuerda, marrón y azul rara vez combinan). La salida más común es Html, pero también podemos obtener la salida en RTF, LaTex o códigos ANSI para la consola.
Para integrarlo con Blogger usé la línea de comandos para obtener los estilos CSS correspondientes (pygmentize -f html -S colorful) y los incluí en mi plantilla.
Como creo fervientemente en las virtudes didácticas de los ejemplos, he aquí un cacho de código Python (¡Mi primer código publicado en Python 3!) antes de Pygments:
granos = 1
for escaque in range(1, 65):
print ("En el escaque #{0} hay #{1} granos".format(escaque, granos))
granos *= 2
Y después:
granos = 1
for escaque in range(1, 65):
print ("En el escaque #{0} hay #{1} granos".format(escaque, granos))
granos *= 2
Veamos otro ejemplo, esta vez con Ruby. Antes:
granos = 1
64.times do |escaque|
puts "En el escaque #{escaque+1} hay #{granos} granos"
granos *= 2
end
Y después:
granos = 1
64.times do |escaque|
puts "En el escaque #{escaque+1} hay #{granos} granos"
granos *= 2
end