Module:Cans-translit
Jump to navigation
Jump to search
- The following documentation is located at Module:Cans-translit/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox (diff)
This module will transliterate text in the Canadian syllabics script.
The module should preferably not be called directly from templates or other modules.
To use it from a template, use {{xlit}}
.
Within a module, use Module:languages#Language:transliterate.
For testcases, see Module:Cans-translit/testcases.
Functions
tr(text, lang, sc)
- Transliterates a given piece of
text
written in the script specified by the codesc
, and language specified by the codelang
. - When the transliteration fails, returns
nil
.
{
[5] = {
[1] = {
[1] = "ᑊ",
[2] = "p",
},
[2] = {
[1] = "ᐟ",
[2] = "t",
},
[3] = {
[1] = "ᐠ",
[2] = "k",
},
[4] = {
[1] = "ᐨ",
[2] = "c",
},
[5] = {
[1] = "ᒼ",
[2] = "m",
},
[6] = {
[1] = "ᐣ",
[2] = "n",
},
[7] = {
[1] = "ᐢ",
[2] = "s",
},
[8] = {
[1] = "ᐧ",
[2] = "y",
},
[9] = {
[1] = "ᐤ",
[2] = "w",
},
[10] = {
[1] = "ᐦ",
[2] = "h",
},
[11] = {
[1] = "ᕁ",
[2] = "hk",
},
[12] = {
[1] = "ᕽ",
[2] = "hk",
},
[13] = {
[1] = "ᓫ",
[2] = "l",
},
[14] = {
[1] = "ᕑ",
[2] = "r",
},
[15] = {
[1] = "ᑉ",
[2] = "p",
},
[16] = {
[1] = "ᑦ",
[2] = "t",
},
[17] = {
[1] = "ᒡ",
[2] = "c",
},
[18] = {
[1] = "ᒃ",
[2] = "k",
},
[19] = {
[1] = "ᒻ",
[2] = "m",
},
[20] = {
[1] = "ᓐ",
[2] = "n",
},
[21] = {
[1] = "ᔅ",
[2] = "s",
},
[22] = {
[1] = "ᔥ",
[2] = "š",
},
[23] = {
[1] = "ᔾ",
[2] = "y",
},
[24] = {
[1] = "ᓪ",
[2] = "l",
},
[25] = {
[1] = "ᕐ",
[2] = "r",
},
[26] = {
[1] = "ᕪ",
[2] = "ð",
},
[27] = {
[1] = "‡",
[2] = "ð",
},
[28] = {
[1] = "ᒄ",
[2] = "kw",
},
[29] = {
[1] = "ᔉ",
[2] = "sk",
},
[30] = {
[1] = "ᖅ",
[2] = "q",
},
[31] = {
[1] = "ᖕ",
[2] = "ng",
},
[32] = {
[1] = "ᖖ",
[2] = "nng",
},
[33] = {
[1] = "ᕝ",
[2] = "v",
},
[34] = {
[1] = "ᖦ",
[2] = "l",
},
[35] = {
[1] = "ᕀ",
[2] = "y",
},
[36] = {
[1] = "ᕻ",
[2] = "h",
},
[37] = {
[1] = "ᕼ",
[2] = "h",
},
},
}
local export = {}
-- to be discussed: not to create this module, but create individual modules instead?
local UTF8_char = "[%z\1-\127\194-\244][\128-\191]*"
local function iter_char(str)
return string.gmatch(str, UTF8_char)
end
local function len(str)
local _, length = string.gsub(str, UTF8_char, "")
return length
end
local function fetch(str, index)
local i = 0
for char in iter_char(str) do
i = i + 1
if i == index then
return char
end
end
return ""
end
function export.tr(text, lang, sc)
local data = {
{ --short-vowel
"ᐁᐃᐅᐊᐯᐱᐳᐸᑌᑎᑐᑕᑫᑭᑯᑲᒉᒋᒍᒐᒣᒥᒧᒪᓀᓂᓄᓇᓭᓯᓱᓴᔦᔨᔪᔭᖊᖋᖌᖍᕃᕆᕈᕍᕂᕄᕊᕋᔐᔑᔓᔕᕓᕕᕗᕙᕞᕠᕤᕦᘚᘛᘕᘔᓓᓕᓗᓚᙯᕿᖁᖃᙰᖏᖑᖓ ᙱᙳᙵᕴᕵᕷᕹ",
"1ptkcmnsyrrršfðzlq23h",
{"","ng","nng"},
"eioa",
function(a,b)
return a..b
end
},
{ --w
"ᐌᐍᐎᐏᐒᐓᐗᐘᐺᐻᐼᐽᑀᑁᑄᑅᑗᑘᑙᑚᑝᑞᑡᑢᑴᑵᑶᑷᑺᑻᑾᑿᒒᒓᒔᒕᒘᒙᒜᒝᒬᒭᒮᒯᒲᒳᒶᒷ"
.. "ᓉᓊ ᓋᓌ ᓶᓷᓸᓹᓼᓽᔀᔁᔯᔰᔱᔲᔵᔶᔹᔺᔗᔘᔙᔚᔝᔞᔡᔢᓜᓝᓞᓟᓢᓣᓦᓧ",
"1ptkcmnsyrz",
{""},
"eeiiooaa",
function(a,b)
return a..'w'..b
end
},
{ --long-vowel
"ᐄᐆᐋᐲᐴᐹᑏᑑᑖᑮᑰᑳᒌᒎᒑᒦᒨᒫᓃᓅᓈᓰᓲᓵᔩᔫᔮᕇᕉᕌᔒᔔᔖᕖᕘᕚᕢᕥᕧᓖᓘᓛᐐᐔᐙᖀᖂᖄᕶᕸᕺ",
"1ptkcmnsyršfðlwqh",
{""},
"īōā",
function(a,b)
return a..b
end
},
{ --w-long
"ᐐᐑᐔᐕᐖᐙᐚᐛᐾᐿᑂᑃ ᑆᑇᑈᑛᑜᑟᑠ ᑣᑤᑥᑸᑹᑼᑽ ᒀᒁᒂᒖᒗᒚᒛ ᒞᒟᒠᒰᒱᒴᒵ ᒸᒹᒺ ᓍᓎᓏ"
.. "ᓠᓡᓤᓥ ᓨᓩ ᓺᓻᓾᓿ ᔂᔃᔄᔛᔜᔟᔠ ᔣᔤ ᔳᔴᔷᔸ ᔻᔼᔽ ᕎᕏ ᕛᕜ ᕨᕩ ",
"1ptkcmnlsšyrfð",
{""},
"īīōōōāāā",
function(a,b)
return a..'w'..b
end
},
{ --individual
"ᑊᐟᐠᐨᒼᐣᐢᐧᐤᐦᕁᕽᓫᕑᑉᑦᒡᒃᒻᓐᔅᔥᔾᓪᕐᕪ‡ᒄᔉᖅᖕᖖᕝᖦᕀᕻᕼ",
"ptkcmnsywh11lrptckmnsšylrðð23q45vlyhh",
{"hk","kw","sk","ng","nng"},
},
}
for i, item in pairs(data) do
if item[4] then
local length = len(item[4])
local c = 0
for s in iter_char(item[1]) do
c = c + 1
local index = math.ceil(c / length)
local a = fetch(item[2], index)
if tonumber(a) then
a = item[3][tonumber(a)]
end
index = (c - 1) % length + 1
local b = fetch(item[4], index)
if s ~= " " then
text = string.gsub(text, s, item[5](a,b))
end
end
else
local iter1, iter2 = iter_char(item[1]), iter_char(item[2])
while true do
local s, a = iter1(), iter2()
if not (s and a) then
break
end
if tonumber(a) then
a = item[3][tonumber(a)]
end
text = string.gsub(text, s, a)
end
end
end
return text
end
return export