Moduulin kieliaakkostus käyttöohje
Vanhentunut, ks. Moduuli:artikkeliaakkostaja.
Aakkostukseen käytettävien merkkijonojen luomiseen.
local kieliaakkostus = require("Module:kieliaakkostus")
lajittelumuotoon(kielikoodi, sana)
lajittelukirjaimiksi(kielikoodi, sana)
local alku, loppu = kieliaakkostus.lajittelukirjaimiksi("džonkki", "fi", 2)
{{#invoke:kieliaakkostus|Lajittelumuotoon|kielikoodi|sana}}
{{#invoke:kieliaakkostus|Lajittelukirjaimiksi|kielikoodi|sana|n=2}}
Seuraaville kielille on määritetty erityinen aakkostaja. Muissa käytetään oletusta.
-- yleinen, muuttaa aksentilliset merkit niitä vastaaviksi ascii-merkeiksi
local oletus = {}
function oletus.lajittelumuotoon(isanta, sana)
return isanta.yksinkertaista_sana(sana, "abcdefghijklmnopqrstuvwxyzабвгдежзиклмнопрстуфхцчшщъыьэюя")
end
function oletus.lajittelukirjaimiksi(isanta, sana, n)
n = n or 2
sana = oletus.lajittelumuotoon(isanta, sana)
return mw.ustring.sub(sana, 1, n), mw.ustring.sub(sana, n+1)
end
--- Palauttaa annetun kielelle käytetyn aakkostajan
-- Jos kielelle on määritetty oma aakkostaja palauttaa sen muuten
-- oletusaakkostajan. Aakkostajat sijaitsevat moduulin alasivuilla.
-- Alasivun nimen tulee olla kielen kielikoodi.
-- @param lang alasivun nimi, jolla aakkostaja on
-- @return kielelle käytettävä aakkostaja
local function lataa_aakkostaja(lang)
local aakkostaja
local stat
stat, aakkostaja = pcall(require, "Moduuli:kieliaakkostus/" .. lang)
if stat == false then
-- Käytetään oletusaakkostajaa
aakkostaja = oletus
end
return aakkostaja
end
-- Oletusmuutokset, ohitetaan kielen omalla yksinkertaista_sana-funktiolle annettavalla funktiolla.
-- Aksentilliset merkit muutetaan automaattisesti aksentittomiksi.
local merkkimuutokset = {
= '#',
= '#',
= '#',
= '#',
= '#',
= '#',
= '#',
= '#',
= '#',
= '#',
= 'ae',
= 'd',
= 'o',
= 'oe',
= 'n',
= 'ss',
= 'th',
}
local m = {}
-- Oletusmuutosfunktio, joka muuttaa annetun merkin kirjainten a-z akstentittomaan muotoon ja merkkimuutokset-taulukon
-- antamiin muotoihin. Poistaa kaikki muut merkit.
function m.muuta_merkki(mk)
mk = merkkimuutokset or mk
-- poistetaan merkistä mahdollisen aksentit ja jäljellä olevasta kaikki muut merkit paitsi kirjaimet
mk = mw.ustring.toNFD(mk)
mk = mw.ustring.gsub(mk, "", "")
return mk
end
-- Parametrit:
-- sana, joka muutetaan, täytyy olla muutettu pieniksi kirjaimiksi
-- aakkosto, ne kirjaimet jotka ovat mukana aakkostuksessa, järjestyksellä ei ole väliä
-- f (valinnainen), kielen oma funktio, joka on muotoa f(merkki) -> merkki/merkkejä, jos
-- ei annettu, käytetään `isanta.muuta_merkki`ä
function m.yksinkertaista_sana(sana, aakkosto, f)
local a = 1
local usana = ''
-- Poistetaan mahdolliset #-merkit, koska numerot muutetaan niiksi.
-- Muut erikoismerkit poistetaan lopussa.
sana = mw.ustring.gsub(sana, "#", "")
-- oletusfunktio palauttaa oletustaulukosta arvon
f = f or m.muuta_merkki
-- etsitään merkit, jotka eivät kuulu aakkostoon ja korvataan ne aakkostoon kuuluvilla
repeat
s, e = mw.ustring.find(sana, "", a)
if s ~= nil then
if s == 1 then -- (koska mw.ustring.sub(sana, 1, 0) palauttaa jostain syystä ensimmäisen merkin)
usana = f(mw.ustring.sub(sana, s, e))
else
usana = usana .. mw.ustring.sub(sana, a, s-1) .. f(mw.ustring.sub(sana, s, e))
end
a = e + 1
end
until s == nil
usana = usana .. mw.ustring.sub(sana, a, #sana)
return usana
end
-- Muuttaa annetun tektin lajittelumuotoon eli muuttaa kirjasintyypin pieneksi, poistaa väliviivat
-- ja muuttaa kirjaimet, jotka lajitellaan toisten kirjanten alle, esim. suomenkielisissä
-- sanoissa w, š ja ž -> v, s, z.
function m.lajittelumuotoon(kieli, sana)
local k = mw.language.new(kieli)
local aakkostaja = lataa_aakkostaja(kieli)
if k then
sana = k:lc(sana) -- isot kirjaimet pieniksi
return aakkostaja.lajittelumuotoon(m, sana)
end
end
-- Muuttaa annetun tekstin lajittelumuotoon ja palauttaa sanan jaettuna alun n:nen (oletus 2) kirjaimen
-- kohdalta kieliakkostuksen mukaisesti annetulle kielelle. Palauttaa siis kaksi arvoa a, b, jossa a
-- on kirjaimet 1–n ja b n+1–loppuun. N:n lopullinen arvo riippuu kielikohtaisesta aakkostuksesta, esim.
-- parametreilla "csomó", "hu" (unkari), "2" palautetaan "cso|mo".
-- http://fi.wiktionary.orghttps://dictious.com/fi/Wikisanakirja:Sanojen_aakkosellinen_luokittelu
function m.lajittelukirjaimiksi(kieli, sana, n)
local k = mw.language.new(kieli)
local aakkostaja = lataa_aakkostaja(kieli)
if k then
sana = k:lc(sana) -- isot kirjaimet pieniksi
return aakkostaja.lajittelukirjaimiksi(m, sana, n)
end
end
-- Muuttaa `sanan` sellaiseen muotoon, että kahden muutetun sanan aakkosjärjestyksen
-- voi todeta <, > -operaattoreilla.
function m.vertailumuotoon(kieli, sana)
local aakkostaja = lataa_aakkostaja(kieli)
if aakkostaja.vertailumuotoon then
return aakkostaja.vertailumuotoon(m, sana)
end
return nil
end
-- Parametrit:
-- 1. teksti
-- 2. kielikoodi
function m.Lajittelumuotoon(frame)
return m.lajittelukirjaimiksi(frame.args, frame.args)
end
-- Parametrit:
-- 1. teksti
-- 2. kielikoodi
--- n alkukirjainten määrä
function m.Lajittelukirjaimiksi(frame)
if mw.ustring.sub(frame.args, 1, 1) == 'q' and frame.args.n == 2 then
frame.args.n = 1
end
a, b = m.lajittelukirjaimiksi(frame.args, frame.args, tonumber(frame.args.n))
return a .. "|" .. b
end
return m