Rigtig fedt design
Har ikke noget specielt imod logoet, men da du ikke selv har lavet en java highlighter besluttede jeg mig for at lave en. Jeg har lavet den i Java:
import java.util.regex.*;
public class Highlight
{
public Highlight()
{
String test="public class Highlight\\n" +
"{\\n" +
" public static void main(String[] args)\\n" +
" {\\n" +
" int t=3;\\n" +
" System.out.println(t+2);\\n" +
" char c='a';\\n" +
" String s = \\"be\\";\\n" +
" //'a'+\\"be\\" = \\"abe\\"\\n" +
" System.out.println(c+s);\\n" +
" }\\n" +
"}\\n";
test = highlightTekst(test);
System.out.println(test);
}
public static void main(String[] args)
{
new Highlight();
}
public String highlightTekst(String tekst)
{
String[] specielleOrd={"class", "public", "static", "protected",
"private", "return", "true", "false"};
String[] specielleKlasser={"void", "int", "double", "char", "byte",
"float", "long", "short"};
tekst = " "+tekst+"\\n";
for(int i=0;i<specielleOrd.length;i++)
tekst = koerIgennem(tekst, specielleOrd[i], "#0000FF");
for(int i=0;i<specielleKlasser.length;i++)
tekst = koerIgennem(tekst, specielleKlasser[i], "#008080");
tekst = mellem(tekst, "[^\\\\\\\\]'", "[^\\\\\\\\]'", "#800000");
tekst = mellem(tekst, "[^\\\\\\\\]\\"", "[^\\\\\\\\]\\"", "#800000");
tekst = mellem(tekst, ".//", ".\\n", "#008000");
tekst = tekst.substring(1, tekst.length()-1);
return tekst;
}
public String givFarve(String alt, int start, int slut, String farve)
{
String nr1=alt.substring(0, start);
String nr2=alt.substring(start, slut);
String nr3=alt.substring(slut);
nr2 = nr2.replaceAll("<[^<>]*>", "");
nr2 = "<font color="+farve+">"+nr2+"</font>";
return nr1+nr2+nr3;
}
public int find(String et, String to, int start)
{
Pattern p = Pattern.compile(to);
Matcher m = p.matcher(et);
int tilbage=-1;
for(int i=et.length()-1;i>=start;i--)
{
if(m.find(i))
{
m = p.matcher(et.substring(0, i+1));
tilbage=i;
}
}
return tilbage;
}
public String koerIgennem(String alt, String find, String farve)
{
int s=0;
while(true)
{
int pos = find(alt, "[^a-z^A-Z^0-9]"+find+"[^a-z^A-Z^0-9]", s);
if(pos==-1)
break;
alt=givFarve(alt, pos+1, pos+find.length()+1, farve);
//20=("<font color=></font>").length()
s=20+pos+find.length()+farve.length();
}
return alt;
}
public String mellem(String alt, String et, String to, String farve)
{
int s=0;
while(true)
{
int pos1 = find(alt, et, s);
if(pos1==-1)
break;
int pos2 = find(alt, to, pos1+1);
if(pos2==-1)
break;
String mid = alt.substring(pos1+1, pos2+2);
alt=givFarve(alt, pos1+1, pos2+2, farve);
//20=("<font color=></font>").length()
s=20+pos2+mid.length()+farve.length()+1;
}
return alt;
}
}
Kan godt konvetere den for dig, men så skal jeg lige have at vide hvilket sprog jeg skal konvetere til
Edit: En version hvor det er muligt at lave "blabla\\"blabla"
Indlæg senest redigeret d. 10.03.2006 16:47 af Bruger #4479