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