Codice parser open-source per markup Mediawiki [chiuso]
-
11-07-2019 - |
Domanda
Sono interessato ad analizzare selettivamente il markup XML di Mediawiki per generare una pagina HTML personalizzata che è un sottoinsieme dell'HTML prodotto dall'attuale motore di rendering PHP Mediawiki.
Lo voglio per BzReader, un lettore di dump compresso Mediawiki offline scritto in C #. Quindi un parser C # sarebbe l'ideale, ma qualsiasi buon codice sarebbe d'aiuto.
Ovviamente, se nessuno lo ha mai fatto prima, immagino sia giunto il momento di avviare un progetto mantenendo un parser Mediawiki gratuito e separato, basato sul parser di Mediawiki, ma meno strettamente integrato con Mediawiki stesso.
Quindi, qualcuno conosce qualche base con cui potrei iniziare, sarebbe meglio che hackerare dal codice PHP di Mediawiki?
Soluzione
C'è un elenco di parser su http://www.mediawiki.org/wiki/Alternative_parsers, ma ac # parser non è incluso lì ...
Altri suggerimenti
Aggiorna
Da tenere in considerazione. Screwturn non si attacca alla sintassi di Mediawiki ma utilizza una propria variazione che varia leggermente.
La sintassi di Mediawiki non si presta al parser LALR (o anche a LL *) in quanto ha molte ambiguità nella sua definizione e consente anche l'HTML. C'è una discussione su questo in questa domanda , sei essenzialmente bloccato con la scrittura il tuo parser e tokenizer piuttosto che scrivere semplicemente un file BNF per esso e quindi utilizzare ANTLR / Gold / Irony.
Roadkill Wiki utilizza un Analizzatore creolo per l'analisi Mediawiki, ma con supporto limitato.
Screwturn è rilasciato sotto licenza GPL e ha un parser C #:
- Licenza Screwturn
- Download dei sorgenti di Screwturn (purtroppo non c'è svn web)
La classe che stai seguendo è Core.Formatter che ha molti regex per fare il suo lavoro:
public static class Formatter {
}
Non è il codice più bello " ma funziona " ;.
Ho avuto alcune parole da dire sui modelli di Mediawiki qui . Interessante che ora ci sia un elenco di parser alternativi, dovrò investigarlo.