Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:parse_dokuwiki

Dies ist eine alte Version des Dokuments!


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.

  • 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.1330332222.txt.gz · Zuletzt geändert: 2012-02-27 09:43 von 109.192.98.64