Extension:Code
A MediaWiki extension that builds on SyntaxHighlight to provide the following (all in a configurable manner):
shorter tags
e.g.<query>
instead of<syntaxhighlight lang=sparql>
code actions
e.g. automatically link the WDQS for SPARQL code blocks1code pages
e.g. automatically higlight pages with names ending in.rq
as SPARQL (and also display the code actions for them)customizable code display via Lua/Scribunto
e.g. automatically link Wikidata identifiers in code blocks
Example configuration
$wgCode_namespacesWithCodePages[NS_MAIN] = true;
$wgCode_languages[] = [
'tag' => 'query',
'pygmentsLexer' => 'sparql',
'actions' => [
'run' => 'https://query.wikidata.org/#$code',
'embed' => 'https://query.wikidata.org/embed.html#$code',
],
'suffix' => '.rq',
];
Customizable code display
The display of code blocks can be customized via Lua/Scribunto. For example
if you specify e.g. "scribuntoModule" => "QueryCode"
for a language then this
extension will additionally invoke the Module:QueryCode
Scribunto module for
every code tag and code page. Such a module could look as follows:
local p = {}
p.formatCode = function(frame)
local code, tag, is_code_page = frame.args[1], frame.args[2], frame.args[3]
local formattedCode = frame.args[4]
formattedCode = formattedCode:gsub('[QP][0-9]+', function(m)
local a = mw.html.create('a')
a:attr('href', 'https://www.wikidata.org/entity/' .. m)
a:wikitext(m)
return tostring(a)
end)
return formattedCode;
end
p.additionalOutput = function(frame)
local code, tag, is_code_page = frame.args[1], frame.args[2], frame.args[3]
-- HTML returned here is displayed after the code action links
end
return p
Note that the returned strings are not parsed as Wikitext they must already be
HTML; any dangerous tags and attributes are removed via MediaWiki’s builtin
Sanitizer
class.
Linking code actions
Code actions can be linked from other pages via the
Special:CodeAction
special page, e.g. Special:CodeAction/run/Example.rq
attempts to execute the run
action for the Example.rq
code page
and redirect the user accordingly.
Installation
- Place the extension in your extensions directory.
- Add
wfLoadExtension('Code');
to yourLocalSettings.php
. - Visit
Special:CodeAction
it will tell you what other configuration you need.
(If you want syntax highlighting via SyntaxHighlight, additionally add
wfLoadExtension('SyntaxHighlight_GeSHi');
to your LocalSettings.php
).
this bears the problem that |
has to be escaped as {{!}}
, which can
be quite annoying for languages like SPARQL that use |
as an operator.
-
While this can also be achieved just via MediaWiki templates, ↩