<commit_before>-- Modulo che, data un'abilità, restituisce la tabella dei Pokémon che la hanno

local k = {}

local ms = require('MiniSprite')
local links = require('Links')
local txt = require('Wikilib-strings')
local tab = require('Wikilib-tables')
local list = require('Wikilib-lists')
local form = require('Wikilib-forms')
local c = require('Colore-data')
local pokes = require('Poké-data')
local forms = require('AltForms-data')

--[[

Classe che rappresenta l'entry della tabella,
implementando le interfacce richieste dalle
funzoni makeList, sortNdex e sortForms di
Wikilib/lists

--]]
local Entry = setmetatable({}, {__call = function(self, ...)
		return self.new(...) end })
Entry.__index = Entry

--[[

Costruttore della classe: il primo argomento
è un elemento del modulo dati PokéAbil/data,
il secondo la chiave associata ed il terzo
l'abilita che il Pokémon deve avere. Come
richiesto da makeList in Wikilib/lists, nel
caso l'entry non debba essere inserita,
viene ritornato nil

--]]
Entry.new = function(pokeAbil, name, abil)
	if not table.search(pokeAbil, abil) then
		return nil
	end

	local this = setmetatable(table.merge(pokeAbil,
			pokes[name]), Entry)

	if not this.ndex then
		this.fallbackIndex = this.name
	end

	local baseName, abbr = form.getNameAbbr(name)

	this.formsData = forms[baseName]
	if this.formsData then
		this.formAbbr = abbr
	end
	
	return this
end

--[[

Overloading dell'operatore < per il sorting,
come richiesto da makeList in Wikilib/lists.

--]]
Entry.__lt = list.sortNdex

-- Wikicode per la riga di tabella associata all'entry
Entry.__tostring = function(this)
	local monoType = this.type1 == this.type2
	return string.interp([=[| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${ani}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | [[${name}|<span style="color:#000">${name}</span>]]${form}
| colspan="${cs}" style="background:#${std1}; border:1px solid #${dark1};" | [[${type1} (tipo)|<span style="color:#FFF">${type1}</span>]]${type2}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abil1}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abil2}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abild}]=],
{
	ani = ms.aniLua(string.tf(this.ndex or 0) .. (this.formAbbr or '')),
	name = this.name,
	form = this.formsData and this.formsData.blacklinks[this.formAbbr] or '',
	cs = monoType and '2' or '1',
	std1 = c[this.type1].normale,
	dark1 = c[this.type1].dark,
	type1 = string.fu(this.type1),
	type2 = monoType and '' or string.interp('\n|style="background:#${std2}; border:1px solid #${dark2};" | [[${type2} (tipo)|<span style="color:#FFF">${type2}</span>]]',
		{std2 = c[this.type2].normale, dark2 = c[this.type2].dark, type2 = string.fu(this.type2)}),
	abil1 = this.ability1 and links.aColor(this.ability1, '000') or 'Nessuna',
	abil2 = this.ability2 and links.aColor(this.ability2, '000') or 'Nessuna',
	abild = this.abilityd and links.aColor(this.abilityd, '000') or 'Nessuna',
})
end<commit_msg>Abillist now uses OOP module<commit_after>-- Modulo che, data un'abilità, restituisce la tabella dei Pokémon che la hanno

local k = {}

local links = require('Links')
local ms = require('MiniSprite')
local oop = require('Wikilib-oop')
local txt = require('Wikilib-strings')
local tab = require('Wikilib-tables')
local list = require('Wikilib-lists')
local form = require('Wikilib-forms')
local forms = require('AltForms-data')
local c = require('Colore-data')
local pokes = require('Poké-data')

--[[

Classe che rappresenta l'entry della tabella,
implementando le interfacce richieste dalle
funzoni makeList, sortNdex e sortForms di
Wikilib/lists

--]]
local Entry = oop.makeClass(list.PokeSortableEntry)

--[[

Costruttore della classe: il primo argomento
è un elemento del modulo dati PokéAbil/data,
il secondo la chiave associata ed il terzo
l'abilita che il Pokémon deve avere. Come
richiesto da makeList in Wikilib/lists, nel
caso l'entry non debba essere inserita,
viene ritornato nil

--]]
Entry.new = function(pokeAbil, name, abil)
	if not table.search(pokeAbil, abil) then
		return nil
	end

	local this = Entry.super.new(name, pokes[name].ndex)
	this = table.merge(this, pokeAbil)
	
	return setmetatable(table.merge(this, pokes[name]), Entry)
end

-- Wikicode per la riga di tabella associata all'entry
Entry.__tostring = function(this)
	local monoType = this.type1 == this.type2
	return string.interp([=[| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${ani}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | [[${name}|<span style="color:#000">${name}</span>]]${form}
| colspan="${cs}" style="background:#${std1}; border:1px solid #${dark1};" | [[${type1} (tipo)|<span style="color:#FFF">${type1}</span>]]${type2}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abil1}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abil2}
| style="background:#FFFFFF; border:1px solid #D8D8D8;" | ${abild}]=],
{
	ani = ms.aniLua(string.tf(this.ndex or 0) .. (this.formAbbr or '')),
	name = this.name,
	form = this.formsData and this.formsData.blacklinks[this.formAbbr] or '',
	cs = monoType and '2' or '1',
	std1 = c[this.type1].normale,
	dark1 = c[this.type1].dark,
	type1 = string.fu(this.type1),
	type2 = monoType and '' or string.interp('\n|style="background:#${std2}; border:1px solid #${dark2};" | [[${type2} (tipo)|<span style="color:#FFF">${type2}</span>]]',
		{std2 = c[this.type2].normale, dark2 = c[this.type2].dark, type2 = string.fu(this.type2)}),
	abil1 = this.ability1 and links.aColor(this.ability1, '000') or 'Nessuna',
	abil2 = this.ability2 and links.aColor(this.ability2, '000') or 'Nessuna',
	abild = this.abilityd and links.aColor(this.abilityd, '000') or 'Nessuna',
})
end
{'fraction_non_alphanumeric': 0.1652158774373259, 'fraction_numerical': 0.02402506963788301, 'mean_word_length': 5.362126245847176, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3455307', 'n_tokens_mistral': 2180, 'n_tokens_neox': 2111, 'n_words': 529}