<?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%2F8d</id>
	<title>Module:Sandbox/Nardog/8d - 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%2F8d"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/8d&amp;action=history"/>
	<updated>2026-08-02T10:04:56Z</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/8d&amp;diff=145887&amp;oldid=prev</id>
		<title>imported&gt;Nardog at 21:57, 24 January 2019</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Nardog/8d&amp;diff=145887&amp;oldid=prev"/>
		<updated>2019-01-24T21:57:07Z</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 data = mw.loadData(&amp;#039;Module:Sandbox/Nardog/8t&amp;#039;)&lt;br /&gt;
local univPatterns, keyPatterns = data.data.univPatterns, data.data.keyPatterns&lt;br /&gt;
data = data.rawData&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local match = mw.ustring.match&lt;br /&gt;
local nowiki = mw.text.nowiki&lt;br /&gt;
&lt;br /&gt;
function p.main()&lt;br /&gt;
	local ret, count, sCount = {}, {}, {}&lt;br /&gt;
	&lt;br /&gt;
	-- Error detection&lt;br /&gt;
	do&lt;br /&gt;
		local symbols, dupes, invChars = {}, {}, {}&lt;br /&gt;
		local function checkSubs(t, s, name)&lt;br /&gt;
			for _, v in ipairs(t) do&lt;br /&gt;
				local matched = match(s, v.pat)&lt;br /&gt;
				if matched then&lt;br /&gt;
					table.insert(invChars, { name, matched, v.rep })&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local function check(s, checkKeyPats)&lt;br /&gt;
			sCount[s] = 0&lt;br /&gt;
			for i, v in ipairs(data[s]) do&lt;br /&gt;
				for _, symbol in ipairs(v.symbols) do&lt;br /&gt;
					if symbols[symbol] then&lt;br /&gt;
						table.insert(dupes, symbol)&lt;br /&gt;
					else&lt;br /&gt;
						symbols[symbol] = true&lt;br /&gt;
					end&lt;br /&gt;
					checkSubs(univPatterns, symbol, v.name)&lt;br /&gt;
					if checkKeyPats then&lt;br /&gt;
						checkSubs(keyPatterns, symbol, v.name)&lt;br /&gt;
					end&lt;br /&gt;
					sCount[s] = sCount[s] + 1&lt;br /&gt;
				end&lt;br /&gt;
				count[s] = i&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		check(&amp;#039;sounds&amp;#039;, true)&lt;br /&gt;
		check(&amp;#039;diacritics&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		if dupes[1] or invChars[1] then&lt;br /&gt;
			for _, v in ipairs(dupes) do&lt;br /&gt;
				table.insert(ret, string.format(&lt;br /&gt;
					&amp;#039;*Error: &amp;quot;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot; is defined more than once.\n&amp;#039;,&lt;br /&gt;
					nowiki(v)))&lt;br /&gt;
			end&lt;br /&gt;
			for _, v in ipairs(invChars) do&lt;br /&gt;
				table.insert(ret, string.format(&lt;br /&gt;
					&amp;#039;*Error: A symbol for &amp;quot;%s&amp;quot; uses &amp;quot;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;, which will be replaced by &amp;quot;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;.\n&amp;#039;,&lt;br /&gt;
					v[1], nowiki(v[2]), nowiki(v[3])))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret, &amp;#039;No errors were found. &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(ret, string.format(&lt;br /&gt;
		&amp;#039;%s entries (%s in &amp;quot;sounds&amp;quot;, %s in &amp;quot;diacritics&amp;quot;), %s symbols (%s in &amp;quot;sounds&amp;quot;, %s in &amp;quot;diacritics&amp;quot;).\n\n&amp;#039;,&lt;br /&gt;
		count.sounds + count.diacritics, count.sounds, count.diacritics,&lt;br /&gt;
		sCount.sounds + sCount.diacritics, sCount.sounds, sCount.diacritics))&lt;br /&gt;
	table.insert(ret,&lt;br /&gt;
		&amp;#039;Parentheses denote a link automatically inherited from the name field. In italics are redirects.\n&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- Table&lt;br /&gt;
	table.insert(ret,&lt;br /&gt;
		&amp;#039;{| class=&amp;quot;wikitable sortable&amp;quot;\n!Name!!Symbols!!Article!!Audio!!Group\n&amp;#039;)&lt;br /&gt;
	local function renderRows(s)&lt;br /&gt;
		for _, v in ipairs(data[s]) do&lt;br /&gt;
			local parenL = v.article and &amp;#039;&amp;#039; or &amp;#039;(&amp;#039;&lt;br /&gt;
			local parenR = v.article and &amp;#039;&amp;#039; or &amp;#039;)&amp;#039;&lt;br /&gt;
			local article = v.article or v.name&lt;br /&gt;
			local symbols = {}&lt;br /&gt;
			for j, w in ipairs(v.symbols) do symbols[j] = nowiki(w) end&lt;br /&gt;
			local obj = mw.title.new(article)&lt;br /&gt;
			local italics = obj.isRedirect and &amp;quot;&amp;#039;&amp;#039;&amp;quot; or &amp;#039;&amp;#039;&lt;br /&gt;
			local audio = v.audio and string.format(&lt;br /&gt;
				&amp;#039;[[:File:%s|%s]] &amp;lt;small&amp;gt;([[Media:%s|play]])&amp;lt;/small&amp;gt;&amp;#039;,&lt;br /&gt;
				v.audio, v.audio, v.audio) or &amp;#039;&amp;#039;&lt;br /&gt;
			table.insert(ret, string.format(&lt;br /&gt;
				&amp;#039;|-\n|%s||class=&amp;quot;IPA&amp;quot;|%s||%s%s[[%s]]%s%s||%s||%s\n&amp;#039;,&lt;br /&gt;
				v.name, table.concat(symbols, &amp;#039;&amp;amp;thinsp;, &amp;#039;), parenL, italics,&lt;br /&gt;
				article, italics, parenR, audio, s))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	renderRows(&amp;#039;sounds&amp;#039;)&lt;br /&gt;
	renderRows(&amp;#039;diacritics&amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;|}&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)&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>