2008-11-27 11 views
6

Jestem zainteresowany selektywnym analizowaniem znaczników XML Mediawiki w celu wygenerowania spersonalizowanej strony HTML, która jest pewnym podzbiorem HTML wytworzonym przez silnik renderujący PHP Mediawiki.Kod parsera open source dla znaczników Mediawiki

Chcę go dla BzReader, offline Mediawiki skompresowany dump czytelnik napisany w C#. Zatem parser C# byłby idealny, ale pomocny mógłby być każdy dobry kod.

Oczywiście, jeśli nikt wcześniej tego nie robił, domyślam się, że nadszedł czas, aby rozpocząć projekt, utrzymując wolny i oddzielny analizator składni Mediawiki, oparty na własnym parserze Mediawiki, ale mniej ściśle zintegrowany z samym Mediawiki.

Czy ktokolwiek wie o jakiejkolwiek bazie, od której mógłbym zacząć, to byłoby lepsze niż hackowanie z kodu PHP Mediawiki?

Odpowiedz

7

Jest lista parserami na http://www.mediawiki.org/wiki/Alternative_parsers, ale C# parser nie jest zawarty tam ...

+0

Dla integracji .net, mógłby jednak użyć żelaznego pythona. –

+0

Poddałem się po kilku godzinach próbując użyć żelaza python z tymi bibliotekami python. Zbyt skomplikowane ... – jjxtra

+0

Ta lista jest stara i nieaktualna. – ALOToverflow

4

miałem kilka słów do powiedzenia na temat szablonów MediaWiki here. Interesujące, że istnieje teraz lista alternatywnych analizatorów składni, będę musiał to zbadać.

6

Aktualizacja
Bare na uwadze ScrewTurn nie przykleja się do składni Mediawiki ale używa własnego odmianę, która nie różnią się nieco.

Składnia Mediawiki nie nadaje się do parsera LALR (lub nawet LL *), ponieważ ma wiele niejednoznaczności w swojej definicji, a także pozwala na HTML. Jest dyskusja na temat tego in this question, zasadniczo utknąłeś w pisaniu własnego parsera i tokenizera, zamiast po prostu pisać do niego plik BNF, a następnie za pomocą ANTLR/Gold/Irony.

Roadkill Wiki używa Creole parser do analizy Mediawiki, ale z ograniczoną obsługą.


ScrewTurn jest wydane na zasadach licencji GPL i ma C# parser:

Klasa jesteś po to Core.Formatter, który ma wiele regexów do wykonania swojej pracy:

public static class Formatter { 

} 

To nie jest najpiękniejszy kod "ale działa".

+0

Dzięki! Doskonały zasób. –

+0

@Chris S: Innymi słowy: to NIE jest parser mediawiki ... –