- Offizieller Beitrag
Hi,
ich hatte ja schon mein 'Osterei' für euch angekündigt:
hier nun mein erstes größeres Projekt mit Lua: ManageIncludes
Sicher kennt ihr OrganizeIncludes von Xenobiologist. Damit lassen sich die Includes für das aktuelle Skript in SciTE ermitteln und einfügen.
Das tut auch mein Lua-Skript. Mit einem wesentlichen Unterschied:
Lua ist deutlich schneller als AutoIt. Selbst für ein 20.000 Zeilen-Skript habe ich unter einer Sekunde beim Testen benötigt.
Weiterhin ermittele ich die rekursiv eingebundenen Includes (Includes aus den Includes aus den Includes...), was zu einer Reduzierung der Includes im Skript führt.
Beim erstmaligen Start des Skripts werden Dateien erstellt mit Zusammenstellung von Funktionen und Konstanten der existierenden Includes (Prod, sofern installiert Beta, wenn in den properties angegeben: User-Includes). Das dauert etwas länger, je nach Rechner bis zu 6..8 Sekunden.Die Dateien liegen alle im Ordner: "..SciTE\Lua\MILua\". Ab jetzt könnt ihr beim Installen/Updaten das Verzeichnis selbst wählen. Vorgabe bei Auswahl ist @AppData.
Wenn ihr Veränderungen bei Prod/Beta/User-Includes habt, einfach die Dateien in diesem Ordner löschen. Beim nächsten Skriptaufruf wird, wie beim ersten mal, alles neu erstellt. Ein Auto-Updater ist in Arbeit.
Eine genaue Beschreibung des Skriptes findet ihr auch im Skriptheader.
Nebenbei bekommt ihr noch in die Konsole ausgegeben:
- alle deklarierten Funktionen
- verwendete Konstanten und Funktionen mit zugehörigem Include
- Includes im Skript
- Erforderliche Includes für das Skript
- Includes, die per Rekursion eingebunden sind
- Nicht benötigte Includes
- Fehlende Includes
Die Includes werden nach folgender Priorität eingefügt (ist ein Punkt nicht zutreffend greift der nächste):
1. Eintrag an Position nach String der in den properties hinterlegt ist (s. Installations-Info)
2. Eintrag an der Position des ersten gefundenen Includes
3. Eintrag nach letzter Kompilerdirektive (#AutoIt3Wrapper..)
4. Eintrag am Skriptanfang
Wichtig: Schreibt bitte keine Includes in Zeile 1! gefixed
----------------------------------------------------------------------------------------------------------------------------------
-- Installation oder Update
--
-- "ManageIncludes.lua" und "shell.dll" zusammen mit Installationsskript "Install_ManageIncludes.au3" in einen Ordner packen
-- "Install_ManageIncludes.au3" ausführen
-- Bereits vorhandene Installationsdaten werden übernommen und können konfiguriert werden
-- Keinerlei Einträge von Hand erforderlich
----------------------------------------------------------------------------------------------------------------------------------
Ich habe das Skript mehrfach um- und ausgebaut (was ihr auch an der hohen Versionsnr. seht). Da kann sich durchaus auch mal ein Fehler eingeschlichen haben.
Sollte das Skript also mal mit einem Fehler abbrechen, bitte mir die Fehlermeldung posten. Eigentlich sollte maximal ein nicht abgefangener 'nil'-Wert so etwas verursachen.
Also testet fleißig und gebt mir Rückmeldung.
Das Skript poste ich dieses mal nicht (> 800 Zeilen). Es ist zusammen mit der shell.dll im Anhang.
Edit 09.04.2012
Da hatte sich noch ein Kopierfehler eingeschlichen für den propertie-Eintrag der Stringdefinition (s. Durchgestrichenes in Installationsanleitung).
Edit 09.04.2012 #2
- Habe noch einen Bug entdeckt, wenn kein Include im Skript - gefixt.
- Etwas Codekosmetik durchgeführt.
Das Pfadproblem ist etwas tricky und wird noch dauern.
Aktuelle Version: v0.13
Edit 10.04.2012
Das Skript ist noch nicht optimal, ein paar Fehler habe ich beseitigt.
Neu: Installationsprogramm, auch um bereits vorhandene Version upzudaten. Bereits verwendete Einstellungen werden erkannt und übernommen.
Install_MI.zip enthält den Ordner mit Install_ManageIncludes.au3, ManageIncludes[v0.14].lua und shell.dll
Einfach die .au3 aus dem Ordner heraus ausführen, sowohl bei Erstinstallation, als auch bei Update.
Aktuelle Version: v0.14
Grr, jetzt hatte ich vergessen das Installationsskript mit zu packen. :wacko: Jetzt separat im Anhang Nun mit verpackt.
Im Installer war noch ein kleiner Fehler beim Lesen des Include-Types. Aber jetzt paßt es.
Noch mal aktualisiert
- Installer hatte alte ManageInclude.lua nicht überschrieben
- jetzt werden Includes (wenn keine andere Eigenschaften festgelegt sind) in die erste Zeile geschrieben
Und ein weiteres Fehlerchen gefixed.
Aktuelle Version: v0.16
Und noch eine Korrektur.
Aktuelle Version: v0.17
==== ToDo ====
Da ich die Include-angaben immer streng trenne (aus Prod-/Beta-/Userverzeichnis eingefaßt in < >, andere Includes mit absolutem Pfad in Quotierung), hatte ich bisher nicht berücksichtigt, dass z.B. Pfade im aktuellen Skriptordner nur mit Angabe des Dateinamens möglich sind. Ebenso ist die Verwendung von Quotierung oder < > variabler als mir lieb ist.
Diese Fälle werden also im Moment noch nicht berücksichtigt, hierfür werde ich noch eine Pfadauflösung implementieren.
==============
DL bisher: 30