Module:Uniftext/sandbox
Lua
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules
Version for Tests
Code
local p = {}
-- unify text as <text systemLanguage="de">Okt</text>
function p.uniftext (frame)
-- local ppar = mw.getCurrentFrame(): getParent().args;
-- local lpar = parm -- local parms
local gpar = frame.args -- global parms
local ltab = {};
local xtab = {};
local outt = {};
local long = "";
local lang = "";
local text = "";
local indx = 0;
local maxx = 0;
local j = 0;
--
-- ① make one long string
-- long = gpar[1]
for i, v in ipairs(gpar) do
if i == 1 then
long = v
else
long = long .. "§" .. v -- replace pipe (if any) by §
end
end
-- ② make some replacements
long = mw.ustring.gsub( long, "g trans", "switch trans" )
long = mw.ustring.gsub( long, "<switch>", "" )
long = mw.ustring.gsub( long, "\</g>", "" )
-- ③ build the first tables
-- for i, v in ipairs(mw.text.split(long , "systemLanguage") ) do
for _, v in ipairs(mw.text.split(long , "\n" ) ) do
v = mw.text.trim( v )
if mw.ustring.sub( v, 1, 6 ) ~= "<text>" then
v = mw.ustring.gsub( v, "</text>", "" )
end
v = mw.ustring.gsub( v, '<text systemLanguage="', "" ) -- depends on written like that !
-- -- remaining: ll">xxxxx
if v ~= nil and v ~= "" then
local part = {};
if mw.ustring.sub( v, 1, 6 ) == "<text>"
or mw.ustring.sub( v, 1, 6 ) == "<switc" then
part[1] = v;
part[2] = nil;
else
part= mw.text.split( v , '">' ); -- part[1] > nil
end
maxx = maxx + 1
if part[2] ~= nil and mw.ustring.sub( part[2], 1, 6 ) == "<tspan" then
part[2] = part[2] .. '">' .. part[3] -- part[3] > nil
end
ltab[maxx] = mw.text.trim(part [1])
if mw.ustring.sub( part[1], 1, 6 ) == "<switc"
or mw.ustring.sub( part[1], 1, 6 ) == "</swit"
or mw.ustring.sub( part[1], 1, 6 ) == "<text>" then
ltab[maxx] = " " .. ltab[maxx]
xtab[maxx] = "←"
else
xtab[maxx] = part [2]
end
end
end
-- ④ build the output table
for i, v in ipairs(ltab) do
if v ~= "-" then
lang = v -- = ltab[i]
j =i + 1
text = xtab [i] -- or ""
if text ~= nil and text ~= "←"
and mw.ustring.match( lang, ' x="' ) == nil then
for indx = j, maxx do
if xtab [indx] == text
and mw.ustring.match( ltab [indx], ' x="' ) == nil then
lang = lang .. ", " .. ltab [indx]
ltab [indx] = "-"
end
end
end
-- ⑤ complete with '<text systemLanguage="' etc.
if text ~= nil and text ~= "←" then
long = ' <text systemLanguage="' .. lang .. '">' .. text .. "</text>"
else
long = lang -- <switch ...
end
table.insert(outt, frame:expandTemplate{ title = "=", args = { long .. "\n" } });
end
end
-- ⑥ [final work and] return ⑦ ⑧ ⑨
return table.concat (outt);
end -- function uniftext
return p;