Modulo:ParseTemplate
Inpostasion de letura
- chiamata test
- Autore di Indice:La regata de Venezia (1845).djvu: Cleandro Prata
local p={}
-- logica: riceve un nome pagina, un nome template e un parametro (numerico o nominale)
-- e restituisce il valore del parametro
function p.test(frame)
local nomePagina = frame.args[1]
local nomeTemplate = frame.args[2]
local nomeParametro = frame.args[3]
local valoreDefault = frame.args[4]
mw.log('Parametro: '..nomeParametro)
local tmpobj = p.parse(nomePagina, nomeTemplate)
local valore = tmpobj[nomeParametro]
if valore and valore ~= '' then
return valore
else
return valoreDefault
end
end
function string.replace(text, old, new)
local b,e = text:find(old,1,true)
if b==nil then
return text
else
return text:sub(1,b-1) .. new .. text:sub(e+1)
end
end
-- logica: riceve un nome pagina e un nome template e restituisce un oggetto parseTemplate tmpobj dove:
-- tmpobj[0] è il nome del template
-- tmpobj[1]....tmpobj[n] sono i valori dei parametri posizionali
-- tmpobj["nomeParametro1"]....tmpobj["nomeParametroN"] sono i valori dei parametri nominali
function p.parse(nomePagina,nomeTemplate)
local template={}
local pagina={}
local elements={}
local x=""
pagina.title=mw.title.new(nomePagina)
if not pagina.title then
return {}
end
pagina.text=pagina.title:getContent()
template.object={}
if pagina.text==nil then
return template.object
end
template.text=string.match(pagina.text,"%b{}",string.find(pagina.text,"{{"..nomeTemplate))
if not template.text or template.text == '' then
return {}
end
template.text=string.sub(template.text,3,-3)
template.coded=template.text
template.object={}
-- estrazione dei template interni
for x in string.gmatch(template.text,"%b{}") do
--escape delle parentesi tonde
x = string.gsub(x, '%)', '%%)')
x = string.gsub(x, '%(', '%%(')
template.coded=string.gsub(template.coded,x,string.gsub(x,"%|","{{!}}"))
end
for x in string.gmatch(template.text,"%b[]") do
template.coded=string.replace(template.coded,x,string.gsub(x,"%|","{{!}}"))
end
-- return "<pre>"..template.coded.."</pre>"
-- end
-- function x()
local patternx=""
for x in string.gmatch(template.text,"%b[]") do
template.coded=string.gsub(template.coded,patternx,string.gsub(x,"%|","{{!}}"))
end
elements=mw.text.split(template.coded,"|")
-- elements contiene i vari parametri in forma di blocchi (elements[1] è il nome del template)
local n=0
local valore=""
x="<pre>"for i,v in ipairs(elements) do
valore=string.gsub(v,"{{!}}","|")
if string.find(valore,"=")==nil then
template.object[n]=mw.text.trim(valore)
else
template.object[mw.text.trim(string.sub(valore,1,string.find(valore,"=")-1))]=mw.text.trim(string.sub(valore,string.find(valore,"=")+1))
end
end
return template.object
end
return p