27.175
Bearbeitungen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
| Zeile 136: | Zeile 136: | ||
t = t .. "__NOEDITSECTION__" | t = t .. "__NOEDITSECTION__" | ||
return t | return t | ||
end | |||
function p.attrListParser(attr_list, recursion) | |||
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 -- schlägt an auch bei Syntaxfehler | |||
mw.log(loop_count) | |||
local semicolon = string.find(attr_list, ";") | |||
local brace_open = string.find(attr_list, "\{") | |||
local brace_close = string.find(attr_list, "\}") | |||
if brace_open ~= brace_close or -- Klammer nicht paarweise oder | |||
(brace_open or 0) >= (brace_close or 1) then -- in falscher Reihenfolge | |||
attr_list = "" | |||
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 | |||
local attr_sublist = -- Klammerinhalt | |||
string.sub(attr_list, brace_open + 1, brace_close - 1) | |||
attr_sublist = p.attrListParser(attr_sublist, true) -- sich selbst aufrufen | |||
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 | |||
mw.logObject(attr_list_parsed, "attr_list_parsed") | |||
return attr_list_parsed | |||
end | end | ||
return p | return p | ||