Module:sa-utilities/translit/IAST-to-SLP1
Jump to navigation
Jump to search
- The following documentation is located at Module:sa-utilities/translit/IAST-to-SLP1/documentation. [edit]
- Useful links: root page • root page’s subpages • links • transclusions • testcases • sandbox
local export = {}
local U = require("Module:string/char")
local acute = U(0x301) -- combining acute
local grave = U(0x300) -- combining grave
local composed_accents = {
['á'] = 'a/', ['à'] = 'a\\',
['í'] = 'i/', ['ì'] = 'i\\',
['ú'] = 'u/', ['ù'] = 'u\\',
['é'] = 'e/', ['è'] = 'e\\',
['ó'] = 'o/', ['ò'] = 'o\\',
[acute] = '/', [grave] = '\\',
}
local normalize_accents = {
['á'] = '/', ['à'] = '\\',
}
local function change_accent(text)
-- normalize accent placement
text = mw.ustring.gsub(text, '([áà])([iu])', function(a, iu) return "a" .. iu .. normalize_accents[a] end)
text = mw.ustring.gsub(text, '.', composed_accents)
return text
end
local function detect_lateral_flap(text)
-- convert jihvamuliya first
text = mw.ustring.gsub(text, "x", "Z")
-- an "ḷ" initially before a non-vowel or between two non-vowels vowel is assumed to be "x"
text = mw.ustring.gsub(text, "^ḷ([^aāiīuūeoṛṝḷḹ])", "x%1")
text = mw.ustring.gsub(text, "([^aāiīuūeoṛṝḷḹ/\\])ḷ([^aāiīuūeoṛṝḷḹ])", "%1x%2")
-- all others are assumed to be "L"
text = mw.ustring.gsub(text, "ḷ", "L")
return text
end
local tt = {
[1] = {
--consonants
["kh"] = "K", ["gh"] = "G",
["ch"] = "C", ["jh"] = "J",
["ṭh"] = "W", ["ḍh"] = "Q",
["th"] = "T", ["dh"] = "D",
["ph"] = "P", ["bh"] = "B",
},
[2] = {
-- vowels
["ai"] = "E",
["au"] = "O",
},
[3] = {
-- chandrabindu
['m̐'] = '~'
},
[4] = {
--consonants
["ṅ"] = "N",
["ñ"] = "Y",
["ṭ"] = "w", ["ḍ"] = "q", ["ṇ"] = "R",
["ś"] = "S", ["ṣ"] = "z", -- ["ḷ"] = "L"
--vowels
["ā"] = "A",
["ī"] = "I",
["ū"] = "U",
["ṛ"] = "f", ["ṝ"] = "F",
["ḹ"] = "X", -- ["ḷ"] = "x",
-- avagraha
["’"] = "",
--other
["ṃ"] = "M",
["ḥ"] = "H", -- ["x"] = "Z"
["f"] = "V",
},
}
function export.tr(text, lang, sc)
text = mw.ustring.toNFC(text)
text = change_accent(text)
text = detect_lateral_flap(text)
text = mw.ustring.gsub(text, '[kgcjṭḍtdpb]h', tt[1])
text = mw.ustring.gsub(text, 'a[iu]', tt[2])
text = mw.ustring.gsub(text, 'm̐', tt[3])
text = mw.ustring.gsub(text, '.', tt[4])
return text
end
return export