<?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%3Ahit-translit</id>
	<title>Module:hit-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%3Ahit-translit"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:hit-translit&amp;action=history"/>
	<updated>2026-05-19T00:39:44Z</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:hit-translit&amp;diff=495839&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:hit-translit&amp;diff=495839&amp;oldid=prev"/>
		<updated>2026-04-21T12:45:00Z</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:45, 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:hit-translit&amp;diff=495838&amp;oldid=prev</id>
		<title>wikt&gt;Theknightwho: Avoid the need to use deepcopy.</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:hit-translit&amp;diff=495838&amp;oldid=prev"/>
		<updated>2024-07-21T12:34:00Z</updated>

		<summary type="html">&lt;p&gt;Avoid the need to use deepcopy.&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 bit32 = require(&amp;#039;bit32&amp;#039;)&lt;br /&gt;
local m_tag = require(&amp;#039;Module:hit-translit/tag&amp;#039;)&lt;br /&gt;
local sign_list = mw.loadData(&amp;#039;Module:hit-translit/data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local ulen = mw.ustring.len&lt;br /&gt;
local usub = mw.ustring.sub&lt;br /&gt;
&lt;br /&gt;
local segments = {&lt;br /&gt;
	-- vowels&lt;br /&gt;
	[&amp;#039;a&amp;#039;] = &amp;#039;a&amp;#039;,&lt;br /&gt;
	[&amp;#039;á&amp;#039;] = &amp;#039;a&amp;#039;,&lt;br /&gt;
	[&amp;#039;à&amp;#039;] = &amp;#039;a&amp;#039;,&lt;br /&gt;
	[&amp;#039;e&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
	[&amp;#039;é&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
	[&amp;#039;è&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
	[&amp;#039;i&amp;#039;] = &amp;#039;i&amp;#039;,&lt;br /&gt;
	[&amp;#039;í&amp;#039;] = &amp;#039;i&amp;#039;,&lt;br /&gt;
	[&amp;#039;ì&amp;#039;] = &amp;#039;i&amp;#039;,&lt;br /&gt;
	[&amp;#039;u&amp;#039;] = &amp;#039;u&amp;#039;,&lt;br /&gt;
	[&amp;#039;ú&amp;#039;] = &amp;#039;u&amp;#039;,&lt;br /&gt;
	[&amp;#039;ù&amp;#039;] = &amp;#039;u&amp;#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- consonants with voicing alternaternates&lt;br /&gt;
	[&amp;#039;b&amp;#039;] = &amp;#039;b&amp;#039;,&lt;br /&gt;
	[&amp;#039;p&amp;#039;] = &amp;#039;p&amp;#039;,&lt;br /&gt;
	[&amp;#039;d&amp;#039;] = &amp;#039;d&amp;#039;,&lt;br /&gt;
	[&amp;#039;t&amp;#039;] = &amp;#039;t&amp;#039;,&lt;br /&gt;
	[&amp;#039;g&amp;#039;] = &amp;#039;g&amp;#039;,&lt;br /&gt;
	[&amp;#039;k&amp;#039;] = &amp;#039;k&amp;#039;,&lt;br /&gt;
	[&amp;#039;q&amp;#039;] = &amp;#039;q&amp;#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- single consonants&lt;br /&gt;
	[&amp;#039;ḫ&amp;#039;] = &amp;#039;h&amp;#039;,&lt;br /&gt;
	[&amp;#039;r&amp;#039;] = &amp;#039;r&amp;#039;,&lt;br /&gt;
	[&amp;#039;l&amp;#039;] = &amp;#039;l&amp;#039;,&lt;br /&gt;
	[&amp;#039;m&amp;#039;] = &amp;#039;m&amp;#039;,&lt;br /&gt;
	[&amp;#039;n&amp;#039;] = &amp;#039;n&amp;#039;,&lt;br /&gt;
	[&amp;#039;š&amp;#039;] = &amp;#039;s&amp;#039;,&lt;br /&gt;
	[&amp;#039;z&amp;#039;] = &amp;#039;z&amp;#039;,&lt;br /&gt;
	[&amp;#039;y&amp;#039;] = &amp;#039;y&amp;#039;,&lt;br /&gt;
	[&amp;#039;w&amp;#039;] = &amp;#039;w&amp;#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- numbers&lt;br /&gt;
	[&amp;#039;0&amp;#039;] = &amp;#039;0&amp;#039;,&lt;br /&gt;
	[&amp;#039;1&amp;#039;] = &amp;#039;1&amp;#039;,&lt;br /&gt;
	[&amp;#039;2&amp;#039;] = &amp;#039;2&amp;#039;,&lt;br /&gt;
	[&amp;#039;3&amp;#039;] = &amp;#039;3&amp;#039;,&lt;br /&gt;
	[&amp;#039;4&amp;#039;] = &amp;#039;4&amp;#039;,&lt;br /&gt;
	[&amp;#039;5&amp;#039;] = &amp;#039;5&amp;#039;,&lt;br /&gt;
	[&amp;#039;6&amp;#039;] = &amp;#039;6&amp;#039;,&lt;br /&gt;
	[&amp;#039;7&amp;#039;] = &amp;#039;7&amp;#039;,&lt;br /&gt;
	[&amp;#039;8&amp;#039;] = &amp;#039;8&amp;#039;,&lt;br /&gt;
	[&amp;#039;9&amp;#039;] = &amp;#039;9&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
-- Set up bit array to for marking which onsets and codas are available for ambiguous characters&lt;br /&gt;
]=]&lt;br /&gt;
local sort_order = {&lt;br /&gt;
	-- vowels&lt;br /&gt;
	[&amp;#039;a&amp;#039;] = 2 ^ 0,&lt;br /&gt;
	[&amp;#039;i&amp;#039;] = 2 ^ 1, -- I&amp;#039;ve chosen &amp;quot;i&amp;quot; over &amp;quot;e&amp;quot;&lt;br /&gt;
	[&amp;#039;e&amp;#039;] = 2 ^ 2,&lt;br /&gt;
	[&amp;#039;u&amp;#039;] = 2 ^ 3,&lt;br /&gt;
	&lt;br /&gt;
	-- consonants with voicing alternaternates&lt;br /&gt;
	[&amp;#039;p&amp;#039;] = 2 ^ 4,&lt;br /&gt;
	[&amp;#039;b&amp;#039;] = 2 ^ 5,&lt;br /&gt;
	[&amp;#039;t&amp;#039;] = 2 ^ 6,&lt;br /&gt;
	[&amp;#039;d&amp;#039;] = 2 ^ 7,&lt;br /&gt;
	[&amp;#039;k&amp;#039;] = 2 ^ 8,&lt;br /&gt;
	[&amp;#039;g&amp;#039;] = 2 ^ 9,&lt;br /&gt;
	[&amp;#039;q&amp;#039;] = 2 ^ 10,&lt;br /&gt;
	&lt;br /&gt;
	-- single consonants&lt;br /&gt;
	[&amp;#039;h&amp;#039;] = 2 ^ 11,&lt;br /&gt;
	[&amp;#039;r&amp;#039;] = 2 ^ 12,&lt;br /&gt;
	[&amp;#039;l&amp;#039;] = 2 ^ 13,&lt;br /&gt;
	[&amp;#039;m&amp;#039;] = 2 ^ 14,&lt;br /&gt;
	[&amp;#039;n&amp;#039;] = 2 ^ 15,&lt;br /&gt;
	[&amp;#039;s&amp;#039;] = 2 ^ 16,&lt;br /&gt;
	[&amp;#039;z&amp;#039;] = 2 ^ 17,&lt;br /&gt;
	[&amp;#039;y&amp;#039;] = 2 ^ 18,&lt;br /&gt;
	[&amp;#039;w&amp;#039;] = 2 ^ 19,&lt;br /&gt;
	&lt;br /&gt;
	-- numbers&lt;br /&gt;
	[&amp;#039;0&amp;#039;] = 2 ^ 20,&lt;br /&gt;
	[&amp;#039;1&amp;#039;] = 2 ^ 21,&lt;br /&gt;
	[&amp;#039;2&amp;#039;] = 2 ^ 22,&lt;br /&gt;
	[&amp;#039;3&amp;#039;] = 2 ^ 23,&lt;br /&gt;
	[&amp;#039;4&amp;#039;] = 2 ^ 24,&lt;br /&gt;
	[&amp;#039;5&amp;#039;] = 2 ^ 25,&lt;br /&gt;
	[&amp;#039;6&amp;#039;] = 2 ^ 26,&lt;br /&gt;
	[&amp;#039;7&amp;#039;] = 2 ^ 27,&lt;br /&gt;
	[&amp;#039;8&amp;#039;] = 2 ^ 28,&lt;br /&gt;
	[&amp;#039;9&amp;#039;] = 2 ^ 29,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function inplace_multikey_sort(t)&lt;br /&gt;
	-- Sorts a table inplace by the onset and then coda&lt;br /&gt;
	table.sort(t, function(a, b)&lt;br /&gt;
		if a.o ~= b.o then&lt;br /&gt;
			return sort_order[a.o] &amp;lt; sort_order[b.o]&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return sort_order[a.c] &amp;lt; sort_order[b.c]&lt;br /&gt;
	end)&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function find_seg(syl, rev)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- A helper function that iterates forwards or backwards (if &amp;quot;rev&amp;quot; is set)&lt;br /&gt;
	-- 	in order to find the first phonetic segment and return the normalized&lt;br /&gt;
	-- 	form of that segment. Thus:&lt;br /&gt;
	-- 		find_seg(&amp;quot;šaq&amp;quot;) gives &amp;quot;s&amp;quot;&lt;br /&gt;
	-- 		find_seg(&amp;quot;luḫ&amp;quot;, true) gives &amp;quot;h&amp;quot;&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	local f&lt;br /&gt;
	for i = 1, ulen(syl) do&lt;br /&gt;
		f = usub(syl, rev and -i or i, rev and -i or i)&lt;br /&gt;
		if segments[f] then --&lt;br /&gt;
			return segments[f]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	error(&amp;#039;Could not find a &amp;#039; .. (rev and &amp;#039;coda&amp;#039; or &amp;#039;onset&amp;#039;) .. &amp;#039; for the syllable &amp;quot;&amp;#039; .. syl .. &amp;#039;&amp;quot;.&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.find_onset(syl)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Find the normalized onset character of a syllable&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	return find_seg(syl)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.find_coda(syl)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Find the normalized coda character of a syllable&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	return find_seg(syl, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.hash_sign(sign)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Turn the list of Hittite syllables into a list of list containing:&lt;br /&gt;
	-- 		The syllable&lt;br /&gt;
	-- 		The normalized onset character of the syllable&lt;br /&gt;
	-- 		The normalized coda character of the syllable&lt;br /&gt;
	-- And add a hashes of the onsets and codas in the syllables. Thus&lt;br /&gt;
	-- 		{ &amp;quot;it&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;et&amp;quot;, &amp;quot;ed&amp;quot;, hit = true }&lt;br /&gt;
	-- 		becomes:&lt;br /&gt;
	-- 		{&lt;br /&gt;
	-- 			{ &amp;quot;it&amp;quot;, o = &amp;quot;i&amp;quot;, c = &amp;quot;t&amp;quot; },&lt;br /&gt;
	-- 			{ &amp;quot;id&amp;quot;, o = &amp;quot;i&amp;quot;, c = &amp;quot;d&amp;quot; },&lt;br /&gt;
	-- 			{ &amp;quot;et&amp;quot;, o = &amp;quot;e&amp;quot;, c = &amp;quot;t&amp;quot; },&lt;br /&gt;
	-- 			{ &amp;quot;ed&amp;quot;, o = &amp;quot;e&amp;quot;, c = &amp;quot;d&amp;quot; },&lt;br /&gt;
	--			o_hash = 6, c_hash = 192, hit = true&lt;br /&gt;
	-- 		}&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	&lt;br /&gt;
	local ret = {o_hash = 0, c_hash = 0, hit = true} -- init onset and coda hashes for signs&lt;br /&gt;
	for i, syl in ipairs(sign) do&lt;br /&gt;
		ret[i] = {syl, o = export.find_onset(syl), c = export.find_coda(syl)}&lt;br /&gt;
		ret.o_hash = bit32.bor(ret.o_hash, sort_order[ret[i].o])&lt;br /&gt;
		ret.c_hash = bit32.bor(ret.c_hash, sort_order[ret[i].c])&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.copy_sign(sign)&lt;br /&gt;
	-- sort and set up new sign&lt;br /&gt;
	local new = sign_list[sign]&lt;br /&gt;
	if new.hit then -- has Hittite signs&lt;br /&gt;
		new = export.hash_sign(new)&lt;br /&gt;
		inplace_multikey_sort(new)&lt;br /&gt;
	end&lt;br /&gt;
	return new&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function remove_syls(first, second, mask)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- For two adjacent sets of Hittite syllables and a mask of their shared characters,&lt;br /&gt;
	-- 	go through each one and remove the unnecessary values, and update the hashes.&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	local new_o_hash, new_c_hash, new_first, new_second = 0, 0, { hit = true }, { hit = true }&lt;br /&gt;
	for _, syl in ipairs(first) do&lt;br /&gt;
		if bit32.band(sort_order[syl.c], mask) &amp;gt; 0 then&lt;br /&gt;
			table.insert(new_first, syl)&lt;br /&gt;
			new_o_hash = bit32.bor(new_o_hash, sort_order[syl.o]) -- unnecessary, but useful for tracking&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	new_first.o_hash = new_o_hash&lt;br /&gt;
	new_first.c_hash = mask&lt;br /&gt;
	&lt;br /&gt;
	for _, syl in ipairs(second) do&lt;br /&gt;
		if bit32.band(sort_order[syl.o], mask) &amp;gt; 0 then&lt;br /&gt;
			table.insert(new_second, syl)&lt;br /&gt;
			new_c_hash = bit32.bor(new_c_hash, sort_order[syl.c])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	new_second.o_hash = mask&lt;br /&gt;
	new_second.c_hash = new_c_hash&lt;br /&gt;
	&lt;br /&gt;
	return new_first, new_second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local related_character_masks = {&lt;br /&gt;
	-- voicing alternates&lt;br /&gt;
	bit32.bor(sort_order[&amp;#039;p&amp;#039;], sort_order[&amp;#039;b&amp;#039;]),&lt;br /&gt;
	bit32.bor(sort_order[&amp;#039;t&amp;#039;], sort_order[&amp;#039;d&amp;#039;]),&lt;br /&gt;
	bit32.bor(sort_order[&amp;#039;k&amp;#039;], sort_order[&amp;#039;g&amp;#039;], sort_order[&amp;#039;q&amp;#039;]),&lt;br /&gt;
	&lt;br /&gt;
	-- &amp;quot;u&amp;quot; patterns next to &amp;quot;w&amp;quot;&lt;br /&gt;
	bit32.bor(sort_order[&amp;#039;u&amp;#039;], sort_order[&amp;#039;w&amp;#039;]),&lt;br /&gt;
	&lt;br /&gt;
	-- numbers pattern together&lt;br /&gt;
	bit32.bor(sort_order[&amp;#039;0&amp;#039;], sort_order[&amp;#039;1&amp;#039;], sort_order[&amp;#039;2&amp;#039;], sort_order[&amp;#039;3&amp;#039;], sort_order[&amp;#039;4&amp;#039;],&lt;br /&gt;
		sort_order[&amp;#039;5&amp;#039;], sort_order[&amp;#039;6&amp;#039;], sort_order[&amp;#039;7&amp;#039;], sort_order[&amp;#039;8&amp;#039;], sort_order[&amp;#039;9&amp;#039;]),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function approx_match(first_hash, second_hash)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Builds a bit mask for all approximate matches like &amp;quot;p&amp;quot; and &amp;quot;b&amp;quot;, or &amp;quot;t&amp;quot; and &amp;quot;d&amp;quot;.&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	local new_mask = 0&lt;br /&gt;
	for _, mask in ipairs(related_character_masks) do&lt;br /&gt;
		if bit32.band(mask, first_hash) &amp;gt; 0 and bit32.band(mask, second_hash) &amp;gt; 0 then&lt;br /&gt;
			new_mask = bit32.bor(new_mask, mask)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return new_mask&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.fit_signs(first, second)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Takes two adjacent signs and removes unlikely Hittite syllables.&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	if first and second then -- two signs&lt;br /&gt;
		if first.hit and second.hit then -- both have Hittite syllables&lt;br /&gt;
			local match_mask = bit32.band(first.c_hash, second.o_hash)&lt;br /&gt;
			if match_mask &amp;gt; 0 then -- there are matching chars in each&lt;br /&gt;
				return remove_syls(first, second, match_mask)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			match_mask = approx_match(first.c_hash, second.o_hash)&lt;br /&gt;
			if match_mask &amp;gt; 0 then -- there are approxiamtely matching chars in each&lt;br /&gt;
				return remove_syls(first, second, match_mask)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif first then -- final sign&lt;br /&gt;
		-- nothing yet&lt;br /&gt;
	else -- initial sing&lt;br /&gt;
		-- nothing yet&lt;br /&gt;
	end&lt;br /&gt;
	return first, second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function assemble_word(signs)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Choose all the signs, tag when appropriate, then concatenate&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	local word = {}&lt;br /&gt;
	for _, sign in ipairs(signs) do&lt;br /&gt;
		if sign.hit then -- If Hittite, take first sign&lt;br /&gt;
			table.insert(word, sign[1][1])&lt;br /&gt;
		elseif sign.sum then -- If Sumerogram, take and  tag first sign&lt;br /&gt;
			table.insert(word, m_tag.tag_sumerogram(sign[1]))&lt;br /&gt;
		elseif sign.akk then -- If Akkadogram, take and tag first sign&lt;br /&gt;
			table.insert(word, m_tag.tag_akkadogram(sign[1]))&lt;br /&gt;
		elseif sign.hurr then -- If Hurrian, take and tag first sign&lt;br /&gt;
			table.insert(word, m_tag.tag_hurrian_tr(sign[1]))&lt;br /&gt;
		elseif sign.hatt then -- If Hattic, take and tag first sign&lt;br /&gt;
			table.insert(word, m_tag.tag_hattic_tr(sign[1]))&lt;br /&gt;
		elseif sign.glossenkeil then -- If Glossenkeil, display it&lt;br /&gt;
			table.insert(word, m_tag.glossenkeil())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(word, &amp;#039;-&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.transpose(text)&lt;br /&gt;
	-- [=[&lt;br /&gt;
	-- Takes a continuous Cuneiform string and converts it to transliteration&lt;br /&gt;
	-- -- ]=]&lt;br /&gt;
	local signs = {}&lt;br /&gt;
	while ulen(text) &amp;gt; 0 do&lt;br /&gt;
		if sign_list[usub(text, 1, 3)] then&lt;br /&gt;
			table.insert(signs, export.copy_sign(usub(text, 1, 3))) -- add in new sign&lt;br /&gt;
			text = usub(text, 4) -- truncate string&lt;br /&gt;
		elseif sign_list[usub(text, 1, 2)] then&lt;br /&gt;
			table.insert(signs, export.copy_sign(usub(text, 1, 2)))&lt;br /&gt;
			text = usub(text, 3)&lt;br /&gt;
		elseif sign_list[usub(text, 1, 1)] then&lt;br /&gt;
			table.insert(signs, export.copy_sign(usub(text, 1, 1)))&lt;br /&gt;
			text = usub(text, 2)&lt;br /&gt;
		end&lt;br /&gt;
		signs[#signs - 1], signs[#signs] = export.fit_signs(signs[#signs - 1], signs[#signs]) -- fit two signs&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	signs[#signs] = export.fit_signs(signs[#signs], nil) -- fit end of word&lt;br /&gt;
	&lt;br /&gt;
	return assemble_word(signs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.tr(text, lang, sc)&lt;br /&gt;
	if sc ~= &amp;quot;Xsux&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	text = mw.ustring.gsub(text, &amp;#039;[𒀀-𒑱]+&amp;#039;, export.transpose)&lt;br /&gt;
	&lt;br /&gt;
	return m_tag.tag_hittite_tr(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;Theknightwho</name></author>
	</entry>
</feed>