En el pasado fin de semana, encaré un “code kata” que necesitaba escribir. Estuve programando un “syntax highlighter” simple y configurable, en C#, llamado Acquarella. Pueden ver la historia, avance y resultado en:
https://github.com/ajlopez/Acquarella
La actual solución tiene una librería de clases, un programa de consola, y proyecto de tests:
La idea es tener una librería que podamos referenciar y usar desde nuestros proyectos, en caso que necesitemos algo de “syntax higlighting”, por ejemplo, en un convertidor de Markdown a HTML a la GitHub. La librería toma un texto (un string) e indicando el lenguaje de programación que contiene y el estilo que queremos darle, lo transforma en otro string, usando archivos de configuración. Hay algo más detalle en el README.md.
Practicando “Dog fooding”, el Token.cs transformado por Acquarella:
namespace Acquarella.Lexers { using System; using System.Collections.Generic; using System.Linq; using System.Text; public class Token { private string text; private int start; private int length; private TokenType type; public Token(TokenType type, string text, int start, int length) { this.type = type; this.text = text; this.start = start; this.length = length; } public string Value { get { return this.text.Substring(this.start, this.length); } } public TokenType Type { get { return this.type; } } public int Start { get { return this.start; } } public int Length { get { return this.length; } } } }
Lindo! 🙂
Trabajo pendiente: reconocer comentarios, números, algunos tipos de palabras adicionales (tengo que revisar otras implementaciones, GitHub distingue entre nombres, variables de instancias (si las reconoce en Ruby comenzando en @) y más), más estilos, y permitir extender el Lexer por código, si no basta la configuración.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com