<?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%3AIPA_symbol%2Foverview</id>
	<title>Module:IPA symbol/overview - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AIPA_symbol%2Foverview"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:IPA_symbol/overview&amp;action=history"/>
	<updated>2026-05-24T05:33:58Z</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:IPA_symbol/overview&amp;diff=136520&amp;oldid=prev</id>
		<title>imported&gt;Nardog at 09:30, 6 May 2020</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:IPA_symbol/overview&amp;diff=136520&amp;oldid=prev"/>
		<updated>2020-05-06T09:30:45Z</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:IPA symbol/data&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;
function p.main(frame)&lt;br /&gt;
	local ret = { frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = &amp;#039;Module:IPA symbol/overview/styles.css&amp;#039; }&lt;br /&gt;
	} }&lt;br /&gt;
	local 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 = mw.ustring.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;
					mw.text.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], mw.text.nowiki(v[2]), mw.text.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 IPA-symbol-overview&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&lt;br /&gt;
				symbols[j] = mw.text.nowiki(w)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local audio = &amp;#039;&amp;#039;&lt;br /&gt;
			if v.audio then&lt;br /&gt;
				if frame.args.check_wikidata == &amp;#039;yes&amp;#039; then&lt;br /&gt;
					local rt = mw.title.new(article).redirectTarget&lt;br /&gt;
					rt = rt and rt.text or article&lt;br /&gt;
					local qId = mw.wikibase.getEntityIdForTitle(rt)&lt;br /&gt;
					local wdAudio = qId and mw.wikibase.getEntity(qId).claims&lt;br /&gt;
					wdAudio = wdAudio and wdAudio[&amp;#039;P51&amp;#039;]&lt;br /&gt;
					if wdAudio then&lt;br /&gt;
						wdAudio = wdAudio[1].mainsnak.datavalue.value&lt;br /&gt;
						audio = wdAudio and wdAudio ~= v.audio&lt;br /&gt;
							and &amp;#039; (≠ [[wikidata:&amp;#039; .. qId .. &amp;#039;#P51|Wikidata]])&amp;#039;&lt;br /&gt;
							or &amp;#039;&amp;#039;&lt;br /&gt;
					elseif qId then&lt;br /&gt;
						audio = &amp;#039; (not on [[wikidata:&amp;#039; .. qId .. &amp;#039;|Wikidata]])&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				audio = 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) .. audio&lt;br /&gt;
			end&lt;br /&gt;
			&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\n&amp;#039;,&lt;br /&gt;
				v.name, table.concat(symbols, &amp;#039;&amp;amp;thinsp;, &amp;#039;), parenL, article,&lt;br /&gt;
				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>