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 blocks[^1]code 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 = {}
.formatCode = function(frame)
plocal code, tag, is_code_page = frame.args[1], frame.args[2], frame.args[3]
local formattedCode = frame.args[4]
= formattedCode:gsub('[QP][0-9]+', function(m)
formattedCode local a = mw.html.create('a')
:attr('href', 'https://www.wikidata.org/entity/' .. m)
a:wikitext(m)
areturn tostring(a)
end)
return formattedCode;
end
.additionalOutput = function(frame)
plocal 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
).
[^1]: While this can also be achieved just via MediaWiki templates, this bears the problem that |
has to be escaped as {{!}}
, which can be quite annoying for languages like SPARQL that use |
as an operator.