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
Hallo T-Rex,
nein, mit deinen RegExp mich zu beschäftigen, habe ich wahrhaftig keine Lust. Als begeisterter vim-Nutzer schlage ich dir aber einen anderen Weg vor:
Richte dir vim bzw gvim so ein, bis du mit dem Aussehen zufrieden bist (~/.vimrc editieren). Das ist nicht ganz trivial, lohnt sich aber,und das Netz quillt über vor Infos.
Wenn du das gemacht hast, kannst du mit vim aus der aktuell geöffneten Datei mit dem Befehl
:runtime! syntax/2html.vim
ein html-file erzeugen, das du dann mit
:w
speicherst.
Das ganze geht auch auf der Kommandozeile: Mit
vim -c "runtime! syntax/2html.vim" -c wall -c q -c q vbscript.vb
erzeugst du eine Datei vbscript.vb.html, die nach meiner Erfahrung *genau so* aussieht wie das Original im gvim-Fenster.
! Vim rulez !
Bundeskanzler