Moduuli:kieliaakkostus
Ulkoasu
Moduulin kieliaakkostus käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
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 w → v.
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 w → v.
{{#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
suomi
[muokkaa]- 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
viro
[muokkaa]- KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|et|üliõpilane}}
TULOS: ul|iopilane - KOODI: {{#invoke:kieliaakkostus|Lajittelukirjaimiksi|et|šokolaad}}
TULOS: so|kolaad
puola
[muokkaa]- 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
saksa
[muokkaa]- ß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