A modult a Modul:fa-common/doc lapon tudod dokumentálni

local export = {}

-- Return a ZWNJ character, if the word needs it
function export.ZWNJ(word)
	if mw.ustring.match(word, "[بپتثجچحخسشصضطظعغفقکگلمنهی]", -1) then
		return "\226\128\140" -- U+200C ZERO WIDTH NON-JOINER
	end
	return "" -- empty string
end

-- Add stress mark to transliteration
function export.stress(tr)
	if not mw.ustring.gmatch(tr, "[áéíóúấếố]") then
		tr = mw.ustring.gsub(tr,
			"([aeiouâêô])([^aeiouâêô]*)$",
			function (m, cons)
				return ({
					["a"] = "á", ["e"] = "é", ["i"] = "í", ["o"] = "ó",
					["u"] = "ú", ["â"] = "ấ", ["ê"] = "ế", ["ô"] = "ố"
				})[m] .. cons
			end)
	end
	
	return tr
end

function export.ending(word, tr)
	if mw.ustring.sub(word, -1) == "ا" then
		return "ā"
	elseif mw.ustring.sub(word, -1) == "ه" and (not tr or mw.ustring.sub(tr, -1) == "e" or mw.ustring.sub(tr, -1) == "a") then
		return "a"
	else
		return "c"
	end
end

function export.pl_ending(pl)
	if mw.ustring.sub(pl, -2) == "ها" then
		return "ها"
	elseif mw.ustring.sub(pl, -2) == "ان" then
		return "ان"
	elseif mw.ustring.sub(pl, -2) == "ات" then
		return "ات"
	else
		return nil -- it is a mokassar plural
	end
end

function export.pluralize(word, tr, pl_ending)
	local pl, pltr = word, tr
		
	if pl_ending == "ها" then
		pl = word .. export.ZWNJ(word) .. "ها"
		if tr then pltr = tr .. "-hâ" end
	elseif pl_ending == "ان" then
		if export.ending(word, tr) == "a" then
			pl = mw.ustring.gsub(word, "(.-)ه",
								 "%1گان")
			if tr then pltr = tr .. "gân" end
		else
			pl = word .. "ان"
			if tr then pltr = tr .. "ân" end
		end
	elseif pl_ending == "ات" then
		if export.ending(word, tr) == "a" then
			pl = mw.ustring.gsub(word, "(.-)ه",
								 "%1ات")
			if tr then pltr = mw.ustring.gsub(tr, "(.-)[ea]$", '%1ât') end
		else
			pl = word .. "ات"
			if tr then pltr = tr .. "ât" end
		end
	end

	return pl, pltr
end

function plurals(word, tr, pls)
	local plurals = {}
	
	for i, pl in ipairs(pls) do
		plurals[i] = {export.pluralize(word, tr, export.pl_ending(pl[1]))}
	end

	return plurals
end

return export