Modul:Hilfsfunktionen: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
Zeile 20: Zeile 20:
end
end


-- Parsing einer XML-Antwort von SMW
-- Ausgabe einer belieibig geschachtelten Tabelle oder Variable
function parse(xml)
-- i muss wegen Rekursion auf "" gesetzt werden
--Lexer
function dump(o,i)
local lex={}
if type(o)=='table' then
for l1,l2,l3 in mw.ustring.gmatch(xml,'<([/]?)span([^>]*)>([^<]*)') do
local tkeys=getSortKeys(o)
if l1=='' then
local s='\n'..i..'{ '
table.insert(lex,{t='SO',a=robusttrim(l2)})
for _,k in ipairs(tkeys) do
else
s=s..'\n'..i..'['..k..']='..dump(o[k],i.."  ")..','
table.insert(lex,{t='SC',a=''})
end
if l3~='' then
table.insert(lex,{t='TX',a=robusttrim(l3)})
end
end
return s..'\n'..i..'}'
else
return tostring(o)
end
end
--Parser
end
local rows={}
 
local row={}
-- Umwandlung eines Parameters in eine Tabelle, bei nil leer
local valg={}
function noniltable(s)
local val=''
if s==nil then
local level=0
return {}
for k,v in pairs(lex) do
elseif type(s)=="table" then
if (v.t=='SO')and(v.a=='class="smw-row"') then
return s
row={}
else
level=1
return {s}
elseif (v.t=='SO')and(v.a=='class="smw-field"') then
valg={}
level=2
elseif (v.t=='SO')and(v.a=='class="smw-value"') then
val=''
level=3
end
if (v.t=='TX')and(level==3) then
val=v.a
end
if (v.t=='SC')and(level==3) then
table.insert(valg,val)
level=2
elseif (v.t=='SC')and(level==2) then
table.insert(row,valg)
level=1
elseif (v.t=='SC')and(level==1) then
table.insert(rows,row)
level=0
end
end
end
return rows
end
end


--Ausgabe einer dreifach geschachtelten Tabelle
-- Umwandlung eines Parameters in einen String, bei nil leer
function debugLog(rows)
function nonilstring(s)
local result=""
if s==nil then
for k1,v1 in pairs(rows) do
return ""
result=result.."\n "..k1..":("
else
for k2,v2 in pairs(v1) do
return s
result=result.."\n  "..k2..":("
for k3,v3 in pairs(v2) do
result=result.."\n  "..k3..":"..v3..", "
end
result=result.."\n  ),"
end
result=result.."\n ),"
end
end
return result
end
end

Version vom 29. Dezember 2021, 21:39 Uhr

Dokumentation und Testfälle unter Modul:Hilfsfunktionen/Doku.
-- Macht einen Trim in Kombination mit dem Entfernen der SMW-Tags
function robusttrim(s)
	if s==nil then return '' end
	local p=mw.ustring.gsub(s,'%[%[SMW::on%]%]','')
	p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','')
	return mw.text.trim(p)
end

-- Splittet einen String in einen Array anhand eines Separators
function split(inputstr,sep)
	if sep==nil then sep="%s" end
	local t={}
	local i=1
	for str in mw.ustring.gmatch(inputstr,"([^"..sep.."]+)") do
		t[i]=str
		i=i+1
	end
	if i==1 then t[1]=inputstr end
	return t
end

-- Ausgabe einer belieibig geschachtelten Tabelle oder Variable
-- i muss wegen Rekursion auf "" gesetzt werden
function dump(o,i)
	if type(o)=='table' then
		local tkeys=getSortKeys(o)
		local s='\n'..i..'{ '
		for _,k in ipairs(tkeys) do
			s=s..'\n'..i..'['..k..']='..dump(o[k],i.."   ")..','
		end
		return s..'\n'..i..'}'
	else
		return tostring(o)
	end
end

-- Umwandlung eines Parameters in eine Tabelle, bei nil leer
function noniltable(s)
	if s==nil then
		return {}
	elseif type(s)=="table" then
		return s
	else
		return {s}
	end
end

-- Umwandlung eines Parameters in einen String, bei nil leer
function nonilstring(s)
	if s==nil then
		return ""
	else
		return s
	end
end