Module:UtilsMarkup

-- Source for gsplit, split, and trim: https://phabricator.wikimedia.org/diffusion/ELUA/browse/master/includes/engines/LuaCommon/lualib/mw.text.lua local p = {}

local utilsDPL = require("Module:UtilsDPL")

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'):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 link:find('http') then return p.externalLink(link, text) elseif backlink == false then local pageExists = utilsDPL.pageExists(link) local url = tostring(mw.uri.fullUrl(link, { action = not pageExists and "edit" or nil, redlink = not pageExists and "1" or nil }))		local externalLink = p.externalLink(url, text or link) local formattedLink = p.format(externalLink, {			class = pageExists and "plainlinks" or "plainlinks new"		}) return formattedLink 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("%s", result) end if args.italic then result = string.format("%s", result) end if args.fontSize then result = string.format(' %s ', 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 if args.class then result = string.format(' %s ', args.class, result) end return result end

return p