<?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%3Asdh-translit</id>
	<title>Module:sdh-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%3Asdh-translit"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:sdh-translit&amp;action=history"/>
	<updated>2026-05-09T20:39:53Z</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:sdh-translit&amp;diff=495139&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:sdh-translit&amp;diff=495139&amp;oldid=prev"/>
		<updated>2026-04-21T12:00:24Z</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:00, 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:sdh-translit&amp;diff=495138&amp;oldid=prev</id>
		<title>wikt&gt;SurjectionBot: Protected &quot;Module:sdh-translit&quot;: (bot) automatically protect highly visible templates/modules (reference score: 1048+ &gt;= 1000) ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:sdh-translit&amp;diff=495138&amp;oldid=prev"/>
		<updated>2024-04-27T09:37:43Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/Module:sdh-translit&quot; title=&quot;Module:sdh-translit&quot;&gt;Module:sdh-translit&lt;/a&gt;&amp;quot;: (bot) automatically protect highly visible templates/modules (reference score: 1048+ &amp;gt;= 1000) ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Authors: JavaScript ئاسۆ; Lua Ghybu, Calak&lt;br /&gt;
&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
local U = require(&amp;quot;Module:string/char&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local mapping = {&lt;br /&gt;
	[&amp;quot;ا&amp;quot;] = &amp;quot;a&amp;quot;, [&amp;quot;ب&amp;quot;] = &amp;quot;b&amp;quot;, [&amp;quot;چ&amp;quot;] = &amp;quot;ç&amp;quot;, [&amp;quot;ج&amp;quot;] = &amp;quot;c&amp;quot;, [&amp;quot;د&amp;quot;] = &amp;quot;d&amp;quot;, [&amp;quot;ە&amp;quot;] = &amp;quot;e&amp;quot;, [&amp;quot;ێ&amp;quot;] = &amp;quot;ê&amp;quot;, [&amp;quot;ف&amp;quot;] = &amp;quot;f&amp;quot;, [&amp;quot;گ&amp;quot;] = &amp;quot;g&amp;quot;,&lt;br /&gt;
	[&amp;quot;ھ&amp;quot;] = &amp;quot;h&amp;quot;, [&amp;quot;ه&amp;quot;] = &amp;quot;h&amp;quot;, [&amp;quot;ح&amp;quot;] = &amp;quot;ḧ&amp;quot;, [&amp;quot;ژ&amp;quot;] = &amp;quot;j&amp;quot;, [&amp;quot;ک&amp;quot;] = &amp;quot;k&amp;quot;, [&amp;quot;ڵ&amp;quot;] = &amp;quot;ll&amp;quot;, [&amp;quot;ل&amp;quot;] = &amp;quot;l&amp;quot;, [&amp;quot;م&amp;quot;] = &amp;quot;m&amp;quot;, [&amp;quot;ن&amp;quot;] = &amp;quot;n&amp;quot;,&lt;br /&gt;
	[&amp;quot;ۆ&amp;quot;] = &amp;quot;o&amp;quot;, [&amp;quot;پ&amp;quot;] = &amp;quot;p&amp;quot;, [&amp;quot;ق&amp;quot;] = &amp;quot;q&amp;quot;, [&amp;quot;ر&amp;quot;] = &amp;quot;r&amp;quot;, [&amp;quot;ڕ&amp;quot;] = &amp;quot;r&amp;quot;, [&amp;quot;س&amp;quot;] = &amp;quot;s&amp;quot;, [&amp;quot;ش&amp;quot;] = &amp;quot;ş&amp;quot;, [&amp;quot;ت&amp;quot;] = &amp;quot;t&amp;quot;, [&amp;quot;ۊ&amp;quot;] = &amp;quot;ü&amp;quot;,&lt;br /&gt;
	[&amp;quot;ڤ&amp;quot;] = &amp;quot;v&amp;quot;, [&amp;quot;خ&amp;quot;] = &amp;quot;x&amp;quot;, [&amp;quot;غ&amp;quot;] = &amp;quot;ẍ&amp;quot;, [&amp;quot;ز&amp;quot;] = &amp;quot;z&amp;quot;, [&amp;quot;ئ&amp;quot;] = &amp;quot;&amp;quot;, [&amp;quot;ع&amp;quot;] = &amp;quot;&amp;#039;&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	[U(0x200C)] = &amp;quot;&amp;quot;, -- ZWNJ (zero-width non-joiner)&lt;br /&gt;
	[&amp;quot;ـ&amp;quot;] = &amp;quot;&amp;quot;, -- kashida, no sound&lt;br /&gt;
	&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;
	-- persian variants to 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;
}&lt;br /&gt;
&lt;br /&gt;
	-- punctuation (leave on separate lines)&lt;br /&gt;
local punctuation = {&lt;br /&gt;
	[&amp;quot;؟&amp;quot;] = &amp;quot;?&amp;quot;, -- question mark&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;
	[&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;, -- percent&lt;br /&gt;
	[&amp;quot;؉&amp;quot;] = &amp;quot;‰&amp;quot;, -- per mille&lt;br /&gt;
	[&amp;quot;٫&amp;quot;] = &amp;quot;.&amp;quot;, -- decimals&lt;br /&gt;
	[&amp;quot;٬&amp;quot;] = &amp;quot;,&amp;quot;, -- thousand&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- translit&lt;br /&gt;
local function tr_word(word)&lt;br /&gt;
	&lt;br /&gt;
    word = gsub(word, &amp;#039;.&amp;#039;, punctuation)&lt;br /&gt;
		&lt;br /&gt;
	--Remove punctuation at the end of the word.&lt;br /&gt;
	local ponct&lt;br /&gt;
	if mw.ustring.find(word, &amp;#039;[%.%!،؛»«٪؉٫٬%p]$&amp;#039;) then&lt;br /&gt;
	   ponct =  mw.ustring.sub(word, -1)&lt;br /&gt;
	   word = gsub(word, &amp;#039;[%.%!،؛»«٪؉٫٬%p]$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
	   word = word&lt;br /&gt;
	   ponct = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;ه‌&amp;#039;, &amp;quot;ە&amp;quot;) --correct unicode for letter ە&lt;br /&gt;
	-- U+0647 (Arabic letter heh) + U+200C (zero-width non-joiner) → U+06D5 (Arabic letter ae)&lt;br /&gt;
	&lt;br /&gt;
	-- diacritics&lt;br /&gt;
	word = gsub(word, &amp;#039;ْ&amp;#039;, &amp;quot;i&amp;quot;) -- U+0652, Arabic sukun&lt;br /&gt;
	word = gsub(word, &amp;#039;ِ&amp;#039;, &amp;quot;i&amp;quot;) -- U+0650, Arabic kasra&lt;br /&gt;
	 &lt;br /&gt;
	--managing &amp;#039;و&amp;#039; and &amp;#039;ی&amp;#039;&lt;br /&gt;
	word = gsub(word, &amp;#039;و([iاێۆۊە])&amp;#039;, &amp;quot;w%1&amp;quot;) --و + vowel =&amp;gt; w (e.g. wan)&lt;br /&gt;
	word = gsub(word, &amp;#039;ی([iاێۆۊە])&amp;#039;, &amp;quot;y%1&amp;quot;) --ی + vowel =&amp;gt; y (e.g. yas)&lt;br /&gt;
	word = gsub(word, &amp;#039;([iاێۆۊە])و&amp;#039;, &amp;quot;%1w&amp;quot;) --vowel + و =&amp;gt; w (e.g. kew)&lt;br /&gt;
	word = gsub(word, &amp;#039;([iاێۆۊە])ی&amp;#039;, &amp;quot;%1y&amp;quot;) --vowel + ی =&amp;gt; y (e.g. bey)&lt;br /&gt;
	word = gsub(word, &amp;#039;([iاێۆە])ۊ&amp;#039;, &amp;quot;%1ẅ&amp;quot;) --vowel + و =&amp;gt; ẅ (e.g. taẅ)&lt;br /&gt;
	word = gsub(word, &amp;#039;([iاۆۊە])ێ&amp;#039;, &amp;quot;%1ÿ&amp;quot;) --vowel + ێ =&amp;gt; ÿ (e.g.  şeÿtan)&lt;br /&gt;
	word = gsub(word, &amp;#039;^و$&amp;#039;, &amp;quot;û&amp;quot;) --non-letter + &amp;#039;و&amp;#039; + non-letter =&amp;gt; û (=and)&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;([^ء-يٱ-ەiwẅyÿ])و&amp;#039;, &amp;quot;%1w&amp;quot;) --non-letter + &amp;#039;و&amp;#039; =&amp;gt; w (e.g. wetar)&lt;br /&gt;
	word = gsub(word, &amp;#039;^و&amp;#039;, &amp;quot;w&amp;quot;) --first &amp;#039;و&amp;#039; =&amp;gt; w (e.g. wetar)&lt;br /&gt;
	word = gsub(word, &amp;#039;یو&amp;#039;, &amp;quot;îw&amp;quot;) --&amp;#039;ی&amp;#039; + &amp;#039;و&amp;#039; =&amp;gt; îw (e.g. mîwe)&lt;br /&gt;
	word = gsub(word, &amp;#039;([^و])یی&amp;#039;, &amp;quot;%1îy&amp;quot;) --&amp;#039;ی&amp;#039; + &amp;#039;ی&amp;#039; =&amp;gt; îy (e.g. kanîy)&lt;br /&gt;
	word = gsub(word, &amp;#039;وی&amp;#039;, &amp;quot;uy&amp;quot;) --&amp;#039;و&amp;#039; + &amp;#039;ی&amp;#039; =&amp;gt; uy (e.g. buyn)&lt;br /&gt;
	word = gsub(word, &amp;#039;وو&amp;#039;, &amp;quot;û&amp;quot;) --&amp;#039;و&amp;#039; + &amp;#039;و&amp;#039; =&amp;gt; û (e.g. nû)&lt;br /&gt;
	word = gsub(word, &amp;#039;ی&amp;#039;, &amp;quot;î&amp;quot;)&lt;br /&gt;
	word = gsub(word, &amp;#039;و&amp;#039;, &amp;quot;u&amp;quot;)&lt;br /&gt;
	word = gsub(word, &amp;#039;uu&amp;#039;, &amp;quot;û&amp;quot;) --&amp;#039;و&amp;#039; + &amp;#039;و&amp;#039; =&amp;gt; û (e.g. nû)&lt;br /&gt;
	word = gsub(word, &amp;#039;([ء-يٱ-ەiîuûwẅyÿ])ڕ&amp;#039;, &amp;quot;%1rr&amp;quot;) --when &amp;#039;ڕ&amp;#039; not at the beginning of a word =&amp;gt; rr&lt;br /&gt;
	word = gsub(word, &amp;#039;([ء-يٱ-ەiîuûwẅyÿ])ئ&amp;#039;, &amp;quot;%1&amp;#039;&amp;quot;) --when &amp;#039;ئ&amp;#039; not at the beginning of a word =&amp;gt; &amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;.&amp;#039;, mapping)&lt;br /&gt;
	&lt;br /&gt;
	--insert i where applicable&lt;br /&gt;
	word = gsub(word, &amp;#039;ll&amp;#039;, &amp;quot;Ľ&amp;quot;) -- temporary conversion to avoid seeing ll as 2 letters&lt;br /&gt;
	word = gsub(word, &amp;#039;rr&amp;#039;, &amp;quot;Ŕ&amp;quot;) -- temporary conversion to avoid seeing rr as 2 letters&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([fjlĽmnrŔsşvwẅxẍyÿz])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûüy])&amp;#039;, &amp;quot;%1%2i%3%4&amp;quot;) --e.g. grft -&amp;gt; grift&lt;br /&gt;
	word = gsub(word, &amp;#039;([aeêiîouûü])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$&amp;#039;, &amp;quot;%1%2%3i%4&amp;quot;) --e.g. cejnt -&amp;gt; cejnit&lt;br /&gt;
	word = gsub(word, &amp;#039;([fjlĽrŔsşwyz])([fjlĽmnrŔsşvwẅxẍyÿz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])&amp;#039;, &amp;quot;%1i%2%3&amp;quot;) --e.g. wrd -&amp;gt; wird&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])&amp;#039;, &amp;quot;%1i%2%3&amp;quot;) --e.g. prd -&amp;gt; pird&lt;br /&gt;
	word = gsub(word, &amp;#039;([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$&amp;#039;, &amp;quot;%1i%2&amp;quot;) --like above&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])&amp;#039;, &amp;quot;%1%2i%3%4&amp;quot;) --repeat the latter expression, in case skipped&lt;br /&gt;
	word = gsub(word, &amp;#039;([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$&amp;#039;, &amp;quot;%1%2i%3&amp;quot;) --repeat the latter expression, in case skipped&lt;br /&gt;
&lt;br /&gt;
	word = gsub(word, &amp;#039;^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])&amp;#039;, &amp;quot;%1i%2%3&amp;quot;) --e.g. ktk -&amp;gt; kitk&lt;br /&gt;
	word = gsub(word, &amp;#039;^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$&amp;#039;, &amp;quot;%1i%2&amp;quot;) --e.g. ktk -&amp;gt; kitk&lt;br /&gt;
	word = gsub(word, &amp;#039;([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])&amp;#039;, &amp;quot;%1%2i%3%4&amp;quot;) --e.g. ktk -&amp;gt; kitk&lt;br /&gt;
	word = gsub(word, &amp;#039;([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$&amp;#039;, &amp;quot;%1%2i%3&amp;quot;) --e.g. ktk -&amp;gt; kitk&lt;br /&gt;
&lt;br /&gt;
	word = gsub(word, &amp;#039;([^a-zçşêîûüĽŔ])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$&amp;#039;, &amp;quot;%1%2i&amp;quot;) --e.g. j -&amp;gt; ji&lt;br /&gt;
	word = gsub(word, &amp;#039;^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$&amp;#039;, &amp;quot;%1i&amp;quot;) --e.g. j -&amp;gt; ji	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--word = gsub(word, &amp;#039;([^a-zêîûçş0-9\&amp;#039;’])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])&amp;#039;, &amp;quot;%1%2i%3&amp;quot;) --e.g. bra -&amp;gt; bira&lt;br /&gt;
	--word = gsub(word, &amp;#039;^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])&amp;#039;, &amp;quot;%1i%2&amp;quot;) --e.g. bra -&amp;gt; bira&lt;br /&gt;
&lt;br /&gt;
	--word = gsub(word, &amp;#039;([bcçdfghḧjklmnpqrsştvwẅxẍz][bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])&amp;#039;, &amp;quot;%1i%2&amp;quot;) --e.g. aşkra -&amp;gt; aşkira&lt;br /&gt;
	&lt;br /&gt;
	--word = gsub(word, &amp;#039;si([tp][aeêiîouû])&amp;#039;, &amp;quot;s%1&amp;quot;) -- sp, st cluster&lt;br /&gt;
	&lt;br /&gt;
	word = gsub(word, &amp;#039;Ľ&amp;#039;, &amp;quot;ll&amp;quot;) --revert the temporary conversion&lt;br /&gt;
	word = gsub(word, &amp;#039;Ŕ&amp;#039;, &amp;quot;rr&amp;quot;) --revert the temporary conversion&lt;br /&gt;
&lt;br /&gt;
    -- Add the punctuation who had previously deleted.&lt;br /&gt;
    word = word .. ponct&lt;br /&gt;
    &lt;br /&gt;
	return word&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.tr(text, lang, sc)&lt;br /&gt;
    local textTab = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Create a word table separated by a space (%s).&lt;br /&gt;
	for _, word in ipairs(mw.text.split(text, &amp;#039;%s+&amp;#039;)) do&lt;br /&gt;
		table.insert(textTab, word)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Tablo of translit.&lt;br /&gt;
	for key, word in ipairs(textTab) do&lt;br /&gt;
		textTab[key] = tr_word(word)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(textTab, &amp;#039; &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;SurjectionBot</name></author>
	</entry>
</feed>