Module:CoorCheck
Uit Wiki Raamsdonks Erfgoed
Doel
Deze module leest de parameters van een coördinatensjabloon en ofwel geeft de gewenste output ofwel checkt of er geen onherkenbare zaken in de input staan.
Specifiek herkent de module scale: region: en type: en bij het type:city(...) kan de module ook de waarde teruggeven die daar tussen de haakjes staat.
Specificaties
Op de puntjes wordt de input ingevoegd die bekeken wordt door de module:
- Geeft de region: {{#invoke:CoorCheck|extract|...|region}}
- Geeft de scale: {{#invoke:CoorCheck|extract|...|scale}}
- Geeft het type: {{#invoke:CoorCheck|extract|...|type}}
- Geeft het getal van type:city(): {{#invoke:CoorCheck|extract|...|type|yes}}
Indien de gevraagde waarde niet opgegeven wordt er niks teruggegeven.
- Geeft Error indien de input een fout bevat, als de inhoud klopt wordt er niks teruggegeven: {{#invoke:CoorCheck|check|...}}
Voorbeelden
Resultaat met type:forest_scale:25000_region:NL
:
- NL
- 25000
- forest
Resultaat met type:city(20000)_region:NL
:
- city
- 20000
Controle op fouten:
- Goed:
- Fout: Error
- Fout: Error
- Fout: Error
- Fout: Error
- Fout: Error
- Fout: Error
- Fout: Error
Toepassing
local p = {}
function p.extract(frame)
stringy = frame.args[1]
elem = frame.args[2]
dosubelem = frame.args[3]
tab = p.rec(stringy, { subvalues = {} }, 1)
if dosubelem then return tab.subvalues[elem] else return tab[elem] end
end
function p.check(frame)
stringy = frame.args[1]
return p.innercheck(stringy)
end
function p.innercheck(haystack)
if not haystack then return "Error" end
somecolon = string.find(haystack, ":")
if not somecolon then return "Error" end
allowed = { globe = 1, region = 1, scale = 1, subvalues = 1}
allowed["type"] = 1
tab = p.rec(haystack, { subvalues = {} }, 1)
for key,value in pairs(tab) do
found = allowed[key]
if not found or
not value or
value == "" or
(type(value) == "string" and string.find(value, ":"))
then return "Error" end
end
return
end
function p.rec(haystack, accum, pos)
poscol = string.find(haystack, ":", pos)
if not poscol then
return accum
end
key = string.sub(haystack, pos, poscol - 1)
posunder = string.find(haystack, "_", pos)
if posunder then
posbracket = string.find(haystack, "%(", pos)
if posbracket and posbracket < posunder then
value = string.sub(haystack, poscol + 1, posbracket - 1)
subvalue = string.sub(haystack, posbracket + 1, posunder - 2)
accum[key] = value
accum.subvalues[key] = subvalue
else
value = string.sub(haystack, poscol + 1, posunder - 1)
accum[key] = value
end
return p.rec(haystack, accum, posunder + 1)
else
value = string.sub(haystack, poscol + 1)
accum[key] = value
return accum
end
end
return p