project:parse_dokuwiki
Dies ist eine alte Version des Dokuments!
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.
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.1330332466.txt.gz · Zuletzt geändert: 2012-02-27 09:47 von 109.192.98.64