Otros

WordPress, VHDL, Verilog y coloreado de sintaxis

Sintaxis coloreada para VHDL.

El principal tópico de este blog es el diseño de sistemas digitales, y los lenguajes VHDL y Verilog son una herramienta de gran importancia para esta tarea. Así pues, me embarque en la búsqueda de un plugin para WordPress para el coloreado de sintaxis para el lenguage.

Aunque existe una gran cantidad de plugins para el coloreado de sintaxis en WordPress.org, solamente dos llamaron mi atención:

  • WP-GeSHi-Highlight. Desafortunadamente, al momento de copiar el código fuente se incluyen los números de línea, ¿por qué batallarían ustedes en removerlos posteriormente? ¡Ugh!
  • Syntax Highlighter Evolved. ¡Los números de línea no se copian!… El problema es que no existe un brush (coloreador de sintaxis) oficial y el existente no me convenció (lo que me trae a esta entrada).

Así pues, decidí poner mi pereza a un lado un momento crear un archivo para colorear la sintaxis de VHDL con este plugin. He aquí el resultado.

Para la versión 1.1 de este plugin también decidí incluir el lenguaje Verilog, ya que no viene incluido en la versión de WordPress oficialmente. Y, ya puestos, agregué un poco de código para colorear los archivos de implementación (archivos *.ucf) utilizados en proyectos de Xilinx.

Coloreado de código VHDL

La creación del brush fue bastante sencilla: tomé prestada la adaptación de VHDL para GeSHi de Alexander ‘E-Razor’ Krause y realicé cambios mínimos en el script para adaptarlo a la estructura de Syntax Highlighter.

/*******************************************************************************
 * shBrushVhdl.js
 * --------------
 * Adaptación de la sintaxis de GeSHi, escrita por Alexander 'E-Razor' Krause,
 * la cual está disponible en la siguiente dirección (si desean consultar):
 * http://peej.github.com/phpdoctor/examples/geshi/source/geshi/vhdl.php.html
 *
 * Dado que VHDL soporta las palabras clave en mayúsculas o minúsculas, se
 * incluyen ambos casos. Sin embargo, no contempla casos mixtos donde al menos
 * una letra es diferente ("While" no sería válido).
 ******************************************************************************/

SyntaxHighlighter.brushes.Custom = function(){
    var keywordsMin  = 'access after alias all assert attribute architecture begin block body buffer bus case component configuration constant disconnect downto else elsif end entity exit file for function generate generic group guarded if impure in inertial inout is label library linkage literal loop map new next null of on open others out package port postponed procedure process pure range record register reject report return select severity signal shared subtype then to transport type unaffected units until use variable wait when while with note warning error failure and or xor not nor used memory segments dff dffe help_id mod info latch rising_edge falling_edge';
    var keywords = keywordsMin + ' ' + keywordsMin.toUpperCase();
    
    var datatypesMin =  'bit bit_vector character boolean integer real time string severity_level positive natural signed unsigned line text std_logic std_logic_vector std_ulogic std_ulogic_vector qsim_state qsim_state_vector qsim_12state qsim_12state_vector qsim_strength mux_bit mux_vector reg_bit reg_vector wor_bit wor_vector work ieee std_logic_signed std_logic_1164 std_logic_arith numeric_std';
    var datatypes = datatypesMin + ' ' + datatypesMin.toUpperCase();
    
    
    this.regexList = [
        { regex: /--.*$/gm, 					                                css: 'comments' },
        { regex: SyntaxHighlighter.regexLib.doubleQuotedString,		css: 'color1' },
        { regex: SyntaxHighlighter.regexLib.singleQuotedString,		css: 'color1' },
        { regex: new RegExp(this.getKeywords(keywords),  'gm'),	 css: 'keyword' },
        { regex: new RegExp(this.getKeywords(datatypes), 'gm'),		css: 'string' }
    ];
};

SyntaxHighlighter.brushes.Custom.prototype = new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.Custom.aliases  = ['vhdl'];

Integración con el plugin de WordPress

Finalmente, sólo es necesario integrar el archivo al directorio de scripts del plugin, rutaPlugin > syntaxhighlighter3 > scripts > shBrushVhdl.js, y editar el archivo syntaxhighlighter.php:

wp_register_script(
    'syntaxhighlighter-brush-vhdl',
    plugins_url('syntaxhighlighter/' . $this->shfolder . '/scripts/shBrushVhdl.js'),
    array('syntaxhighlighter-core'),
    $this->agshver
);

Un método menos invasivo

Tras modificar el archivo del plugin de Syntax Highlighter Evolved me dí cuenta de que era un método demasiado precario, que era mejor optar por otra solución. Entonces surgió la idea de desarrollar el plugin: Brush de VHDL. Tomando como base los plugins SyntaxHighlighter Evolved: Go Brush y SyntaxHighlighter Evolved: LSL Brush, desarrollé el brush de VHDL, que ahora pongo a su disposición:

[button url=”http://wordpress.org/extend/plugins/syntaxhighlighter-evolved-vhdl-brush/” style=”black” link=”http://wordpress.org/extend/plugins/syntaxhighlighter-evolved-vhdl-brush/” color=”black”] Descargar Plugin de WordPress.org [/button]

Fin

Esta pequeña entrada sólo tiene como objetivo poner a su disposición el brush de VHDL y ahorrarle el trabajo a alguien más.

En caso de cualquier omisión de palabras clave correspondientes al lenguaje, favor de notificar en la página del plugin en WordPress.org.

You Might Also Like

No hay comentarios

Deja tu comentario