Moin zusammen,
ich bastele mir gerade ein Script, womit ich meine Visual Basic-Quelltexte nach HTML-konvertieren kann (vor allem Syntax-Highlighting).
Mit sed verpacke ich dazu alle Keywords in HTML-Tags.
Dabei bin ich auf ein paar Probleme gestossen:
- in der rules-Datei steht jedes Keyword in einer einzelnen Zeile. Wie kann ich mehrere Keywords in einer Zeile eintragen? Das Ganze soll später leicht zu erweitern sein.
- Es ergibt sich das Problem, daß der Datentyp einer Variablen, welche in einer Zeile deklariert wurde, nicht verpackt wird. Wie muß ich mein Suchstring ändern?
- mehrere Keywords können aufeinander folgen. Hier möchte ich nicht jedes einzelne Keyword verpacken, sondern alle aufeinanderfolgenden. Dazu habe ich die entsprechende Zeile im Script zweimal hintereinander geschrieben (vorvorletzte und vorletzte Zeile meines Scriptes).
- Kommentare (beginnen mit einem Hochkomma) müssen nicht am Anfang einer Zeile beginnen, es kann auch ein Befehl davor stehen. Den Beginn des Kommentars bekomme ich verpackt, am Ende der Zeile bekomme ich aber kein Tag-Abschluß hin (letzte Zeile des Scriptes).
Hier meine Testdatei:
' Die API-Deklarationen
Private Declare Function NetLocalGroupEnum Lib "NETAPI32.DLL" ( _
ServerName As Byte, _
ByVal Level As Long, _
Buffer As Long, _
ByVal PrefMaxLen As Long, _
EntriesRead As Long, _
TotalEntries As Long, _
ResumeHandle As Long _
) As Long
Dim A As Integer
' Ende der Beispieldatei
Hier mein sed-Script (geschweifte Klammern durch die HTML-Tag-Klammern ersetzen):
s|Alias |{span class=\"keyword\"}Alias{\/span} |g
s|Any\([ ,]\)|{span class=\"keyword\"}Any{\/span}\1|g
s|As |{span class=\"keyword\"}As{\/span} |g
s|Boolean\([ ,]\)|{span class=\"keyword\"}Boolean{\/span}\1|g
s|ByRef |{span class=\"keyword\"}ByRef{\/span} |g
s|ByVal |{span class=\"keyword\"}ByVal{\/span} |g
s|Byte\([ ,]\)|{span class=\"keyword\"}Byte{\/span}\1|g
s|Const |{span class=\"keyword\"}Const{\/span} |g
s|Declare |{span class=\"keyword\"}Declare{\/span} |g
s|Function |{span class=\"keyword\"}Function{\/span} |g
s|Integer\([ ,]\)|{span class=\"keyword\"}Integer{\/span}\1|g
s|Lib |{span class=\"keyword\"}Lib{\/span} |g
s|Long\([ ,]\)|{span class=\"keyword\"}Long{\/span}\1|g
s|Optional |{span class=\"keyword\"}Optional{\/span} |g
s|Set |{span class=\"keyword\"}Set{\/span} |g
s|String\([ ,]\)|{span class=\"keyword\"}String{\/span}\1|g
s|Sub |{span class=\"keyword\"}Sub{\/span} |g
s|Private |{span class=\"keyword\"}Private{\/span} |g
s|{span class=\"keyword\"}\(.*\){\/span} {span class=\"keyword\"}\(.*\){\/span}|{span class=\"keyword\"}\1 \2{\/span}|g
s|{span class=\"keyword\"}\(.*\){\/span} {span class=\"keyword\"}\(.*\){\/span}|{span class=\"keyword\"}\1 \2{\/span}|g
s|' *\(.*\)|{span class=\"comment\"}' \1|g
Aufruf erfolgt mit (Ausgabe am Bildschirm):
sed -f ./sedrules ./ctest.txt
Wer kann mir helfen? Der folgende Link hilft mir auch nicht mehr weiter:
http://sitescooper.org/tao_regexps.html
Vielen Dank im Voraus.
Linux 15.036 Themen, 107.107 Beiträge
Hi Herr Bumskanzler *g*,
mag ja sein, daß "vim rulez".
Aber ich habe schon eine Weile gebraucht, bis ich die bisherigen Befehle auf die Reihe bekommen habe. Da möchte ich jetzt weiter mit sed arbeiten.
Tschö mit Ö aus dem gemeinen Volk