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;