keman
Gast
Java - Highlighting während der Texteingabe
Ich will mit Java einen kleinen JavaScript-Syntaxhighlighter basteln, hab also mal mit dem Schlüsselwort "function" begonnen. Ich will, während der Texteingabe überprüft wird, ob das Wort "function" vorhanden ist, und es gehighlightet wird (Alle "function" müssen einen Highlight bekommen!). Ich habe mal dies hier gemacht, was aber nicht ganz funktioniert. Das erste Wort "function" wird rot. Das zweite dann auch, aber danach wird alles rot. Wo ist hier das Problem?
public void highlight() {
// p ist ein JTextPane
// sc ist ein StyleContext
Style _function = sc.addStyle("MainStyle", defaultStyle);
StyleConstants.setFontFamily(_function, "Monaco");
StyleConstants.setFontSize(_function, 12);
StyleConstants.setForeground(_function, Color.red);
if(p.getText().indexOf("function")!= -1) {
int index=0;
index=p.getText().indexOf("function",0);
while(index!=-1) {
doc.setCharacterAttributes(p.getText().indexOf("function",index), p.getText().indexOf("function",index)+8, _function, false);
index=p.getText().indexOf("function",index+1);
}
}
}
Ich will mit Java einen kleinen JavaScript-Syntaxhighlighter basteln, hab also mal mit dem Schlüsselwort "function" begonnen. Ich will, während der Texteingabe überprüft wird, ob das Wort "function" vorhanden ist, und es gehighlightet wird (Alle "function" müssen einen Highlight bekommen!). Ich habe mal dies hier gemacht, was aber nicht ganz funktioniert. Das erste Wort "function" wird rot. Das zweite dann auch, aber danach wird alles rot. Wo ist hier das Problem?
public void highlight() {
// p ist ein JTextPane
// sc ist ein StyleContext
Style _function = sc.addStyle("MainStyle", defaultStyle);
StyleConstants.setFontFamily(_function, "Monaco");
StyleConstants.setFontSize(_function, 12);
StyleConstants.setForeground(_function, Color.red);
if(p.getText().indexOf("function")!= -1) {
int index=0;
index=p.getText().indexOf("function",0);
while(index!=-1) {
doc.setCharacterAttributes(p.getText().indexOf("function",index), p.getText().indexOf("function",index)+8, _function, false);
index=p.getText().indexOf("function",index+1);
}
}
}