This module will transliterate Dhivehi language text per WT:DV TR.
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:dv-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 u = require("Module:string/char")
local consonants = {
= 'h', = 'ṣ', = 'n', = 'r', = 'b',
= 'ḷ', = 'k', = '', = 'v', = 'm',
= 'f', = 'd', = 't', = 'l', = 'g',
= 'ñ', = 's', = 'ḍ', = 'z', = 'ṭ',
= 'y', = 'p', = 'j', = 'c', = 'ṇ',
= 'ṯ', = 'ḥ', = 'x', = 'ź', = 'ž',
= 'š', = 'ş', = 'ḋ', = 'ţ', = 'ẓ',
= 'ʿ', = 'ġ', = 'q', = 'w',
}
-- this controls prenasalized stop digraphs consisting of ނ and a voiced stop
local prenasal = {
= 'ᵐ',
= 'ⁿ', = 'ⁿ',
= 'ⁿ',
}
local diacritics = {
= 'a', = 'ā', = 'i', = 'ī', = 'u',
= 'ū', = 'e', = 'ē', = 'o', = 'ō', = '',
--no diacritic
= ''
}
function export.tr(text, lang, sc)
if sc == "Diak" then
return nil
end
-- final k
text = mw.ustring.gsub(text, 'އް$', 'ކް')
-- V + sukun + C -> CC
text = mw.ustring.gsub(
text,
'އ' .. u(0x07B0) .. '()',
function (c)
return c .. c
end)
-- prenasalized digraphs
text = mw.ustring.gsub(
text,
'ނ()',
function(c)
return (prenasal or "n") .. c
end)
-- handle all standard akuru (C+V or C+virama) units
text = mw.ustring.gsub(
text,
'()(?)',
function(c, d)
if mw.ustring.match(c, '') and d == u(0x07B0) then
return consonants .. '̊'
else
return consonants .. diacritics
end
end)
return text
end
return export