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 44: Zeile 44:
row={}
row={}
level=1
level=1
end
elseif (v.t=='SO')and(v.a=='class="smw-field"') then
if (v.t=='SO')and(v.a=='class="smw-field"') then
valg={}
valg={}
level=2
level=2
end
elseif (v.t=='SO')and(v.a=='class="smw-value"') then
if (v.t=='SO')and(v.a=='class="smw-value"') then
val=''
val=''
level=3
level=3
Zeile 59: Zeile 57:
table.insert(valg,val)
table.insert(valg,val)
level=2
level=2
end
elseif (v.t=='SC')and(level==2) then
if (v.t=='SC')and(level==2) then
table.insert(row,valg)
table.insert(row,valg)
level=1
level=1
end
elseif (v.t=='SC')and(level==1) then
if (v.t=='SC')and(level==1) then
table.insert(rows,row)
table.insert(rows,row)
level=0
level=0

Version vom 19. Mai 2021, 08:38 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

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