Расширение тега Mediawiki - связанные теги не обрабатываются
Я пытаюсь разработать простое Расширение тега для Mediawiki. До сих пор я в основном опережаю ввод по мере его поступления. Проблема возникает, когда есть прикованные теги. Например, для этого примера:
function efSampleParserInit( Parser &$parser ) {
$parser->setHook( 'sample', 'efSampleRender' );
return true;
}
function efSampleRender( $input, array $args, Parser $parser, PPFrame $frame ) {
return "hello ->" . $input . "<- hello";
}
Если я напишу это в статье:
This is the text <sample type="1">hello my <sample type="2">brother</sample> John</sample>
Обрабатывается только первый тег sample
. Другой - нет. Я предполагаю, что мне следует работать с полученным объектом $parser
, поэтому я возвращаю обработанный ввод, но я не знаю, как это сделать.
Кроме того, Mediawiki ссылка в значительной степени не существует, было бы здорово иметь что-то вроде ссылки на доксиген или что-то в этом роде.
1 answers
Используйте $parser->recursiveTagParse()
, как показано в руководстве : Tag_extensions#Как отобразить викитекст в моем расширении?.
Это довольно неуклюжий интерфейс, и он не очень хорошо документирован. Основная причина, по которой такая, казалось бы, естественная вещь, которую так сложно выполнить, заключается в том, что это как бы противоречит первоначальному замыслу расширения тегов - они изначально задумывались как фильтры низкого уровня, которые принимают необработанный текст и выплевывают HTML, полностью обходя обычный синтаксический анализ. Так, например, если вы хотели включить некоторый контент, написанный в Markdown (например, сообщение StackOverflow) на вики-странице, идея заключалась в том, что вы могли бы установить подходящее расширение, а затем написать
<markdown>
**Look,** here's some Markdown text!
</markdown>
На странице, и анализатор MediaWiki оставит все, что находится между тегами
Конечно, оказалось, что большинство людей, которые писали расширения тегов MediaWiki, на самом деле не хотели заменять синтаксический анализатор, но просто чтобы внести в него некоторые изменения. Но то, как был настроен интерфейс расширения тегов, единственный способ сделать это - вызвать синтаксический анализатор рекурсивно. Иногда я думал, что было бы неплохо добавить в MediaWiki новый тип расширения синтаксического анализатора, что-то, что выглядело как расширения тегов, но не прерывало обычный синтаксический анализ таким радикальным образом. Увы, моей мотивации и обильного свободного времени до сих пор было недостаточно, чтобы действительно что-то с этим сделать.