Una demostracion del resalto de código en tema claro.

Agregando al blog bloques de código

Probando highlight.js

Fecha:

Después de trabajar un rato y experimentar con distintas opciones, finalmente le agregué soporte al blog para poder insertar bloques de código.

Antes de agregar esta funcionalidad, fue necesario considerar dos puntos principales:

  • Debe funcionar en el backend.
  • Debe ser lo suficientemente simple para poder mezclarlo con nuestro sistema de plantillas. 1

Por suerte, la librería highlight.js cubre el requisito de funcionalidad en el backend y el de simplicidad, ya que solo consiste en un parser que toma nuestro código y, dependiendo del tipo de la variable, le agrega una etiqueta HTML con una clase CSS que nos permite personalizar los colores.

Otra ventaja es que se puede instalar fácilmente, aunque si queremos utilizar los estilos que vienen por defecto, hay que extraerlos de su directorio entre los módulos de Node (node_modules/highlight.js/styles). Desde aquí podemos copiarlos para servirlos por nuestro servidor, o insertarlos junto a las plantillas.

En mi caso, para poder combinarlo, utilizo un par de funciones que toman el código sin procesar, se lo pasan a highlight para que le agregue sus etiquetas, le añadimos un par de etiquetas extra a nuestra conveniencia y un poco más de CSS propio.

javascript

import hljs from 'highlight.js'; function codeTag(inCode,language='javascript'){ return "<code class='is-monospaced hljs'>" +( hljs.highlight( inCode.trim(), { language } ).value) +'</code>'; } function codeBlock( language='xml', inCode='') { return `<pre> <p>${language}</p> ${ codeTag(inCode, language) } </pre>` }

Tenerlo de esta forma permite incluir código en la página:

javascript

${ codeBlock('lua',` local name = nil function holaMundo() print('Hola mundo en lua ') end `)}
Sera renderizado como:

lua

local name = nil function holaMundo() print('Hola mundo en lua ') end

Y también poder introducir líneas de código junto con el texto:

html

<p>Lo cual luce así: ${ codeTag(`holaMundo()`)}</p>

Lo cual luce así: holaMundo()

Con esto el blog se encuentra mejor preparado para mostrar ejemplos de código y explicaciones técnicas. 🙂

[1] El "sistema de plantillas" de este blog consiste simplemente en plantillas literales de JavaScript.