Module:xchc-translit: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(85 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local u = mw.ustring.char | local u = mw.ustring.char | ||
local M = u(0x0304) | local M = u(0x0304) -- COMBINING MACRON | ||
local B = u(0x0306) | local B = u(0x0306) -- COMBINING BREVE | ||
local D = u(0x0308) | local D = u(0x0308) -- COMBINING DIAERESIS | ||
local | local A = u(0x0301) -- COMBINING ACUTE | ||
local DA = u(0x030B) -- COMBINING DOUBLE ACUTE | |||
local export = {} | local export = {} | ||
local | local MorA = "[" .. M .. A .. "]" | ||
local tt_lepik = { | |||
[" | ["Е" .. M .. D]='Jo' .. M, ["е" .. M .. D]='jo' .. M, | ||
["Е" | ["Е" .. D]='Jo', ["е" .. D]='jo', | ||
["А" | |||
["А"]='A', ["а"]='a', | |||
["Я"]='Ja', ["я"]='ja', | |||
["Б"]='B', ["б"]='b', | ["Б"]='B', ["б"]='b', | ||
["В"]='V', ["в"]='v', | ["В"]='V', ["в"]='v', | ||
["Г"]='G', ["г"]='g', | ["Г"]='G', ["г"]='g', | ||
["Ғ"]=' | ["Ғ"]='Gh', ["ғ"]='gh', | ||
["Д"]='D', ["д"]='d', | |||
["Д"]='D', ["д"]='d', ["З"]='Z', ["з"]='z', ["Ж"]='Ž', ["ж"]='ž', | |||
[" | ["Ы"]='I', ["ы"]='i', | ||
["И"]='Ji', ["и"]='ji', | |||
["К"]='K', ["к"]='k', | ["К"]='K', ["к"]='k', | ||
["Л"]='L', ["л"]='l', | ["Л"]='L', ["л"]='l', | ||
["М"]='M', ["м"]='m', | ["М"]='M', ["м"]='m', | ||
["Н"]='N', ["н"]='n', | ["Н"]='N', ["н"]='n', | ||
["Ӈ"]=' | ["Ӈ"]='Ng', ["ӈ"]='ng', | ||
["О" .. M]=' | |||
["Ө" .. M]=' | ["[ОO]" .. B]='A' .. D, ["[оo]" .. B]='a' .. D, | ||
["О" .. M .. B]='A' .. DA, ["о" .. M .. B]='a' .. DA, | |||
["О"]='O', ["о"]='o', | |||
["Ө" .. M]='O' .. DA, ["ө" .. M]='o' .. DA, | |||
["Ө"]='O' .. D, ["ө"]='o' .. D, | |||
["П"]='P', ["п"]='p', | ["П"]='P', ["п"]='p', | ||
["Р"]='R', ["р"]='r', | ["Р"]='R', ["р"]='r', | ||
["С"]='S', ["с"]='s', | ["С"]='S', ["с"]='s', | ||
["Т"]='T', ["т"]='t', | ["Т"]='T', ["т"]='t', | ||
[" | |||
["Ү" .. M]=' | ["У"]='U', ["у"]='u', | ||
["Ю"]='Ju', ["ю"]='ju', | |||
["Ү" .. M]='U' .. DA, ["ү" .. M]='u' .. DA, | |||
["Ү"]='U' .. D, ["ү"]='u' .. D, | |||
["Ф"]='F', ["ф"]='f', | ["Ф"]='F', ["ф"]='f', | ||
["ХӀ"]='H', ["хӀ"]='h', ["Х"]=' | |||
["Ц"]=' | ["ХӀ"]='H', ["хӀ"]='h', | ||
["Ч"]=' | ["Х"]='Ch', ["х"]='ch', | ||
["Ц"]='C', ["ц"]='c', | |||
["Ч"]='Cs', ["ч"]='cs', | |||
["Ш"]='Š', ["ш"]='š', | ["Ш"]='Š', ["ш"]='š', | ||
[" | ["[ЭE]" .. M .. B]='E' .. DA, ["[эe]" .. M .. B]='e' .. DA, | ||
[" | ["Э" .. B]='E' .. D, ["э" .. B]='e' .. D, | ||
[" | ["Э"]='E', ["э"]='e', | ||
[" | ["І"]='J', ["і"]='j', | ||
["Ь"]='Y', ["ь"]='y', | |||
["[Ъъ]"]="'", | |||
["([LNln])j([aeiouy])"]='%1y%2' | |||
}; | }; | ||
function export.tr(text, lang, sc) | function export.tr(text, lang, sc) | ||
for pat, repl in pairs( | |||
text = text:gsub("Й", "J"):gsub("й", "j") | |||
text = mw.ustring.toNFD(text) | |||
for pat, repl in pairs(tt_lepik) do | |||
text = mw.ustring.gsub(text, pat, repl) | text = mw.ustring.gsub(text, pat, repl) | ||
end | end | ||
return text | |||
text = mw.ustring.toNFD(text):gsub("([LNln])j([aeiouy])", "%1y%2") | |||
:gsub("O" .. B, "A" .. D):gsub("o" .. B, "a" .. D) | |||
:gsub(M,A) | |||
:gsub(A .. D, DA):gsub(D .. A, DA) | |||
return mw.ustring.toNFC(text):gsub("([Dd])z","%1c"):gsub("([Dd])ž","%1z") | |||
end | end | ||
return export | return export |
Latest revision as of 16:02, 26 November 2023
- The following documentation is located at Module:xchc-translit/doc.[edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
local u = mw.ustring.char
local M = u(0x0304) -- COMBINING MACRON
local B = u(0x0306) -- COMBINING BREVE
local D = u(0x0308) -- COMBINING DIAERESIS
local A = u(0x0301) -- COMBINING ACUTE
local DA = u(0x030B) -- COMBINING DOUBLE ACUTE
local export = {}
local MorA = "[" .. M .. A .. "]"
local tt_lepik = {
["Е" .. M .. D]='Jo' .. M, ["е" .. M .. D]='jo' .. M,
["Е" .. D]='Jo', ["е" .. D]='jo',
["А"]='A', ["а"]='a',
["Я"]='Ja', ["я"]='ja',
["Б"]='B', ["б"]='b',
["В"]='V', ["в"]='v',
["Г"]='G', ["г"]='g',
["Ғ"]='Gh', ["ғ"]='gh',
["Д"]='D', ["д"]='d', ["З"]='Z', ["з"]='z', ["Ж"]='Ž', ["ж"]='ž',
["Ы"]='I', ["ы"]='i',
["И"]='Ji', ["и"]='ji',
["К"]='K', ["к"]='k',
["Л"]='L', ["л"]='l',
["М"]='M', ["м"]='m',
["Н"]='N', ["н"]='n',
["Ӈ"]='Ng', ["ӈ"]='ng',
["[ОO]" .. B]='A' .. D, ["[оo]" .. B]='a' .. D,
["О" .. M .. B]='A' .. DA, ["о" .. M .. B]='a' .. DA,
["О"]='O', ["о"]='o',
["Ө" .. M]='O' .. DA, ["ө" .. M]='o' .. DA,
["Ө"]='O' .. D, ["ө"]='o' .. D,
["П"]='P', ["п"]='p',
["Р"]='R', ["р"]='r',
["С"]='S', ["с"]='s',
["Т"]='T', ["т"]='t',
["У"]='U', ["у"]='u',
["Ю"]='Ju', ["ю"]='ju',
["Ү" .. M]='U' .. DA, ["ү" .. M]='u' .. DA,
["Ү"]='U' .. D, ["ү"]='u' .. D,
["Ф"]='F', ["ф"]='f',
["ХӀ"]='H', ["хӀ"]='h',
["Х"]='Ch', ["х"]='ch',
["Ц"]='C', ["ц"]='c',
["Ч"]='Cs', ["ч"]='cs',
["Ш"]='Š', ["ш"]='š',
["[ЭE]" .. M .. B]='E' .. DA, ["[эe]" .. M .. B]='e' .. DA,
["Э" .. B]='E' .. D, ["э" .. B]='e' .. D,
["Э"]='E', ["э"]='e',
["І"]='J', ["і"]='j',
["Ь"]='Y', ["ь"]='y',
["[Ъъ]"]="'",
["([LNln])j([aeiouy])"]='%1y%2'
};
function export.tr(text, lang, sc)
text = text:gsub("Й", "J"):gsub("й", "j")
text = mw.ustring.toNFD(text)
for pat, repl in pairs(tt_lepik) do
text = mw.ustring.gsub(text, pat, repl)
end
text = mw.ustring.toNFD(text):gsub("([LNln])j([aeiouy])", "%1y%2")
:gsub("O" .. B, "A" .. D):gsub("o" .. B, "a" .. D)
:gsub(M,A)
:gsub(A .. D, DA):gsub(D .. A, DA)
return mw.ustring.toNFC(text):gsub("([Dd])z","%1c"):gsub("([Dd])ž","%1z")
end
return export