<?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%3AOsge-translit</id>
	<title>Module:Osge-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%3AOsge-translit"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:Osge-translit&amp;action=history"/>
	<updated>2026-04-22T00:14:50Z</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:Osge-translit&amp;diff=496471&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:Osge-translit&amp;diff=496471&amp;oldid=prev"/>
		<updated>2026-04-21T12:46:40Z</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:46, 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:Osge-translit&amp;diff=496470&amp;oldid=prev</id>
		<title>wikt&gt;AmazingJus: not needed</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:Osge-translit&amp;diff=496470&amp;oldid=prev"/>
		<updated>2025-10-17T11:05:44Z</updated>

		<summary type="html">&lt;p&gt;not needed&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;
local m_table = require(&amp;quot;Module:table&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- Import libraries&lt;br /&gt;
local U = require(&amp;quot;Module:string/char&amp;quot;)&lt;br /&gt;
local gsub = m_str_utils.gsub&lt;br /&gt;
local len = m_str_utils.len&lt;br /&gt;
local sub = m_str_utils.sub&lt;br /&gt;
&lt;br /&gt;
local decomp = mw.ustring.toNFD&lt;br /&gt;
local recomp = mw.ustring.toNFC&lt;br /&gt;
local upper = m_str_utils.upper&lt;br /&gt;
&lt;br /&gt;
-- Apply gsub() repeatedly until no change&lt;br /&gt;
local function gsub_repeatedly(term, foo, bar)&lt;br /&gt;
	while true do&lt;br /&gt;
		local new_term = gsub(term, foo, bar)&lt;br /&gt;
		if new_term == term then&lt;br /&gt;
			return term&lt;br /&gt;
		end&lt;br /&gt;
		term = new_term&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Check if given character is uppercase&lt;br /&gt;
local function is_upper(char)&lt;br /&gt;
	return char == upper(char)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local letters = {  -- general table&lt;br /&gt;
	[&amp;quot;𐒰&amp;quot;]=&amp;quot;A&amp;quot;, [&amp;quot;𐒱&amp;quot;]=&amp;quot;Ai&amp;quot;, [&amp;quot;𐒲&amp;quot;]=&amp;quot;Aį&amp;quot;, [&amp;quot;𐒳&amp;quot;]=&amp;quot;Ə&amp;quot;, [&amp;quot;𐒴&amp;quot;]=&amp;quot;Br&amp;quot;, [&amp;quot;𐒵&amp;quot;]=&amp;quot;Č&amp;quot;, [&amp;quot;𐒶&amp;quot;]=&amp;quot;Hč&amp;quot;, [&amp;quot;𐒷&amp;quot;]=&amp;quot;E&amp;quot;, [&amp;quot;𐒸&amp;quot;]=&amp;quot;Eį&amp;quot;, [&amp;quot;𐒹&amp;quot;]=&amp;quot;H&amp;quot;, [&amp;quot;𐒺&amp;quot;]=&amp;quot;Hy&amp;quot;,&lt;br /&gt;
	[&amp;quot;𐒻&amp;quot;]=&amp;quot;I&amp;quot;, [&amp;quot;𐒼&amp;quot;]=&amp;quot;K&amp;quot;, [&amp;quot;𐒽&amp;quot;]=&amp;quot;Hk&amp;quot;, [&amp;quot;𐒾&amp;quot;]=&amp;quot;Ky&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;Oį&amp;quot;, [&amp;quot;𐓄&amp;quot;]=&amp;quot;P&amp;quot;, [&amp;quot;𐓅&amp;quot;]=&amp;quot;Hp&amp;quot;,&lt;br /&gt;
	[&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;Ht&amp;quot;, [&amp;quot;𐓊&amp;quot;]=&amp;quot;C&amp;quot;, [&amp;quot;𐓋&amp;quot;]=&amp;quot;Hc&amp;quot;, [&amp;quot;𐓌&amp;quot;]=&amp;quot;Ch&amp;quot;, [&amp;quot;𐓍&amp;quot;]=&amp;quot;Ð&amp;quot;, [&amp;quot;𐓎&amp;quot;]=&amp;quot;U&amp;quot;, [&amp;quot;𐓏&amp;quot;]=&amp;quot;W&amp;quot;, [&amp;quot;𐓐&amp;quot;]=&amp;quot;X&amp;quot;,&lt;br /&gt;
	[&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;,&lt;br /&gt;
	[&amp;quot;𐓘&amp;quot;]=&amp;quot;a&amp;quot;, [&amp;quot;𐓙&amp;quot;]=&amp;quot;ai&amp;quot;, [&amp;quot;𐓚&amp;quot;]=&amp;quot;aį&amp;quot;, [&amp;quot;𐓛&amp;quot;]=&amp;quot;ə&amp;quot;, [&amp;quot;𐓜&amp;quot;]=&amp;quot;br&amp;quot;, [&amp;quot;𐓝&amp;quot;]=&amp;quot;č&amp;quot;, [&amp;quot;𐓞&amp;quot;]=&amp;quot;hč&amp;quot;, [&amp;quot;𐓟&amp;quot;]=&amp;quot;e&amp;quot;, [&amp;quot;𐓠&amp;quot;]=&amp;quot;eį&amp;quot;, [&amp;quot;𐓡&amp;quot;]=&amp;quot;h&amp;quot;, [&amp;quot;𐓢&amp;quot;]=&amp;quot;hy&amp;quot;,&lt;br /&gt;
	[&amp;quot;𐓣&amp;quot;]=&amp;quot;i&amp;quot;, [&amp;quot;𐓤&amp;quot;]=&amp;quot;k&amp;quot;, [&amp;quot;𐓥&amp;quot;]=&amp;quot;hk&amp;quot;, [&amp;quot;𐓦&amp;quot;]=&amp;quot;ky&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;oį&amp;quot;, [&amp;quot;𐓬&amp;quot;]=&amp;quot;p&amp;quot;, [&amp;quot;𐓭&amp;quot;]=&amp;quot;hp&amp;quot;,&lt;br /&gt;
	[&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;ht&amp;quot;, [&amp;quot;𐓲&amp;quot;]=&amp;quot;c&amp;quot;, [&amp;quot;𐓳&amp;quot;]=&amp;quot;hc&amp;quot;, [&amp;quot;𐓴&amp;quot;]=&amp;quot;ch&amp;quot;, [&amp;quot;𐓵&amp;quot;]=&amp;quot;ð&amp;quot;, [&amp;quot;𐓶&amp;quot;]=&amp;quot;u&amp;quot;, [&amp;quot;𐓷&amp;quot;]=&amp;quot;w&amp;quot;, [&amp;quot;𐓸&amp;quot;]=&amp;quot;x&amp;quot;,&lt;br /&gt;
	[&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;,&lt;br /&gt;
	[U(0x0358)]=U(0x0328), -- combining dot above -&amp;gt; combining ogonek (nasalisation)&lt;br /&gt;
	[U(0x030B)]=U(0x0304)..U(0x0301) -- combining double acute accent -&amp;gt; combining macron + combining acute accent (long high tone)&lt;br /&gt;
}&lt;br /&gt;
local accents = U(0x0301) .. U(0x0304) .. U(0x030B)  -- list of combining diacritics&lt;br /&gt;
local letters_reversed = m_table.invert(letters)  -- reverse transliteration table&lt;br /&gt;
local digraphs = &amp;quot;&amp;quot;  -- generate list of osage letters that represent digraphs (uppercase only)&lt;br /&gt;
local digraphs_reversed = {}  -- generate list of latin letters that represent digraphs&lt;br /&gt;
for k, v in pairs(letters) do&lt;br /&gt;
	if len(v) &amp;gt; 1 then&lt;br /&gt;
		if is_upper(k) then digraphs = digraphs .. k end&lt;br /&gt;
		table.insert(digraphs_reversed, v)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.tr(text, lang, sc)&lt;br /&gt;
	-- handle vowel and other uppercase digraphs first&lt;br /&gt;
	text = gsub(text, &amp;quot;([&amp;quot; .. digraphs .. &amp;quot;𐓙𐓚𐓠𐓫])([&amp;quot; .. accents .. &amp;quot;]?)(.?)&amp;quot;, function(d, a, d_next)  -- run multiple times to catch all instances&lt;br /&gt;
		if is_upper(d_next) then&lt;br /&gt;
			return upper(sub(letters[d], 1, 1) .. a .. sub(letters[d], 2)) .. d_next  -- place diacritics in between for vowels&lt;br /&gt;
		end&lt;br /&gt;
		return sub(letters[d], 1, 1) .. a .. sub(letters[d], 2) .. d_next&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	-- move combining dot above before other diacritics&lt;br /&gt;
	text = gsub(text, &amp;quot;([&amp;quot; .. accents .. &amp;quot;])&amp;quot; .. U(0x0358), U(0x0358) .. &amp;quot;%1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- then substitute all other letters&lt;br /&gt;
	return recomp(gsub(text, &amp;quot;.&amp;quot;, letters))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.tr_reverse(text)&lt;br /&gt;
	-- decompose letters (excluding letters with caron)&lt;br /&gt;
	text = gsub(text, &amp;quot;([^ČčŠšŽž]+)&amp;quot;, function(v) return decomp(v) end)&lt;br /&gt;
&lt;br /&gt;
	-- handle digraphs first&lt;br /&gt;
	text = gsub(text, &amp;quot;([AEOaeo])([&amp;quot; .. accents .. &amp;quot;]*)[Ii](&amp;quot; .. U(0x0328) .. &amp;quot;?)&amp;quot;, function(v, a, n)  -- catch any diacritics in between vowel digraphs&lt;br /&gt;
		if n then  -- for nasalised vowels&lt;br /&gt;
			return letters_reversed[v .. &amp;quot;į&amp;quot;] .. a&lt;br /&gt;
		end&lt;br /&gt;
		return letters_reversed[v .. &amp;quot;i&amp;quot;] .. a  -- for other vowels&lt;br /&gt;
	end)&lt;br /&gt;
	for _, v in ipairs(digraphs_reversed) do  -- change uppercase second letter to lowercase for remaining digraphs&lt;br /&gt;
		local match_pattern = sub(v, 1, 1) .. &amp;quot;[&amp;quot; .. sub(v, 2, 2) .. upper(sub(v, 2, 2)) .. &amp;quot;]&amp;quot;&lt;br /&gt;
		text = gsub_repeatedly(text, match_pattern, letters_reversed[v])  -- run multiple times to catch all instances&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- move combining ogonek after other diacritics&lt;br /&gt;
	text = gsub(text, &amp;quot;([&amp;quot; .. accents .. &amp;quot;]+)&amp;quot; .. U(0x0358), U(0x0358) .. &amp;quot;%1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- macron + acute accent -&amp;gt; double acute accent&lt;br /&gt;
	text = gsub(text, U(0x0301) .. U(0x0304), U(0x0304) .. U(0x0301))  -- swap to catch both orders&lt;br /&gt;
	text = gsub(text, U(0x0304) .. U(0x0301), letters_reversed)&lt;br /&gt;
&lt;br /&gt;
	-- then substitute all other letters&lt;br /&gt;
	return recomp(gsub(text, &amp;quot;.&amp;quot;, letters_reversed))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;AmazingJus</name></author>
	</entry>
</feed>