[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 = ' |
+ | 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