Module:UtilsMarkup

From Zelda Wiki, the Zelda encyclopedia
Revision as of 00:44, 8 March 2020 by PhantomCaleb (talk | contribs)
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