Modulo:String/sandbox: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix |
test arrayto string versione plain |
||
Riga 402:
return mw.ustring.rep( frame.args[1] or '', repetitions )
end
-- =================================================================
-- Classe per gestire i parametri
-- =================================================================
local Param = {}
Param.__index = Param
function Param.new(par_name, alt_name)
if not mw.ustring.find(par_name, '#') then par_name = par_name .. '#' end;
return setmetatable({
name = par_name,
base_name = mw.ustring.gsub(par_name, ' ?#', '', 1),
alt = alt_name or ''
}, Param)
end
function Param:get_other_value(args, index)
return args[mw.ustring.gsub(self.name, '#', tostring(index), 1)] or ''
end
function Param:get_first_value(args, index)
return args[mw.ustring.gsub(self.name, '#', tostring(index), 1)] or args[self.base_name] or args[self.alt] or ''
end
setmetatable(Param, { __call = function(_, ...) return Param.new(...) end })
-- =================================================================
-- fine dichiarazione classe per parametro
-- =================================================================
-- =================================================================
-- Classe per gestire il messaggio
-- =================================================================
local Message = {}
Message.__index = Message
function Message.new(msg)
-- converto parentesi graffe che sono state precedute da "\"
msg = mw.ustring.gsub(msg, '\\{', '{')
msg = mw.ustring.gsub(msg, '\\}', '}')
local frame = mw.getCurrentFrame():getParent() or mw.getCurrentFrame()
return setmetatable({
msg = msg,
values = {},
frame = frame,
}, Message)
end
function Message:reset_values()
self.values = {}
end
function Message:add_value(value)
self.values[#self.values+1] = value
end
function Message:text()
return self.frame:preprocess(mw.message.newRawMessage(self.msg, self.values):plain())
end
setmetatable(Message, { __call = function(_, ...) return Message.new(...) end })
-- =================================================================
-- fine dichiarazione classe per messaggio
-- =================================================================
--[[
Line 425 ⟶ 492:
'ordinata' imposta i aprametri per una lista ordinata
'infobox' imposta l'unione come una lista, eccetto che nel caso ci sia
solo un elemento
Se lista è valorizzata separatore/congiunzione/pre/post sono ignorati, salvo il caso di 'infobox' e la
lista contenga solo un elemento.
Line 438 ⟶ 505:
]]
function str.arraytostring(frame)
local base_args = frame.args
Line 542 ⟶ 520:
index = index + 1
end
--carico il messaggio
local msg = base_args.msg or '$1'
--if msg == '' then return str._error('Manca il messaggio da riprodurre.') end
local message = Message(msg)
elements = {}
Line 551 ⟶ 530:
local index = tonumber(base_args.Nmin) or base_index
local args = frame:getParent().args
-- estraggo il primo valore
local found = false
for i, param in ipairs(params) do
Line 558 ⟶ 537:
message:add_value(v)
end
if found then
elements[#elements+1] = message:text()
index = index + 1
|