Bu Lua modülü, şu şablonların çıktısını vermektedir:
-- For Lao script, see https://www.unicode.org/charts/PDF/U0E80.pdf (Unicode 12.0+)
local export = {}
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local sub = mw.ustring.sub
local u = mw.ustring.char
local c = {
= {
= "क", = "ख", = "ग", = "घ", = "ङ",
= "च", = "छ", = "ज", = "झ", = "ञ",
= "ट", = "ठ", = "ड", = "ढ", = "ण",
= "त", = "थ", = "द", = "ध", = "न",
= "प", = "फ", = "ब", = "भ", = "म",
= "य", = "र", = "ल", = "व", = "स",
= "ह", = "ळ",
= "अ", = "आ",
= "इ", = "ई",
= "उ", = "ऊ",
= "ए",
= "ओ",
= "ं",
= "",
},
= {
= "ক", = "খ", = "গ", = "ঘ", = "ঙ",
= "চ", = "ছ", = "জ", = "ঝ", = "ঞ",
= "ট", = "ঠ", = "ড", = "ঢ", = "ণ",
= "ত", = "থ", = "দ", = "ধ", = "ন",
= "প", = "ফ", = "ব", = "ভ", = "ম",
= "য", = "র", = "ল", = "ৰ", = "স",
= "হ", = "ল়",
= "অ", = "আ",
= "ই", = "ঈ",
= "উ", = "ঊ",
= "এ",
= "ও",
= "ং",
= "",
},
= {
= "𑀓", = "𑀔", = "𑀕", = "𑀖", = "𑀗",
= "𑀘", = "𑀙", = "𑀚", = "𑀛", = "𑀜",
= "𑀝", = "𑀞", = "𑀟", = "𑀠", = "𑀡",
= "𑀢", = "𑀣", = "𑀤", = "𑀥", = "𑀦",
= "𑀧", = "𑀨", = "𑀩", = "𑀪", = "𑀫",
= "𑀬", = "𑀭", = "𑀮", = "𑀯", = "𑀲",
= "𑀳", = "𑀴",
= "𑀅", = "𑀆",
= "𑀇", = "𑀈",
= "𑀉", = "𑀊",
= "𑀏",
= "𑀑",
= "𑀁",
= "",
},
= {
= "ក", = "ខ", = "គ", = "ឃ", = "ង",
= "ច", = "ឆ", = "ជ", = "ឈ", = "ញ",
= "ដ", = "ឋ", = "ឌ", = "ឍ", = "ណ",
= "ត", = "ថ", = "ទ", = "ធ", = "ន",
= "ប", = "ផ", = "ព", = "ភ", = "ម",
= "យ", = "រ", = "ល", = "វ", = "ស",
= "ហ", = "ឡ",
= "អ", = "អា",
= "ឥ", = "ឦ",
= "ឧ", = "ឨ",
= "ឯ",
= "ឲ",
= "ំ",
= "",
},
= {
= "က", = "ခ", = "ဂ", = "ဃ", = "င",
= "စ", = "ဆ", = "ဇ", = "ဈ", = "ဉ",
= "ဋ", = "ဌ", = "ဍ", = "ဎ", = "ဏ",
= "တ", = "ထ", = "ဒ", = "ဓ", = "န",
= "ပ", = "ဖ", = "ဗ", = "ဘ", = "မ",
= "ယ", = "ရ", = "လ", = "ဝ", = "သ",
= "ဟ", = "ဠ",
= "အ", = "အာ",
= "ဣ", = "ဤ",
= "ဥ", = "ဦ",
= "ဧ",
= "ဩ",
= "ံ",
= "",
},
= {
= "ක", = "ඛ", = "ග", = "ඝ", = "ඞ",
= "ච", = "ඡ", = "ජ", = "ඣ", = "ඤ",
= "ට", = "ඨ", = "ඩ", = "ඪ", = "ණ",
= "ත", = "ථ", = "ද", = "ධ", = "න",
= "ප", = "ඵ", = "බ", = "භ", = "ම",
= "ය", = "ර", = "ල", = "ව", = "ස",
= "හ", = "ළ",
= "අ", = "ආ",
= "ඉ", = "ඊ",
= "උ", = "ඌ",
= "එ",
= "ඔ",
= "ං",
= "",
},
= {
= "ก", = "ข", = "ค", = "ฆ", = "ง",
= "จ", = "ฉ", = "ช", = "ฌ", = "ญ",
= "ฏ", = "ฐ", = "ฑ", = "ฒ", = "ณ",
= "ต", = "ถ", = "ท", = "ธ", = "น",
= "ป", = "ผ", = "พ", = "ภ", = "ม",
= "ย", = "ร", = "ล", = "ว", = "ส",
= "ห", = "ฬ",
= "อ", = "อา",
= "อิ", = "อี",
= "อุ", = "อู",
= "อเ", --to be swapped later
= "อโ", --to be swapped later
= "ํ",
= "",
},
= {
= "ᨠ", = "ᨡ", = "ᨣ", = "ᨥ", = "ᨦ",
= "ᨧ", = "ᨨ", = "ᨩ", = "ᨫ", = "ᨬ",
= "ᨭ", = "ᨮ", = "ᨯ", = "ᨰ", = "ᨱ",
= "ᨲ", = "ᨳ", = "ᨴ", = "ᨵ", = "ᨶ",
= "ᨷ", = "ᨹ", = "ᨻ", = "ᨽ", = "ᨾ",
= "ᨿ", = "ᩁ", = "ᩃ", = "ᩅ", = "ᩈ",
= "ᩉ", = "ᩊ",
= "ᩋ", = "ᩋᩣ",
= "ᩍ", = "ᩎ",
= "ᩏ", = "ᩐ",
= "ᩑ",
= "ᩋᩰ",
= "ᩴ",
= "",
},
= {
= "ກ", = "ຂ", = "ຄ", = "ຆ", = "ງ",
= "ຈ", = "ຉ", = "ຊ", = "ຌ", = "ຎ",
= "ຏ", = "ຐ", = "ຑ", = "ຒ", = "ຓ",
= "ຕ", = "ຖ", = "ທ", = "ຘ", = "ນ",
= "ປ", = "ຜ", = "ພ", = "ຠ", = "ມ",
= "ຍ", = "ຣ", = "ລ", = "ວ", = "ສ",
= "ຫ", = "ຬ",
= "ອ", = "ອາ",
= "ອິ", = "ອີ",
= "ອຸ", = "ອູ",
= "ອເ", --to be swapped later
= "ອໂ", --to be swapped later
= "ໍ",
= "",
},
}
local v = {
= {
= "", = "ा",
= "ि", = "ी",
= "ु", = "ू",
= "े",
= "ो",
= "",
},
= {
= "", = "া",
= "ি", = "ী",
= "ু", = "ূ",
= "ে",
= "ো",
= "",
},
= {
= "", = "𑀸",
= "𑀺", = "𑀻",
= "𑀼", = "𑀽",
= "𑁂",
= "𑁄",
= "",
},
= {
= "", = "ា",
= "ិ", = "ី",
= "ុ", = "ូ",
= "េ",
= "ោ",
= "",
},
= {
= "", = "ာ",
= "ိ", = "ီ",
= "ု", = "ူ",
= "ေ",
= "ော",
= "",
},
= {
= "", = "ා",
= "ි", = "ී",
= "ු", = "ූ",
= "ෙ",
= "ො",
= "",
},
= {
= "", = "า",
= "ิ", = "ี",
= "ุ", = "ู",
= "เ",
= "โ",
= "",
},
= {
= "", = "ᩣ",
= "ᩥ", = "ᩦ",
= "ᩩ", = "ᩪ",
= "ᩮ",
= "ᩮᩣ",
= "",
},
= {
= "", = "າ",
= "ິ", = "ີ",
= "ຸ", = "ູ",
= "ເ",
= "ໂ",
= "",
},
}
local s = {
= {
= "०", = "१", = "२", = "३", = "४",
= "५", = "६", = "७", = "८", = "९",
= "॥", = "।", = "-",
},
= {
= "০", = "১", = "২", = "৩", = "৪",
= "৫", = "৬", = "৭", = "৮", = "৯",
= ".", = ",", = "-",
},
= {
= "𑁦", = "𑁧", = "𑁨", = "𑁩", = "𑁪",
= "𑁫", = "𑁬", = "𑁭", = "𑁮", = "𑁯",
= "𑁈", = "𑁇", = "-",
},
= {
= "០", = "១", = "២", = "៣", = "៤",
= "៥", = "៦", = "៧", = "៨", = "៩",
= "៕", = "។", = "-",
},
= {
= "၀", = "၁", = "၂", = "၃", = "၄",
= "၅", = "၆", = "၇", = "၈", = "၉",
= "။", = "၊", = "-",
},
= {
= "0", = "1", = "2", = "3", = "4",
= "5", = "6", = "7", = "8", = "9",
= ".", = ",", = "-",
},
= {
= "๐", = "๑", = "๒", = "๓", = "๔",
= "๕", = "๖", = "๗", = "๘", = "๙",
= "๚", = "ฯ", = "-",
},
= {
= "᪐", = "᪑", = "᪒", = "᪓", = "᪔",
= "᪕", = "᪖", = "᪗", = "᪘", = "᪙",
= "᪩", = "᪨", = "-",
},
= {
= "໐", = "໑", = "໒", = "໓", = "໔",
= "໕", = "໖", = "໗", = "໘", = "໙",
= "ຯຯ", = "ຯ", = "-",
},
}
local join = {
= "्",
= "্",
= "𑁆",
= "្",
= "္",
= u(0x200d, 0x0dca),
= "ฺ",
= "᩠",
= "຺",
}
local kill = {
= "्",
= "্",
= "𑁆",
= "៑",
= "်",
= "්",
= "ฺ",
= "᩺",
= "຺",
}
local sinh_cjct = {
= "ක්ව", = "ත්ථ", = "ත්ව",
= "න්ථ", = "න්ද", = "න්ධ", = "න්ව"
}
local nukta = u(0x09bc) -- Just list all those used here.
local variations = {
= {
= "ၛ", = "ဣဳ", = "ဥု", = "ဨ", = "ဳ", -- for IM fix below
--Unicode doesn't have "great nya" so just leave ည္ည as is. (It looks like ည with one extra curve.)
},
= {
= "ၵ", = "ၶ", = "ၷ", = "ꧠ", = "ၸ",
= "ꧡ", = "ၹ", = "ꧢ", = "ၺ", = "ၺ္ၺ", = "ꩦ",
= "ꩧ", = "ꩨ", = "ꩩ", = "ꧣ", = "ၻ",
= "ꩪ", = "ၼ", = "ၽ", = "ၿ", = "ꧤ",
= "ႁ", = "ꩮ", = "ဢ", = "ဢိ", = "ဢီ",
= "ဢု", = "ဢူ", = "ဢေ", = "ဢေႃ", = "ႃ", = "ႃ",
--Unicode doesn't have "Shan great sa" so just leave ဿ as is.
},
= {
--includes all Old Shan and the followings
= "သ်သ", = "်",
},
}
-- Unnatural sequences of combining marks are frequently unreadable. Therefore, they are displayed on
-- bearers so that the code can be understood and, if necessary, corrected.
local dc = function(text) return gsub(text, "", "") end -- Discard bearer
local transform
function export.mono_form(text, script)
local result = text
if script == "Thai" then
result = gsub(result, "ํ", "งฺ")
result = gsub(result, "()ฺ", "ั%1ฺ")
result = gsub(result, "()()", "%1ะ%2")
result = gsub(result, "()()", "%1ะ%2") --twice
result = gsub(result, "()$", "%1ะ")
-- result = gsub(result, "()()ั", "%1%2")
result = gsub(result, dc("()()อั"), "%1%2")
result = gsub(result, "()()()", "%1%2")
result = gsub(result, "^ั", "")
result = gsub(result, "()ั", "%1")
result = gsub(result, "ฺ", "")
elseif script == "Laoo" then
-- Calculating transform in argument list of gsub() fails!
if not transform then
transform = {
{dc("ອໍ"), dc("ງອ຺")},
{dc("()ອ຺"), dc("ອັ%1ອ຺")},
{dc("()()"), "%1ະ%2"},
{dc("()()"), "%1ະ%2"}, -- twice!
{"()$", "%1ະ"},
{dc("()()ອັ"), "%1%2"},
{dc("()()()"), "%1%2"},
{dc("^ອັ"), ""},
{dc("()ອັ"), "%1"},
{dc("ອ຺"), ""}
}
end
for _, v in ipairs(transform) do
result = gsub(result, v, v)
end
end
return result
end
local function return_error(text)
return error(("Unrecognised part: \"%s\""):format(text))
end
function export.tr(text, script, options)
if type(text) == "table" then
options = {}
options.impl = text.args
options.variation = text.args --ID of variation:
text, script = text.args, text.args
end
if script == "Latn" then
return text
end
if not s then
return nil
end
text = mw.ustring.lower(text)
text = gsub(text, "", s)
-- Compose patterns for processing onsets.
local letter = "..nukta.."]?"
local letter_pair = "("..letter..")("..letter..")"
for word in mw.ustring.gmatch(text, "+") do
local word_conv, orig_word = {}, word
word = gsub(word, "(ṃ?)", "%1 ")
word = gsub(word, " $", "")
for syllable in mw.text.gsplit(word, " ") do
if not match(syllable, "$") then
syllable = syllable .. "a" .. kill
end
syllable = gsub(syllable, "^(*)()(ṃ?)(?)$", function(onset, vowel, coda, optJoin)
if onset == "" then
onset = vowel
vowel = ""
end
if not c then
onset = gsub(onset, ".h", c)
onset = gsub(onset, ".", c)
-- Join pairs of consonants
onset = gsub(onset, letter_pair, "%1"..join.."%2")
-- Join adjacent consonants that were in different pairs.
onset = gsub(onset, letter_pair, "%1"..join.."%2")
else
onset = c
end
return onset .. (v or return_error(vowel)) .. c .. optJoin
end)
table.insert(word_conv, syllable)
end
word = table.concat(word_conv, "")
if script == "Thai" then
word = gsub(word, "(.)()", "%2%1")
elseif script == "Mymr" then
word = gsub(word, "င္", "င်္")
word = gsub(word, "(င်္)()(ေ?)ာ", "%1%2%3ါ")
word = gsub(word, "္", { = "ျ", = "ြ" }) --these not need tall aa
word = gsub(word, "^()(ေ?)ာ", "%1%2ါ")
word = gsub(word, "()()(ေ?)ာ", "%1%2%3ါ")
word = gsub(word, "()(္)(ေ?)ာ", "%1%2%3ါ")
word = gsub(word, "္", { = "ွ", = "ှ" })
word = gsub(word, "ဉ္ဉ", "ည")
word = gsub(word, "သ္သ", "ဿ")
if not (options and options.variation) then
-- Arg options should be optional, so nothing to do.
elseif options.variation == "1" then
word = gsub(word, ".", variations.Mon)
word = gsub(word, "ိံ", "ီ") --fix IM
elseif options.variation == "2" then
if match(word, "ဿ") then
-- Character is missing. Do nothing.
else
word = gsub(word, ".", variations.OldShan)
end
elseif options.variation == "3" then
word = gsub(word, ".", variations.OldShan)
word = gsub(word, ".", variations.NewShan)
word = gsub(word, "်".."်", "်") --fix nga
end
elseif script == "Lana" then
word = gsub(word, "ᨦ᩠", "ᩘ")
word = gsub(word, "^()(ᩮ?)ᩣ", "%1%2ᩤ")
word = gsub(word, "()()(ᩮ?)ᩣ", "%1%2%3ᩤ")
word = gsub(word, "()(᩠)(ᩮ?)ᩣ", "%1%2%3ᩤ")
word = gsub(word, "᩠", { = "ᩕ", = "ᩖ" })
word = gsub(word, "()᩠ᨮ", "%1ᩛ")
word = gsub(word, "()᩠ᨻ", "%1ᩛ")
word = gsub(word, "ᩈ᩠ᩈ", "ᩔ")
elseif script == "Beng" then
word = gsub(word, "ৰ্", "ৰ"..u(0x200d).."্") -- ৰ্(v-) needs ZWJ to display correctly
elseif script == "Sinh" then
local js = join
word = gsub(word, "("..js..")()", u(0xdca, 0x200d).."%2")
word = gsub(word,""..js.."", sinh_cjct)
elseif script == "Laoo" then
word = gsub(word, "(.)()", "%2%1")
end
text = gsub(text, orig_word, word, 1)
end
local impl = options and options.impl or 'yes'
if impl == 'no' then text = export.mono_form(text, script) end
return text
end
return export