IServ-Wiki:Konvertierungsscript: Unterschied zwischen den Versionen

Aus dem IServ-Wiki
Zur Navigation springen Zur Suche springen
K
K
Zeile 1: Zeile 1:
 
Ich arbeite zur Zeit an einem sed-Script, dass die Konvertierung von DokuWiki-Artikeln in das MediaWiki-Format erleichern soll. Viele der kleinen Seiten können problemlos per Hand übersetzt werden, bei der Kommandozeilenreferenz ist das allerdings nicht so gut machbar...
 
Ich arbeite zur Zeit an einem sed-Script, dass die Konvertierung von DokuWiki-Artikeln in das MediaWiki-Format erleichern soll. Viele der kleinen Seiten können problemlos per Hand übersetzt werden, bei der Kommandozeilenreferenz ist das allerdings nicht so gut machbar...
  
Aktueller Stand des Scripts:
+
== Konvertierungs-Script ==
 
<pre>
 
<pre>
 
#!/bin/sed -f
 
#!/bin/sed -f
Zeile 44: Zeile 44:
 
</pre>
 
</pre>
  
Testdatei mit DokuWiki-Sytnax:
+
== Testdatei mit DokuWiki-Sytnax ==
 
<pre>
 
<pre>
 
== Header 1 ==
 
== Header 1 ==
Zeile 55: Zeile 55:
 
|Spalte|Spalte|Spalte|Spalte|
 
|Spalte|Spalte|Spalte|Spalte|
 
</pre>
 
</pre>
 +
 +
== Probleme ==
 +
 +
# Das Tabellenende wird im MediaWiki mit <tt><nowiki>|}</nowiki></tt> markiert, das Script ist jedoch nicht in der Lage, dies an die Tabellen anzuhängen. Mir ist es nicht gelungen, mit <tt>sed</tt> das Ende einer DokuWiki-Tabelle zu erkennen, unter anderem deshalb, weil <tt>sed</tt> den Zeilenumbruch vor Scriptausführung ausfiltert.

Version vom 3. August 2006, 19:05 Uhr

Ich arbeite zur Zeit an einem sed-Script, dass die Konvertierung von DokuWiki-Artikeln in das MediaWiki-Format erleichern soll. Viele der kleinen Seiten können problemlos per Hand übersetzt werden, bei der Kommandozeilenreferenz ist das allerdings nicht so gut machbar...

Konvertierungs-Script

#!/bin/sed -f

# Ueberschriften
s/======/=/g;t headersdone
s/=====/==/g;t headersdone
s/====/===/g;t headersdone
s/===/====/g;t headersdone
s/==/=====/g;t headersdone
:headersdone

##############################
### Tabellen #################
##############################

# Im MediaWiki werden Tabellen durch {| eingeleitet, im DokuWiki werden
# Tabellen gar nicht eingeleitet. Wir suchen daher einfach alle DokuWiki-
# Tabellenheader heraus, und stellen ihnen die MediaWiki-Einleitung voran.
/^\^/	i\
{| class="wikitable"

# Das DokuWiki beendet eine TH-Zeile mit einem ^, eine TD-Zeile mit einem |.
# Das MediaWiki beendet Zeilen nur mit dem Zeilenumbruch, daher muessen wir
# die ueberstehenden Zeichen entfernen.
/^\^/	s/\(.*\)\^/\1/
/^|/	s/\(.*\)|/\1/

# Das erste ^ ersetzen wir nun durch ein "! ", das erste | wird nur um ein
# Leerzeichen ergaenzt.
/^\^/	s/^\^/! /
/^|/	s/^|/| /

# Alle weiteren ^ ersetzen wir durch " !! ".
/^!/	s/\^/ !! /g
# Alle weiteren | ersetzen wir durch " || ".
# Zu dem Zweck muessen wir das erste | temporaer entfernen, es wird nachher
# wiederhergestellt. Sonst wuerde das erste auch ersetzt werden :-/
/^|/	s/|//
/|/	s/|/ || /g
/|/	s/.*/|&/

Testdatei mit DokuWiki-Sytnax

== Header 1 ==

=== Header 2 ===

^Kopf^Kopf^Kopf^Kopf^
|Spalte|Spalte|Spalte|Spalte|
|Spalte|Spalte|Spalte|Spalte|
|Spalte|Spalte|Spalte|Spalte|

Probleme

  1. Das Tabellenende wird im MediaWiki mit |} markiert, das Script ist jedoch nicht in der Lage, dies an die Tabellen anzuhängen. Mir ist es nicht gelungen, mit sed das Ende einer DokuWiki-Tabelle zu erkennen, unter anderem deshalb, weil sed den Zeilenumbruch vor Scriptausführung ausfiltert.