2008-11-27 7 views
6

Ich bin in selektiven Parsing Mediawiki XML-Markup interessiert, um eine angepasste HTML-Seite zu generieren, die eine Teilmenge der HTML von der tatsächlichen PHP Mediawiki Render-Engine erzeugt wird.Open-Source-Parser-Code für Mediawiki Markup

Ich möchte es für BzReader, eine Offline Mediawiki komprimierte Dump-Reader in C# geschrieben. Ein C# Parser wäre also ideal, aber jeder gute Code würde helfen.

Natürlich, wenn es noch keiner getan hat, ist es an der Zeit, ein Projekt zu starten, das einen freien und separaten Mediawiki-Parser auf der Basis von Mediawikis eigenem Parser verwaltet, aber weniger eng mit Mediawiki integriert ist.

Also, kennt jemand irgendeine Basis, mit der ich anfangen könnte, das wäre besser als Hacking aus dem Mediawiki PHP Code?

Antwort

7

Es gibt eine Liste von Parsern auf http://www.mediawiki.org/wiki/Alternative_parsers, sondern ein C# Parser ist dort nicht enthalten ...

+0

Für .net-Integration konnte er jedoch Eisen Python verwenden. –

+0

Ich gab nach ein paar Stunden auf, Eisenpython mit diesen Python-Bibliotheken zu verwenden. Zu kompliziert ... – jjxtra

+0

Diese Liste ist alt und nicht aktualisiert. – ALOToverflow

4

ich einige Worte hatte here über Mediawiki-Vorlagen zu sagen. Interessant, dass es jetzt eine Liste von alternativen Parsern gibt, das muss ich untersuchen.

6

aktualisieren
Bare daran ScrewTurn klebt nicht an der Mediawiki-Syntax, sondern verwendet eine eigene Variante, die ein wenig variieren tut.

Die Mediawiki-Syntax eignet sich nicht für LALR-Parser (oder sogar LL *), da sie viele Unklarheiten in ihrer Definition hat und auch HTML erlaubt. Es gibt eine Diskussion darüber in this question, Sie stecken im Wesentlichen fest mit dem Schreiben Ihres eigenen Parsers und Tokenizers, anstatt einfach eine BNF-Datei dafür zu schreiben und dann ANTLR/Gold/Irony zu verwenden.

Roadkill Wiki verwendet ein Creole parser für seine Mediawiki-Analyse, aber mit eingeschränkter Unterstützung.


ScrewTurn unter der GPL-Lizenz veröffentlicht wird, und hat eine C# Parser:

Die Klasse sind Sie nach ist Core.Formatter, das viele regexs hat, um seine Arbeit zu erledigen:

public static class Formatter { 

} 

Es ist nicht der schönste Code "aber es funktioniert".

+0

Danke! Ausgezeichnete Ressource. –

+0

@Chris S: Mit anderen Worten: das ist KEIN Mediwiki-Parser ... –