Modul:Switch by pattern: razlika između inačica
Prijeđi na navigaciju
Prijeđi na pretraživanje
preuzeto s hr.wikipedije |
mNema sažetka uređivanja |
||
| Redak 1: | Redak 1: | ||
local p = {} | local p = {} | ||
function p._found_in(args) | function p._found_in(args) | ||
local skip_args = "#_input#_respectcase#_returncaptures#_returnall#_sep#_outputsep#_default#" | local skip_args = "#_input#_respectcase#_returncaptures#_returnall#_sep#_outputsep#_default#" | ||
local res = {} | local res = {} | ||
local all = args["_returnall"] and args["_returnall"]~="" | local all = args["_returnall"] and args["_returnall"] ~= "" | ||
local returnkeys = not(args["_returncaptures"] and args["_returncaptures"]~="") | local returnkeys = not (args["_returncaptures"] and args["_returncaptures"] ~= "") | ||
local sep = args["_sep"]~="" and args["_sep"] or "#" | local sep = (args["_sep"] and args["_sep"] ~= "") and args["_sep"] or "#" | ||
local outputsep = args["_outputsep"] or "#" | local outputsep = args["_outputsep"] or "#" | ||
local lowercase = not (args["_respectcase"] and args["_respectcase"]~="" | local lowercase = not (args["_respectcase"] and args["_respectcase"] ~= "") | ||
local input = args["_input"] or "" | local input = args["_input"] or "" | ||
if input == "" then return "" end | |||
if input == "" then return args["_default"] or "" end | |||
if lowercase then input = mw.ustring.lower(input) end | if lowercase then input = mw.ustring.lower(input) end | ||
for k,v in pairs(args) do | |||
for k, v in pairs(args) do | |||
if not mw.ustring.match(skip_args, "#" .. tostring(k) .. "#") then | |||
local aliases = mw.text.split(v, sep, true) | |||
for _, a in ipairs(aliases) do | |||
if a ~= "" then | |||
local match = mw.ustring.match(input, a) | |||
if match then | |||
local key_or_capture = returnkeys and k or match | |||
if not all then return key_or_capture end | |||
table.insert(res, key_or_capture) | |||
break | |||
end | |||
end | |||
end | |||
end | |||
end | end | ||
if #res > 0 then return table.concat(res, outputsep) end | |||
return args["_default"] or "" | |||
end | end | ||
function p.found_in(frame) | function p.found_in(frame) | ||
-- Kreiramo novu tablicu 'args' i kopiramo vrijednosti | |||
local args = {} | |||
local parent = frame:getParent() | |||
local f_args = frame.args | |||
local p_args = parent and parent.args or {} | |||
-- Logika: prioritet imaju argumenti roditelja (ako postoji _input) | |||
-- Inače koristimo argumente samog poziva modula | |||
local source = (p_args["_input"] and p_args["_input"] ~= "") and p_args or f_args | |||
for k, v in pairs(source) do | |||
args[k] = v | |||
end | |||
if args["_input"] and args["_input"] ~= "" then | |||
return p._found_in(args) | |||
end | |||
return args["_default"] or "" | |||
end | end | ||
return p | return p | ||
Inačica od 16. travanj 2026. u 11:44
Dokumentacija modula
Kao funkcija parsera switch, ali pronalazi dijelove ili Luaine uzorke, a ne samo pune vrijednosti.
Upotreba
{{#invoke:Switch by pattern|found_in|_input= |patterns1|patterns2|patterns3|keyA=patternsA |keyB=patternsB |_respectcase= |_returnall= |_sep= |_outputsep= |_#default= }}
Primjeri
{{#invoke:Switch by pattern|found_in|_input=[[Animalia|Životinje]]|dark gray=vir|pink=život#animal|lightblue=fung}}→ pink
{{#invoke:Switch by pattern|found_in|_input=[[Riboviria]]|dark gray=vir|pink=život#animal|lightblue=fung}}→ dark gray
{{#invoke:Switch by pattern|found_in|ima jednu znamenku=%D%d$|_input=vrijednost12|ima dvije znamenke=%D%d%d$}}→ ima dvije znamenke
local p = {}
function p._found_in(args)
local skip_args = "#_input#_respectcase#_returncaptures#_returnall#_sep#_outputsep#_default#"
local res = {}
local all = args["_returnall"] and args["_returnall"] ~= ""
local returnkeys = not (args["_returncaptures"] and args["_returncaptures"] ~= "")
local sep = (args["_sep"] and args["_sep"] ~= "") and args["_sep"] or "#"
local outputsep = args["_outputsep"] or "#"
local lowercase = not (args["_respectcase"] and args["_respectcase"] ~= "")
local input = args["_input"] or ""
if input == "" then return args["_default"] or "" end
if lowercase then input = mw.ustring.lower(input) end
for k, v in pairs(args) do
if not mw.ustring.match(skip_args, "#" .. tostring(k) .. "#") then
local aliases = mw.text.split(v, sep, true)
for _, a in ipairs(aliases) do
if a ~= "" then
local match = mw.ustring.match(input, a)
if match then
local key_or_capture = returnkeys and k or match
if not all then return key_or_capture end
table.insert(res, key_or_capture)
break
end
end
end
end
end
if #res > 0 then return table.concat(res, outputsep) end
return args["_default"] or ""
end
function p.found_in(frame)
-- Kreiramo novu tablicu 'args' i kopiramo vrijednosti
local args = {}
local parent = frame:getParent()
local f_args = frame.args
local p_args = parent and parent.args or {}
-- Logika: prioritet imaju argumenti roditelja (ako postoji _input)
-- Inače koristimo argumente samog poziva modula
local source = (p_args["_input"] and p_args["_input"] ~= "") and p_args or f_args
for k, v in pairs(source) do
args[k] = v
end
if args["_input"] and args["_input"] ~= "" then
return p._found_in(args)
end
return args["_default"] or ""
end
return p