Hallo zusammen!
Ich habe für ein anderes Projekt einen kleinen Editor geschrieben, der Scintilla als Editorkomponente mit einem eigenen Lexer verwendet. Der komplette Code inkl. Lexer (Styling und Folding) ist in AutoIt geschrieben und so gestaltet, dass sich der Editor mit wenigen Zeilen Code komplett in eigene Projekte einbauen läßt. Dabei liefere ich in der ZIP Datei alles notwendige mit: den kompilierten Editor und alle Sourcen, sämtliche Forms, externen Libs etc.. Natürlich sind alle fremden Quellen genannt, näheres in der authors.txt im Unterverzeichnis Libs und teilweise im Rest des Codes.
Der enthaltene Lexer ist allg. auf die Verwendung mit Scriptsprachen (also SGML-artiges geht nicht gut) ausgelegt und ist über einen eigenen Menüpunkt anpassbar und läßt sich um weitere eigene Skriptsprachendefinitionen erweitern. Ein paar Lexerdefinitionen, Testskripte und ein Beispiel, wie sich die eigentliche Editorkomponente mit wenig Aufwand (eigentlich nur 4 Zeilen) komplett in eigene Projekte integrieren läßt liefere ich mit. Näheres dazu in der _LexingUDF_example.au3.
Beim Start präsentiert sich der Editor auf Deutsch OHNE Vorgabelexer, wer ihn bspw. auf Englisch mit AutoIt als Vorgabe haben möchte, ruft ihn einfach mit "scripteditor.exe -l=en -x=autoit" auf. Ansonsten über das 'Lexer' Menü einen der mitgelieferten Lexer auswählen und laden.
(Alle weiteren Kommandozeilenparameter werden mit "-h" sichtbar.)
Screenshot:
[Blockierte Grafik: https://s3.eu-central-1.amazonaws.com/opsipackagebui…shot-editor.jpg]
Download: ScriptEditor v1.9
Der Ablauf zur Integration in eigene Projekte kurz skizziert:
Spoiler anzeigen
; 0.) wir brauchen die gesamte Ordnerstruktur der ZIP Datei, also am einfachsten alles Entpacken und für Eigenes die editor.au3 löschen und selber loslegen ;-)#include "_LexingUDF.au3"; ; Vorweg muss die Parent GUI mit GUICreate erzeugt werden, wir brauchen ein Window-Handle (hier $hGUI); 1.) Parent GUI für den Editor setzen$__default_editor_parent = $hGUI ; 2.) Lexerdefinition einladen - Name der Datei ohne .def aus dem Unterverzeichnis 'LexDef'_GUICtrlLex_ReadLEXFile($lexer) -> bspw: _GUICtrlLex_ReadLEXFile("autoit"); 3.) Editorkomponente innerhalb von $__default_editor_parent erzeugen_GUICtrlLex_CreateScriptEditor($x, $y, $breite, $hoehe) -> bspw: _GUICtrlLex_CreateScriptEditor(0, 0, 800, 600); 4.) alle wichtigen Variablen, Arrays, etc. initialisieren und die Styles, Layouts, Markerdefinitionen, etc., die zuvor eingeladen wurde, der Editorkomponente bekannt machen_GUICtrlLex_SetupStylingAndFolding(); das wars eigentlich.... wer allerdings gerne noch einen Menüpunkt hätte, um die Lexerdefinition anzupassen, wie oben auf dem Screenshot zu sehen, der macht noch etwas weiter:; (genereller Hinweis: für den Einbau in eigene Skripte sollte der OnEvent Modus verwendet werden, das macht es etwas einfacher); 5.) erzeugen eines eigenen Hauptmenüpunkts 'Lexer', mit allem was nötig ist_GUICtrlLex_CreateLexerDefMenu('main'); 6.) den unter 5.) erzeugten Menüpunkt mit dem Konfigurationsdialog verknüpfenGUICtrlSetOnEvent($__arM[2], "_GUICtrlLex_OpenLexerDef"); WICHTIG: wer eigene Funktionen als WM_NOTIFY oder WM_COMMAND registrieren will, muss; _GUIRegisterMsg aus der Libs\_GUIRegisterMsg.au3 verwenden!
[/autoit]
Was ganz hübsch ist, ist die Tatsache, daß wenn man an der Lexerdefinition herumschraubt, Farben und Schriftarten ändert, beim einem Klick auf "Sichern" das ganze direkt auf Editor übertragen wird. Man kann also schauen, wie sich der Kram verändert. Hauptsächlich dafür liegen die Testskripte bei.
Fairerweise muss ich aber eines dazu sagen: dieser Editor ist für große Skripte einfach zu langsam, da es eben AutoIt Geschwindigkeit ist. Da es bei mir aber nicht um riesige Codemengen ging, sondern eher um eine gute Darstellung kleinerer Skripte, hab ich's halt so gemacht. Also bitte nicht hauen, wenn das 8000 Zeilen Skript schon ein wenig braucht, um gestylt und gefoldet zu werden ;-))
Es werden auch sicherlich noch ein paar Böcke drin sein und ich weiß auch nicht, wie optimal mein Code ist (vor allem der Folder ;-), vielleicht mach ich den auch nochmal neu ), soooo lange schreibe ich noch nicht in AutoIt, aber Spass gemacht hat's trotzdem
Vielleicht kann's ja wer gebrauchen und Lob oder Kritik sind natürlich immer gerne gelesen
Lieber Gruß
Holger