Leaguepedia | League of Legends Esports Wiki
[checked revision][checked revision]
(- table dependency (via Mediawiker ST3))
([ST])
(9 intermediate revisions by the same user not shown)
Line 4: Line 4:
   
 
function p.gsplit( text, pattern, plain )
 
function p.gsplit( text, pattern, plain )
if not pattern then pattern = '%s*,%s*' end
+
if not pattern then pattern = ',' end
 
if not plain then
  +
pattern = '%s*' .. pattern .. '%s*'
 
end
 
local s, l = 1, text:len()
 
local s, l = 1, text:len()
 
return function ()
 
return function ()
Line 54: Line 57:
 
return ret
 
return ret
 
end
 
end
  +
  +
function p.splitIfString(str, sep, plain)
  +
if type(str) == 'table' then
 
return str
 
end
  +
return p.split(str, sep, plain)
 
end
  +
   
 
function p.trim( s, charset )
 
function p.trim( s, charset )
Line 72: Line 83:
   
 
function p.escapeCustom(link, tbl)
 
function p.escapeCustom(link, tbl)
for k, v in pairs(tbl) do
+
for _, row in pairs(tbl) do
link = link:gsub(k, v)
+
link = link:gsub(row.find, row.replace)
 
end
 
end
 
return link
 
return link
Line 96: Line 107:
 
end
 
end
 
return ('[[%s|%s]]'):format(link or text, text or 'Link')
 
return ('[[%s|%s]]'):format(link or text, text or 'Link')
  +
end
  +
  +
function p.fileLink(file, target)
 
if file == '' then file = nil end
 
if not file then return nil end
  +
file = file:gsub('File:', '')
  +
return ('[[File:%s|link=%s]]'):format(file, target)
 
end
 
end
   
 
function p.link(link, text)
 
function p.link(link, text)
  +
if not link then return p.intLink(link, text) end
 
if link:find('http') then
 
if link:find('http') then
 
return p.extLink(link, text)
 
return p.extLink(link, text)
 
else
 
else
 
return p.intLink(link, text)
 
return p.intLink(link, text)
  +
end
  +
end
  +
  +
function p.ambiguousLink(link, text)
  +
if not link then return p.intLink(link, text) end
  +
if link:find('http') then
  +
return p.extLink(link, text)
  +
else
  +
return ('<span class="external">%s</span>'):format(p.intLink(link, text))
 
end
 
end
 
end
 
end
Line 141: Line 169:
 
end
 
end
   
function p.possessive(str)
+
function p.possessive(str, literal)
if str:find('s$') then
+
if (literal or str):find('s$') then
 
return str .. "'"
 
return str .. "'"
 
end
 
end
 
return str .. "'s"
 
return str .. "'s"
end
 
 
function p.makeReplacements(sentence, replacements)
 
if not sentence then return nil end
 
if not replacements then replacements = {} end
 
local old = sentence
 
for k, v in pairs(replacements) do
 
sentence = sentence:gsub('%$' .. k .. '%$', v or 'unknown')
 
end
 
if sentence == old then
 
return sentence
 
end
 
return p.makeReplacements(sentence, replacements)
 
 
end
 
end
   

Revision as of 19:02, 16 June 2020

Edit the documentation or categories for this module.


-- 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 = ',' end
	if not plain then
		pattern = '%s*' .. pattern .. '%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.splitNonempty(text, pattern, plain)
	if text == '' then
		return {}
	end
	return p.split(text, pattern, plain)
end

function p.splitOrNil(text, pattern, plain)
	if text == '' or not text then
		return nil
	end
	return p.split(text, pattern, plain)
end

function p.split(text, pattern, plain)
	if not text then
		return {}
	end
	local ret = {}
	for m in p.gsplit(text, pattern, plain) do
		ret[#ret+1] = m
	end
	return ret
end

function p.splitIfString(str, sep, plain)
	if type(str) == 'table' then
		return str
	end
	return p.split(str, sep, plain)
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.escapeCustom(link, tbl)
	for _, row in pairs(tbl) do
		link = link:gsub(row.find, row.replace)
	end
	return link
end

function p.nextLetter(char)
	return string.char(char:byte() + 1)
end

function p.extLink(link, text)
	if link == '' then link = nil end
	if not link then
		return
	end
	return ('[%s %s]'):format(link, text or 'Link')
end

function p.intLink(link, text)
	if link == '' then link = nil end
	if not link and not text then
		return
	end
	return ('[[%s|%s]]'):format(link or text, text or 'Link')
end

function p.fileLink(file, target)
	if file == '' then file = nil end
	if not file then return nil end
	file = file:gsub('File:', '')
	return ('[[File:%s|link=%s]]'):format(file, target)
end

function p.link(link, text)
	if not link then return p.intLink(link, text) end
	if link:find('http') then
		return p.extLink(link, text)
	else
		return p.intLink(link, text)
	end
end

function p.ambiguousLink(link, text)
	if not link then return p.intLink(link, text) end
	if link:find('http') then
		return p.extLink(link, text)
	else
		return ('<span class="external">%s</span>'):format(p.intLink(link, text))
	end
end

function p.extLinkOrText(link, text)
	if link == '' then link = nil end
	if not link then return text end
	return ('[%s %s]'):format(link, text or link)
end

function p.intLinkOrText(link, text)
	if link == '' then link = nil end
	if not link then return text end
	return ('[[%s|%s]]'):format(link, text or link)
end

function p.linkOrText(link, text)
	if link:find('http') then
		return p.extLinkOrText(link, text)
	else
		return p.intLinkOrText(link, text)
	end
end

function p.ucFirstOnly(str)
	if not str then return end
	return mw.getLanguage('en'):ucfirst(str:lower())
end

function p.ucfirst(str)
	if not str then return end
	return  mw.getLanguage('en'):ucfirst(str)
end

function p.lcfirst(str)
	if not str then return end
	return mw.getLanguage('en'):lcfirst(str)
end

function p.possessive(str, literal)
	if (literal or str):find('s$') then
		return str .. "'"
	end
	return str .. "'s"
end

return p