Modulo:Fumetto e animazione/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m -
Omega Bot (discussione | contributi)
m Bot: rimuovo no globals obsoleto
 
(41 versioni intermedie di un altro utente non mostrate)
Riga 3:
le funzioni di categorizzazione automatica
]]
 
require('strict')
 
local cfg = mw.loadData("Modulo:Fumetto e animazione/Configurazione/sandbox")
Riga 11 ⟶ 13:
-- =============================================================================
 
-- Converte la lettera iniziale di una stringa in maiuscola
-- Restituisce i valori di una tabella di alias nella configurazione
local function build_reverse_aliasucfirst(table_namestr)
return str:gsub('^%l', string.upper)
local reverse_alias = {}
for alias, name in pairs(cfg['alias_' .. table_name]) do
if not reverse_alias[name] then reverse_alias[name] = {} end
table.insert(reverse_alias[name], alias)
end
return reverse_alias
end
 
Riga 30 ⟶ 27:
pattern = "^'*%[%[ *([^%[%]]-) *%]%]"
end
return ucfirst(value:match(pattern) or value)
end
 
Riga 63 ⟶ 60:
genre = mw.text.trim(genre:lower())
end
return genre, cfg.alias_genere[genre] or genre, tail, substrings[index]
end
end
Riga 69 ⟶ 66:
-- Parsifica i parametri rimuovendo le stringhe vuote
local function parse_args(args)
local ret = {}
for key, value in pairs(args) do
if value and= mw.text.trim(value)
if =value ~= '' then
argsret[key] = nilvalue
end
end
return argsret
end
 
-- Sostituisce le parentesi in una stringa coi corrispondenti codici ascii
local function replace_braces(s)
local new_s = mw.ustring.gsub(s, "%[", "[")
new_s = mw.ustring.gsub(new_s, "%]", "]")
new_s = mw.ustring.gsub(new_s, "%(", "(")
new_s = mw.ustring.gsub(new_s, "%)", ")")
new_s = mw.ustring.gsub(new_s, " ", " ")
return new_s
end
 
Riga 142 ⟶ 131:
 
-- Cerca il nome o l'alias del medium nella configurazione
function Media:_getValue(key_tipotype_table_name, key_sottotiposubtype_table_name)
ifreturn cfg[key_sottotiposubtype_table_name][self.tipo] thenand
return cfg[key_sottotiposubtype_table_name][self.tipo][self.sottotipo] or
cfg[type_table_name][self.tipo]
else
return cfg[key_tipo][self.tipo]
end
end
 
Riga 161 ⟶ 148:
setmetatable(self, { __index = CategoryManager })
 
self.args = parse_args(args)
self.media = Media:new(self.args)
self.error_category = false
self.year = self:_getYear()
self.genre_table_name = self:_getGenreTableName()
self.error_category = false
self.categories = {}
self.tables_matched = {}
Riga 199 ⟶ 186:
:_addCategoriesBy('editore_manga')
:_addCategoriesBy('editore')
:_addCategoriesBy('target', nil, self._ucfirst)
elseif self.media:inArray('manhua', 'manhwa') then
self:_addCategoriesBy('editore')
Riga 210 ⟶ 197:
elseif self.media.tipo == 'fumetto' and self.media.sottotipo then
self
:_addCategoriesBy('etichetta_sottotipo', nil, self._prependSubtype_substituteParameter)
:_addCategoriesBy('etichetta')
:_addCategoriesBy('editore_sottotipo', nil, self._prependSubtype_substituteParameter)
:_addCategoriesBy('editore')
:_addCategoriesBy('paese', 'mp', self._categorizeComicByCountry)
Riga 229 ⟶ 216:
self:_addCategoriesBy('studio')
local broadcaster
local network = self.args['rete 1'] or self.args.rete
if self.media:inArray('film TV', 'serie TV') then
local networkbroadcaster = self.args[:_getCategory(network, 'rete 1'] or self.args.rete)
elseif network and self.media:inArray('ONA', 'webserie') then
broadcaster = self:_getCategory(delink(network), 'rete')
self.error_category = true
end
if not broadcasternetwork and self.media:inArray('film TV', 'ONA', 'serie TV', 'webserie') then
local platform = self.args['streaming 1'] or self.args.streaming
broadcaster = self:_getCategory(delink(platform), 'streaming')
end
if broadcaster then
self:_addCategory(mw.message.newRawMessage(broadcaster, self.media.alias .. ' ' .. broadcaster):plain())
end
end
Riga 259 ⟶ 248:
-- Aggiunge categorie per una lista di valori
function CategoryManager:_addCategoriesBy(table_name, gender, callback)
local base_name = table_name:match('[^_]+')
if self:_isCategoryRedundant(table_name) == false then
for value in extract_values(self.args, base_name) do
local base_name = table_name:match('[^_]+')
if table_name == 'genere' then
for value in extract_values(self.args, base_name) do
self:_addCategoryByGenre(value)
if table_name == 'genere' then
elseif table_name == 'paese' then
self:_addCategoryByGenre(value)
self:_addCategoryByCountry(value, gender, callback)
else
elseif self:_isCategoryRedundant(table_name) == false then
value = delink(value)
local category = self:_getCategory(value, table_name)
if table_name == 'paese' then
if category then
self:_addCategoryByCountry(value, gender, callback)
if callback then
else
ifcategory = callback(self, thencategory)
value = callback(self, value)
end
local category = self:_getCategory(value, table_name)
if category then
self.tables_matched[table_name] = true
self:_addCategory(category)
end
end
self.tables_matched[table_name] = true
self:_addCategory(category)
end
end
Riga 286 ⟶ 270:
-- Formatta e aggiunge una categoria
function CategoryManager:_addCategory(category)
if self.args.categoriescategorie ~= 'no' or category == error_category then
table.insert(self.categories, string.format('[[Categoria:%s]]', category))
end
Riga 297 ⟶ 281:
local frame = mw.getCurrentFrame()
local success, adj = pcall(frame.expandTemplate, frame, {
title = 'Template:AggNaz/' .. delink(country),
args = { gender }
})
if not success then
self.error_category = true
elseif self:_isCategoryRedundant('paese') == false then
callback(self, adj)
else
self.error_category = true
end
end
Riga 309 ⟶ 293:
-- Aggiunge una o più categorie per genere dell'opera
function CategoryManager:_addCategoryByGenre(value)
for genre, alias in extract_genres(value) do
local wikilink =if cfg.genere_wikilink[aliasgenre] or cfg.genere_wikilink[genre]then
local categories = cfg[self.genre_table_name][genre]
if wikilink then
local categories = cfg[self.genre_table_name][alias] or
cfg[self.genre_table_name][genre]
if categories then
for _, category in ipairs(categories) do
Riga 362 ⟶ 344:
-- Cerca il nome di una categoria nella configurazione
function CategoryManager:_getCategory(key, table_name)
key = delink(key)
key = cfg['alias_' .. table_name] and cfg['alias_' .. table_name][key] or key
return cfg[table_name][key]
Riga 384 ⟶ 367:
local start_date = self.args['data inizio'] or ''
local end_date = self.args['data fine'] or ''
local year = (start_date .. ' ' .. end_date):match('%f[%w]%d%d%d%d%f[%W]')
if year then
return year
else
self.errory_categoryerror_category = true
end
end
Riga 404 ⟶ 387:
end
 
-- AnteponePopola il sottotipo delll'operaargomento anumerato in una stringa col tipo dell'opera
function CategoryManager:_prependSubtype_substituteParameter(valuemsg)
return selfmw.mediamessage.sottotiponewRawMessage(msg, self.media. ' ' .. valuename):plain()
end
 
-- Converte la lettera iniziale di una stringa in maiuscola
function CategoryManager:_ucfirst(str)
return str:gsub('^%l', string.upper)
end
 
Riga 423 ⟶ 401:
function p.categorie(frame)
if mw.title.getCurrentTitle().namespace ~= 0 then return end
returnlocal CategoryManager:newargs = parse_args(frame:getParent().args):listCategories()
return CategoryManager:new(args):listCategories()
end
 
Riga 429 ⟶ 408:
function p.generi(frame)
local ret = {}
forlocal genre,args alias,= tail, default in extract_genresparse_args(frame.args[1]) do
for genre, tail, default in extract_genres(args[1]) do
local wikilink = cfg.genere_wikilink[alias] or cfg.genere_wikilink[genre]
local wikilink = cfg.genere_wikilink[genre]
table.insert(ret, wikilink and (wikilink .. tail) or default)
end
Riga 439 ⟶ 419:
-- una data tabella nella configurazione
function p.tabella_configurazione(frame)
local table_name = parse_args(frame.args)[1]
if not cfg[table_name or table_name == ''] then return end
local reverse_alias = build_reverse_alias(table_name)
local root = mw.html.create('table')
root
:addClass('wikitable mw-collapsible mw-collapsed sortable')
:tag('tr')
:tag('th'):wikitext(table_name'Valore'):done()
:tag('th'):wikitext('Alias'):done()
:tag('th'):wikitext('CategoriaRisultato'):done()
local keys, reverse_alias = {}, {}
for name, cat_name in pairs(cfg[table_name]) do
local name_codealias_table_name = table_name:find('genere') ==and 'genere' andor table_name
for alias, name in pairs(cfg['alias_' .. alias_table_name] or {}) do
replace_braces(cat_name[4]) or
if not reverse_alias[name] then reverse_alias[name] = {} end
'[[' .. name .. ']]'
table.insert(reverse_alias[name], alias)
local cat_code = {}
end
if cat_name[1] then
for key in pairs(cfg[table_name]) do table.insert(keys, key) end
for i, cat in ipairs(cat_name) do
table.sort(keys)
if i > 3 then break end
local pre_table_name
cat = cat[1] and
if table_name == 'editore_sottotipo' or table_name == 'etichetta_sottotipo' then
cat[1] .. ']]<br />[[:Categoria:' .. cat[2] or cat
pre_table_name = cfg.sottotipo.fumetto
if cat ~= '' then
elseif table_name == 'rete' or table_name == 'streaming' then
cat_code[#cat_code+1] = '[[:Categoria:' .. cat .. ']]'
pre_table_name = cfg.alias_sottotipo.cartone
end
end
for _, key in ipairs(keys) do
local result, values = {}, {}
reverse_alias[key] = reverse_alias[key] or {}
if pre_table_name then
for _, subtype in pairs(pre_table_name) do
local msg = cfg[table_name][key]
subtype = ucfirst(subtype)
table.insert(values, mw.message.newRawMessage(msg, subtype):plain())
end
elseif type(cfg[table_name][key]) == 'string' then
cat_code = table.concat(cat_code, '<br />')
values = { cfg[table_name][key] }
else
values = cfg[table_name][key]
cat_code = '[[:Categoria:' .. cat_name .. ']]'
end
for _, str in ipairs(values) do
local alias_code = '&nbsp;'
if reverse_alias[name]table_name ~= 'genere_wikilink' then
str = string.format('[[:Categoria:%s]]', str)
for i, alias in ipairs(reverse_alias[name]) do
reverse_alias[name][i] = '&#91;&#91;' .. alias .. '&#93;&#93;'
end
alias_code = table.concatinsert(reverse_alias[name]result, '<br />'str)
end
table.sort(result)
result = table.concat(result, '<br />')
table.sort(reverse_alias[key])
reverse_alias[key] = table.concat(reverse_alias[key], '<br />')
root:tag('tr')
:tag('td'):wikitext(name_codekey):done()
:tag('td'):wikitext(alias_codereverse_alias[key]):done()
:tag('td'):wikitext(cat_coderesult):done()
end
return tostring(root)