uburoi
Lt. Commander
- Registriert
- Aug. 2008
- Beiträge
- 1.314
Hallo zusammen!
Kurz vorweg: Ich bin reiner Hobbyprogrammierer und auch erst ganz frisch bei regulären Ausdrücken. Also die Bitte um Nachsicht, falls die Frage den Amateur verrät.
Momentan arbeite ich zu Lernzwecken an einem Texteditor, der auch rudimentäres Highlighting bieten soll (erstmal für Java-Dateien, aber der Code ist so modular aufgebaut, dass sich andere Sprachen später leicht ergänzen lassen). Die Highlighting-Methoden machen so einiges, aber ich dampfe das Vorgehen auf das Kernproblem ein, um das es mir geht.
Zuerst durchsuche ich den Text nach Kommentaren und färbe die entsprechenden Passagen grau; das Auffinden der Kommentare funktioniert sehr gut mit dem regulären Ausdruck:
Später durchsuche ich den Text zeilenweise nach Strings mit:
Jetzt das Problem: Nachdem ich die Kommentare bereits eingefärbt habe, ist das Durchsuchen dieser Teile nach Strings natürlich überflüssig (so wie ich in Kommentaren und Strings auch nicht mehr nach Keywords zu suchen brauche etc.); sie werden dort ohnehin nicht eingefärbt und es kostet sinnlos Performance. Zuerst habe ich die Positionen zwischengespeichert, die bereits markiert wurden, und dann nur noch die verbleibenden Textteile durchsucht, aber das ständige Abfragen, in welchem Textbereich ich gerade bin, hat mehr Performance gekostet, als es durch das Überspringen bereits gefärbter Textteile eingespart hat.
Daher wäre meine Frage an die RegEx-Kenner, ob ich nicht z.B. den vorausgegangenen regulären Ausdruck zur Suche der Kommentare so in die String-Suche einbinden kann, dass dort NICHT nach Strings gesucht wird? (Aber wie das aussehen könnte, übersteigt meine Vorstellungskraft…)
Aufgrund der späten Stunde werde ich wohl erst morgen wieder online sein, würde mich aber über Anregungen freuen!
Gruß Jens
PS: Ich will auch nicht ausschließen, dass ich mit meinem Vorgehen komplett auf dem Holzweg bin. Als Test habe ich eine Java-Datei mit gut 800 Codezeilen voller Keywords und Strings. Beim einfachen Tippen liegt die Dauer des Highlightens der aktuellen Zeile im einstelligen Millisekundenbereich, was mir reicht, aber die komplette Datei zu highlighten dauert etwa 120 Millisekunden, was als Verzögerung spürbar und mir deutlich zu lang ist. Und mit meinem bisherigen Vorgehen schaffe ich es auch nicht mehr, das noch merklich zu drücken (wobei ich dazu sagen muss, dass ich mit Xojo/Realbasic schreibe, das in Sachen Performance je nach Anwendung okay, aber nicht überragend ist, zumindest solange ich mit den "Bordmitteln" arbeite).
Kurz vorweg: Ich bin reiner Hobbyprogrammierer und auch erst ganz frisch bei regulären Ausdrücken. Also die Bitte um Nachsicht, falls die Frage den Amateur verrät.
Momentan arbeite ich zu Lernzwecken an einem Texteditor, der auch rudimentäres Highlighting bieten soll (erstmal für Java-Dateien, aber der Code ist so modular aufgebaut, dass sich andere Sprachen später leicht ergänzen lassen). Die Highlighting-Methoden machen so einiges, aber ich dampfe das Vorgehen auf das Kernproblem ein, um das es mir geht.
Zuerst durchsuche ich den Text nach Kommentaren und färbe die entsprechenden Passagen grau; das Auffinden der Kommentare funktioniert sehr gut mit dem regulären Ausdruck:
Code:
^\/\*(?:(?!\*\/)(?:.|[\s]+))*\*\/$
Code:
"[^"\s]*"
Jetzt das Problem: Nachdem ich die Kommentare bereits eingefärbt habe, ist das Durchsuchen dieser Teile nach Strings natürlich überflüssig (so wie ich in Kommentaren und Strings auch nicht mehr nach Keywords zu suchen brauche etc.); sie werden dort ohnehin nicht eingefärbt und es kostet sinnlos Performance. Zuerst habe ich die Positionen zwischengespeichert, die bereits markiert wurden, und dann nur noch die verbleibenden Textteile durchsucht, aber das ständige Abfragen, in welchem Textbereich ich gerade bin, hat mehr Performance gekostet, als es durch das Überspringen bereits gefärbter Textteile eingespart hat.
Daher wäre meine Frage an die RegEx-Kenner, ob ich nicht z.B. den vorausgegangenen regulären Ausdruck zur Suche der Kommentare so in die String-Suche einbinden kann, dass dort NICHT nach Strings gesucht wird? (Aber wie das aussehen könnte, übersteigt meine Vorstellungskraft…)
Aufgrund der späten Stunde werde ich wohl erst morgen wieder online sein, würde mich aber über Anregungen freuen!
Gruß Jens
PS: Ich will auch nicht ausschließen, dass ich mit meinem Vorgehen komplett auf dem Holzweg bin. Als Test habe ich eine Java-Datei mit gut 800 Codezeilen voller Keywords und Strings. Beim einfachen Tippen liegt die Dauer des Highlightens der aktuellen Zeile im einstelligen Millisekundenbereich, was mir reicht, aber die komplette Datei zu highlighten dauert etwa 120 Millisekunden, was als Verzögerung spürbar und mir deutlich zu lang ist. Und mit meinem bisherigen Vorgehen schaffe ich es auch nicht mehr, das noch merklich zu drücken (wobei ich dazu sagen muss, dass ich mit Xojo/Realbasic schreibe, das in Sachen Performance je nach Anwendung okay, aber nicht überragend ist, zumindest solange ich mit den "Bordmitteln" arbeite).