Обновление за 2017 год:
Вы можете использовать ParseoidSharp , чтобы получить полностью совместимый MediaWiki-рендерер.
Он использует официальную библиотеку Wikipedia Parsoid через NodeServices.
(NetStandard 2.0)
Поскольку Parsoid - это GPL 2.0, а GPL-код вызывается в nodejs в отдельном процессе через сеть, вы даже можете использовать любую понравившуюся лицензию;)
<ч />
Pre-2017
Проблема решена.
Как первоначально предполагалось, решение заключается в использовании одного из существующих альтернативных синтаксических анализаторов в C #.
WikiModel (Java) хорошо работает для этой цели.
Первая попытка была киви.
Это работало, но не получилось, потому что:
- kiwi использует char * (не на любом языке, кроме английского / ASCII)
- не безопасно для потоков.
- плохо из-за необходимости иметь собственный dll в коде для каждой архитектуры
(действительно добавил x86 и amd64, затем он пошел kaboom на моем процессоре ARM)
Вторая попытка была mwlib.
Это не удалось, потому что IronPython почему-то не работает так, как должен.
Третьей попыткой была Swebele, которая, по сути, оказалась академическим паром.
Четвертой попыткой было использование оригинального медиа-вики-рендерера с использованием Phalanger. Это не удалось, потому что рендерер MediaWiki на самом деле не модульный.
Пятая попытка - использовать Wiky.php через Phalanger, который работал, но был медленным, и Wiky.php не очень полностью реализовывал MediaWiki.
Шестой попыткой было использование bliki через ikvmc, который потерпел неудачу из-за чрезмерного использования сторонних библиотек ==> он компилируется, но выдает только исключения с нулевой ссылкой
Седьмой попыткой было использование JavaScript в C #, который работал, но был очень медленным, плюс реализованная функциональность MediaWiki была очень неполной.
Восьмой попыткой было написание собственного "парсера" через Regex.
Но время, необходимое для того, чтобы это заработало, просто чрезмерно, поэтому я остановился.
9-я попытка прошла успешно.
Использование ikvmc на WikiModel дает полезную DLL.
Проблема в том, что пример кода был очень устарел.
Но используя Google и исходный код WikiModel, я смог собрать его воедино.
Конечный результат можно найти здесь:
https://github.com/ststeiger/MultiWikiParser