Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:artikkeliaakkostaja/perus/ohje

local p = {}

p.merkkimuunnokset = {
  ['0'] = '0', 
  ['1'] = '0', 
  ['2'] = '0', 
  ['3'] = '0', 
  ['4'] = '0', 
  ['5'] = '0', 
  ['6'] = '0', 
  ['7'] = '0', 
  ['8'] = '0', 
  ['9'] = '0', 
}

p.sallitut_merkit = ""

function p.asetukset(params)
   p.sallitut_merkit = params.aakkoset
   
   for k,v in pairs(params.muunnokset) do
      p.merkkimuunnokset[k] = 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[mk]
   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