project:parse_dokuwiki
Inhaltsverzeichnis
Parser fuer Dokuwiki-Markup
Plan
Einen Parser fuer Dokuwiki-Markupup nach XML.
Fernziel ist ein Toolkit, um Wikimarkups ueber ein Zwischenformat ineinander ueberfuehren zu koennen, so wie netpbm das fuer Pixelformate kann.
Status
Killed.
Es war einfacher, die passenden Plugins fuer Dokuwiki zu suchen und einzurichten, als den Parser nachzuprogrammieren.
Ansaetze
1. s///
Ersetze '//
' durch '<it>
' bzw. jedes 2. '//
' eben durch '</it>
'.
Failt bei der ersten URL: 'http://www...
' → 'http:<it>www...
'
</code>
2. Lex & Yacc
Hier in der Variante der Perlmodule Parse::Lex und Parse::Yacc.
Besondere Schmankerl:
- Wikicode ist natuerlich keine Programmiersprache:
- zwischen relevanten Tags fliegt viel Zeug rum, das fuer die Auszeichnung irrelvant, aber tatsaechlich wichtig ist: der Inhalt. ;-)
- die Auszeichnungstoken genuegen keiner einheitlichen Syntax z.B.:
// <code> | {{...}}
- innerhalb bestimmter Tags verhalten sich Auszeichnungstoken nochmal anders (s.o.)
- manche Token gelten nur am Zeilenanfang:
' *' ' 1'
- newline ( 0x0a ) ist kein any-char sondern braucht ne Extra-Aufforderung:
(\n|.)
- whitespace ( 0x20 ) ist auch kein any-char. die ueblichen RE-Tricks ziehen nicht. Man muss es im Lexer einstellen:
$lexer->skip('');
next steps
Die Vorrangregeln sind undurchsichtig. Diese muessen als naechste erfasst werden.
- Ueberschriften (====== .. = zwischen \n) haben Vorrang vor Tags (<code>,<file>,<del>)
- Tags (<code>,<file>,<del>) haben Vorrang vor Fontangaben ( ** // __ )
- Bei verzahnten (a b a b ) Tags (<code>,<file>,<del>) hat das erstgenannte Vorrang
- Bei verschachtelten Tags (a b a b) Tags (<code>,<file>,<del>) hat das aeussere Vorrang
- „Block“-Tags (<code>,<file>) haben Vorrang vor „Dekorations“-Tags (<sub> <sup> <del>)
- …
- Images
- Links koennen Images enthalten, rangieren also nach nach diesen
- …
- Zeilenorientierte Auszeichnung ( ' *' , \n ) rangiert weit hinten
project/parse_dokuwiki.txt · Zuletzt geändert: 2022-04-20 10:42 von chris