Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Nardog/4
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local find = mw.ustring.find local gmatch = mw.ustring.gmatch local gsub = mw.ustring.gsub local sub = mw.ustring.sub local trim = mw.text.trim local function multiFind(s, t) local i, j = find(s, t[1]) for n = 2, #t do local i2, j2 = find(s, t[n]) if i2 and (not i or i2 < i) then i, j = i2, j2 end end return i, j end local function wrapSpaces(s) return gsub(s, '(%s+)', '<span class="wrap">%1</span>') end local function escAndRep(s) local patterns = { '%[%[[^%]|]-%s[^%]|]-|', -- Piped links '</?[A-Za-z][^>]-%s[^>]->' -- HTML tags } s = gsub(s, '%[%[([^%]|]-%s[^%]|]-)%]%]', '[[%1|%1]]') -- Pipe unpiped links local i, j = multiFind(s, patterns) if i then -- Match found local remaining, escaped = {}, {} repeat table.insert(remaining, sub(s, 1, i - 1)) -- What precedes the match table.insert(escaped, sub(s, i, j)) -- The match s = sub(s, j + 1) -- Truncate i, j = multiFind(s, patterns) until not i table.insert(remaining, s) -- What follows the last match s = {} for k, v in ipairs(remaining) do v = wrapSpaces(v) table.insert(s, v) table.insert(s, escaped[k]) end s = table.concat(s) else s = wrapSpaces(s) end return s end function p._main(s, wrap, tooltip, class) local span = mw.html.create('span') :attr('lang', 'und-Latn-fonipa') :addClass('IPA') :addClass(class) -- wrap=all: Do nothing -- wrap=none: Never break -- Otherwise: Break at spaces only if wrap ~= 'all' then span:addClass('nowrap') if wrap ~= 'none' then s = escAndRep(s) end end if tooltip ~= '' then -- tooltip is added unless blank span:attr('title', tooltip or 'Representation in the International Phonetic Alphabet (IPA)') end return tostring(span:wikitext(s)) end function p.main(frame) -- local args = frame:getParent().args local args = frame.args[1] and frame.args or frame:getParent().args local s = args[1] and trim(args[1]) or '' return s == '' and '' or p._main(s, args.wrap, args.tooltip, args.class) end function p._lang(args) local ret = { p._main(args[1], args.wrap, args.tooltip, args.class) } local cats = {} -- Label do local label = args.label local lang = args.lang and args.lang ~= '' and args.lang local defaultlabel = args.defaultlabel and args.defaultlabel ~= '' and args.defaultlabel or lang and lang .. ' pronunciation:' if not label then local labelcode = args.labelcode and args.labelcode:lower() if labelcode then local function returnLabel() if labelcode == '' then return '' end for k, v in pairs{ ['ipa'] = '[[International Phonetic Alphabet|IPA]]:', ['pron'] = 'pronounced', ['also'] = 'also', ['local'] = 'locally', ['localpron'] = 'local pronunciation:' } do if labelcode == k then return v end end if labelcode == 'lang' then return lang and lang .. ':' end if args.dialects and args.dialects ~= '' then for s in gmatch(args.dialects, '([^=]+=[^;]+);?') do local t = mw.text.split(s, '[;=]') for i = 1, #t - 1 do if labelcode == t[i] then return t[#t] .. ' pronunciation:' end if labelcode == 'lang' .. t[i] then return t[#t] .. ':' end end end end -- For calls from modules return args.labels and args.labels[labelcode] end label = returnLabel() end end label = label or defaultlabel if label and label ~= '' then if args.small ~= 'no' then -- Defaults to true label = '<span style="font-size:85%">' .. label .. '</span>' end table.insert(ret, 1, label .. ' ') end end -- Audio if args.audio and args.audio ~= '' then local audio = mw.getCurrentFrame():expandTemplate{ title = 'Template:Audio', args = { args.audio, 'listen', help = 'no' } } table.insert(ret, ' <span class="nowrap" style="font-size:85%">(' .. audio .. ')</span>') if args.audiocat ~= '' then -- audiocat is added unless blank table.insert(cats, args.audiocat or 'Pages including recorded pronunciations') end end -- Categories if args.category and args.category ~= '' then table.insert(cats, args.category) end if cats[1] then local ns = mw.title.getCurrentTitle().namespace if ns % 2 == 0 and ns ~= 2 then -- Non-talk and non-user for _, v in ipairs(cats) do table.insert(ret, '[[Category:' .. v .. ']]') end end end return table.concat(ret) end function p.lang(frame) local args = frame.args local parentArgs = frame:getParent().args for k, v in pairs(parentArgs) do if type(k) == 'string' then args[k] = v end end args[1] = args[1] and trim(args[1]) or '' return args[1] == '' and '' or p._lang(args) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/Nardog/4/doc
(
edit
)