código do analisador de código aberto para MediaWiki marcação [fechado]
-
11-07-2019 - |
Pergunta
Estou interessado em analisar seletivamente Mediawiki marcação XML para gerar uma página HTML personalizada que é um subconjunto do HTML produzido pelo motor real PHP Mediawiki render.
Eu quero isso para BzReader, um leitor de despejo Mediawiki comprimido desligada escrito em C #. Assim, um C # analisador seria o ideal, mas qualquer código de boa ajudaria.
Claro que, se ninguém fez isso antes, eu acho que é hora de começar um projeto de manutenção de um analisador livre e independente Mediawiki, com base no próprio analisador do MediaWiki, mas menos bem integrado com a própria Mediawiki.
Então, alguém sabe de qualquer base que eu poderia começar, que seria melhor do que cortar a partir do código Mediawiki PHP?
Solução
Há uma lista de analisadores on http://www.mediawiki.org/wiki/Alternative_parsers, mas ac # analisador não está incluído lá ...
Outras dicas
Atualizar
se ter em mente ScrewTurn não ficar com a sintaxe Mediawiki mas usa sua própria variação que faz variar um pouco.
A sintaxe Mediawiki não se presta para analisador LALR (ou mesmo LL *), pois tem um monte de ambigüidades em sua definição, e também permite HTML. Há uma discussão sobre que nesta questão , você está essencialmente preso com a escrita seu próprio analisador e tokenizer ao invés de simplesmente escrever um arquivo BNF para ele e, em seguida, usando ANTLR / Gold / Ironia.
Roadkill Wiki usa um crioula analisador para sua análise Mediawiki, mas com o apoio limitado.
ScrewTurn é liberado sob a licença GPL, e tem um C # analisador:
- licença ScrewTurn
- ScrewTurn fonte de download (infelizmente não há nenhuma svn web)
A classe que você está depois é Core.Formatter que tem muitos regexs para fazer seu trabalho:
public static class Formatter {
}
Não é o código olhando mais agradável "mas funciona".
Eu tinha algumas palavras a dizer sobre Mediawiki templates aqui . Interessante que há uma lista de analisadores de alternativas agora, eu vou ter que investigar isso.