Wiki-Konverter#
Der Wiki-Konverter ist ein Perl-Script, das UseModWiki-Seiten in JspWiki-Seiten umwandelt. Bisher habe ich eine Beta-Version, die ich hier mal poste. Ich bitte um Tests und Anmerkungen, was noch fehlt. Ein bekanntes Problem sind Einrückungen mit ":".
Das Programm editiert nur die Seiten, die Peter verändert (gewrappt) und ins JspWiki kopiert hat. Ich hoffe, daß ich möglichst viele der von uns benutzten Formatierungen erwischt habe und dabei nichts "gefressen" habe. Besonders empfindlich sind z.B. Zeilenvorschübe, deren Verschwinden einiges durcheinanderbringen kann. Wenn hier keiner meckert, mache ich dann eine Version, die über das ganze Wiki geht.
Version 0.3#
#!/usr/bin/perl
# WikiKonverter V0.3
#
# Aufruf mit
# $ WikiKonverter.pl eingabe.txt >ausgabe.txt
# Datei einlesen
$_=join '',<>;
# Ist das überhaupt ein von Peter eingezogener
# und noch nicht korrigierter Text?
unless (/^Dies.*?{{{/s){
# ist kein unbearbeiteter Text
print $_;
exit;
}
# Hilfsvariable, weil ich das Skript sonst nicht ins Wiki stellen kann
$klammer='}' x 3;
# erstmal den Header und Footer wegmachen, die Peter angefügt hat
s/^Dies.*?{{{//s;
s/}{3}$//;
# Die meiste Verwirrung macht Peters Zeilen-gewrappe... :-(
# Die gewrapten Zeilen wieder zusammenbauen
#s/([^\n=-])\n([^* \n=-])/$1 $2/g;
s/(?<!(.\n|.=|--))\n([^* \n=:-])/$1 $2/g;
# manchmal hat Peter das = am Ende in eine eigene Zeile geschrieben
s/(?<!(.\n|.=|--))\n(=+\n)/$1 $2/g;
# manchmal steht auch sowas wie --ThomasBayen am Anfang einer Zeile
s/(?<!(.\n|.=|--))\n(--\s?[A-Z][a-z])/$1 $2/g;
# manchmal steht auch -- am Ende und ThomasBayen in der nächsten
s/[^-]--\n([A-Z][a-z])/-- $1/g;
# Freizeile am Anfang wegmachen
s/^\n//;
# Bereinigung von Seltsamigkeiten, die meine Regexe verwirren könnten
s/^\s+$//mg;
# Titelzeilen
s/^= (.*) =$/\!!! $1/mg;
s/^== (.*) ==$/\!! $1/mg;
s/^=== (.*) ===$/\! $1/mg;
s/^==== (.*) ====$/\__$1__/mg;
# Fettdruck
s/'''''(.*?)'''''/__''$1''__/sg;
s/'''(.*?)'''/__$1__/sg;
# <pre> vorsortieren
s/(.+)<\/pre>/$1\n<\/pre>/mg;
# vorformatierter Text durch Einrückung
s/((?:^(?: )+[^ :].*\n)+)/{{{\n$1$klammer\n/mg;
# Eingerückt und pre ist dopelt gemoppelt
s/<pre>(\s)*{{{/{{{/sg;
s/$klammer(\s)*<\/pre>/$klammer/sg;
# vorformatierter Text mit pre
s/<pre>(.*?)<\/pre>/{{{$1$klammer/sg;
# Links mit Text
s/\[(http:\S*) ([^\]]*)\]/[$2|$1]/g;
# nowiki gibt es in der Form nicht im JspWiki,
# aber preformat kommt ihm vielleicht etwas nahe
# Leider kommt so alles im Monospaced Font
s/<nowiki>(.*?)<\/nowiki>/{{{$1$klammer/sg;
# Einrückungen gibt es nicht im JspWiki
# die Mehrfacheinrückungen gehen so nur in der ersten Zeile
#s/^\s*:\s*([^:])/;: $1/mg;
#s/^\s*::\s*([^:])/;:{{{ $klammer $1/mg;
#s/^\s*:::\s*([^:])/;:{{{ $klammer $1/mg;
#s/^\s*::::\s*([^:])/;:{{{ $klammer $1/mg;
#s/^\s*:::::\s*/;:{{{ $klammer/mg;
# Einrückungen per * sehen meistens besser aus
# sind aber blöd, wenn sie mit Aufzählungen kombiniert sind
s/^\s*:\s*([^:])/** $1/mg;
s/^\s*::\s*([^:])/*** $1/mg;
s/^\s*:::\s*([^:])/**** $1/mg;
s/^\s*::::\s*([^:])/***** $1/mg;
s/^\s*:::::\s*/****** /mg;
# <br> wird von MarkusMonderkamp gerne innerhalb von Einrückungen benutzt
# Das gleiche Ergebnis gibt's in JspWiki nicht
# So wie ich es mache, gibt es eine gleichwertige Einrückung
s/^(\*+)([^*].*)<br>/$1$2\n$1 /mg;
s/^(\*+)([^*].*)<br>/$1$2\n$1 /mg;
s/^(\*+)([^*].*)<br>/$1$2\n$1 /mg;
s/^(\*+)([^*].*)<br>/$1$2\n$1 /mg;
s/^(\*+)([^*].*)<br>/$1$2\n$1 /mg;
s/<br>/\n\n/mg;
# <b> wurde von MarkusMonderkamp benutzt. Baeh!
s/<\/?b>/__/mg;
# Bemerkung zum Abschluss:
# Das WikiMarkup von JspWiki ist klar unterlegen!
# und das Ergebnis ausgeben
print;