Modul:Formular/Work: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
 
Zeile 136: Zeile 136:
t = t .. "__NOEDITSECTION__"
t = t .. "__NOEDITSECTION__"
return t
return t
end
function p.attrListParser(attr_list, recursion)
-- Kommandozeile zum Debuggen:
-- mw.logObject(p.attrListParser(";A;{;B;C;};D;"))
local attr_list_parsed = {}
local loop_count = 0
attr_list = str.strip(attr_list or "")
while loop_count < 100 and attr_list ~= "" do -- Schleifenbegrenzung
loop_count = loop_count + 1
local semicolon = string.find(attr_list, ";")
local brace_open = string.find(attr_list, "\{")
local brace_close = string.find(attr_list, "\}")
if (brace_open ~= nil and brace_close == nil) or -- Klammer nicht paarweise
(brace_open == nil and brace_close ~= nil) or -- oder
(brace_open or 0) >= (brace_close or 1) then -- in falscher Reihenfolge
attr_list = "" -- => Abbruch
elseif semicolon == nil and -- letzer Eintrag
brace_open == nil and brace_close == nil then
table.insert(attr_list_parsed, attr_list)
attr_list = ""
elseif semicolon ~= nil and -- Semikolon
(brace_open == nil or semicolon < brace_open) then -- ggf. vor öffnender Klammer
local attr = str.strip(string.sub(attr_list, 1, semicolon - 1))
if attr ~= "" then
table.insert(attr_list_parsed, attr)
end
attr_list = string.sub(attr_list, semicolon + 1)
elseif brace_open ~= nil and brace_close ~= nil and -- eingebettete Klammerung
brace_open < brace_close then
if not recursion then -- Rekursionsschutz, nur 2 Ebenen bzw. 1 Selbstaufruf
local attr_sublist = -- Klammerinhalt
string.sub(attr_list, brace_open + 1, brace_close - 1)
attr_sublist = p.attrListParser(attr_sublist, true) -- sich selbst aufrufen mit recursion = true
if #attr_sublist > 0 then
table.insert(attr_list_parsed, attr_sublist)
end
end
attr_list = string.sub(attr_list, brace_close + 1)
else -- da stimmt was nicht => Abbruch
attr_list = ""
end
attr_list = str.strip(attr_list)
end
return attr_list_parsed
end
end


return p
return p