Modul:Hilfsfunktionen
Zur Navigation springen
Zur Suche springen
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
-- Parsing einer XML-Antwort von SMW
function parse(xml)
--Lexer
local lex={}
for l1,l2,l3 in mw.ustring.gmatch(xml,'<([/]?)span([^>]*)>([^<]*)') do
if l1=='' then
table.insert(lex,{t='SO',a=robusttrim(l2)})
else
table.insert(lex,{t='SC',a=''})
end
if l3~='' then
table.insert(lex,{t='TX',a=robusttrim(l3)})
end
end
--Parser
local rows={}
local row={}
local valg={}
local val=''
local level=0
for k,v in pairs(lex) do
if (v.t=='SO')and(v.a=='class="smw-row"') then
row={}
level=1
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
return rows
end
--Ausgabe einer dreifach geschachtelten Tabelle
function debugLog(rows)
local result=""
for k1,v1 in pairs(rows) do
result=result.."\n "..k1..":("
for k2,v2 in pairs(v1) do
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
return result
end