Module:Sandbox/Nardog/4 Explained

local p =

local find = mw.ustring.findlocal gmatch = mw.ustring.gmatchlocal gsub = mw.ustring.gsublocal sub = mw.ustring.sublocal 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, jend

local function wrapSpaces(s) return gsub(s, '(%s+)', '

%1')end

local function escAndRep(s) local patterns = s = gsub(s, '%[%[([^%]|]-%s[^%]|]-)%]%]', '%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 send

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

' .. label .. '' end table.insert(ret, 1, label .. ' ') end end -- Audio if args.audio and args.audio ~= then local audio = mw.getCurrentFrame:expandTemplate table.insert(ret, ' (' .. audio .. ')') 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, '') 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