Выделение встроенного синтаксиса в MediaWiki

Есть ли расширение MediaWiki, которое поддерживает подсветку синтаксиса inline? (т.е. с поддержкой фрагментов кода, встроенных в обычные текстовые абзацы)

В настоящее время я использую SyntaxHighlight GeSHi, но я не уверен, что он поддерживает встроенную подсветку.

Ответы

Ответ 1

Вы можете добавить enclose="none" в тэг <source>:

There is <source lang="mylanguage" enclose="none">inline code</source> in this paragraph.

Ответ 2

Самое простое решение: <code>put your code here</code>

Ответ 3

Во-первых, пометьте те символы, о которых вы заботитесь, с помощью span, code, source, div, p, и т.д. Для встроенных с минимальными изменениями диапазон, вероятно, является тем, что вы ищете.

Во-вторых, примените стиль к помеченным символам. Для подсветки вы, вероятно, хотите что-то вроде background: yellow

Пример:

Highlights like <span style="border:thin solid green; background: yellow;">this</span> really draw the eye.

Ответ 4

Я обнаружил, что включение всего блока с помощью <pre></pre> показало лучший формат.

Ответ 5

При использовании <code>inline code</code> или, например, <syntaxhighlight lang="groovy" inline>inline code</syntaxhighlight> работает, набрав это, это настоящая боль, особенно если вы имеете дело с большим количеством фрагментов кода.

Если вики находятся под вашим контролем, вы можете расширить свою разметку. В приведенном ниже примере показано, как сократить приведенные выше значения до <c>inline code</c> и <sg>inline code</sg> соответственно с помощью метода расширений тегов.

Создайте каталог Customtags для вашего нового расширения в каталоге расширений MediaWiki (MW_HOME/extensions/). В этом каталоге создайте файл customtags.php со следующим содержимым:

<?php

$wgHooks['ParserFirstCallInit'][] = 'customtagsInit';

function customtagsInit(Parser $parser) { 

    // parameters: custom tag, custom renderer function
    $parser->setHook('c', 'customRenderShortCode');
    $parser->setHook('sg', 'customRenderSourceGroovy');

    return true;
}

function customRenderSourceGroovy($input, array $args, Parser $parser, PPFrame $frame) {
    $input = '<syntaxhighlight lang="groovy" inline>' . $input . '</syntaxhighlight>';
    $wikiparsed = $parser->recursiveTagParse($input, $frame);
    return $wikiparsed;
}

function customRenderShortCode($input, array $args, Parser $parser, PPFrame $frame) {
    $wikiparsed = $parser->recursiveTagParse($input, $frame);
    return '<code>' . $wikiparsed . '</code>';
}

?>

Наконец, зарегистрируйте это расширение в LocalSettings.php, и вам хорошо идти:

require_once "$IP/extensions/Customtags/customtags.php";

Аналогичным образом вы можете создавать короткие теги для больших блоков кода.