Расширение тега Mediawiki - цепочечные теги не обрабатываются - PullRequest
4 голосов
/ 03 октября 2011

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

1 Ответ

3 голосов
/ 04 октября 2011

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

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

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

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

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

...