Расширение тега 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 ссылка в значительной степени не существует, было бы здорово иметь что-то вроде ссылки на доксиген или что-то в этом роде.

Author: José Tomás Tocino, 2011-10-03

1 answers

Используйте $parser->recursiveTagParse(), как показано в руководстве : Tag_extensions#Как отобразить викитекст в моем расширении?.

Это довольно неуклюжий интерфейс, и он не очень хорошо документирован. Основная причина, по которой такая, казалось бы, естественная вещь, которую так сложно выполнить, заключается в том, что это как бы противоречит первоначальному замыслу расширения тегов - они изначально задумывались как фильтры низкого уровня, которые принимают необработанный текст и выплевывают HTML, полностью обходя обычный синтаксический анализ. Так, например, если вы хотели включить некоторый контент, написанный в Markdown (например, сообщение StackOverflow) на вики-странице, идея заключалась в том, что вы могли бы установить подходящее расширение, а затем написать

<markdown>
**Look,** here's some Markdown text!
</markdown>

На странице, и анализатор MediaWiki оставит все, что находится между тегами , в покое и просто передаст это расширению для анализа.

Конечно, оказалось, что большинство людей, которые писали расширения тегов MediaWiki, на самом деле не хотели заменять синтаксический анализатор, но просто чтобы внести в него некоторые изменения. Но то, как был настроен интерфейс расширения тегов, единственный способ сделать это - вызвать синтаксический анализатор рекурсивно. Иногда я думал, что было бы неплохо добавить в MediaWiki новый тип расширения синтаксического анализатора, что-то, что выглядело как расширения тегов, но не прерывало обычный синтаксический анализ таким радикальным образом. Увы, моей мотивации и обильного свободного времени до сих пор было недостаточно, чтобы действительно что-то с этим сделать.

 3
Author: Ilmari Karonen, 2011-10-03 21:56:35