local export = {}
local m_str_utils = require("Module:string utilities")
local gsub = m_str_utils.gsub
local U = m_str_utils.char
local fatHatan = U(0x64B)
local zabar = U(0x64E)
local zer = U(0x650)
local pesh = U(0x64F)
local tashdid = U(0x651) -- also called shadda
local jazm = "ْ"
local he = "ه"
local zwnj = U(0x200C)
local highhmz = U(0x654)
local alef_wasla = "ٱ"
local balticons = "ڃڇڑڗݜݨݩǩ"
local consonants = "ءبپتټٹثجچحخدډڈذرزژسشصضطظعغفقکگلمنؤهئ"
local consonants2 = "ءبپتټٹثجچحخدډڈذرزژسشصضطظعغفقکگلمنوؤهیئyw" .. balticons -- including semivowels
local ain = 'ع'
local alif = 'ا'
local ye = 'ی'
local ye2 = 'ئ'
local ye3 = 'ے' -- for balti
local vao = "و"
local function clscheck(text, lang, sc)
return require("Module:fa-cls-translit").tr(text, lang, sc)
end
-- this has the fa-cls-translit perform the diactic check and other basic functions
function export.tr(text, lang, sc)
text = gsub(text, alif .. fatHatan , fatHatan)
text = gsub(text, "([" .. consonants2 .. "])" .. alif , "%1" .. zabar .. alif)
text = gsub(text, pesh .. vao .. "([" .. consonants .. jazm .. "])", zabar .. vao .. "%1" )
text = gsub(text, zer .. ye .. "([" .. consonants .. jazm .. "])", zabar .. ye .. "%1" )
-- alows an alif without a zabar to work
text = clscheck(text, lang, sc)
if text == nil then --prevent module from breaking if diacritic check fails
return nil
end
text = gsub(text, "e" .. " ", "e-ye")
text = gsub(text, "iy", "ēy")
text = gsub(text, "y%-i", "ē-yi")
text = gsub(text, "q", "ğ")
text = gsub(text, "ww", "vv")
text = gsub(text, "i", "e")
text = gsub(text, "u", "o")
text = gsub(text, "ē", "i")
text = gsub(text, "ay([^yaâeoiu])", "ī%1")
text = gsub(text, "ī", "ey")
text = gsub(text, "ō", "u")
text = gsub(text, "ā", "â")
text = gsub(text, "w([aâeoiu])", "v%1")
text = gsub(text, "aw", "ū")
text = gsub(text, "w", "v")
text = gsub(text, "ū", "ow")
return text
end
return export