<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FNardog%2F10</id>
	<title>Module:Sandbox/Nardog/10 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FNardog%2F10"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/10&amp;action=history"/>
	<updated>2026-04-21T07:47:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Nardog/10&amp;diff=145865&amp;oldid=prev</id>
		<title>imported&gt;Nardog at 07:22, 16 January 2022</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/10&amp;diff=145865&amp;oldid=prev"/>
		<updated>2022-01-16T07:22:37Z</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 p = {}&lt;br /&gt;
&lt;br /&gt;
function p._encoding(s, ipaNum, xSampa, tipa, praat, keyman, braille)&lt;br /&gt;
	local data = mw.loadData(&amp;#039;Module:Sandbox/Nardog/10d&amp;#039;)&lt;br /&gt;
	local conv = require(&amp;#039;Module:BaseConvert&amp;#039;).convert&lt;br /&gt;
	-- Decode HTML entities and strip dotted circle&lt;br /&gt;
	s = mw.ustring.gsub(mw.text.decode(s), &amp;#039;◌&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	local hex, dec = {}, {}&lt;br /&gt;
	-- Initialize tables unless manually input&lt;br /&gt;
	local newIpaNum = not ipaNum and {}&lt;br /&gt;
	local newXSampa = not xSampa and {}&lt;br /&gt;
	local newTipa = not tipa and {}&lt;br /&gt;
	local newPraat = not praat and {}&lt;br /&gt;
	local newKeyman = not keyman and {}&lt;br /&gt;
	local newBraille = not braille and {}&lt;br /&gt;
	local xSampaVars -- Tracks X-SAMPA variants&lt;br /&gt;
	local keymanVars -- Tracks Keyman variants&lt;br /&gt;
	local tipaTies -- Tracks tie bars for TIPA&lt;br /&gt;
	for char in mw.ustring.gmatch(s, &amp;#039;.&amp;#039;) do&lt;br /&gt;
		table.insert(dec, mw.ustring.codepoint(char))&lt;br /&gt;
		table.insert(hex, conv{ n = dec[#dec], base = 16, width = 4 })&lt;br /&gt;
		-- Skip others if all are manually input or have reached a dead end&lt;br /&gt;
		if newIpaNum or newXSampa or newTipa or newPraat or newKeyman or newBraille then&lt;br /&gt;
			local t = data[char]&lt;br /&gt;
			if t then -- Table found in data&lt;br /&gt;
				if newIpaNum then&lt;br /&gt;
					if t.ipaNum then&lt;br /&gt;
						table.insert(newIpaNum, t.ipaNum)&lt;br /&gt;
					else&lt;br /&gt;
						newIpaNum = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if newXSampa then&lt;br /&gt;
					if t.xSampa then&lt;br /&gt;
						-- Check for variants&lt;br /&gt;
						if type(t.xSampa) == &amp;#039;table&amp;#039; then&lt;br /&gt;
							-- Use the 1st variant for now&lt;br /&gt;
							table.insert(newXSampa, t.xSampa[1])&lt;br /&gt;
							-- Record the position, using char as the table key&lt;br /&gt;
							xSampaVars = xSampaVars or {}&lt;br /&gt;
							xSampaVars[char] = xSampaVars[char] or {}&lt;br /&gt;
							table.insert(xSampaVars[char], #newXSampa)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(newXSampa, t.xSampa)&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						newXSampa = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if newTipa then&lt;br /&gt;
					if t.tipa then&lt;br /&gt;
						-- If the last entry ends in a bare macro and the new&lt;br /&gt;
						-- entry beginds in a Latin character, insert a space&lt;br /&gt;
						local sp = newTipa[1]&lt;br /&gt;
							and newTipa[#newTipa]:find(&amp;#039;\\[%u%l]+$&amp;#039;)&lt;br /&gt;
							and t.tipa:find(&amp;#039;^[%u%l]&amp;#039;) and &amp;#039; &amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
						table.insert(newTipa, sp .. t.tipa)&lt;br /&gt;
					elseif t.tipaDia then -- Diacritic&lt;br /&gt;
						local td = &amp;#039;\\&amp;#039; .. t.tipaDia&lt;br /&gt;
						if newTipa[1] then&lt;br /&gt;
							-- Remove the space inserted between a macro and a&lt;br /&gt;
							-- Latin character&lt;br /&gt;
							local tl = newTipa[#newTipa]:gsub(&amp;#039;^ &amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
							-- Add brackets if the base letter is a macro (e.g.&lt;br /&gt;
							-- \r*{\*r}), a space if the diacritic ends and the&lt;br /&gt;
							-- base letter begins in a Latin character (\r N),&lt;br /&gt;
							-- and nothing otherwise (\r*m)&lt;br /&gt;
							newTipa[#newTipa] =&lt;br /&gt;
								tl:find(&amp;#039;^\\&amp;#039;) and td .. &amp;#039;{&amp;#039; .. tl .. &amp;#039;}&amp;#039;&lt;br /&gt;
								or td:find(&amp;#039;[%u%l]$&amp;#039;) and tl:find(&amp;#039;^[%u%l]&amp;#039;)&lt;br /&gt;
								and td .. &amp;#039; &amp;#039; .. tl or td .. tl&lt;br /&gt;
						else&lt;br /&gt;
							-- This is the 1st char, just add empty brackets&lt;br /&gt;
							table.insert(newTipa, td .. &amp;#039;{}&amp;#039;)&lt;br /&gt;
						end&lt;br /&gt;
					elseif char == &amp;#039;͡&amp;#039; then&lt;br /&gt;
						-- Record the position&lt;br /&gt;
						tipaTies = tipaTies or {}&lt;br /&gt;
						table.insert(tipaTies, #newTipa)&lt;br /&gt;
					else&lt;br /&gt;
						newTipa = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if newPraat then&lt;br /&gt;
					if t.praat then&lt;br /&gt;
						table.insert(newPraat, t.praat)&lt;br /&gt;
					else&lt;br /&gt;
						newPraat = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if newKeyman then&lt;br /&gt;
					if t.keyman then&lt;br /&gt;
						-- Check for variants&lt;br /&gt;
						if type(t.keyman) == &amp;#039;table&amp;#039; then&lt;br /&gt;
							-- Use the 1st variant for now&lt;br /&gt;
							table.insert(newKeyman, t.keyman[1])&lt;br /&gt;
							-- Record the position, using char as the table key&lt;br /&gt;
							keymanVars = keymanVars or {}&lt;br /&gt;
							keymanVars[char] = keymanVars[char] or {}&lt;br /&gt;
							table.insert(keymanVars[char], #newKeyman)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(newKeyman, t.keyman)&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						newKeyman = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if newBraille then&lt;br /&gt;
					if t.braille then&lt;br /&gt;
						for _, v in ipairs(t.braille) do&lt;br /&gt;
							table.insert(newBraille, v)&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						newBraille = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- No table for this char, abort looking in data for the rest of&lt;br /&gt;
				-- the string&lt;br /&gt;
				newIpaNum, newXSampa, newTipa, newPraat, newKeyman, newBraille =&lt;br /&gt;
					nil, nil, nil, nil, nil, nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ipaNum =&lt;br /&gt;
		ipaNum or newIpaNum and newIpaNum[1] and table.concat(newIpaNum, &amp;#039; &amp;#039;)&lt;br /&gt;
	if not xSampa and newXSampa and newXSampa[1] then&lt;br /&gt;
		-- Check for variants&lt;br /&gt;
		if xSampaVars then&lt;br /&gt;
			local newXSampas = { newXSampa }&lt;br /&gt;
			-- Go through each char with variants&lt;br /&gt;
			for char, _ in pairs(xSampaVars) do&lt;br /&gt;
				local newXSampas2 = {}&lt;br /&gt;
				-- Go through each variant&lt;br /&gt;
				for i, variant in ipairs(data[char].xSampa) do&lt;br /&gt;
					if i ~= 1 then -- Skip the 1st, already used&lt;br /&gt;
						-- Go through each string (stored as a table)&lt;br /&gt;
						for _, t in ipairs(newXSampas) do&lt;br /&gt;
							local t2 = mw.clone(t)&lt;br /&gt;
							-- Go through each position of variant to replace&lt;br /&gt;
							for _, pos in ipairs(xSampaVars[char]) do&lt;br /&gt;
								t2[pos] = variant&lt;br /&gt;
							end&lt;br /&gt;
							table.insert(newXSampas2, t2)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				for _, t in ipairs(newXSampas2) do&lt;br /&gt;
					table.insert(newXSampas, t)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			xSampa = {}&lt;br /&gt;
			for _, v in ipairs(newXSampas) do&lt;br /&gt;
				table.insert(xSampa, table.concat(v))&lt;br /&gt;
			end&lt;br /&gt;
			xSampa = mw.text.listToText(xSampa, &amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;#039;,&lt;br /&gt;
				&amp;#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			xSampa = table.concat(newXSampa)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if tipaTies then&lt;br /&gt;
		for _, pos in ipairs(tipaTies) do&lt;br /&gt;
			-- Wrap two letters in &amp;quot;\t{...}&amp;quot;&lt;br /&gt;
			newTipa[pos] = &amp;#039;\\t{&amp;#039; .. newTipa[pos]&lt;br /&gt;
			newTipa[pos + 1] = newTipa[pos + 1] .. &amp;#039;}&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	tipa = tipa or newTipa and newTipa[1] and table.concat(newTipa)&lt;br /&gt;
	praat = praat or newPraat and newPraat[1] and table.concat(newPraat)&lt;br /&gt;
	if not keyman and newKeyman and newKeyman[1] then&lt;br /&gt;
		-- Check for variants&lt;br /&gt;
		if keymanVars then&lt;br /&gt;
			local newKeymans = { newKeyman }&lt;br /&gt;
			-- Go through each char with variants&lt;br /&gt;
			for char, _ in pairs(keymanVars) do&lt;br /&gt;
				local newKeymans2 = {}&lt;br /&gt;
				-- Go through each variant&lt;br /&gt;
				for i, variant in ipairs(data[char].keyman) do&lt;br /&gt;
					if i ~= 1 then -- Skip the 1st, already used&lt;br /&gt;
						-- Go through each string (stored as a table)&lt;br /&gt;
						for _, t in ipairs(newKeymans) do&lt;br /&gt;
							local t2 = mw.clone(t)&lt;br /&gt;
							-- Go through each position of variant to replace&lt;br /&gt;
							for _, pos in ipairs(keymanVars[char]) do&lt;br /&gt;
								t2[pos] = variant&lt;br /&gt;
							end&lt;br /&gt;
							table.insert(newKeymans2, t2)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				for _, t in ipairs(newKeymans2) do&lt;br /&gt;
					table.insert(newKeymans, t)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			keyman = {}&lt;br /&gt;
			for _, v in ipairs(newKeymans) do&lt;br /&gt;
				table.insert(keyman, mw.text.nowiki(table.concat(v)))&lt;br /&gt;
			end&lt;br /&gt;
			keyman = mw.text.listToText(keyman, &amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;#039;,&lt;br /&gt;
				&amp;#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			keyman = mw.text.nowiki(table.concat(newKeyman))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	braille = braille and mw.text.split(braille, &amp;#039;,&amp;#039;)&lt;br /&gt;
		or newBraille and newBraille[1] and newBraille&lt;br /&gt;
	&lt;br /&gt;
	s = mw.html.create()&lt;br /&gt;
	local function makeRow(label, data)&lt;br /&gt;
		s:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;):wikitext(label):done()&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;):wikitext(data)&lt;br /&gt;
	end&lt;br /&gt;
	makeRow(&amp;#039;[[Unicode]] (hex)&amp;#039;, &amp;#039;U+&amp;#039; .. table.concat(hex, &amp;#039; U+&amp;#039;))&lt;br /&gt;
	makeRow(&amp;#039;Unicode (decimal)&amp;#039;, table.concat(dec, &amp;#039; &amp;#039;))&lt;br /&gt;
	if ipaNum and ipaNum ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		makeRow(&amp;#039;[[IPA Number]]&amp;#039;, ipaNum)&lt;br /&gt;
	end&lt;br /&gt;
	if xSampa and xSampa ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		makeRow(&amp;#039;[[X-SAMPA]]&amp;#039;, &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. xSampa .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if tipa and tipa ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		makeRow(&amp;#039;[[TIPA (software)|TIPA]]&amp;#039;, &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. tipa .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if praat and praat ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		makeRow(&amp;#039;[[Praat]]&amp;#039;, &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. praat .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if keyman and keyman ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		makeRow(&amp;#039;Keyman&amp;#039;, &amp;#039;&amp;lt;kbd&amp;gt;&amp;#039; .. keyman .. &amp;#039;&amp;lt;/kbd&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if braille and braille[1] ~= &amp;#039;hide&amp;#039; then&lt;br /&gt;
		braille.type = 6&lt;br /&gt;
		braille.size = &amp;#039;25px&amp;#039;&lt;br /&gt;
		braille = mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
			title = &amp;#039;Template:Braille cell&amp;#039;, args = braille&lt;br /&gt;
		}&lt;br /&gt;
		makeRow(&amp;#039;[[IPA Braille]]&amp;#039;, braille)&lt;br /&gt;
	end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.encoding(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(frame.args) do&lt;br /&gt;
		args[k] = v ~= &amp;#039;&amp;#039; and v&lt;br /&gt;
	end&lt;br /&gt;
	if not args[1] then return &amp;#039;&amp;#039; end&lt;br /&gt;
	return p._encoding(args[1], args.ipa_number, args.xsampa, args.tipa,&lt;br /&gt;
		args.praat, args.braille)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Nardog</name></author>
	</entry>
</feed>