Syntax Highlightner



  • Hi, Wie würdet ich einen SysntaxHighlightner realisieren?
    Hab mir zwar ein paar Konzepte ausgedacht, doch funktionieren die nicht immer, weiß der teufel warum.
    Nach welchem Schema geht ihr vor?



  • Was sind denn deine Konzepte?
    Ich würd sagen, Text einlesen, irgendwo zwischenspeichern (du willst es sicher nicht in "real-time"?). Und dann einfach die Wörter mit Signalwörtern von einer anderen Datenquelle vergleichen und dann Farbe ändern.
    Weiss nicht, inwieweit man das praktisch realisieren würde. Bestimmt nicht auf meinem Weg. 🙂



  • also bei einem HTML highlightner hab ich mir das so gedacht:
    fange jeden Tastendruck ein und gucke ob es < ist, wenn ja lass ich mir die länge des Textes geben. Dann warte ich bis ein Tastendruck > ergibt und den Text dazwischen mach ich fett. Doch klappt das nur 4 von 5 mal:

    public void keyTyped(KeyEvent e)
    {		
    /*start und end sind int und on ist boolean*/
    	chat key = e.getKeyChar();
    	if(key == '<'){
    		start = doc.getLength();
                    on = true
           }else if(key == '>' && on){
    		end   = doc.getLength();
                    on = false;
                    doc.setCharacterAttributes(start-1, end-start+1,fett,true);
    /*fett ist ein SimpleAttributeSet das den text einfach fett macht
    doc ist ein StyledDocument*/
    	}
    }
    

    Könnt ihr einen Gedankenfehler finden, oder so ?



  • Hi KaraHead,

    deine Vorgehensweise ist eh nicht besonders günstig.
    Wenn man es so macht, musst du ja auch "Entf", Überschreibmodus,
    Copy&Paste, usw. abfangen.

    Jockel



  • @Jockelx:
    hab's jetzt auch gemerkt, also muss man so vorgehen, dass man bei jeder änderung durch den Text geht und die Schlüsserwörter fett (oder was auch immer) macht?



  • Hi

    mit ner geschickten hintergrund datenstrucktur liese sich der Aufwend beim Parsen reduzieren.

    In der Datenstrucktur wird der Text, die Darstellung, und ein internet State vermerkt.
    Die ersten beiden sollten klar sein. State heist z.B. das es sich bei dem Eintrag um den Namen eines HTML Tags handelt.

    Wird z.B. ein neues Zeichen in einem HTML TagNamen eingetragen, must du nur das TagNamen neu Parsen.

    im einfachster fall ist das Element immer noch ein gültiger TagName und du must nichs weiter tun.
    im Ungünsigsten falle. must du alles was danach folgt neu parsen z.B wenn er ein lehrzeichen einfügt, oder ein ">". bei einer gut gewählten strucktur und etwas wissen liese sich das auf einen bruchteil davon reduzieren.

    gruss Termite



  • @Termite:
    So ganz hab ich das noch nicht verstanden.
    Könntest du deine Idee mit ein paar Swing-Komponenten erklären?
    Z.B. was soll eine State sein und so.



  • Hi

    ähm äh ja. da müsste ich jetzt etwas weiter ausholen. Formalesprachen, Automatentheorie und Compilerbau ( zumindest die grundlagen ) spielen da leider alle eine kleine rolle.

    der Status den ich gemeint hab hat mit dem parser/automaten zu tuen, der versucht ein HTML tag zu erkennen und in passende subelemente zu zerlegen, die dan entsprechend farblich dargestellt werden sollen. Der Status gibt an, um was für ein element es sich handelt (mehr oder weniger verweist er auch auf die farbliche darstellung). Wichtiger aber ist, er gibt auch an, wie der parser die nachfolgenden daten zu interpretieren hat. Auf einen Parameternamen folgt z.B ein Wert

    gruss termite



  • Wow hät's mir nicht so schwer vorgestellt. Danke erstmal.
    Naja wie es wohl aussieht muss ich mich erstmal ein bischen über Formalesprachen, Automatentheorie und Compilerbauer kundigen.


Anmelden zum Antworten