Eigener Syntax Highlighter - Problem

schmidi000

Mitglied
Hey Leute, ich habe ein Problem.
Ich hab mir einen eigenen Syntax Highlighter geschrieben, welcher nur zum Teil funktioniert.

Ich hab ein JTextPane auf dem ich den Syntax Highlighter anwende.


Das ist der Thread prüft permanent ob ein Substring im JTextPane mit "<" beginnt und mit ">" endet:

Java:
	class checkForSyntax extends Thread {
		checkForSyntax() {
			setDaemon(true);
			setName("SyntaxChecker");
		}
		
		@Override public void run() {
			while(true) {
				textPaneText = textPane.getText();
				try {
							Matcher matcher = Pattern.compile("<.*>").matcher(textPaneText);
							while(matcher.find()) {
								StyleConstants.setForeground(style,Color.BLUE);
								doc.setCharacterAttributes(matcher.start(), matcher.end(), textPane.getStyle("Blue"), true);
							}
				}
				catch(Exception e) {
					System.err.println("Error while checking syntax!");
					e.printStackTrace();
				}
			}
		}
	}

Wenn dies der Fall ist wird dieser blau gefärbt.

Hier sind die Initialisierungen und Deklarationen:

Java:
JTextPane textPane = new JTextPane();
public final Lock lock = new ReentrantLock();
public StyledDocument doc = textPane.getStyledDocument();
public Style style = textPane.addStyle("Blue",null);
String textPaneText;

Nun zum Problem:

Wenn ich in mein JTextPane nun einen Text eingebe zb. "<html>" dann wird dieser blau gefärbt, dann mach ich einen Zeilenumbruch mit Enter und gib "</html>" ein, dann wird nur "html>" blau gefärbt. Wenn ich den ganzen Text aus dem JTextPane lösche und schreibe "asdjsnhcfnwevkh" also nichts was im Schlüsselwörter Array vorkommt, dann wird trotzdem alles blau gefärbt.

Ich weiß echt nicht an was das liegt.

mfg schmidi000
 
Hatte mir auch mal einen Syntaxhighlighter geschrieben. Das Problem war bei mir afair das [c]\r[/c]. Entferne mal dieses Steuerzeichen aus deinem Text, vllt klappts dann.
 
Danke für die schnelle Antwort Tomate_Salat aber es funktioniert leider immer noch nicht :-(.

Ich habe es so auch mal probiert:

Java:
Matcher matcher = Pattern.compile("</?.+>").matcher(textPaneText);

und so (so funktioniert es am wenigsten):

Java:
Matcher matcher = Pattern.compile("<>").matcher(textPaneText);

und so, dass ich auch noch einen Zeilenumbruch abwarte:

Java:
Matcher matcher = Pattern.compile("</?.+>\r").matcher(textPaneText);
 
Ich meine sowas:
Java:
String cleanTextPaneText=textPaneText.replaceAll("\r","");
und dann arbeitest du mit [c]cleanTextPaneText[/c]
 
Hab grad bemerkt, dass da etwas noch immer nicht stimmt.

Wenn ich zb. schreibe:

<html>
Text
</html>

dann wird "<html>" und "</html>" gefärbt und "Text" nicht, soweit so gut... wenn ich jetzt aber Text bis zum Zeilenanfang lösche, dass das Ganze danach so aussieht:

<html>

</html>

und danach schreibe ich in dieser Zeile, in der vorhin "Text" stand wieder etwas, dann wird der Text auch blau gefärbt.
 

Zurück
Oben