<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Auz-afg-translit</id>
	<title>Module:uz-afg-translit - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Auz-afg-translit"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:uz-afg-translit&amp;action=history"/>
	<updated>2026-04-22T03:14:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:uz-afg-translit&amp;diff=495383&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:uz-afg-translit&amp;diff=495383&amp;oldid=prev"/>
		<updated>2026-04-21T12:01:03Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:01, 21 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:uz-afg-translit&amp;diff=495382&amp;oldid=prev</id>
		<title>wikt&gt;Surjection at 21:10, 11 September 2025</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:uz-afg-translit&amp;diff=495382&amp;oldid=prev"/>
		<updated>2025-09-11T21:10:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
local m_str_utils = require(&amp;quot;Module:string utilities&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local gcodepoint = m_str_utils.gcodepoint&lt;br /&gt;
local rfind = m_str_utils.find&lt;br /&gt;
local rsubn = m_str_utils.gsub&lt;br /&gt;
local rmatch = m_str_utils.match&lt;br /&gt;
local rsplit = m_str_utils.split&lt;br /&gt;
local U = m_str_utils.char&lt;br /&gt;
local unpack = unpack or table.unpack -- Lua 5.2 compatibility&lt;br /&gt;
&lt;br /&gt;
-- assigned below&lt;br /&gt;
local has_diacritics&lt;br /&gt;
&lt;br /&gt;
-- version of rsubn() that discards all but the first return value&lt;br /&gt;
local function rsub(term, foo, bar)&lt;br /&gt;
	local retval = rsubn(term, foo, bar)&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local zwnj = U(0x200C) -- zero-width non-joiner&lt;br /&gt;
local alif_madda = U(0x622)&lt;br /&gt;
local alif_hamza_below = U(0x625)&lt;br /&gt;
local alif = U(0x627)&lt;br /&gt;
local taa_marbuuTa = U(0x629)&lt;br /&gt;
local laam = U(0x644)&lt;br /&gt;
local waaw = U(0x648)&lt;br /&gt;
local alif_maqSuura = &amp;quot;یٰ&amp;quot;&lt;br /&gt;
local yaa = &amp;quot;ی&amp;quot;&lt;br /&gt;
local fatHataan = U(0x64B)&lt;br /&gt;
local Dammataan = U(0x64C)&lt;br /&gt;
local kasrataan = U(0x64D)&lt;br /&gt;
local fatHa = U(0x64E)&lt;br /&gt;
local Damma = U(0x64F)&lt;br /&gt;
local kasra = U(0x650)&lt;br /&gt;
local shadda = U(0x651)&lt;br /&gt;
local sukuun = U(0x652)&lt;br /&gt;
local waaw_maj = &amp;quot;ۉ&amp;quot;&lt;br /&gt;
local yaa_maj =	&amp;quot;ې&amp;quot;&lt;br /&gt;
local dagger_alif = U(0x670)&lt;br /&gt;
local alif_waSl = U(0x671)&lt;br /&gt;
--local zwj = U(0x200D) -- zero-width joiner&lt;br /&gt;
local lrm = U(0x200E) -- left-to-right mark&lt;br /&gt;
local rlm = U(0x200F) -- right-to-left mark&lt;br /&gt;
-- Occurs after al- in allaḏī and variants so that we can implement elision of&lt;br /&gt;
-- a- after a preceding vowel, after which we remove the marker.&lt;br /&gt;
local alladi_marker = U(0xFFF0)&lt;br /&gt;
&lt;br /&gt;
local tt = {&lt;br /&gt;
	-- consonants&lt;br /&gt;
	[&amp;quot;ب&amp;quot;]=&amp;quot;b&amp;quot;,&lt;br /&gt;
	[&amp;quot;پ&amp;quot;]=&amp;quot;p&amp;quot;, &lt;br /&gt;
	[&amp;quot;ت&amp;quot;]=&amp;quot;t&amp;quot;, &lt;br /&gt;
	[&amp;quot;ث&amp;quot;]=&amp;quot;s&amp;quot;, &lt;br /&gt;
	[&amp;quot;ج&amp;quot;]=&amp;quot;j&amp;quot;, &lt;br /&gt;
	[&amp;quot;چ&amp;quot;]=&amp;quot;ch&amp;quot;, &lt;br /&gt;
	[&amp;quot;ح&amp;quot;]=&amp;quot;h&amp;quot;, &lt;br /&gt;
	[&amp;quot;خ&amp;quot;]=&amp;quot;x&amp;quot;,&lt;br /&gt;
	[&amp;quot;د&amp;quot;]=&amp;quot;d&amp;quot;, [&amp;quot;ذ&amp;quot;]=&amp;quot;z&amp;quot;, [&amp;quot;ر&amp;quot;]=&amp;quot;r&amp;quot;, &lt;br /&gt;
	[&amp;quot;ز&amp;quot;]=&amp;quot;z&amp;quot;, &lt;br /&gt;
	[&amp;quot;ژ&amp;quot;]=&amp;quot;zh&amp;quot;, &lt;br /&gt;
	[&amp;quot;س&amp;quot;]=&amp;quot;s&amp;quot;, [&amp;quot;ش&amp;quot;]=&amp;quot;sh&amp;quot;,&lt;br /&gt;
	[&amp;quot;ص&amp;quot;]=&amp;quot;s&amp;quot;, &lt;br /&gt;
	[&amp;quot;ض&amp;quot;]=&amp;quot;z&amp;quot;,&lt;br /&gt;
	[&amp;quot;ط&amp;quot;]=&amp;quot;t&amp;quot;, &lt;br /&gt;
	[&amp;quot;ظ&amp;quot;]=&amp;quot;z&amp;quot;, &lt;br /&gt;
	[&amp;quot;ع&amp;quot;]=&amp;quot;&amp;quot;, &lt;br /&gt;
	[&amp;quot;غ&amp;quot;]=&amp;quot;gʻ&amp;quot;,&lt;br /&gt;
	[&amp;quot;ف&amp;quot;]=&amp;quot;f&amp;quot;, &lt;br /&gt;
	[&amp;quot;ق&amp;quot;]=&amp;quot;q&amp;quot;, &lt;br /&gt;
	[&amp;quot;ک&amp;quot;]=&amp;quot;k&amp;quot;, &lt;br /&gt;
	[&amp;quot;گ&amp;quot;]=&amp;quot;g&amp;quot;,&lt;br /&gt;
	[&amp;quot;ل&amp;quot;]=&amp;quot;l&amp;quot;, &lt;br /&gt;
	[&amp;quot;م&amp;quot;]=&amp;quot;m&amp;quot;, &lt;br /&gt;
	[&amp;quot;ن&amp;quot;]=&amp;quot;n&amp;quot;,&lt;br /&gt;
	[&amp;quot;ه&amp;quot;]=&amp;quot;h&amp;quot;,&lt;br /&gt;
	-- toʾ marbūta (special) - always after a fátḥa (a), silent at the end of&lt;br /&gt;
	-- an utterance, &amp;quot;t&amp;quot; in ʾizofa or with pronounced tanwīn. We catch&lt;br /&gt;
	-- most instances of toʾ marbūta before we get to this stage.&lt;br /&gt;
	[taa_marbuuTa]=&amp;quot;t&amp;quot;, -- toʾ marbūta = ة&lt;br /&gt;
	-- control characters&lt;br /&gt;
	[zwnj]=&amp;quot;-&amp;quot;, -- ZWNJ (zero-width non-joiner)&lt;br /&gt;
	-- [zwj]=&amp;quot;&amp;quot;, -- ZWJ (zero-width joiner)&lt;br /&gt;
	-- rare letters&lt;br /&gt;
&lt;br /&gt;
	-- semivowels or long vowels, alif, hamza, special letters&lt;br /&gt;
	[&amp;quot;ا&amp;quot;]=&amp;quot;o&amp;quot;, -- ʾalif&lt;br /&gt;
	-- hamzated letters&lt;br /&gt;
	[&amp;quot;أ&amp;quot;]=&amp;quot;ʼ&amp;quot;, -- hamza over alif&lt;br /&gt;
	[alif_hamza_below]=&amp;quot;ʼ&amp;quot;, -- hamza under alif&lt;br /&gt;
	[&amp;quot;ؤ&amp;quot;]=&amp;quot;ʼ&amp;quot;, -- hamza over wow&lt;br /&gt;
	[&amp;quot;ئ&amp;quot;]=&amp;quot;ʼ&amp;quot;, -- hamza over yo&lt;br /&gt;
	[&amp;quot;ء&amp;quot;]=&amp;quot;ʼ&amp;quot;, -- hamza on the line&lt;br /&gt;
	-- long vowels&lt;br /&gt;
	[waaw]=&amp;quot;v&amp;quot;, --&amp;quot;ū&amp;quot; after zamma (u) and not before diacritic&lt;br /&gt;
	[yaa]=&amp;quot;y&amp;quot;, --&amp;quot;ī&amp;quot; after kasra (i) and not before diacritic&lt;br /&gt;
	[alif_maqSuura]=&amp;quot;o&amp;quot;, -- ʾalif maqsūra&lt;br /&gt;
	[alif_madda]=&amp;quot;o&amp;quot;, -- ʾalif madda&lt;br /&gt;
	[alif_waSl]= &amp;quot;&amp;quot;, -- hamzatu l-wasl&lt;br /&gt;
	[dagger_alif] = &amp;quot;o&amp;quot;, -- ʾalif xanjariyya = dagger ʾalif (Koranic diacritic)&lt;br /&gt;
	-- short vowels, šádda and sukūn&lt;br /&gt;
	[fatHataan]=&amp;quot;an&amp;quot;, -- fatḥatan&lt;br /&gt;
	[Dammataan]=&amp;quot;un&amp;quot;, -- zammatan&lt;br /&gt;
	[kasrataan]=&amp;quot;in&amp;quot;, -- kasratan&lt;br /&gt;
	[fatHa]=&amp;quot;a&amp;quot;, -- fatḥa&lt;br /&gt;
	[Damma]=&amp;quot;u&amp;quot;, -- zamma&lt;br /&gt;
	[kasra]=&amp;quot;i&amp;quot;, -- kasra&lt;br /&gt;
	[waaw_maj]=&amp;quot;oʻ&amp;quot;, &lt;br /&gt;
	[yaa_maj]=&amp;quot;e&amp;quot;, &lt;br /&gt;
	-- šadda - doubled consonant&lt;br /&gt;
	[sukuun]=&amp;quot;&amp;quot;, --sukūn - no vowel&lt;br /&gt;
	-- ligatures&lt;br /&gt;
	[&amp;quot;ﻻ&amp;quot;]=&amp;quot;lo&amp;quot;,&lt;br /&gt;
	[&amp;quot;ﷲ&amp;quot;]=&amp;quot;lloh&amp;quot;,&lt;br /&gt;
	-- tatwīl&lt;br /&gt;
	[&amp;quot;ـ&amp;quot;]=&amp;quot;&amp;quot;, -- tatwīl, no sound&lt;br /&gt;
	-- numerals&lt;br /&gt;
	[&amp;quot;۱&amp;quot;]=&amp;quot;1&amp;quot;, [&amp;quot;۲&amp;quot;]=&amp;quot;2&amp;quot;, [&amp;quot;۳&amp;quot;]=&amp;quot;3&amp;quot;, [&amp;quot;۴&amp;quot;]=&amp;quot;4&amp;quot;, [&amp;quot;۵&amp;quot;]=&amp;quot;5&amp;quot;,&lt;br /&gt;
	[&amp;quot;۶&amp;quot;]=&amp;quot;6&amp;quot;, [&amp;quot;۷&amp;quot;]=&amp;quot;7&amp;quot;, [&amp;quot;۸&amp;quot;]=&amp;quot;8&amp;quot;, [&amp;quot;۹&amp;quot;]=&amp;quot;9&amp;quot;, [&amp;quot;۰&amp;quot;]=&amp;quot;0&amp;quot;,&lt;br /&gt;
	-- punctuation (leave on separate lines)&lt;br /&gt;
	[&amp;quot;؟&amp;quot;]=&amp;quot;?&amp;quot;, -- question mark&lt;br /&gt;
	[&amp;quot;«&amp;quot;]=&amp;#039;“&amp;#039;, -- quotation mark&lt;br /&gt;
	[&amp;quot;»&amp;quot;]=&amp;#039;”&amp;#039;, -- quotation mark&lt;br /&gt;
	[&amp;quot;٫&amp;quot;]=&amp;quot;.&amp;quot;, -- decimal point&lt;br /&gt;
	[&amp;quot;٬&amp;quot;]=&amp;quot;,&amp;quot;, -- thousands separator&lt;br /&gt;
	[&amp;quot;٪&amp;quot;]=&amp;quot;%&amp;quot;, -- percent sign&lt;br /&gt;
	[&amp;quot;،&amp;quot;]=&amp;quot;,&amp;quot;, -- comma&lt;br /&gt;
	[&amp;quot;؛&amp;quot;]=&amp;quot;;&amp;quot; -- semicolon&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local he = &amp;quot;ه&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local sun_letters = &amp;quot;تثدذرزسشصضطظلن&amp;quot;&lt;br /&gt;
-- For use in implementing sun-letter assimilation of ال (al-)&lt;br /&gt;
local ttsun1 = {}&lt;br /&gt;
local ttsun2 = {}&lt;br /&gt;
local ttsun3 = {}&lt;br /&gt;
for cp in gcodepoint(sun_letters) do&lt;br /&gt;
	local ch = U(cp)&lt;br /&gt;
	ttsun1[ch] = tt[ch]&lt;br /&gt;
	ttsun2[&amp;quot;l-&amp;quot; .. ch] = tt[ch] .. &amp;quot;-&amp;quot; .. ch&lt;br /&gt;
	table.insert(ttsun3, tt[ch])&lt;br /&gt;
end&lt;br /&gt;
-- For use in implementing elision of al-&lt;br /&gt;
local sun_letters_tr = table.concat(ttsun3, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local consonants_needing_vowels = &amp;quot;بتثجحخدذرزسشصضطظعغفقکلمنهپچژڤگڨڧڢںأإؤئءةﷲ&amp;quot;&lt;br /&gt;
-- consonants on the right side; includes alif madda&lt;br /&gt;
local rconsonants = consonants_needing_vowels .. &amp;quot;ویآ&amp;quot;&lt;br /&gt;
-- consonants on the left side; does not include alif madda&lt;br /&gt;
local lconsonants = consonants_needing_vowels .. &amp;quot;وی&amp;quot;&lt;br /&gt;
-- Arabic semicolon, comma, question mark; tatwīl; period, exclamation point,&lt;br /&gt;
-- single quote for bold/italic, double quotes for quoted material&lt;br /&gt;
local punctuation = &amp;quot;؟،؛&amp;quot; .. &amp;quot;ـ&amp;quot; .. &amp;quot;.!&amp;#039;&amp;quot; .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
local space_like = &amp;quot;%s&amp;#039;&amp;quot; .. &amp;#039;&amp;quot;&amp;#039; .. zwnj .. &amp;quot;\n&amp;quot; .. &amp;quot;%p&amp;quot;&lt;br /&gt;
local space_like_class = &amp;quot;[&amp;quot; .. space_like .. &amp;quot;]&amp;quot;&lt;br /&gt;
local numbers = &amp;quot;۱۲۳۴۵۶۷۸۹۰&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local before_diacritic_checking_subs = {&lt;br /&gt;
	------------ transformations prior to checking for diacritics --------------&lt;br /&gt;
	-- random Koranic marks and presentation forms&lt;br /&gt;
	{U(0x06E1), sukuun}, -- &amp;quot;Small High Dotless Head of Khah&amp;quot; (variant of sukūn)&lt;br /&gt;
	{U(0x06DA), &amp;quot;&amp;quot;}, -- &amp;quot;Small High Jeem&amp;quot;&lt;br /&gt;
	{U(0x06DF), &amp;quot;&amp;quot;}, -- &amp;quot;Small High Rounded Zero&amp;quot; (FIXME: correct?)&lt;br /&gt;
	{U(0x08F0), U(0x64B)}, -- &amp;quot;Open Fathatan&amp;quot;&lt;br /&gt;
	{U(0x08F1), U(0x64C)}, -- &amp;quot;Open Dammatan&amp;quot;&lt;br /&gt;
	{U(0x08F2), U(0x64D)}, -- &amp;quot;Open Kasratan&amp;quot;&lt;br /&gt;
	{U(0x06E4), &amp;quot;&amp;quot;}, -- &amp;quot;Small High Madda&amp;quot; (FIXME: correct?)&lt;br /&gt;
	{U(0x06D6), &amp;quot;&amp;quot;}, -- &amp;quot;Small High Ligature Sad with Lam with Alef Maksura&amp;quot; (FIXME: there are others we need to do)&lt;br /&gt;
	{U(0x06E5), &amp;quot;و&amp;quot;},&lt;br /&gt;
	{U(0x06E6), &amp;quot;ی&amp;quot;},&lt;br /&gt;
	-- convert llh for alloh into ll+shadda+dagger-alif+h&lt;br /&gt;
	{&amp;quot;لله&amp;quot;, &amp;quot;للّٰه&amp;quot;},&lt;br /&gt;
	-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets&lt;br /&gt;
	-- replaced with short-vowel+shadda during NFC normalisation, which&lt;br /&gt;
	-- MediaWiki does for all Unicode strings; however, it makes the&lt;br /&gt;
	-- transliteration process inconvenient, so undo it.&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. dagger_alif .. &amp;quot;])&amp;quot; .. shadda, shadda .. &amp;quot;%1&amp;quot;},&lt;br /&gt;
	-- ignore Koranic gemination at beginning of word due to assimilation of preceding consonant&lt;br /&gt;
	{&amp;quot; ([&amp;quot; .. lconsonants .. &amp;quot;])&amp;quot; .. shadda, &amp;quot; %1&amp;quot;},&lt;br /&gt;
	-- ignore alif jamīla (otiose alif in 3pl verb forms)&lt;br /&gt;
	&lt;br /&gt;
	-- alif_madda, ayn&lt;br /&gt;
	{&amp;quot;(&amp;quot; .. sukuun .. &amp;quot;)&amp;quot; .. alif_madda , &amp;quot;%1&amp;quot; .. &amp;quot;ء&amp;quot; .. fatHa .. alif},&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. lconsonants .. sukuun .. &amp;quot;])&amp;quot; .. &amp;quot;ع&amp;quot;&lt;br /&gt;
		, &amp;quot;%1&amp;quot; .. &amp;quot;ء&amp;quot; },&lt;br /&gt;
	{ &amp;quot;ع&amp;quot; .. sukuun	, &amp;quot;ء&amp;quot; .. sukuun },&lt;br /&gt;
	&lt;br /&gt;
	-- final he &lt;br /&gt;
	{&amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot; .. &amp;quot;ه&amp;quot; .. &amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;	, &amp;quot;%1%2&amp;quot; },&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot; .. &amp;quot;ه&amp;quot; .. &amp;quot;$&amp;quot;	, &amp;quot;%1&amp;quot; },&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot; .. he .. &amp;quot;$&amp;quot; , &amp;quot;%1%2&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
	--     #1: handle zamma + wow + alif (final -ū)&lt;br /&gt;
	{Damma .. waaw .. alif, Damma .. waaw},&lt;br /&gt;
	--     #2: handle wow + sukūn + alif (final -w in -aw in defective verbs)&lt;br /&gt;
	--     this must go before the generation of w, which removes the waw here.&lt;br /&gt;
	{waaw .. sukuun .. alif, waaw .. sukuun},&lt;br /&gt;
	-- ignore final alif or alif maqsūra following fatḥatan (e.g. in accusative&lt;br /&gt;
	-- singular or words like عَصًا &amp;quot;stick&amp;quot; or هُدًى &amp;quot;guidance&amp;quot;; this is called&lt;br /&gt;
	-- tanwin nasb)&lt;br /&gt;
	&lt;br /&gt;
	{&amp;quot;(&amp;quot; .. fatHa .. &amp;quot;?)&amp;quot; .. yaa .. dagger_alif, &amp;quot;%1&amp;quot; .. alif},&lt;br /&gt;
	{fatHataan .. &amp;quot;[&amp;quot; .. alif .. alif_maqSuura .. &amp;quot;]&amp;quot;, fatHataan},&lt;br /&gt;
	-- same but with the fatḥatan placed over the alif or alif maqsūra&lt;br /&gt;
	-- instead of over the previous letter (considered a misspelling but&lt;br /&gt;
	-- common)&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. alif .. alif_maqSuura .. &amp;quot;]&amp;quot; .. fatHataan, fatHataan},&lt;br /&gt;
	-- toʾ marbūta should always be preceded by fatḥa, alif, alif madda or&lt;br /&gt;
	-- dagger alif; infer fatḥa if not&lt;br /&gt;
	{&amp;quot;([^&amp;quot; .. fatHa .. alif .. alif_madda .. dagger_alif .. &amp;quot;])&amp;quot; .. taa_marbuuTa, &amp;quot;%1&amp;quot; .. fatHa .. taa_marbuuTa},&lt;br /&gt;
	-- similarly for alif between consonants, possibly marked with shadda&lt;br /&gt;
	-- (does not apply to initial alif, which is silent when not marked with&lt;br /&gt;
	-- hamza, or final alif, which might be pronounced as -an)&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. lconsonants .. &amp;quot;]&amp;quot; .. shadda .. &amp;quot;?)&amp;quot; .. alif .. &amp;quot;([&amp;quot; .. rconsonants .. &amp;quot;])&amp;quot;,&lt;br /&gt;
		&amp;quot;%1&amp;quot; .. fatHa .. alif .. &amp;quot;%2&amp;quot;},&lt;br /&gt;
	-- infer fatḥa in case of non-fatḥa + alif/alif-maqsūra + dagger alif&lt;br /&gt;
	{&amp;quot;([^&amp;quot; .. fatHa .. &amp;quot;])([&amp;quot; .. alif .. alif_maqSuura .. &amp;quot;]&amp;quot; .. dagger_alif .. &amp;quot;)&amp;quot;, &amp;quot;%1&amp;quot; .. fatHa .. &amp;quot;%2&amp;quot;},&lt;br /&gt;
	-- infer kasra in case of hamza-under-alif not + kasra&lt;br /&gt;
	{alif_hamza_below .. &amp;quot;([^&amp;quot; .. kasra .. kasrataan .. &amp;quot;])&amp;quot;, alif_hamza_below .. kasra .. &amp;quot;%1&amp;quot;},&lt;br /&gt;
	-- ignore dagger alif placed over regular alif or alif maqsūra&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. alif .. alif_maqSuura .. &amp;quot;])&amp;quot; .. dagger_alif, &amp;quot;%1&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
	----------- rest of these concern definite article alif-lom ----------&lt;br /&gt;
	-- in kasra/zamma + alif + lam, make alif into hamzatu l-wasl, so we&lt;br /&gt;
	-- handle cases like بِالتَّوْفِیق (bi-t-tawfīq) correctly&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. Damma .. kasra .. &amp;quot;])&amp;quot; .. alif .. laam, &amp;quot;%1&amp;quot; .. alif_waSl .. laam},&lt;br /&gt;
	-- al + consonant + shadda (only recognize word-initially if regular alif): remove shadda&lt;br /&gt;
	{&amp;quot;^(&amp;quot; .. alif .. fatHa .. &amp;quot;?&amp;quot; .. laam .. &amp;quot;[&amp;quot; .. lconsonants .. &amp;quot;])&amp;quot; .. shadda, &amp;quot;%1&amp;quot;},&lt;br /&gt;
	{&amp;quot;(&amp;quot; .. space_like_class .. alif .. fatHa .. &amp;quot;?&amp;quot; .. laam .. &amp;quot;[&amp;quot; .. lconsonants .. &amp;quot;])&amp;quot; .. shadda, &amp;quot;%1&amp;quot;},&lt;br /&gt;
	{&amp;quot;(&amp;quot; .. alif_waSl .. fatHa .. &amp;quot;?&amp;quot; .. laam .. &amp;quot;[&amp;quot; .. lconsonants .. &amp;quot;])&amp;quot; .. shadda, &amp;quot;%1&amp;quot;},&lt;br /&gt;
	-- handle l- hamzatu l-wasl or word-initial al-&lt;br /&gt;
	{&amp;quot;^&amp;quot; .. alif .. fatHa .. &amp;quot;?&amp;quot; .. laam, &amp;quot;al-&amp;quot;},&lt;br /&gt;
	{&amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot; .. alif .. fatHa .. &amp;quot;?&amp;quot; .. laam, &amp;quot;%1al-&amp;quot;},&lt;br /&gt;
	-- next one for bi-t-tawfīq&lt;br /&gt;
	{&amp;quot;([&amp;quot; .. Damma .. kasra .. &amp;quot;])&amp;quot; .. alif_waSl .. fatHa .. &amp;quot;?&amp;quot; .. laam, &amp;quot;%1-l-&amp;quot;},&lt;br /&gt;
	-- next one for remaining hamzatu l-wasl (at beginning of word)&lt;br /&gt;
	{alif_waSl .. fatHa .. &amp;quot;?&amp;quot; .. laam, &amp;quot;l-&amp;quot;},&lt;br /&gt;
	-- special casing if the l in al- has a shadda on it (as in الَّذِی &amp;quot;that&amp;quot;),&lt;br /&gt;
	-- so we don&amp;#039;t mistakenly double the dash; insert a special marker here so&lt;br /&gt;
	-- that we know later to elide the a- after a vowel&lt;br /&gt;
	{&amp;quot;l%-&amp;quot; .. shadda, &amp;quot;l&amp;quot; .. alladi_marker .. &amp;quot;l&amp;quot;},&lt;br /&gt;
	-- implement assimilation of sun letters&lt;br /&gt;
	{&amp;quot;l%-[&amp;quot; .. sun_letters .. &amp;quot;]&amp;quot;, ttsun2},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Transliterate the word(s) in TEXT. LANG (the language) and SC (the script)&lt;br /&gt;
-- are ignored. OMIT_I3RAAB means leave out final short vowels (ʾiʿrob).&lt;br /&gt;
-- GRAY_I3RAAB means render transliterate short vowels (ʾiʿrob) in gray.&lt;br /&gt;
-- FORCE_TRANSLIT causes even non-vocalized text to be transliterated&lt;br /&gt;
-- (normally the function checks for non-vocalized text and returns nil,&lt;br /&gt;
-- since such text is ambiguous in transliteration).&lt;br /&gt;
function export.tr(text, lang, sc, omit_i3raab, gray_i3raab, force_translit)&lt;br /&gt;
	-- make it possible to call this function from a template&lt;br /&gt;
	if type(text) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		local function f(x) return (x ~= &amp;quot;&amp;quot;) and x or nil end&lt;br /&gt;
		text, lang, sc, omit_i3raab, force_translit =&lt;br /&gt;
			f(text.args[1]), f(text.args[2]), f(text.args[3]), f(text.args[4]), f(text.args[5])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, sub in ipairs(before_diacritic_checking_subs) do&lt;br /&gt;
		text = rsub(text, sub[1], sub[2])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not force_translit and not has_diacritics(text) then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;ar-translit/lacking diacritics&amp;quot;)&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	------------ transformations after checking for diacritics --------------&lt;br /&gt;
	-- Replace plain alif with hamzatu l-wasl when followed by fatḥa/zamma/kasra.&lt;br /&gt;
	-- Must go after handling of initial al-, which distinguishes alif-fatḥa&lt;br /&gt;
	-- from alif w/hamzatu l-wasl. Must go before generation of ū and ī, which&lt;br /&gt;
	-- eliminate the zamma/kasra.&lt;br /&gt;
	text = rsub(text, alif .. &amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. waaw_maj .. yaa_maj .. &amp;quot;])&amp;quot;, alif_waSl .. &amp;quot;%1&amp;quot;)&lt;br /&gt;
	-- zamma + waw not followed by a diacritic is ū, otherwise w&lt;br /&gt;
	text = rsub(text, Damma .. waaw .. &amp;quot;([^&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. shadda .. sukuun .. dagger_alif .. waaw_maj .. yaa_maj .. &amp;quot;])&amp;quot;, &amp;quot;ū%1&amp;quot;)&lt;br /&gt;
	text = rsub(text, Damma .. waaw .. &amp;quot;$&amp;quot;, &amp;quot;ū&amp;quot;)&lt;br /&gt;
	-- kasra + yaa not followed by a diacritic (or ū from prev step) is ī, otherwise y&lt;br /&gt;
	text = rsub(text, kasra .. yaa .. &amp;quot;([^&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. shadda .. sukuun .. dagger_alif .. waaw_maj .. yaa_maj .. &amp;quot;ū])&amp;quot;, &amp;quot;ī%1&amp;quot;)&lt;br /&gt;
	text = rsub(text, kasra .. yaa .. &amp;quot;$&amp;quot;, &amp;quot;ī&amp;quot;)&lt;br /&gt;
	-- final he&lt;br /&gt;
	text = rsub(text, &amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot; .. he .. &amp;quot;$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot; .. he .. &amp;quot;(&amp;quot; .. space_like_class .. zwnj .. &amp;quot;)&amp;quot;, &amp;quot;%1%2&amp;quot;)&lt;br /&gt;
	text = rsub(text, zwnj, &amp;quot;&amp;quot;)&lt;br /&gt;
	-- convert shadda to double letter.&lt;br /&gt;
	text = rsub(text, &amp;quot;(.)&amp;quot; .. shadda, &amp;quot;%1%1&amp;quot;)&lt;br /&gt;
	if not omit_i3raab and gray_i3raab then -- show ʾiʿrob grayed in transliteration&lt;br /&gt;
		-- decide whether to gray out the t in ﺓ. If word begins with al- or l-, yes.&lt;br /&gt;
		-- Otherwise, no if word ends in a/i/u, yes if ends in an/in/un.&lt;br /&gt;
		text = rsub(text, &amp;quot;^(a?l%-[^%s]+)&amp;quot; .. taa_marbuuTa .. &amp;quot;([&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot;,&lt;br /&gt;
			&amp;#039;%1&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt;%2&amp;#039;)&lt;br /&gt;
		text = rsub(text, &amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;a?l%-[^%s]+)&amp;quot; .. taa_marbuuTa .. &amp;quot;([&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot;,&lt;br /&gt;
			&amp;#039;%1&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt;%2&amp;#039;)&lt;br /&gt;
		text = rsub(text, taa_marbuuTa .. &amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])&amp;quot;, &amp;quot;t%1&amp;quot;)&lt;br /&gt;
		text = rsub(text, taa_marbuuTa .. &amp;quot;([&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. &amp;quot;])&amp;quot;,&lt;br /&gt;
			&amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt;%1&amp;#039;)&lt;br /&gt;
		text = rsub(text, &amp;quot;.&amp;quot;, {&lt;br /&gt;
			[fatHataan] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;an&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			[kasrataan] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			[Dammataan] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;un&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
		text = rsub(text, &amp;quot;([&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;])(&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;,&lt;br /&gt;
			function(vowel, space)&lt;br /&gt;
				vowel_repl = {&lt;br /&gt;
					[fatHa] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt; &amp;#039;,&lt;br /&gt;
					[kasra] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;#039;,&lt;br /&gt;
					[Damma] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;u&amp;lt;/span&amp;gt; &amp;#039;&lt;br /&gt;
				}&lt;br /&gt;
				return vowel_repl[vowel] .. space&lt;br /&gt;
			end&lt;br /&gt;
		)&lt;br /&gt;
		text = rsub(text, &amp;quot;[&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;]$&amp;quot;, {&lt;br /&gt;
			[fatHa] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			[kasra] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			[Damma] = &amp;#039;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;u&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
		text = rsub(text, &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: var(--wikt-palette-grey-8,#888)&amp;quot;&amp;gt;&amp;#039;, &amp;quot;&amp;quot;)&lt;br /&gt;
	elseif omit_i3raab then -- omit ʾiʿrob in transliteration&lt;br /&gt;
		text = rsub(text, &amp;quot;[&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		text = rsub(text, &amp;quot;[&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;](&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		text = rsub(text, &amp;quot;[&amp;quot; .. fatHa .. Damma .. kasra .. &amp;quot;]$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- toʾ marbūta should not be rendered by -t if word-final even when&lt;br /&gt;
	-- ʾiʿrob (desinential inflection) is shown; instead, use (t) before&lt;br /&gt;
	-- whitespace, nothing when final; but render final -ﺍﺓ and -ﺁﺓ as -oh,&lt;br /&gt;
	-- consistent with Wehr&amp;#039;s dictionary&lt;br /&gt;
	-- Left-to-right or right-to-left mark at end of text will prevent toʾ marbūta&lt;br /&gt;
	-- from being transliterated correctly.&lt;br /&gt;
	text = string.gsub(text, lrm, &amp;quot;&amp;quot;)&lt;br /&gt;
	text = string.gsub(text, rlm, &amp;quot;&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;([&amp;quot; .. alif .. alif_madda .. &amp;quot;])&amp;quot; .. taa_marbuuTa .. &amp;quot;$&amp;quot;, &amp;quot;%1h&amp;quot;)&lt;br /&gt;
	-- Ignore final toʾ marbūta (it appears as &amp;quot;a&amp;quot; due to the preceding&lt;br /&gt;
	-- short vowel). Need to do this after graying or omitting word-final&lt;br /&gt;
	-- ʾiʿrob.&lt;br /&gt;
	text = rsub(text, taa_marbuuTa .. &amp;quot;$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	text = rsub(text, taa_marbuuTa .. &amp;quot;(%p)&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	if not omit_i3raab then -- show ʾiʿrob in transliteration&lt;br /&gt;
		text = rsub(text, taa_marbuuTa .. &amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;, &amp;quot;(t)%1&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		-- When omitting ʾiʿrob, show all non-absolutely-final instances of&lt;br /&gt;
		-- toʾ marbūta as (t), with trailing ʾiʿrob omitted.&lt;br /&gt;
		text = rsub(text, taa_marbuuTa, &amp;quot;(t)&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- tatwīl should be rendered as - at beginning or end of word. It will&lt;br /&gt;
	-- be rendered as nothing in the middle of a word (FIXME, do we want&lt;br /&gt;
	-- this?)&lt;br /&gt;
	text = rsub(text, &amp;quot;^ـ&amp;quot;, &amp;quot;-&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;)ـ&amp;quot;,&lt;br /&gt;
		&amp;quot;%1-&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;ـ$&amp;quot;, &amp;quot;-&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;ـ(&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;, &amp;quot;-%1&amp;quot;)&lt;br /&gt;
	-- Now convert remaining Arabic chars according to table.&lt;br /&gt;
	text = rsub(text, &amp;quot;.&amp;quot;, tt)&lt;br /&gt;
	text = rsub(text, &amp;quot;ao&amp;quot;, &amp;quot;o&amp;quot;)&lt;br /&gt;
	-- Implement elision of al- after a final vowel. We do this&lt;br /&gt;
	-- conservatively, only handling elision of the definite article and related&lt;br /&gt;
	-- terms (specifically, relative pronoun الَّذِی (allaḏī) and variants) rather&lt;br /&gt;
	-- than elision in other cases of hamzat al-wasl (e.g. form-I imperatives&lt;br /&gt;
	-- or form-VII and above verbal nouns) partly because elision in&lt;br /&gt;
	-- these cases isn&amp;#039;t so common in MSA and partly to avoid excessive&lt;br /&gt;
	-- elision in case of words written with initial bare alif instead of&lt;br /&gt;
	-- properly with hamzated alif. Possibly we should reconsider.&lt;br /&gt;
	text = rsub(text, &amp;quot;([aiuoīū]&amp;#039;* +&amp;#039;*)a([&amp;quot; .. sun_letters_tr .. &amp;quot;][%-&amp;quot; .. alladi_marker .. &amp;quot;])&amp;quot;,&lt;br /&gt;
		&amp;quot;%1%2&amp;quot;)&lt;br /&gt;
	if gray_i3raab then&lt;br /&gt;
		text = rsub(text, &amp;quot;([aiuoīū]&amp;#039;*&amp;lt;/span&amp;gt;&amp;#039;* +&amp;#039;*)a([&amp;quot; .. sun_letters_tr .. &amp;quot;][%-&amp;quot; .. alladi_marker .. &amp;quot;])&amp;quot;,&lt;br /&gt;
			&amp;quot;%1%2&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- remove indicator of allaḏī, which has served its purpose&lt;br /&gt;
	text = rsub(text, alladi_marker, &amp;quot;&amp;quot;)&lt;br /&gt;
	-- Special-case the transliteration of alloh, without the hyphen.&lt;br /&gt;
	text = rsub(text, &amp;quot;^(a?)l%-loh&amp;quot;, &amp;quot;%1lloh&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;(&amp;quot; .. space_like_class .. &amp;quot;a?)l%-loh&amp;quot;, &amp;quot;%1lloh&amp;quot;)&lt;br /&gt;
	-- Compress multiple spaces, which may occur e.g. when removing Koranic diacritics.&lt;br /&gt;
	text = rsub(text, &amp;quot;(%s)%s+&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	-- Remove length (not native in uzbek)&lt;br /&gt;
	text = rsub(text, &amp;quot;ī&amp;quot;, &amp;quot;i&amp;quot;)&lt;br /&gt;
	text = rsub(text, &amp;quot;ū&amp;quot;, &amp;quot;u&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local has_diacritics_subs = {&lt;br /&gt;
	-- FIXME! What about lam-alif ligature?&lt;br /&gt;
	-- remove punctuation and shadda&lt;br /&gt;
	-- must go before removing final consonants&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. punctuation .. shadda .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;},&lt;br /&gt;
	{zwnj, &amp;quot; &amp;quot;},&lt;br /&gt;
	-- Remove consonants at end of word or utterance, so that we&amp;#039;re OK with&lt;br /&gt;
	-- words lacking iʿrob (must go before removing other consonants).&lt;br /&gt;
	-- If you want to catch places without iʿrob, comment out the next two lines.&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. lconsonants .. &amp;quot;]$&amp;quot;, &amp;quot;&amp;quot;},&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. lconsonants .. &amp;quot;]([%)%]}]?&amp;quot; .. space_like_class .. &amp;quot;)&amp;quot;, &amp;quot;%1&amp;quot;},&lt;br /&gt;
	-- remove consonants (or alif) when followed by diacritics&lt;br /&gt;
	-- must go after removing shadda&lt;br /&gt;
	-- do not remove the diacritics yet because we need them to handle&lt;br /&gt;
	-- long-vowel sequences of diacritic + pseudo-consonant&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. lconsonants .. alif .. &amp;quot;]([&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. sukuun .. dagger_alif .. waaw_maj .. yaa_maj .. &amp;quot;])&amp;quot;, &amp;quot;%1&amp;quot;},&lt;br /&gt;
	-- the following two must go after removing consonants w/diacritics because&lt;br /&gt;
	-- we only want to treat vocalic wow/yo&amp;#039; in them (we want to have removed&lt;br /&gt;
	-- wow/yo&amp;#039; followed by a diacritic)&lt;br /&gt;
	-- remove zamma + wow&lt;br /&gt;
	{Damma .. waaw, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove kasra + yo&amp;#039;&lt;br /&gt;
	{kasra .. yaa, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove majhuls&lt;br /&gt;
	{waaw_maj, &amp;quot;&amp;quot;},&lt;br /&gt;
	{yaa_maj, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove fatḥa/fatḥatan + alif/alif-maqsūra&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. fatHataan .. fatHa .. &amp;quot;][&amp;quot; .. alif .. alif_maqSuura .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove diacritics&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. fatHataan .. Dammataan .. kasrataan .. fatHa .. Damma .. kasra .. sukuun .. dagger_alif .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove numbers, hamzatu l-wasl, alif madda&lt;br /&gt;
	{&amp;quot;[&amp;quot; .. numbers .. &amp;quot;ٱ&amp;quot; .. &amp;quot;آ&amp;quot; .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;},&lt;br /&gt;
	-- remove non-Arabic characters&lt;br /&gt;
	{&amp;quot;[^&amp;quot; .. U(0x0600) .. &amp;quot;-&amp;quot; .. U(0x06FF) .. U(0x0750) .. &amp;quot;-&amp;quot; .. U(0x077F) ..&lt;br /&gt;
			 U(0x08A0) .. &amp;quot;-&amp;quot; .. U(0x08FF) .. U(0xFB50) .. &amp;quot;-&amp;quot; .. U(0xFDFF) ..&lt;br /&gt;
			 U(0xFE70) .. &amp;quot;-&amp;quot; .. U(0xFEFF) .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- declared as local above&lt;br /&gt;
function has_diacritics(text)&lt;br /&gt;
	local orig_text = text&lt;br /&gt;
	local count&lt;br /&gt;
	text, count = rsubn(text, &amp;quot;[&amp;quot; .. lrm .. rlm .. &amp;quot;]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	if count &amp;gt; 0 then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;ar-translit/lrm or rlm&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	for _, sub in ipairs(has_diacritics_subs) do&lt;br /&gt;
		text = rsub(text, unpack(sub))&lt;br /&gt;
	end&lt;br /&gt;
	if #text &amp;gt; 0 then&lt;br /&gt;
		mw.log((&amp;quot;Check for missing diacritics failed; original text &amp;#039;%s&amp;#039;, text without diacritics &amp;#039;%s&amp;#039;&amp;quot;):format(&lt;br /&gt;
			orig_text, text))&lt;br /&gt;
	end&lt;br /&gt;
	return #text == 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Return true if transliteration TR is an irregular transliteration of&lt;br /&gt;
-- ARABIC. Return false if ARABIC can&amp;#039;t be transliterated. For purposes of&lt;br /&gt;
-- establishing regularity, hyphens are ignored and word-final toʾ marbūta&lt;br /&gt;
-- can be transliterated as &amp;quot;(t)&amp;quot;, &amp;quot;&amp;quot; or &amp;quot;t&amp;quot;.&lt;br /&gt;
function export.irregular_translit(arabic, tr)&lt;br /&gt;
	if not arabic or arabic == &amp;quot;&amp;quot; or not tr or tr == &amp;quot;&amp;quot; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local regtr = export.tr(arabic)&lt;br /&gt;
	if not regtr or regtr == tr then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local arwords = rsplit(arabic, &amp;quot; &amp;quot;)&lt;br /&gt;
	local regwords = rsplit(regtr, &amp;quot; &amp;quot;)&lt;br /&gt;
	local words = rsplit(tr, &amp;quot; &amp;quot;)&lt;br /&gt;
	if #regwords ~= #words or #regwords ~= #arwords then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	for i=1,#regwords do&lt;br /&gt;
		local regword = regwords[i]&lt;br /&gt;
		local word = words[i]&lt;br /&gt;
		local arword = arwords[i]&lt;br /&gt;
		-- Resolve final (t) in auto-translit to t, h or nothing&lt;br /&gt;
		if rfind(regword, &amp;quot;%(t%)$&amp;quot;) then&lt;br /&gt;
			regword = rfind(word, &amp;quot;oh$&amp;quot;) and rsub(regword, &amp;quot;%(t%)$&amp;quot;, &amp;quot;h&amp;quot;) or&lt;br /&gt;
				rfind(word, &amp;quot;t$&amp;quot;) and rsub(regword, &amp;quot;%(t%)$&amp;quot;, &amp;quot;t&amp;quot;) or&lt;br /&gt;
				rsub(regword, &amp;quot;%(t%)$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		-- Resolve clitics + short a + alif-lom, which may get auto-transliterated&lt;br /&gt;
		-- to contain long o, to short a if the manual translit has it; note&lt;br /&gt;
		-- that currently in cases with assimilated l, the auto-translit will&lt;br /&gt;
		-- fail, so we won&amp;#039;t ever get here and don&amp;#039;t have to worry about&lt;br /&gt;
		-- auto-translit l against manual-translit assimilated char.&lt;br /&gt;
		local clitic_chars = &amp;quot;^[وفیییل]&amp;quot; -- separate line to avoid L2R display weirdness&lt;br /&gt;
		if rfind(arword, clitic_chars .. fatHa .. &amp;quot;?[&amp;quot; .. alif .. alif_waSl .. &amp;quot;]&amp;quot; .. laam) and rfind(word, &amp;quot;^[wfkl]a%-&amp;quot;) then&lt;br /&gt;
			regword = rsub(regword, &amp;quot;^([wfkl])o&amp;quot;, &amp;quot;%1a&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		-- Ignore hyphens when comparing&lt;br /&gt;
		if rsub(regword, &amp;quot;%-&amp;quot;, &amp;quot;&amp;quot;) ~= rsub(word, &amp;quot;%-&amp;quot;, &amp;quot;&amp;quot;) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;Surjection</name></author>
	</entry>
</feed>