Hallo Nils,
mein kleines Skript findest Du unten. Es liest aus der Standardeingabe bzw. angegebenen Datei und schreibt in die Standardausgabe; d.h. mit diesem Skript allein bleibt Dir leider nichts anderes übrig, als das Hoch- und Runterladen manuell durchzuführen. Ganz so viel Arbeit ist das aber auch nicht: Wiki-Quellcode in eine Datei kopieren, als Input an awk verfüttern, den Output wieder in die Edit-Seite einfügen.
Oder vielleicht hat ja einer der Wiki-Spezialisten einen Tipp, wie sich das Runter- und Hochladen auch noch automatisieren läßt…?
Änderungen werden nur an Zeilen vorgenommen, die mit einem Stern beginnen - daher sollte alles außerhalb der Liste in Ruhe gelassen werden.
Das Skript betrachtet alle Buchstaben zwischen zwei Leerzeichen als ein Wort. Dessen erster Buchstabe wird immer groß geschrieben, alles andere klein. Bisher beherrscht das Skript folgende Ausnahmen:
-
bestimmte Wörter werden grundsätzlich klein geschrieben: rue, route, … (natürlich beliebig erweiterbar)
-
bei d’ oder l’ am Wortanfang wird der Buchstabe nach dem Apostroph groß geschrieben, das d bzw. l jedoch klein
-
nach einem Bindestrich folgt immer ein Großbuchstabe
Damit sollten die wichtigsten Fälle abgedeckt sein. Der Code ist so dokumentiert, daß kleinere Änderungen auch ohne awk-Kenntnisse möglich sein sollten. Bei größeren Umbauten helfe ich aber gerne weiter.
#!/usr/bin/awk -f
/^\*/ { # nur Zeilen bearbeiten, die mit "*" anfangen (Wiki)
# erstmal _alles_ in Kleinbuchstaben
$0 = tolower ($0)
# jetzt jedes "Wort" einzeln anschauen (Schleife):
for (i = 1; i <= NF; ++i) {
# und den ersten Buchstaben groß schreiben, es sei denn,
# das Wort ist rue, route, de, des, der, du oder la
# (\< ... \> sorgt dafür, daß nur das _ganze Wort_ "gematcht" wird)
if ($i !~ /\<(rue|route|de|des|der|du|la)\>/) {
$i = toupper(substr($i, 1, 1)) substr($i, 2)
}
# Fehler: d'blabla wurde soeben zu D'blabla "korrigiert", das ist
# aber natürlich falsch. Also korrigieren zu d'Blabla. Gleiches für l'.
if ($i ~ /\<[DL]'/) {
$i = tolower(substr($i,1,1)) "'" \
toupper(substr($i, 3, 1)) substr ($i, 4)
}
}
# hinter einem Bindestrich stets groß schreiben
position = 1
while (match(substr($0, position), "-")) {
position += RSTART
$0 = substr($0, 1, position-1) toupper(substr($0, position, 1)) \
substr ($0, position+1)
}
}
{
# Ausgabe (alle Zeilen, egal ob mit "*" oder ohne)
print
}