Código del analizador de código abierto para el marcado de Mediawiki

Me interesa analizar sintácticamente el marcado XML de Mediawiki para generar una página HTML personalizada que sea un subconjunto del HTML producido por el motor de renderizado PHP Mediawiki.

Lo quiero para BzReader, un lector de volcado comprimido Mediawiki sin conexión escrito en C #. Entonces, un analizador C # sería ideal, pero cualquier código bueno sería útil.

Por supuesto, si nadie lo ha hecho antes, supongo que es hora de comenzar un proyecto manteniendo un analizador de Mediawiki gratuito y separado, basado en el propio analizador de Mediawiki, pero menos integrado con Mediawiki.

Entonces, ¿alguien sabe de alguna base con la que podría comenzar, que sería mejor que piratear el código PHP de Mediawiki?

Hay una lista de analizadores en http://www.mediawiki.org/wiki/Alternative_parsers , pero ac # parser no está incluido allí …

Actualizar
Sin tener en cuenta Screwturn no se apega a la syntax de Mediawiki, pero usa su propia variación, que varía un poco.

La syntax de Mediawiki no se presta para el analizador LALR (o incluso para LL *), ya que tiene muchas ambigüedades en su definición y también permite el uso de HTML. Hay una discusión sobre esto en esta pregunta , esencialmente estás atrapado en escribir tu propio analizador y tokenizador en lugar de simplemente escribir un archivo BNF para él y luego usar ANTLR / Gold / Irony.

Roadkill Wiki usa un analizador criollo para su análisis de Mediawiki, pero con soporte limitado.


Screwturn se lanza bajo la licencia GPL, y tiene un analizador C #:

  • Licencia de Screwturn
  • Descarga de la fuente Screwturn (desafortunadamente no hay svn web)

La clase que buscas es Core.Formatter, que tiene muchas expresiones regulares para hacer su trabajo:

public static class Formatter { } 

No es el código que se ve mejor “pero funciona”.

Tenía algunas palabras para decir sobre las plantillas de Mediawiki aquí . Es interesante que haya una lista de analizadores alternativos ahora, tendré que investigar eso.