Module:fa-ira-translit

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