<?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%3Amn-translit</id>
	<title>Module:mn-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%3Amn-translit"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:mn-translit&amp;action=history"/>
	<updated>2026-04-09T21:39:46Z</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:mn-translit&amp;diff=325031&amp;oldid=prev</id>
		<title>Sware: Created page with &quot;local export = {} local mn = require(&quot;Module:mn-common&quot;) local gsub = mw.ustring.gsub  local preConv = { 	[&quot;є&quot;] = &quot;ө&quot;, [&quot;ѳ&quot;] = &quot;ө&quot;, 	[&quot;Є&quot;] = &quot;Ө&quot;, [&quot;Ѳ&quot;] = &quot;Ө&quot; }  local oneChar = { 	[&quot;а&quot;] = &quot;a&quot;, [&quot;б&quot;] = &quot;b&quot;, [&quot;в&quot;] = &quot;v&quot;, [&quot;г&quot;] = &quot;g&quot;, [&quot;д&quot;] = &quot;d&quot;, [&quot;е&quot;] = &quot;je&quot;, [&quot;ё&quot;] = &quot;jo&quot;, [&quot;ж&quot;] = &quot;ž&quot;, [&quot;з&quot;] = &quot;z&quot;, [&quot;и&quot;] = &quot;i&quot;, [&quot;й&quot;] = &quot;j&quot;, [&quot;к&quot;] = &quot;k&quot;, [&quot;л&quot;] = &quot;l&quot;, [&quot;м&quot;] = &quot;m&quot;, [&quot;н&quot;] = &quot;n&quot;, [&quot;о&quot;] = &quot;o&quot;, [&quot;ө&quot;] = &quot;ö&quot;, [&quot;п&quot;] = &quot;p&quot;, [&quot;р&quot;] = &quot;r&quot;, [&quot;с&quot;] = &quot;s&quot;, [&quot;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:mn-translit&amp;diff=325031&amp;oldid=prev"/>
		<updated>2023-09-11T16:29:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {} local mn = require(&amp;quot;Module:mn-common&amp;quot;) local gsub = mw.ustring.gsub  local preConv = { 	[&amp;quot;є&amp;quot;] = &amp;quot;ө&amp;quot;, [&amp;quot;ѳ&amp;quot;] = &amp;quot;ө&amp;quot;, 	[&amp;quot;Є&amp;quot;] = &amp;quot;Ө&amp;quot;, [&amp;quot;Ѳ&amp;quot;] = &amp;quot;Ө&amp;quot; }  local oneChar = { 	[&amp;quot;а&amp;quot;] = &amp;quot;a&amp;quot;, [&amp;quot;б&amp;quot;] = &amp;quot;b&amp;quot;, [&amp;quot;в&amp;quot;] = &amp;quot;v&amp;quot;, [&amp;quot;г&amp;quot;] = &amp;quot;g&amp;quot;, [&amp;quot;д&amp;quot;] = &amp;quot;d&amp;quot;, [&amp;quot;е&amp;quot;] = &amp;quot;je&amp;quot;, [&amp;quot;ё&amp;quot;] = &amp;quot;jo&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;i&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;l&amp;quot;, [&amp;quot;м&amp;quot;] = &amp;quot;m&amp;quot;, [&amp;quot;н&amp;quot;] = &amp;quot;n&amp;quot;, [&amp;quot;о&amp;quot;] = &amp;quot;o&amp;quot;, [&amp;quot;ө&amp;quot;] = &amp;quot;ö&amp;quot;, [&amp;quot;п&amp;quot;] = &amp;quot;p&amp;quot;, [&amp;quot;р&amp;quot;] = &amp;quot;r&amp;quot;, [&amp;quot;с&amp;quot;] = &amp;quot;s&amp;quot;, [&amp;quot;...&amp;quot;&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;
local mn = require(&amp;quot;Module:mn-common&amp;quot;)&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
local preConv = {&lt;br /&gt;
	[&amp;quot;є&amp;quot;] = &amp;quot;ө&amp;quot;, [&amp;quot;ѳ&amp;quot;] = &amp;quot;ө&amp;quot;,&lt;br /&gt;
	[&amp;quot;Є&amp;quot;] = &amp;quot;Ө&amp;quot;, [&amp;quot;Ѳ&amp;quot;] = &amp;quot;Ө&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local oneChar = {&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;v&amp;quot;, [&amp;quot;г&amp;quot;] = &amp;quot;g&amp;quot;, [&amp;quot;д&amp;quot;] = &amp;quot;d&amp;quot;, [&amp;quot;е&amp;quot;] = &amp;quot;je&amp;quot;, [&amp;quot;ё&amp;quot;] = &amp;quot;jo&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;i&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;l&amp;quot;, [&amp;quot;м&amp;quot;] = &amp;quot;m&amp;quot;, [&amp;quot;н&amp;quot;] = &amp;quot;n&amp;quot;, [&amp;quot;о&amp;quot;] = &amp;quot;o&amp;quot;, [&amp;quot;ө&amp;quot;] = &amp;quot;ö&amp;quot;, [&amp;quot;п&amp;quot;] = &amp;quot;p&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;t&amp;quot;, [&amp;quot;у&amp;quot;] = &amp;quot;u&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;x&amp;quot;, [&amp;quot;ц&amp;quot;] = &amp;quot;c&amp;quot;, [&amp;quot;ч&amp;quot;] = &amp;quot;č&amp;quot;, [&amp;quot;ш&amp;quot;] = &amp;quot;š&amp;quot;, [&amp;quot;щ&amp;quot;] = &amp;quot;šč&amp;quot;, [&amp;quot;ъ&amp;quot;] = &amp;quot;ʺ&amp;quot;, [&amp;quot;ы&amp;quot;] = &amp;quot;y&amp;quot;, [&amp;quot;ь&amp;quot;] = &amp;quot;ʹ&amp;quot;, [&amp;quot;э&amp;quot;] = &amp;quot;e&amp;quot;, [&amp;quot;ю&amp;quot;] = &amp;quot;ju&amp;quot;, [&amp;quot;я&amp;quot;] = &amp;quot;ja&amp;quot;,&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;V&amp;quot;, [&amp;quot;Г&amp;quot;] = &amp;quot;G&amp;quot;, [&amp;quot;Д&amp;quot;] = &amp;quot;D&amp;quot;, [&amp;quot;Е&amp;quot;] = &amp;quot;Je&amp;quot;, [&amp;quot;Ё&amp;quot;] = &amp;quot;Jo&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;I&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;L&amp;quot;, [&amp;quot;М&amp;quot;] = &amp;quot;M&amp;quot;, [&amp;quot;Н&amp;quot;] = &amp;quot;N&amp;quot;, [&amp;quot;О&amp;quot;] = &amp;quot;O&amp;quot;, [&amp;quot;Ө&amp;quot;] = &amp;quot;Ö&amp;quot;, [&amp;quot;П&amp;quot;] = &amp;quot;P&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;T&amp;quot;, [&amp;quot;У&amp;quot;] = &amp;quot;U&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;X&amp;quot;, [&amp;quot;Ц&amp;quot;] = &amp;quot;C&amp;quot;, [&amp;quot;Ч&amp;quot;] = &amp;quot;Č&amp;quot;, [&amp;quot;Ш&amp;quot;] = &amp;quot;Š&amp;quot;, [&amp;quot;Щ&amp;quot;] = &amp;quot;Šč&amp;quot;, [&amp;quot;Ъ&amp;quot;] = &amp;quot;ʺ&amp;quot;, [&amp;quot;Ы&amp;quot;] = &amp;quot;Y&amp;quot;, [&amp;quot;Ь&amp;quot;] = &amp;quot;ʹ&amp;quot;, [&amp;quot;Э&amp;quot;] = &amp;quot;E&amp;quot;, [&amp;quot;Ю&amp;quot;] = &amp;quot;Ju&amp;quot;, [&amp;quot;Я&amp;quot;] = &amp;quot;Ja&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local twoChars = {&lt;br /&gt;
	[&amp;quot;ий&amp;quot;] = &amp;quot;ii&amp;quot;,&lt;br /&gt;
	[&amp;quot;Ий&amp;quot;] = &amp;quot;Ii&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.tr(text, lang, sc)&lt;br /&gt;
	if sc ~= &amp;quot;Cyrl&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local UTF8_char = &amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;&lt;br /&gt;
	-- Decompose (except for &amp;quot;ё&amp;quot; and &amp;quot;й&amp;quot;) so that accents can be consistently detected.&lt;br /&gt;
	text = mw.ustring.toNFD(text)&lt;br /&gt;
	text = gsub(text, &amp;quot;[еЕ]̈&amp;quot;, mw.ustring.toNFC)&lt;br /&gt;
	text = gsub(text, &amp;quot;[иИ]̆&amp;quot;, mw.ustring.toNFC)&lt;br /&gt;
	-- Pre-convert &amp;quot;є&amp;quot; and &amp;quot;ѳ&amp;quot; to &amp;quot;ө&amp;quot;.&lt;br /&gt;
	text = string.gsub(text, UTF8_char, preConv)&lt;br /&gt;
	-- Hard sign does nothing if word-final (extremely rare, but attested in borrowings of affected Russian proper nouns like &amp;quot;Коммерсантъ&amp;quot;).&lt;br /&gt;
	text = gsub(text, &amp;quot;[Ъъ]([^а-яёөү])&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	text = gsub(text, &amp;quot;[Ъъ]$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	-- &amp;quot;Е&amp;quot; is not iotated after a consonant and &amp;quot;ю&amp;quot; is not iotated after &amp;quot;ж&amp;quot;, &amp;quot;ш&amp;quot;, &amp;quot;ч&amp;quot; or &amp;quot;щ&amp;quot;, so they must be converted to their non-iotated romanizations in advance. However, a soft sign before &amp;quot;е&amp;quot; or &amp;quot;ю&amp;quot; (as a front vowel) creates a morphemic break, which means iotation does occur (i.e. it acts like a hard sign). These exceptions are converted into the iotated romanizations first; then, all instances of &amp;quot;е&amp;quot; and &amp;quot;ю&amp;quot; (which meet the prerequisites) are converted into non-iotated romanizations. This treats all instances of &amp;quot;ю&amp;quot; as front vowels, so deal with any back vowel instances of &amp;quot;ю&amp;quot; once iterating over the vowel harmonic segments later on, before doing the main substitutions.&lt;br /&gt;
	text = gsub(text, &amp;quot;([Ьь])е&amp;quot;, &amp;quot;%1je&amp;quot;)&lt;br /&gt;
	text = gsub(text, &amp;quot;([жчшщЖЧШЩ]ь)ю&amp;quot;, &amp;quot;%1ju&amp;quot;)&lt;br /&gt;
	text = gsub(text, &amp;quot;([^̀́̂аеёиоөуүъыэюяАЕЁИОӨУҮЪЫЬЭЮЯ%s][̀́̂]?)е&amp;quot;, &amp;quot;%1e&amp;quot;)&lt;br /&gt;
	text = gsub(text, &amp;quot;([жчшщЖЧШЩ]ь?)ю&amp;quot;,&amp;quot;%1u&amp;quot;)&lt;br /&gt;
	-- Divide into segments by vowel harmony and iterate over them.&lt;br /&gt;
	text = mn.vowelharmony(text)&lt;br /&gt;
	text.translit = {}&lt;br /&gt;
	for i, v in ipairs(text) do&lt;br /&gt;
		-- &amp;quot;Ю&amp;quot; is &amp;quot;jü/ü&amp;quot; if front harmonic.&lt;br /&gt;
		if text[i].position == &amp;quot;front&amp;quot; then&lt;br /&gt;
			-- Latin &amp;quot;u&amp;quot; (from previous substitution).&lt;br /&gt;
			text[i].substring = gsub(text[i].substring, &amp;quot;u&amp;quot;, &amp;quot;ü&amp;quot;)&lt;br /&gt;
			-- Cyrillic &amp;quot;ю&amp;quot;.&lt;br /&gt;
			text[i].substring = gsub(text[i].substring, &amp;quot;ю&amp;quot;, &amp;quot;jü&amp;quot;)&lt;br /&gt;
			text[i].substring = gsub(text[i].substring, &amp;quot;Ю&amp;quot;, &amp;quot;Jü&amp;quot;)&lt;br /&gt;
			-- &amp;quot;Е&amp;quot; is &amp;quot;jö/ö&amp;quot; if front round harmonic.&lt;br /&gt;
			if text[i].quality == &amp;quot;rounded&amp;quot; then&lt;br /&gt;
				-- Latin &amp;quot;e&amp;quot; (from previous substitution).&lt;br /&gt;
				text[i].substring = gsub(text[i].substring, &amp;quot;e&amp;quot;, &amp;quot;ö&amp;quot;)&lt;br /&gt;
				-- Cyrillic &amp;quot;е&amp;quot;.&lt;br /&gt;
				text[i].substring = gsub(text[i].substring, &amp;quot;е&amp;quot;, &amp;quot;jö&amp;quot;)&lt;br /&gt;
				text[i].substring = gsub(text[i].substring, &amp;quot;Е&amp;quot;, &amp;quot;Jö&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		-- If back harmonic, any instances of &amp;quot;ю&amp;quot; that were treated as front vowels need to be treated as back vowels (i.e. the soft sign doesn&amp;#039;t create a morphemic break, so iotation does not occur).&lt;br /&gt;
		else&lt;br /&gt;
			text[i].substring = gsub(text[i].substring, &amp;quot;([Ьь])ju&amp;quot;, &amp;quot;%1u&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		-- Do primary substitutions. If still present, Cyrillic &amp;quot;е&amp;quot; becomes &amp;quot;je&amp;quot; and &amp;quot;ю&amp;quot; becomes &amp;quot;ju&amp;quot;.&lt;br /&gt;
		for digraph, replacement in pairs(twoChars) do&lt;br /&gt;
			text[i].substring = string.gsub(text[i].substring, digraph, replacement)&lt;br /&gt;
		end&lt;br /&gt;
		text[i].substring = string.gsub(text[i].substring, UTF8_char, oneChar)&lt;br /&gt;
		table.insert(text.translit, text[i].substring)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return mw.ustring.toNFC(table.concat(text.translit, &amp;quot;&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
</feed>