This module will transliterate text in the Brahmi script. It is used to transliterate Ashokan Prakrit, Prakrit, Khotanese, Old Tamil, Pali, Sanskrit, and Tumshuqese.
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:Brah-translit/testcases.
tr(text, lang, sc)
text
written in the script specified by the code sc
, and language specified by the code lang
.nil
.local export = {}
local m_str_utils = require("Module:string utilities")
local gsub = m_str_utils.gsub
local match = m_str_utils.match
local toNFC = mw.ustring.toNFC
local u = m_str_utils.char
local consonants = {
--consonants
='k', ='kh', ='g', ='gh', ='ṅ',
='c', ='ch', ='j', ='jh', ='ñ',
='ṭ', ='ṭh', ='ḍ', ='ḍh', ='ṇ',
='t', ='th', ='d', ='dh', ='n',
='p', ='ph', ='b', ='bh', ='m',
='y', ='r', ='l', ='v', ='ḷ',
='ś', ='ṣ', ='s', ='h',
-- Old Tamil
= 'ḷ',
='ḻ', ='ṟ', ='ṉ',
}
local diacritics = {
--matras
='ā', ='i', ='ī', ='u', ='ū', ='ṛ', ='ṝ',
='l̥', ='l̥̄', ='e', ='ai', ='o', ='au', ='',
--bhattiprolu aa
='ā',
--Old Tamil
='ĕ', ='ŏ', ='',
-- Old Tamil up to and including Unicode 13.0
='ĕ', ='ŏ', -- Two character vowels!
}
local diatrema = {
='ï', ='ü',
}
local tt = {
--vowels
='a', ='ā', ='i', ='ī', ='u', ='ū', ='ṛ', ='ṝ',
='l̥', ='l̥̄', ='e', ='ai', ='o', ='au',
='ĕ', ='ŏ', --Old Tamil
-- chandrabindu
='m̐', --until a better method is found
-- anusvara
='ṃ', --until a better method is found
-- visarga
='ḥ',
--numerals
='0', ='1', ='2', ='3', ='4', ='5', ='6', ='7', ='8', ='9',
--punctuation
='.', --danda
='.' --double danda
}
function export.tr(text, lang, sc)
if sc ~= "Brah" then
return nil
end
if lang == "inc-pra" then -- Route contextually shortened Prakrit vowels through Old Tamil short vowels
text = gsub(text, '(𑁂)(?)(𑁆)(?)', '𑁳%2%3%4')
text = gsub(text, '(𑀏)(?)(𑁆)(?)', '𑁱%2%3%4')
text = gsub(text, '(𑁄)(?)(𑁆)(?)', '𑁴%2%3%4')
text = gsub(text, '(𑀑)(?)(𑁆)(?)', '𑁲%2%3%4')
end
text = gsub(
text,
'()'..
'(?𑁆?)'..
'(?)',
function(c, d, e)
if d == "" and e ~= "" then
return consonants .. 'a' .. diatrema
elseif e ~= "" then
return consonants .. diacritics .. tt
elseif d == "" then
return consonants .. 'a'
else
return consonants .. diacritics
end
end)
-- Adjacent vowel letters needing dieresis
text = gsub(text, '()()', function(a, b) return tt..diatrema end)
text = gsub(text, '.', tt)
if (lang == 'sa' or lang == 'pi') and match(text, 'l̥') then
text = gsub(text, 'l̥', 'ḷ')
text = toNFC(text)
end
-- Old Tamil uses macron v. plain for 'e' and 'o'.
if (lang == 'oty') then
text = gsub(text, '.', {e='ē', o='ō', ='e', ='o'})
end
return text
end
return export