online not hljs highlighter for code regex actionscript-3 syntax-highlighting

regex - not - Escribir un resaltador de sintaxis



syntax highlight js (8)

Tenía la esperanza de escribir mi propio resaltador de sintaxis para un proyecto de verano en el que estoy pensando en trabajar, pero no estoy seguro de cómo escribir mi propio resaltador de sintaxis.

Sé que hay muchas implementaciones por ahí, pero me gustaría aprender sobre expresiones regulares y cómo funciona el resaltado de sintaxis.

¿Cómo funciona el resaltado de sintaxis y cuáles son algunas buenas referencias para desarrollar una? ¿El resaltador de sintaxis escanea cada carácter a medida que se escribe o escanea el área del documento / texto como un todo después de escribir cada carácter?

Cualquier idea sería muy apreciada.

Gracias.

PS: Estaba planeando escribirlo en ActionScript


Crear un resaltador de sintaxis consiste en encontrar palabras clave específicas en el código y darles un estilo específico (fuente, estilo de fuente, color, etc.). Para lograr esto, deberá definir una lista de palabras clave específicas para el lenguaje de programación en el que se escribe el código, y luego analizar el texto (por ejemplo, usar expresiones regulares), encontrar los tokens específicos y reemplazarlos con un estilo adecuado. Etiquetas HTML.

Un resaltador muy básico escrito en JavaScript se vería así:

var keywords = [ "public", "class", "private", "static", "return", "void" ]; for (var i = 0; i < keywords.length; i++) { var regex = new RegExp("([^A-z0-9])(" + keywords[i] + ")([^A-z0-9])(?![^<]*>|[^<>]*</)", "g"); code = code.replace(regex, "$1<span class=''rm-code-keyword''>$2</span>$3"); }


Debe tratar todo el documento como un todo al principio. Creo que (sin ser un experto) quieres romper todas las fichas y hacer un árbol de análisis.

Luego, si tiene toda esa configuración, primero podría ejecutar el analizador cada vez que escriba un nuevo carácter. Eso podría ser lo suficientemente bueno para su caso de uso, pero si desea mantener el ritmo rápido, deberá realizar modificaciones en su árbol de análisis a medida que obtenga más información.


Desafortunadamente, nunca usé Actionscript, así que no puedo ayudar con esa parte.

Pero aparte de eso, un buen comienzo para escribir un resaltador de sintaxis sería mirar los existentes. Por ejemplo, vim tiene archivos de sintaxis en forma de archivos de texto ordinarios, por lo que puede mirarlos para comenzar. Hay un montón de expresiones regulares allí (las expresiones regulares vienen en varios sabores, pero no son tan diferentes ...), por lo que para esa parte puede echar un vistazo a algún libro.

Personalmente, he encontrado que el comienzo de las expresiones regulares es agradable. El dominio de las expresiones regulares también es bueno para los sujetos más avanzados. Por otra parte, la referencia de bolsillo de expresiones regulares es agradable para determinar las diferencias en los sabores mencionados anteriormente, ya que incluye un capítulo en la expresión regular de vim también.


En el podcast número 50 de , Steve Yegge habla un poco sobre su proyecto para crear un mecanismo de resaltado general. No es un producto terminado y quizás más sofisticado de lo que está buscando, pero podría haber algo de interés.



Los resaltadores de sintaxis pueden funcionar de dos maneras muy generales. El primero implementa un lexer y un analizador completos para los idiomas que se resaltan, identificando exactamente el tipo de cada token (palabra clave, nombre de clase, nombre de instancia, tipo de variable, directiva de preprocesador ...). Esto proporciona toda la información necesaria para resaltar exactamente el código de acuerdo con alguna especificación (palabras clave en rojo, nombres de clase en azul, lo que sea).

La segunda forma es algo así como el que emplea Google Code Prettify , donde en lugar de implementar un lexer / parser por idioma, se usan un par de parsers muy generales que pueden hacer un trabajo decente en la mayoría de las sintaxis. Este resaltador, por ejemplo, podrá analizar y resaltar razonablemente bien cualquier lenguaje similar a C, porque su lexer / analizador puede identificar los componentes generales de ese tipo de idiomas.

Esto también tiene la ventaja de que, como resultado, no necesita especificar explícitamente el idioma, ya que el motor determinará por sí mismo cuál de sus analizadores genéricos puede hacer el mejor trabajo. El inconveniente, por supuesto, es que el resaltado es menos perfecto que cuando se usa un analizador específico del idioma.


Podría ayudar si explica para qué es este resaltador de sintaxis. Si lo está escribiendo en ActionScript, ¿es su idea tener un cuadro de texto en una película flash y resaltar la sintaxis después de presionar un botón de envío? ¿O desea leer el texto de algún servicio web y luego mostrar la sintaxis resaltada? ... me resulta difícil ayudar, porque me cuesta imaginar lo que estás haciendo

Sin embargo, un resaltador de sintaxis lee en el texto y luego compara las líneas de códigos con algunas expresiones regulares que ayudan al resaltador de sintaxis a descubrir qué significan las palabras. Por ejemplo, podría leer la palabra "función" o "int" como palabras reservadas, y reemplazarlas por el texto html:

<span class="reserved">function</span>, <span class="reserved"></span>

asumiendo que tienes el css y quieres palabras reservadas en rojo,

.reserved{ color: #ff0000; }

Este es el concepto básico y es posible que desee tomar ideas de geshi ya que puede ver la fuente.


Un buen comienzo para un enfoque para esto es el curso de Udacity CS262 . El título es crear un navegador web, pero en realidad la clase se centra en exactamente los problemas que está buscando: cómo analizar y leer un conjunto de texto. En su caso, usaría esa información para resaltar. Lo tomé y fue muy bueno. El curso está "terminado" ahora, pero los videos y los problemas de práctica / tareas están todavía disponibles y disponibles para su visualización.