Module:UtilsMarkup
Jump to navigation
Jump to search
This module is for producing wikitext. See also Module:UtilsLayout.
Lua error in Module:Documentation/Module at line 45: attempt to call field 'categories' (a nil value).
-- Source for gsplit, split, and trim: https://phabricator.wikimedia.org/diffusion/ELUA/browse/master/includes/engines/LuaCommon/lualib/mw.text.lua
local p = {}
function p.gsplit( text, pattern, plain )
if not pattern then pattern = '%s*,%s*' end
local s, l = 1, text:len()
return function ()
if s then
local e, n = text:find( pattern, s, plain )
local ret
if not e then
ret = text:sub( s )
s = nil
elseif n < e then
-- Empty separator!
ret = text:sub( s, e )
if e < l then
s = e + 1
else
s = nil
end
else
ret = e > s and text:sub( s, e - 1 ) or ''
s = n + 1
end
return ret
end
end, nil, nil
end
function p.split( text, pattern, plain )
local ret = {}
for m in p.gsplit( text, pattern, plain ) do
ret[#ret+1] = m
end
return ret
end
function p.trim( s, charset )
charset = charset or '\t\r\n\f '
s = s:gsub( '^[' .. charset .. ']*(.-)[' .. charset .. ']*$', '%1' )
return s
end
function p.escape(link)
link = link or ''
-- because of gsub not letting you have - unescaped
link = string.gsub(link,'%-','%%%-')
link = string.gsub(link,'%(','%%%(')
link = string.gsub(link,'%)','%%%)')
link = string.gsub(link,'%+','%%%+')
return link
end
function p.nextLetter(char)
return string.char(char:byte() + 1)
end
function p.externalLink(page, display)
if not page then
return ""
end
if not display then
return page
end
return ('[%s %s]'):format(page, display)
end
function p.internalLink(page, display)
if not page then
return ""
end
if not display then
return ("[[%s]]"):format(page)
end
return ('[[%s|%s]]'):format(page, display)
end
-- If backlink == false then this print an external link that looks like an internal one
-- (useful for creating links that do not appear in Special:WhatLinksHere)
function p.link(link, text, backlink)
if backlink == false then
local encodedUrl = mw.getCurrentFrame():preprocess("https://{{SERVERNAME}}/{{urlencode:"..link.."|WIKI}}")
return string.format('<span class="plainlinks">[%s %s]</span>', encodedUrl, text or '')
end
if link:find('http') then
return p.externalLink(link, text)
else
return p.internalLink(link, text)
end
end
function p.format(text, args)
if not args then
return text
end
local frame = mw.getCurrentFrame()
local result = text
if args.bold then
result = string.format("<b>%s</b>", result)
end
if args.italic then
result = string.format("<i>%s</i>", result)
end
if args.fontSize then
result = string.format('<span style="font-size: %s">%s</span>', fontSize, result)
end
if args.pre then
result = frame:extensionTag("pre", text)
end
if args.code then
result = frame:extensionTag("code", text)
end
if args.nowiki then
result = frame:extensionTag("nowiki", text)
end
if args.syntaxHighlight then
result = frame:extensionTag("syntaxhighlight", text, {
lang = args.syntaxHighlight
})
end
return result
end
return p