Leaguepedia | League of Legends Esports Wiki
Register
[checked revision][checked revision]
((via Mediawiker ST3))
([ST])
(22 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 33: Line 36:
 
if text == '' then
 
if text == '' then
 
return {}
 
return {}
  +
end
  +
return p.split(text, pattern, plain)
  +
end
  +
  +
function p.splitOrNil(text, pattern, plain)
  +
if text == '' or not text then
  +
return nil
 
end
 
end
 
return p.split(text, pattern, plain)
 
return p.split(text, pattern, plain)
Line 47: 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 61: Line 79:
 
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
 
return link
 
end
 
end
Line 82: 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 113: Line 155:
   
 
function p.ucFirstOnly(str)
 
function p.ucFirstOnly(str)
  +
if not str then return end
 
return mw.getLanguage('en'):ucfirst(str:lower())
 
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
 
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