Bonjour,
je me heurte actuellement à un problème en Javascript. J'essaye de mettre de la couleur au code à l'écran. Un exemple vaudra mieux qu'un longue explication...
Voici mon code d'exemple (en Java) :
Pour mettre de la couleur, j'utilise des expressions reguliere (en Javascript) :
Cette méthode fonctionne à l'exception que les regexp transforme les balises HTML ajouté :
Bref les balises HTML ajouté sont interprètées.
Connaissez-vous un moyen d'éviter cela?
Modifié par ramy (09 Feb 2011 - 13:12)
je me heurte actuellement à un problème en Javascript. J'essaye de mettre de la couleur au code à l'écran. Un exemple vaudra mieux qu'un longue explication...
Voici mon code d'exemple (en Java) :
package simple.lib;
import java.util.Arrays;
/**
* Ceci est un test
*/
public class HelloWorld implements World {
/**
* Envoi "Bonjour le monde!"
*
* @throws Throwable improbable...
*/
public void justdoit() throws Throwable {
System.out.println("Bonjour le monde!");
}
}
Pour mettre de la couleur, j'utilise des expressions reguliere (en Javascript) :
var list = [
{regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, clazz: 'comments'}, // documentation comments
{regex: /\/\*([^\*][\s\S]*)?\*\//gm, clazz: 'comments'}, // multiline comments
{regex: /\/\/.*$/gm, clazz: 'comments'}, // one line comments
{regex: /"([^\\"\n]|\\.)*"/g, clazz: 'string'}, // strings
{regex: /'([^\\'\n]|\\.)*'/g, clazz: 'string'}, // strings
{regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, clazz: 'value'}, // numbers
{regex: /(?!\@interface\b)\@[\$\w]+\b/g, clazz: 'color1'}, // annotation @anno
{regex: /\@interface\b/g, clazz: 'color2'}, // @interface keyword
{regex: new RegExp(getKeywords( // java keyword
'abstract assert boolean break byte case catch char ' +
'class const continue default do double else enum ' +
'extends false final finally float for goto if implements ' +
'import instanceof int interface long native new null ' +
'package private protected public return short static ' +
'strictfp super switch synchronized this throw throws ' +
'true transient try void volatile while'), 'gm'), clazz: 'keyword'}
]
function highlight(value) {
for (var x in list) {
var regex = list[x].regex;
var clazz = list[x].clazz;
value = value.replace(
regex, '<span class="' +
clazz + '">$&</span>')
}
return value;
}
Cette méthode fonctionne à l'exception que les regexp transforme les balises HTML ajouté :
/** ... */ devient <span class="comments">/** ... */</span>
puis
<span class="comments">/ devient <span <span class="keyword">class</span>=<span class="string">"comments"</span>>
Bref les balises HTML ajouté sont interprètées.
Connaissez-vous un moyen d'éviter cela?
Modifié par ramy (09 Feb 2011 - 13:12)