Moduuli:kieliaakkostus

Vanhentunut, ks. Moduuli:artikkeliaakkostaja.

Aakkostukseen käytettävien merkkijonojen luomiseen.

Käyttö

muokkaa

Kirjastona

muokkaa
local kieliaakkostus = require("Module:kieliaakkostus")

Metodit

muokkaa

lajittelumuotoon(kielikoodi, sana)

Muuttaa sanan kirjaimet niiden lajittelussa käytettäviksi muodoiksi, esim. suomessa wv.

lajittelukirjaimiksi(kielikoodi, sana[, merkkimäärä])

Palauttaa kaksi arvoa. Ensimmäinen on ensimmäiset merkkimäärä merkkiä, toinen on loput. Jos merkkimäärää ei anneta on oletus 2, paitsi arabialle 1 TODO. Lopullinen merkkimäärä riippuu kuitenkin kielestä sivun [Wikisanakirja:Sanojen aakkosellinen luokittelu] mukaan. Esim. jos saksankielisen sanan kahdesta ensimmäisestä kirjamesta toinen on ß palautetaan yhteensä kolme merkkiä TODO parempi esim. . Tai esim. unkarinkielinen sanan csomó kohdalla palautetaan cso, mo. Huom. sisältää lajittelumuotoon muuttamisen.
Paluuarvot luetaan ohjelmassa seuraavasti:
local alku, loppu = kieliaakkostus.lajittelukirjaimiksi("džonkki", "fi", 2)

Mallineessa (tai sivulla)

muokkaa

{{#invoke:kieliaakkostus|Lajittelumuotoon|kielikoodi|sana}}

Muuttaa sanan kirjaimet niiden lajittelussa käytettäviksi muodoiksi, esim. suomessa wv.

{{#invoke:kieliaakkostus|Lajittelukirjaimiksi|kielikoodi|sana|n=2}}

Kuin vastaava kirjastofunktio. Parametri n on vapaaehtoinen.

Kielikohtaiset aakkostajat

muokkaa

Seuraaville kielille on määritetty erityinen aakkostaja. Muissa käytetään oletusta.

Testit

muokkaa

oletus

muokkaa
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|-|šiæöçké}}
    TULOS: siaeocke
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|-|äöåõåáéí|n=4}}
    TULOS: aoao|aaei
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|-|абвгдежзийклмнопрстуфхцчшщъыьэюя}}
    TULOS: абвгдежзииклмнопрстуфхцчшщъыьэюя
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|-|йѐёѓіїќѝў}}
    TULOS: иеегіікиу
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi||świat}}
    TULOS: sw|iat
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|watti}}
    TULOS: vatti
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|širokko}}
    TULOS: sirokko
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|džonkki}}
    TULOS: dzonkki
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|rosé}}
    TULOS: rose
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|24/7}}
    TULOS: 000
  • KOODI: {{#invoke:kieliaakkostus|Lajittelumuotoon|fi|fdfdfd3}}
    TULOS: fdfdfd0

  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|fi|watti}}
    TULOS: va|tti
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|fi|džonkki}}
    TULOS: dz|onkki
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|fi|džonkki|n=4}}
    TULOS: dzon|kki

espanja

muokkaa
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|es|ñame}}
    TULOS: ña|me
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|es|qué}}
    TULOS: qu|e
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|et|üliõpilane}}
    TULOS: ul|iopilane
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|et|šokolaad}}
    TULOS: so|kolaad
  • sól, sól

  • sól, só|l
  • dźedźe, dźe|dźe
  • dźdźee, dźdź|ee
  • dźódźó, dźó|dźó
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|pl|Władysław}}
    TULOS: wł|adysław
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|pl|Przemysław}}
    TULOS: prz|emysław
  • KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|pl|świat}}
    TULOS: św|iat

ranska

muokkaa
  • bébé, bebe

  • bébé, be|be
  • cédérom, ce|derom
  • fâcher, fa|cher
  • brûlure, br|ulure
  • fantôme, fa|ntome
  • ßeße, ssesse

  • ßeße, sse|sse
  • eßeße, ess|esse
  • ßßee, ssss|ee
  • ßßßee, ssss|ssee
  • großartig, gr|ossartig
  • Überraschung, ub|erraschung
  • Ära, ar|a
  • östlich, os|tlich

tšekki

muokkaa
  • cheche, cheche

  • cheche, che|che
  • echee, ech|ee
  • chchee, chch|ee
  • eechch, ee|chch

unkari

muokkaa
  • dzsedzse, dzsedzse

  • dzsedzse, dzse|dzse
  • ágy, agy|
  • csomó, cso|mo

-- 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 = { 
  ['0'] = '#', 
  ['1'] = '#', 
  ['2'] = '#', 
  ['3'] = '#', 
  ['4'] = '#', 
  ['5'] = '#', 
  ['6'] = '#', 
  ['7'] = '#', 
  ['8'] = '#', 
  ['9'] = '#', 
  ['æ'] = '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[mk] 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, "[^%a]", "")
   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, "[^" .. aakkosto .. "]", 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.org/wiki/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[1], frame.args[2])
end

-- Parametrit:
--  1. teksti
--  2. kielikoodi
--- n  alkukirjainten määrä
function m.Lajittelukirjaimiksi(frame)
	if mw.ustring.sub(frame.args[1], 1, 1) == 'q' and frame.args.n == 2 then
		frame.args.n = 1
	end
    a, b = m.lajittelukirjaimiksi(frame.args[1], frame.args[2], tonumber(frame.args.n))
    return a .. "|" .. b
end

return m