[checked revision] | [checked revision] |
m (Protected "Module:TextUtil": Syncing content across wikis, if something seems broken as a result let me know ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))) |
m (Syncing content across wikis) |
||
Line 1: | Line 1: | ||
-- Source for gsplit, split, and trim: https://phabricator.wikimedia.org/diffusion/ELUA/browse/master/includes/engines/LuaCommon/lualib/mw.text.lua |
-- Source for gsplit, split, and trim: https://phabricator.wikimedia.org/diffusion/ELUA/browse/master/includes/engines/LuaCommon/lualib/mw.text.lua |
||
+ | |||
local p = {} |
local p = {} |
||
function p.gsplit( text, pattern, plain ) |
function p.gsplit( text, pattern, plain ) |
||
+ | if not pattern then pattern = '%s*,%s*' end |
||
local s, l = 1, text:len() |
local s, l = 1, text:len() |
||
return function () |
return function () |
||
Line 56: | Line 58: | ||
end |
end |
||
− | function p. |
+ | function p.extLink(link, text) |
+ | if not link then |
||
− | local chr = tostring(N):sub(-1) |
||
+ | return |
||
− | local lookup = { ['1'] = 'st', ['2'] = 'nd', ['3'] = 'rd' } |
||
+ | end |
||
− | return N .. (lookup[chr] or 'th') |
||
+ | return ('[%s %s]'):format(link, text or 'Link') |
||
+ | end |
||
+ | |||
+ | function p.intLink(link, text) |
||
+ | if not link and not text then |
||
+ | return |
||
+ | end |
||
+ | return ('[[%s|%s]]'):format(link or text, text or 'Link') |
||
+ | end |
||
+ | |||
+ | function p.link(link, text) |
||
+ | if link:find('http') then |
||
+ | return p.extLink(link, text) |
||
+ | else |
||
+ | return p.intLink(link, text) |
||
+ | end |
||
+ | end |
||
+ | |||
+ | function p.extLinkOrText(link, text) |
||
+ | if not link then return text end |
||
+ | return ('[%s %s]'):format(link, text or link) |
||
+ | end |
||
+ | |||
+ | function p.intLinkOrText(link, text) |
||
+ | 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 |
end |
||
Revision as of 04:51, 16 April 2019
To edit the documentation or categories for this module, click here.
-- 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.extLink(link, text)
if not link then
return
end
return ('[%s %s]'):format(link, text or 'Link')
end
function p.intLink(link, text)
if not link and not text then
return
end
return ('[[%s|%s]]'):format(link or text, text or 'Link')
end
function p.link(link, text)
if link:find('http') then
return p.extLink(link, text)
else
return p.intLink(link, text)
end
end
function p.extLinkOrText(link, text)
if not link then return text end
return ('[%s %s]'):format(link, text or link)
end
function p.intLinkOrText(link, text)
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
return p