Page MenuHomePhabricator

SyntaxHighlight GeSHi doesn't really work under MediaWiki 1.25
Closed, ResolvedPublic

Description

Although README says that the extension works under MW 1.25, it doesn't. Not always, at least.

Line 171 of SyntaxHighlight_GeSHi.class.php refers to Parser::MARKER_PREFIX constant. But it is not defined in MW 1.25, only in 1.26.

Event Timeline

alex-mashin raised the priority of this task from to Needs Triage.
alex-mashin updated the task description. (Show Details)
alex-mashin added a project: SyntaxHighlight.
alex-mashin added a subscriber: alex-mashin.
Restricted Application added a subscriber: Aklapper. · View Herald TranscriptJul 14 2015, 2:33 PM
alex-mashin updated the task description. (Show Details)Jul 14 2015, 2:42 PM
alex-mashin set Security to None.
TTO added a subscriber: TTO.Jul 15 2015, 2:38 AM

Are you sure you downloaded the 1.25 snapshot? https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdist_name=SyntaxHighlight_GeSHi&extdist_version=REL1_25&extdist_submit=

I tried that and didn't see any mention of MARKER_PREFIX in the .class.php file.

alex-mashin added a comment.EditedJul 15 2015, 12:37 PM
>>! In T105796#1452935, @TTO wrote:
> Are you sure you downloaded the 1.25 snapshot? https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdist_name=SyntaxHighlight_GeSHi&extdist_version=REL1_25&extdist_submit=
I used git, master branch, as README there said it was tested under MW 1.25.

I tried REL1_25 at first, but it was even worse. There were also MediaWIki errors for large pages which used geshi and then HHVM segfaulted. Below is an example of HHVM stacj trace, the MediaWIki error is at the end. There are cases when segfault happens when Scribunto is not involved (and Syntax Highlight GeSHi still is) but the stacktrace is empty then.

Host: ip-10-0-0-152
ProcessID: 16993
ThreadID: 7f5f863ff700
ThreadPID: 16997
Name: unknown program
Type: Segmentation fault
Runtime: hhvm
Version: tags/HHVM-3.7.3-0-g08c64d25f6c2cd316730b1d37db9eb33744cb306
DebuggerCount: 0

Server: traditio-ru.org
ThreadType: Web Request
Server_SERVER_NAME: traditio-ru.org
URL: /wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:Syntaxhighlight


PHP Stacktrace:

#0  GeSHi->parse_non_string_part( m [chemistryData.apiShowFormula] = <|/1/>function|> (frame)
    <|/1/>local|> nextfunc, static, cur = pairs (frame.args)
    <|/1/>if|> nextfunc (static, cur) == nil <|/1/>then|>
        ) called at [/var/www/traditio.ru/w/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php:3090]
#1  GeSHi->parse_code() called at [/var/www/traditio.ru/w/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php:123]
#2  SyntaxHighlight_GeSHi::parserHook(-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m, Array, Object of class Parser could not be converted to string) called at [/var/www/traditio.ru/w/includes/parser/Parser.php:4212]
#3  Parser->extensionSubstitution(Array, frame{}) called at [/var/www/traditio.ru/w/includes/parser/Preprocessor_Hash.php:1165]
#4  PPFrame_Hash->expand(<root><template><title>Тэг
    </title><part><name> расширение </name>=<value> SyntaxHighlight GeSHi
    </value></part><part><name> описание   </name>=<value> Выводит исходный код с подсветкой синтаксиса
    </value></part><part><name> автор      </name>=<value> [[Brion Vibber]], [[Tim Starling]] и [[Rob Church]]
    </value></part><part><name> lang       </name>=<value> [[язык программирования]]
    </value></part><part><name> line       </name>=<value> (GESHI_NORMAL_LINE_NUMBERS<template><title>!</title></template>GESHI_FANCY_LINE_NUMBERS) или пустое значение для показа номеров строк
    </value></part><part><name> start      </name>=<value> номер первой строки
    </value></part><part><name> highlight  </name>=<value> номер подсвеченной строки (без учёта line start)
    </value></part><part><name> enclose    </name>=<value> тэг [[HTML]], содержащий код — pre по умолчанию, div или none
    </value></part><part><name> strict     </name>=<value> использовать строгий режим
    </value></part><part><name> содержимое </name>=<value> Исходный код
    </value></part><part><name> возврат    </name>=<value> Исходный код с подсветкой синтаксиса
</value></part></template>

<template lineStart="1"><title>tag</title><part><name index="1"/><value>syntaxhighlight</value></part></template>, а также, <template><title>tag</title><part><name index="1"/><value>source</value></part></template> — [[Справка:тэг MediaWiki|тэг ''MediaWiki'']] для вывода исходного кода с [[подсветка синтаксиса|подсветкой синтаксиса]], предоставляемый [[Расширение MediaWiki|расширением]] ''SyntaxHighlight GeSHi''.

<h level="2" i="1">== Примеры ==</h>
{| class=&quot;wikitable&quot;
! Описание !! Викитекст !! Вывод
|-
! Простой фрагмент кода на [[Lua]]
|
<ext><name>pre</name><attr/><inner>&lt;nowiki&gt;
&lt;syntaxhighlight lang=&quot;lua&quot;&gt;
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m&lt;/syntaxhighlight&gt;
&lt;/nowiki&gt;</inner><close>&lt;/pre&gt;</close></ext>
| <ext><name>syntaxhighlight</name><attr> lang=&quot;lua&quot;</attr><inner>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</inner><close>&lt;/syntaxhighlight&gt;</close></ext>
|-
! Код с нумерацией строк
|
<ext><name>pre</name><attr/><inner>&lt;nowiki&gt;
&lt;syntaxhighlight lang=&quot;lua&quot; line&gt;
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
&lt;/syntaxhighlight&gt;
&lt;/nowiki&gt;</inner><close>&lt;/pre&gt;</close></ext>
| <ext><name>syntaxhighlight</name><attr> lang=&quot;lua&quot; line</attr><inner>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</inner><close>&lt;/syntaxhighlight&gt;</close></ext>
|-
! Код с нумерацией строк не с первой
|
<ext><name>pre</name><attr/><inner>&lt;nowiki&gt;
&lt;syntaxhighlight lang=&quot;lua&quot; line start=&quot;774&quot;&gt;
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
&lt;/syntaxhighlight&gt;
&lt;/nowiki&gt;</inner><close>&lt;/pre&gt;</close></ext>
| <ext><name>syntaxhighlight</name><attr> lang=&quot;lua&quot; line start=&quot;774&quot;</attr><inner>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</inner><close>&lt;/syntaxhighlight&gt;</close></ext>
|-
! Подсветка строки
|
<ext><name>pre</name><attr/><inner>&lt;nowiki&gt;
&lt;syntaxhighlight lang=&quot;lua&quot; line highlight=&quot;4&quot;&gt;
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
&lt;/syntaxhighlight&gt;
&lt;/nowiki&gt;</inner><close>&lt;/pre&gt;</close></ext>
| <ext><name>syntaxhighlight</name><attr> lang=&quot;lua&quot; line highlight=&quot;4&quot;</attr><inner>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</inner><close>&lt;/syntaxhighlight&gt;</close></ext>
|-
! Тэг <template><title>tag</title><part><name index="1"/><value>div</value></part></template>
|
<ext><name>pre</name><attr/><inner>&lt;nowiki&gt;
&lt;syntaxhighlight lang=&quot;lua&quot; enclose=&quot;div&quot;&gt;
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
&lt;/syntaxhighlight&gt;
&lt;/nowiki&gt;</inner><close>&lt;/pre&gt;</close></ext>
| <ext><name>syntaxhighlight</name><attr> lang=&quot;lua&quot; enclose=&quot;div&quot;</attr><inner>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</inner><close>&lt;/syntaxhighlight&gt;</close></ext>
|}
<template lineStart="1"><title>Написал</title><part><name index="1"/><value>Alex Mashin</value></part></template></root>, 0) called at [/var/www/traditio.ru/w/includes/parser/Parser.php:3322]
#5  Parser->replaceVariables({{Тэг
    | расширение = SyntaxHighlight GeSHi
    | описание   = Выводит исходный код с подсветкой синтаксиса
    | автор      = [[Brion Vibber]], [[Tim Starling]] и [[Rob Church]]
    | lang       = [[язык программирования]]
    | line       = (GESHI_NORMAL_LINE_NUMBERS{{!}}GESHI_FANCY_LINE_NUMBERS) или пустое значение для показа номеров строк
    | start      = номер первой строки
    | highlight  = номер подсвеченной строки (без учёта line start)
    | enclose    = тэг [[HTML]], содержащий код — pre по умолчанию, div или none
    | strict     = использовать строгий режим
    | содержимое = Исходный код
    | возврат    = Исходный код с подсветкой синтаксиса
}}

{{tag|syntaxhighlight}}, а также, {{tag|source}} — [[Справка:тэг MediaWiki|тэг ''MediaWiki'']] для вывода исходного кода с [[подсветка синтаксиса|подсветкой синтаксиса]], предоставляемый [[Расширение MediaWiki|расширением]] ''SyntaxHighlight GeSHi''.

== Примеры ==
{| class="wikitable"
! Описание !! Викитекст !! Вывод
|-
! Простой фрагмент кода на [[Lua]]
|
<pre><nowiki>
<syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк
|
<pre><nowiki>
<syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк не с первой
|
<pre><nowiki>
<syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Подсветка строки
|
<pre><nowiki>
<syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Тэг {{tag|div}}
|
<pre><nowiki>
<syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|}
{{Написал|Alex Mashin}}) called at [/var/www/traditio.ru/w/includes/parser/Parser.php:1231]
#6  Parser->internalParse({{Тэг
    | расширение = SyntaxHighlight GeSHi
    | описание   = Выводит исходный код с подсветкой синтаксиса
    | автор      = [[Brion Vibber]], [[Tim Starling]] и [[Rob Church]]
    | lang       = [[язык программирования]]
    | line       = (GESHI_NORMAL_LINE_NUMBERS{{!}}GESHI_FANCY_LINE_NUMBERS) или пустое значение для показа номеров строк
    | start      = номер первой строки
    | highlight  = номер подсвеченной строки (без учёта line start)
    | enclose    = тэг [[HTML]], содержащий код — pre по умолчанию, div или none
    | strict     = использовать строгий режим
    | содержимое = Исходный код
    | возврат    = Исходный код с подсветкой синтаксиса
}}

{{tag|syntaxhighlight}}, а также, {{tag|source}} — [[Справка:тэг MediaWiki|тэг ''MediaWiki'']] для вывода исходного кода с [[подсветка синтаксиса|подсветкой синтаксиса]], предоставляемый [[Расширение MediaWiki|расширением]] ''SyntaxHighlight GeSHi''.

== Примеры ==
{| class="wikitable"
! Описание !! Викитекст !! Вывод
|-
! Простой фрагмент кода на [[Lua]]
|
<pre><nowiki>
<syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк
|
<pre><nowiki>
<syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк не с первой
|
<pre><nowiki>
<syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Подсветка строки
|
<pre><nowiki>
<syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Тэг {{tag|div}}
|
<pre><nowiki>
<syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|}
{{Написал|Alex Mashin}}) called at [/var/www/traditio.ru/w/includes/parser/Parser.php:434]
#7  Parser->parse({{Тэг
    | расширение = SyntaxHighlight GeSHi
    | описание   = Выводит исходный код с подсветкой синтаксиса
    | автор      = [[Brion Vibber]], [[Tim Starling]] и [[Rob Church]]
    | lang       = [[язык программирования]]
    | line       = (GESHI_NORMAL_LINE_NUMBERS{{!}}GESHI_FANCY_LINE_NUMBERS) или пустое значение для показа номеров строк
    | start      = номер первой строки
    | highlight  = номер подсвеченной строки (без учёта line start)
    | enclose    = тэг [[HTML]], содержащий код — pre по умолчанию, div или none
    | strict     = использовать строгий режим
    | содержимое = Исходный код
    | возврат    = Исходный код с подсветкой синтаксиса
}}

{{tag|syntaxhighlight}}, а также, {{tag|source}} — [[Справка:тэг MediaWiki|тэг ''MediaWiki'']] для вывода исходного кода с [[подсветка синтаксиса|подсветкой синтаксиса]], предоставляемый [[Расширение MediaWiki|расширением]] ''SyntaxHighlight GeSHi''.

== Примеры ==
{| class="wikitable"
! Описание !! Викитекст !! Вывод
|-
! Простой фрагмент кода на [[Lua]]
|
<pre><nowiki>
<syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк
|
<pre><nowiki>
<syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line>
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Код с нумерацией строк не с первой
|
<pre><nowiki>
<syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line start="774">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Подсветка строки
|
<pre><nowiki>
<syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" line highlight="4">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|-
! Тэг {{tag|div}}
|
<pre><nowiki>
<syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
</nowiki></pre>
| <syntaxhighlight lang="lua" enclose="div">
-- Регистрация эспортируемых функций:
-- «оформить формулу»:
m [chemistryData.apiShowFormula] = function (frame)
    local nextfunc, static, cur = pairs (frame.args)
    if nextfunc (static, cur) == nil then
        -- аргументы не переданы. Использовать аргументы шаблона:
        return showFormula (frame:getParent ().args)
    else
        -- переданы аргументы:
        return showFormula (frame.args)
    end
end

-- Последняя строка. Экспорт функций из модуля:
return m
</syntaxhighlight>
|}
{{Написал|Alex Mashin}}, Справка:Syntaxhighlight, Object of class ParserOptions could not be converted to string, 1, 1, 454485) called at [/var/www/traditio.ru/w/includes/content/WikitextContent.php:333]
#8  WikitextContent->fillParserOutput(Справка:Syntaxhighlight, 454485, Object of class ParserOptions could not be converted to string, 1, Object of class ParserOutput could not be converted to string) called at [/var/www/traditio.ru/w/includes/content/AbstractContent.php:497]
#9  AbstractContent->getParserOutput(Справка:Syntaxhighlight, 454485, Object of class ParserOptions could not be converted to string) called at [/var/www/traditio.ru/w/includes/poolcounter/PoolWorkArticleView.php:140]
#10 PoolWorkArticleView->doWork() called at [/var/www/traditio.ru/w/includes/poolcounter/PoolCounterWork.php:123]
#11 PoolCounterWork->execute() called at [/var/www/traditio.ru/w/includes/page/Article.php:674]
#12 Article->view() called at [/var/www/traditio.ru/w/includes/actions/ViewAction.php:44]
#13 ViewAction->show() called at [/var/www/traditio.ru/w/includes/MediaWiki.php:395]
#14 MediaWiki->performAction(Object of class Article could not be converted to string, Справка:Syntaxhighlight) called at [/var/www/traditio.ru/w/includes/MediaWiki.php:273]
#15 MediaWiki->performRequest() called at [/var/www/traditio.ru/w/includes/MediaWiki.php:566]
#16 MediaWiki->main() called at [/var/www/traditio.ru/w/includes/MediaWiki.php:414]
#17 MediaWiki->run() called at [/var/www/traditio.ru/w/index.php:41]
matmarex added a subscriber: matmarex.

Apologies, this is a regression from 043969f84eb5c61a508c05bf5ffd369cc6655cd6. I wasn't aware that master is meant to stay compatible with MW 1.25.

Change 224778 had a related patch set uploaded (by Bartosz Dziewoński):
Use $parser->mUniqPrefix instead of $parser::MARKER_PREFIX for MW 1.25 compatibility

https://gerrit.wikimedia.org/r/224778

matmarex triaged this task as High priority.Jul 15 2015, 12:57 PM

Also, running hhvm maintenance/updateLexerList.php or hhvm maintenance/updateCSS.php under MW 1.25.1 gives this warning:
Warning: Invalid operand type was used: storeToArray expects array(s) in /var/www/traditio.ru/w/includes/registration/ExtensionProcessor.php on line 294.

Warning: Invalid operand type was used: storeToArray expects array(s) in /var/www/traditio.ru/w/includes/registration/ExtensionProcessor.php on line 294.

T102522: Setting manifest_version should not explode in REL1_25. It's fixed in REL1_25 and will be part of 1.25.2.

T102522: Setting manifest_version should not explode in REL1_25. It's fixed in REL1_25 and will be part of 1.25.2.

BTW, git branch currently reports only one branch: master.

BTW, git branch currently reports only one branch: master.

Huh? https://git.wikimedia.org/branches/mediawiki%2Fcore.git

git branch in extensions/SyntaxHighlight_GeSHi.

alex-mashin added a comment.EditedJul 18 2015, 7:31 AM
git pull:
 Already up-to-date.

git branch:
 * master

git branch -all:
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/REL1_19
  remotes/origin/REL1_20
  remotes/origin/REL1_21
  remotes/origin/REL1_22
  remotes/origin/REL1_23
  remotes/origin/REL1_24
  remotes/origin/REL1_25
  remotes/origin/master
  remotes/origin/wmf/1.26wmf1
  remotes/origin/wmf/1.26wmf10
  remotes/origin/wmf/1.26wmf11
  remotes/origin/wmf/1.26wmf12
  remotes/origin/wmf/1.26wmf13
  remotes/origin/wmf/1.26wmf14
  remotes/origin/wmf/1.26wmf2
  remotes/origin/wmf/1.26wmf3
  remotes/origin/wmf/1.26wmf4
  remotes/origin/wmf/1.26wmf5
  remotes/origin/wmf/1.26wmf6
  remotes/origin/wmf/1.26wmf7
  remotes/origin/wmf/1.26wmf8
  remotes/origin/wmf/1.26wmf9

BTW, git branch currently reports only one branch: master.

Not here.

$:andre\> git clone https://git.wikimedia.org/git/mediawiki/extensions/SyntaxHighlight_GeSHi.git 
$:andre\> git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/REL1_19
  remotes/origin/REL1_20
  remotes/origin/REL1_21
  remotes/origin/REL1_22
  remotes/origin/REL1_23
  remotes/origin/REL1_24
  remotes/origin/REL1_25
  remotes/origin/master
  remotes/origin/wmf/1.26wmf1
  remotes/origin/wmf/1.26wmf10
  remotes/origin/wmf/1.26wmf11
  remotes/origin/wmf/1.26wmf12
  remotes/origin/wmf/1.26wmf13
  remotes/origin/wmf/1.26wmf14
  remotes/origin/wmf/1.26wmf2
  remotes/origin/wmf/1.26wmf3
  remotes/origin/wmf/1.26wmf4
  remotes/origin/wmf/1.26wmf5
  remotes/origin/wmf/1.26wmf6
  remotes/origin/wmf/1.26wmf7
  remotes/origin/wmf/1.26wmf8
  remotes/origin/wmf/1.26wmf9

Change 224778 merged by jenkins-bot:
Use $parser->mUniqPrefix instead of $parser::MARKER_PREFIX for MW 1.25 compatibility

https://gerrit.wikimedia.org/r/224778

TheDJ closed this task as Resolved.Jul 21 2015, 9:14 AM
TheDJ removed a project: Patch-For-Review.
TheDJ added a subscriber: TheDJ.