Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#37

AW: SynHighlighter erweitern

  Alt 12. Sep 2012, 15:42
Hallo,

habe mir vor einiger Zeit einen eigenen Highlighter gebaut für Pascalscript von RemObjects mit Anpassungen für mein Programm. Als Basis habe ich den Highlighter für Pascal/Delphi genommen. Da mir das manuelle Anpassen zu viel Arbeit wurde, habe ich mir ein Pascalscript geschrieben, das aus einer Textdatei Codefragmente erstellt, die per {$I dateiname} in den Quelltext des Highlighters eingebunden werden. Damit kann ich mir die veränderlichen Fragmente eines Highlighter generieren.

Da nicht jeder Pascalscript zur Verfügung hat, habe ich das Pascalscript nach Delphi übertragen und hier rangehängt.

Das Programm benötigt als ersten Parameter den Namen einer Datei, die die zu verwendenen Zeichenfolgen (Schlüsselwörter...) und den Typen für TtkTokenKind enthält, je Zeile: Zeichenfolge|TtkTokenKind . Als zweiten Parameter erwartet es entweder die Zeichenfolge ROPS oder PHP, da es hier Unterschiede beim Aufbau der Hashtable gibt. Der Dateiname muss in der Form SynRopsSyn.Functionen.txt aufgebaut sein, da hieraus auch Teile des Quelltextes generiert werden.

Habe für vier Highlighter entsprechende Dateien beigefügt, die zum Testen und Weiterentwickeln geeignet sein sollten. Das Fragment mit einem Namen in der Form SynHighlighterROPS.PrivateFunc.inc ist im Abschnitt private des Highlighters hinter function KeyComp(const aKey: String): Boolean; einzufügen, das Fragment mit einem Namen in der Form SynHighlighterROPS.IdentFuncTable.inc muss in die procedure TSynROPSSyn.InitIdent; eingefügt werden und das Fragment mit einem Namen in der Form SynHighlighterROPS.FuncSource.inc wird im Implementierungsteil hinter function TSynROPSSyn.KeyComp(const aKey: String): Boolean; eingefügt und ersetzt den gesamten Quelltext bis vor function TSynROPSSyn.AltFunc: TtkTokenKind; .

Für PHP sind generierte Fragmente beigefügt.

Eventuell kann ja jemand, für die Anpassung vorhandener Highlighter, damit was anfangen.

Geändert von nahpets (21. Nov 2017 um 16:41 Uhr)
  Mit Zitat antworten Zitat