====== Parser fuer Dokuwiki-Markup ====== {{tag>project software computing }} {{process:shack-heritage-badge.png}} ===== 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 %%'%%''''' bzw. jedes 2. %%'%%''%%//%%''' eben durch %%'%%'''''. Failt bei der ersten URL: %%'%%''%%http://www...%%''' -> %%'%%''%%http:www...%%''' ==== 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.: // | {{...}} * 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 (%%,,%%) * Tags (%%,,%%) haben Vorrang vor Fontangaben (%% ** // __ %%) * Bei verzahnten (a b a b ) Tags (%%,,%%) hat das erstgenannte Vorrang * Bei verschachtelten Tags (a b a b) Tags (%%,,%%) hat das aeussere Vorrang * "Block"-Tags (%%,%%) haben Vorrang vor "Dekorations"-Tags (%% %%) * ... * Images * Links koennen Images enthalten, rangieren also nach nach diesen * ... * Zeilenorientierte Auszeichnung ( ' *' , \n ) rangiert weit hinten