| |
|
|
| Wie Roland es bereits erwähnt hat gibt es jetzt einen Lexer für XProfan - einen völlig neuen und eigenen für das Scintilla-Control.
Download SciLexer.dll für XProfan
Ich werde hier für den Fall das ich Änderungen am Lexer vorgenommen habe immer die neuste DLL zum Download anbieten.
Was mich an den grundlegenden Lexern für Scrintilla störte ist das Worte oft nicht sofort eingefärbt wurden sobald man den letzten Buchstaben geschrieben hatte - sondern erst einen Buchstaben später.
Dem XProfanLexer habe ich jedoch beigebracht es so zu tun - wie es sich IMHO gehört.
Was der Lexer kann:
Erkennt: | Hinweis:
|
| Strings | String sind in XProfan mit umschlossen und enden grundsätzlich spätestens am Zeilenende, sei denn, am Zeilenende ist das Zeichen , dann wird der String auf der Folgezeile fortgeführt.
| Kommentare | Kommentare werden mit oder mit REM eingeleitet und enden am Zeilenende.
XPSE-Nutzer haben noch zwei weitere Möglichkeiten. | Kommentare einleiten mit // welche auch am Zeilenende enden | Kommentare einleiten mit /* welche sich auch über mehrere Zeilen bis zum */ erstrecken können, oder noch in der gleichen Zeile mit */ beendet werden. |
| Kompilerdirektiven | Zeilen welche mit einem $ beginnen sind Kompilerdirektivenzeilen
| Prozeduren | Identifier welche aus der Prozedurenkeywordlist stammen werden als Prozeduren erkannt. Gibt es den selben Identifier auch als Funktion prüft der Lexer anhand der Syntax ob die Funktion statt die Prozedur gemeint ist. Wenn doch die Funktion gemeint ist wird wiederum anhand der Syntax überprüft ob der Funktionsname vielleicht doch nur als Variable - oder Methodendefinition - interpretiert werden soll. (phew)
| Funktionen | Identifier welche aus der Funktionenkeywordlist stammen werden als Funktionen erkannt. Anhand der Syntax wird auch geschaut ob der Funktionsname vielleicht nur als Variablenname - oder Methodendefinition - zu verstehen ist. (phew)
| Kontrollstrukturen | Identifier welche aus der Kontrollstrukturenkeywordlist stammen werden als Kontrollstrukturen erkannt.
| Systemvarialben | Identifier welche aus der Systemvarialbenkeywordlist stammen werden als Systemvarialben erkannt.
| Variablen | Identifier welche aus keiner Keywordtabelle stammen aber einen TypChar tragen, gelten als Variablen, auch dann wenn der Identifier in der Funktionenkeywordlist aufgelistet ist aber die Syntax zeigt das der Identifier nicht als Funktion genutzt wird. (phew)
| Ziffern | Ziffern werden als solche erkannt. Folgt auf eine Ziffer ein Punkt so wird dieser als Operator erkannt, sei denn, auf den Punkt folgt wiederum eine Ziffer. (Kommazahlen)
| Zahlenkonstanten | Zahlenkonstanten vom Typ Hex,Bin oder Oct werden als solche erkannt und als Ziffern eingefärbt. Es wird auch überprüft ob die Zahlenkonstante gültig ist. %012 ist ungültig wie $0FFU oder &1238 und wird gelb eingefärbt.
| Operatoren | Folgende Operatoren werden als solche erkannt: %^&*-+=|{}:;<>,/?!.~ or and mod Werden or and mod jedoch als Funktionen verwendet erkennt es der Lexer.
| Faltung | Folgende Identifier bezeichnen eine Faltung:
Öffnen: | Schließen
| Proc | EndProc
| ErrorProc | EndProc
| SubProc | EndProc
| AsmStart | AsmEnd
| AsmInclude | AsmEnd
| { | } |
| InlineAssembler | Innerhalb von InlineAssemblerblöcken greift eine Art Sublexer:
Erkennt: | Hinweis:
| AssemblerKeywords | AssemblerKeywords aus der AssemblerKeywordTabelle
| Strings | Strings mit umschlossen und enden grundsätzlich spätestens am Zeilenende
| Kommentare | Kommentare in Assemblerblöcken werden mit ; eingeleitet und enden am Zeilenende |
| Doppelte Lottchen | Der Lexer hilft Dir und erkennt Doppelte Lottchen (Befehle unterschiedlichen Types gleichen Namens) anhand der Syntax und zeigt damit ob die Eingaben auch korrekt interpretiert würden. Wenn z.B. gleich hinter DeleteObject eine Klammer folgt, so wird das Wort nachträglich wieder zurückgefärbt, und ähnliche Features in anderen Situationen... . Es wird aber auch erkannt ob es sich vielleicht um eine Variablenbezeichnung oder eine Methode handelt und jenachdem ob die Syntax dann dafür korrekt wäre bleibt die Färbung bestehen,- oder ebend nicht. (phew)
| Syntaxhinweise | Einen gelben Hintergrund bekommen Keywords welche möglicherweise in den nächsten XProfanversion nicht mehr unterstützt werden. Ein gelber Hintergrund wird aber auch angezeigt wenn etwas mit der Syntax nicht stimmt. Gelb bedeutet Hinweis.
| Veraltete Keywords | Veraltete Keywords erhalten einen roten Hintergrund und sollten nicht mehr verwendet werden bzw. führen zu Fehlermeldungen vom Kompiler.
| Escapesequenzen | Innerhalb von Strings werden Escapesequenzen sichtbar gemacht. Besonders für Programmieranfänger sollte dies sehr hilfreich sein zu erkennen, das hier eine spezielle vielleicht ungewollte Zeichenkombination angewandt ist.
| EasterEgg/Info | [Strg+Q]INFO |
Known Bugs:
Wer Bugs im Lexer feststellt kann die bitte hier, oder bei den Bugreports posten.
XProfan Scintilla Lexer |
|
|
| |
|
|
|
| 0.0.4:
Bug beseitigt: Nach Systemvariablen waren Operatoren in Systemvariablenfarbe.
EasterEgg eingebaut für LexerVersionsKontrolle.
Neues Feature: Wenn Funktionen geschrieben, und auch eingefärbt wurden, aber hinterher noch ein Freizeichen angehangen wurde das auch XProfan es als Prozedur verstehen würde, statt eine Klammer, so wird nachträglich die Funktionsfärbung entfernt. Einfach mal an Destroywindow ( probieren.
Neues Feature: Wenn Prozeduren geschrieben, und auch eingefärbt wurden, aber gleich im Anschluß eine Klammer statt ein Freizeichen angehangen wurde, so wird nachträglich die Prozedurfärbung entfernt um zu zeigen es stimmt was nicht.
Bei Kontrollstrukturen gehe ich jetzt ähnlich vor, entweder ein Space oder garnichts dahinter, eine gleichanschliessende Klammer jedoch deaktiviert nachträglich das Keyword.
Ich glaube diese beiden Features helfen das hilft ungemein richtigeren Code zu schreiben.
Ich selber stolpere oft über DeleteObject und Destroywindow in XProfan
Nachtrag:
Bug entdeckt, nach Funktionsnamen welche Doppelte Lottchen sind werden Klammern in Operatorenfarbe dargestellt statt schwarz. ^^ Gut hab ich was für die 0.0.5 ^^ |
|
|
| |
|
|
|
| V0.0.5
Einige Bugs beseitigt.
Neue Features sind ebenso hinzugekommen,
nur mal um eins zu nennen: Mit dem neuen Editor (der erst kommt) werden farblich Warnungen angezeigt wenn eine falsche Syntax verwandt, oder veraltete Befehle/Funktionen genutzt werden. |
|
|
| |
|
|
|
| Update auf V0.0.6
Innerhalb von Strings werden Escapesequenzen sichtbar gemacht. Besonders für Programmieranfänger sollte dies sehr hilfreich sein zu erkennen, das hier eine spezielle vielleicht ungewollte Zeichenkombination angewandt ist.
Aber machen wir uns nichts vor, selbst erfahrene Programmierer tappen in diese Falle, besonders wenn der Code vielleicht mal nicht der eigene ist...
Die LexerÄnderungen sind sichtbar sobald der Editor das hier intus hat: [...] |
|
|
| |
|
|
|
| Update auf V0.0.7
Zahlenkonstanten vom Typ Hex,Bin oder Oct werden als solche erkannt und als Ziffern eingefärbt. Es wird auch überprüft ob die Zahlenkonstante gültig ist. %012 ist ungültig wie $0FFU oder &1238 und wird gelb eingefärbt.
BugFix: Geremte XPSE-Kompilerschalter werden nicht mehr als UserFoldings erkannt. |
|
|
| |
|
|
|
| Update auf V0.0.8
# habe ich als einzige Typenbezeichnung von den Systemvariablen abgekoppelt - jetzt klappts auch bei # mit den Klassendefinitionen.
Hexzahlen - welche mit kleinen Chars beschrieben sind - werden nicht mehr angemeckert. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
| Wg. Lexercodeverbummelung wirds einen neuen geben, einen besseren: [...] |
|
|
| |
|
|