Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:artikkeliaakkostaja/perus/ohje
local p = {}
p.merkkimuunnokset = {
= '0',
= '0',
= '0',
= '0',
= '0',
= '0',
= '0',
= '0',
= '0',
= '0',
}
p.sallitut_merkit = ""
function p.asetukset(params)
p.sallitut_merkit = params.aakkoset
for k,v in pairs(params.muunnokset) do
p.merkkimuunnokset = v
end
end
--- Testaa onko merkki sallittu kielen aakkostossa.
-- @param mk merkki
-- @return true, jos merkki sisältyy p.sallitut_merkit-stringiin, muuten false.
function p.on_sallittu_merkki(mk)
if mw.ustring.find(p.sallitut_merkit, mk, 1, true) then
return true
end
return false
end
--- Yksittäisen merkin kuvaaminen toiseksi.
-- Jos muunnostaulukossa on muunnos merkille, palauttaa sen. Jos merkissä on
-- tarkkeita, palauttaa merkin ilman tarkkeita. Muussa tapauksessa palauttaa
-- merkin itsensä.
-- @param mk merkki
-- @return mahdollisesti muunnettu merkki
function p.kuvaa_merkki(mk)
local muunnos = p.merkkimuunnokset
local out
if muunnos then
return muunnos
end
if p.on_sallittu_merkki(mk) then
return mk
end
-- Poistetaan tarkkeet.
out = mw.ustring.gsub(mw.ustring.toNFD(mk), "%A", "")
return out
end
--- Koko tekstiä muokkaava funktio.
-- Oletusimplementaatio käy merkit yksi kerrallaan läpi ja kysyy kuvaa_merkki
-- -metodilta mahdollisen korvaavan tekstin.
-- @param str aakkostettava teksti
-- @return muutettu merkkijono
function p.kuvaa_merkkijono(str)
local out = {}
str = mw.ustring.upper(str)
-- Etsitään merkit, jotka eivät kuulu aakkostoon ja korvataan tai
-- poistetaan ne.
for cp in mw.ustring.gcodepoint(str) do
table.insert(out, p.kuvaa_merkki(mw.ustring.char(cp)))
--print(mw.ustring.char(cp))
end
return table.concat(out, "")
end
function p.kopioi( clone_object )
if type( p ) ~= "table" then
return clone_object or p
end
clone_object = clone_object or {}
clone_object.__index = p
return setmetatable(clone_object, clone_object)
end
return p