Nachdem ich einige Zeit über den Problem von Syntax Highlighting in eigenen Textkomponenten gegrübelt hab, ist mir durch eine gezieltere Suche bei Google die folgende Seite in die Hände gefallen: JTextPane Highlight Example

Das ganze funktioniert sofort. Um aber nun z.B. HTML-Tags zu erkennen, muss das ganze für Regexp angepasst werden. Das kann man am einfachsten machen, indem man im WordSearcher einige Zeilen ändert:

public int search(String regexp) {
    // create regexp
    Pattern p = Pattern.compile(regexp);

    [...]

    int lastIndex = 0;
    int wordSize = 0;

    // use regexp for searching
    Matcher m = p.matcher(content);
    while(m.find(lastIndex) != false) {
        MatchResult r = m.toMatchResult();
        lastIndex = r.start();
        wordSize = r.end() - r.start() - 1;
        //while((lastIndex = content.indexOf(regexp, lastIndex)) != -1) {
            int endIndex = lastIndex + wordSize;
    [...]

Natürlich muss nun kein einzelnes Wort mehr an den WordSearcher übergeben werden, sondern eine Regexp. Die ist aber denkbar einfach:

< [^]*>

Damit werden alle Tags gefunden. Damit ist natürlich noch kein Highlight über den kompletten Tag (vom Öffnen bis zum Schliessen) erzeugt. Um das zu erreichen, muss innerhalb der Regexp die Zeichen < und > erlaubt werden – und zwar jeweils nur ein einziges Mal. Die Regexp wird damit etwas komplizierter:

< [^]*>[^]*< [^]*>

Ob diese Regexp noch einmal vereinfacht werden kann, darüber möchte ich lieber nichts sagen. Schliesslich bin ich in Regexp auch noch nicht wirklich Experte. Wer mir aber auf meinem Weg dahin helfen will, der kann mir gerne dieses Buch kaufen. Danke!

Tags: Java