<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AIPA</id>
	<title>Module:IPA - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AIPA"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:IPA&amp;action=history"/>
	<updated>2026-04-10T22:42:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:IPA&amp;diff=305&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:IPA&amp;diff=305&amp;oldid=prev"/>
		<updated>2026-04-10T07:29:38Z</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;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:29, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&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;!-- diff cache key mediawikidb:diff:1.41:old-304:rev-305 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:IPA&amp;diff=304&amp;oldid=prev</id>
		<title>bob&gt;Juelos at 18:13, 16 December 2023</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:IPA&amp;diff=304&amp;oldid=prev"/>
		<updated>2023-12-16T18:13:12Z</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 export = {}&lt;br /&gt;
-- [[Module:IPA/data]]&lt;br /&gt;
&lt;br /&gt;
local m_data = mw.loadData(&amp;#039;Module:IPA/data&amp;#039;) -- [[Module:IPA/data]]&lt;br /&gt;
local m_symbols = mw.loadData(&amp;#039;Module:IPA/data/symbols&amp;#039;) -- [[Module:IPA/data/symbols]]&lt;br /&gt;
local m_syllables -- [[Module:syllables]]; loaded below if needed&lt;br /&gt;
&lt;br /&gt;
local sub = mw.ustring.sub&lt;br /&gt;
local find = mw.ustring.find&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
local match = mw.ustring.match&lt;br /&gt;
local gmatch = mw.ustring.gmatch&lt;br /&gt;
local U = mw.ustring.char&lt;br /&gt;
&lt;br /&gt;
function export.format_IPA_full(lang, items, err, separator, sortKey, no_count)&lt;br /&gt;
	local IPA_key, key_link, err_text, prefix, IPAs, category&lt;br /&gt;
	local hasKey = m_data.langs_with_infopages&lt;br /&gt;
	local namespace = mw.title.getCurrentTitle().nsText&lt;br /&gt;
	&lt;br /&gt;
	if err then&lt;br /&gt;
		err_text = &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. err .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		if hasKey[lang:getCode()] then&lt;br /&gt;
			IPA_key = &amp;quot;Appendix:&amp;quot; .. lang:getCanonicalName() .. &amp;quot; pronunciation&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			IPA_key = lang:getCanonicalName() .. &amp;quot; phonology&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		key_link = &amp;quot;[[&amp;quot; .. IPA_key .. &amp;quot;|key]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	local prefix = &amp;quot;[[Wiktionary:International Phonetic Alphabet|IPA]]&amp;lt;sup&amp;gt;(&amp;quot; .. ( key_link or err_text ) .. &amp;quot;)&amp;lt;/sup&amp;gt;:&amp;amp;#32;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	IPAs = export.format_IPA_multiple(lang, items, separator, no_count)&lt;br /&gt;
	&lt;br /&gt;
	if lang and (namespace == &amp;quot;&amp;quot; or namespace == &amp;quot;Reconstruction&amp;quot;) then&lt;br /&gt;
		sortKey = sortKey or lang:makeSortKey(mw.title.getCurrentTitle().text)&lt;br /&gt;
		sortKey = sortKey and (&amp;quot;|&amp;quot; .. sortKey) or &amp;quot;&amp;quot;&lt;br /&gt;
		category = &amp;quot;[[Category:&amp;quot; .. lang:getCanonicalName() .. &amp;quot; terms with IPA pronunciation&amp;quot; .. sortKey .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		category = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return prefix .. IPAs .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function determine_repr(pron)&lt;br /&gt;
	local repr_mark = {}&lt;br /&gt;
	local repr, reconstructed&lt;br /&gt;
	&lt;br /&gt;
	-- remove initial asterisk before representation marks, used on some Reconstruction pages&lt;br /&gt;
	if find(pron, &amp;quot;^%*&amp;quot;) then&lt;br /&gt;
		reconstructed = true&lt;br /&gt;
		pron = sub(pron, 2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local representation_types = {&lt;br /&gt;
		[&amp;#039;/&amp;#039;] = { right = &amp;#039;/&amp;#039;, type = &amp;#039;phonemic&amp;#039;, },&lt;br /&gt;
		[&amp;#039;[&amp;#039;] = { right = &amp;#039;]&amp;#039;, type = &amp;#039;phonetic&amp;#039;, },&lt;br /&gt;
		[&amp;#039;⟨&amp;#039;] = { right = &amp;#039;⟩&amp;#039;, type = &amp;#039;orthographic&amp;#039;, },&lt;br /&gt;
		[&amp;#039;-&amp;#039;] = { type = &amp;#039;rhyme&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	repr_mark.i, repr_mark.f, repr_mark.left, repr_mark.right = find(pron, &amp;#039;^(.).-(.)$&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local representation_type = representation_types[repr_mark.left]&lt;br /&gt;
	&lt;br /&gt;
	if representation_type then&lt;br /&gt;
		if representation_type.right then&lt;br /&gt;
			if repr_mark.right == representation_type.right then&lt;br /&gt;
				repr = representation_type.type&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			repr = representation_type.type&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		repr = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return repr, reconstructed&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasInvalidSeparators(transcription)&lt;br /&gt;
	if find(transcription, &amp;quot;%.[ˈˌ]&amp;quot;) then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.format_IPA_multiple(lang, items, separator, no_count)&lt;br /&gt;
	local notes = {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	separator = separator or &amp;#039;, &amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- Format&lt;br /&gt;
	if not items[1] then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			table.insert(items, {pron = &amp;quot;/aɪ piː ˈeɪ/&amp;quot;})&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:Pronunciation templates without a pronunciation]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local bits = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, item in ipairs(items) do&lt;br /&gt;
		local bit = export.format_IPA(lang, item.pron)&lt;br /&gt;
		&lt;br /&gt;
		if item.qualifiers and item.qualifiers[1] then&lt;br /&gt;
			bit = require(&amp;quot;Module:qualifier&amp;quot;).format_qualifier(item.qualifiers) .. &amp;quot; &amp;quot; .. bit&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if item.note then&lt;br /&gt;
			bit = bit .. mw.getCurrentFrame():extensionTag(&amp;quot;ref&amp;quot;, item.note)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(bits, bit)&lt;br /&gt;
		&lt;br /&gt;
		--[=[	[[Special:WhatLinksHere/Template:tracking/IPA/syntax-error]]&lt;br /&gt;
				The length or gemination symbol should not appear after a syllable break or stress symbol.	]=]&lt;br /&gt;
		&lt;br /&gt;
		if find(item.pron, &amp;quot;[ˈˌ%.][ːˑ]&amp;quot;) then&lt;br /&gt;
			require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;IPA/syntax-error&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lang then&lt;br /&gt;
			-- Add syllable count if the language&amp;#039;s diphthongs are listed in [[Module:syllables]].&lt;br /&gt;
			if not no_count and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
				m_syllables = m_syllables or require(&amp;#039;Module:syllables&amp;#039;)&lt;br /&gt;
				if m_syllables.hasDiphthongs(lang) then&lt;br /&gt;
					if determine_repr(item.pron) == &amp;quot;phonemic&amp;quot; or lang:getCode() == &amp;quot;ru&amp;quot; then&lt;br /&gt;
						local syllable_count = m_syllables.getVowels(item.pron, lang)&lt;br /&gt;
						if syllable_count then&lt;br /&gt;
							table.insert(categories, &amp;quot;[[Category:&amp;quot; .. lang:getCanonicalName() .. &amp;quot; &amp;quot; .. syllable_count .. &amp;quot;-syllable words]]&amp;quot;)&lt;br /&gt;
						end	&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lang:getCode() == &amp;quot;en&amp;quot; then&lt;br /&gt;
				if hasInvalidSeparators(item.pron) then&lt;br /&gt;
					table.insert(categories, &amp;quot;[[Category:IPA for English using .ˈ or .ˌ]]&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(bits, separator) .. table.concat(categories)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Takes an IPA pronunciation and formats it and adds cleanup categories.&lt;br /&gt;
function export.format_IPA(lang, pron, split_output)&lt;br /&gt;
	local err = {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Remove wikilinks, so that wikilink brackets are not misinterpreted as&lt;br /&gt;
	-- indicating phonemic transcription&lt;br /&gt;
	local str_gsub = string.gsub&lt;br /&gt;
	local without_links = str_gsub(pron, &amp;#039;%[%[[^|%]]+|([^%]]+)%]%]&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
	without_links = str_gsub(without_links, &amp;#039;%[%[[^%]]+%]%]&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- Detect whether this is a phonemic or phonetic transcription&lt;br /&gt;
	local repr, reconstructed = determine_repr(without_links)&lt;br /&gt;
	&lt;br /&gt;
	if reconstructed then&lt;br /&gt;
		pron = sub(pron, 2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If valid, strip the representation marks&lt;br /&gt;
	if repr == &amp;quot;phonemic&amp;quot; then&lt;br /&gt;
		pron = sub(pron, 2, -2)&lt;br /&gt;
		without_links = sub(without_links, 2, -2)&lt;br /&gt;
	elseif repr == &amp;quot;phonetic&amp;quot; then&lt;br /&gt;
		pron = sub(pron, 2, -2)&lt;br /&gt;
		without_links = sub(without_links, 2, -2)&lt;br /&gt;
	elseif repr == &amp;quot;orthographic&amp;quot; then&lt;br /&gt;
		pron = sub(pron, 2, -2)&lt;br /&gt;
		without_links = sub(without_links, 2, -2)&lt;br /&gt;
	elseif repr == &amp;quot;rhyme&amp;quot; then&lt;br /&gt;
		pron = sub(pron, 2)&lt;br /&gt;
		without_links = sub(without_links, 2)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:IPA pronunciations with invalid representation marks]]&amp;quot;)&lt;br /&gt;
		-- table.insert(err, &amp;quot;invalid representation marks&amp;quot;)&lt;br /&gt;
		-- Removed because it&amp;#039;s annoying when previewing pronunciation pages.&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Check for obsolete and nonstandard symbols&lt;br /&gt;
	for i, symbol in ipairs(m_data.nonstandard) do&lt;br /&gt;
		local result&lt;br /&gt;
		for nonstandard in gmatch(pron, symbol) do&lt;br /&gt;
			if not result then&lt;br /&gt;
				result = {}&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(result, nonstandard)&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:IPA pronunciations with obsolete or nonstandard characters|&amp;quot; .. nonstandard .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if result then&lt;br /&gt;
			table.insert(err, &amp;quot;obsolete or nonstandard characters (&amp;quot; .. table.concat(result) .. &amp;quot;)&amp;quot;)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--[[ Check for invalid symbols after removing the following:&lt;br /&gt;
			1. wikilinks (handled above)&lt;br /&gt;
			2. paired HTML tags&lt;br /&gt;
			3. bolding&lt;br /&gt;
			4. italics&lt;br /&gt;
			5. HTML entity for space&lt;br /&gt;
			6. asterisk at beginning of transcription&lt;br /&gt;
			7. comma followed by spacing characters&lt;br /&gt;
			8. superscripts enclosed in superscript parentheses		]]&lt;br /&gt;
	local found_HTML&lt;br /&gt;
	local result = str_gsub(without_links, &amp;quot;&amp;lt;(%a+)[^&amp;gt;]*&amp;gt;([^&amp;lt;]+)&amp;lt;/%1&amp;gt;&amp;quot;,&lt;br /&gt;
		function(tagName, content)&lt;br /&gt;
			found_HTML = true&lt;br /&gt;
			return content&lt;br /&gt;
		end)&lt;br /&gt;
	result = str_gsub(result, &amp;quot;&amp;#039;&amp;#039;&amp;#039;([^&amp;#039;]*)&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	result = str_gsub(result, &amp;quot;&amp;#039;&amp;#039;([^&amp;#039;]*)&amp;#039;&amp;#039;&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	result = str_gsub(result, &amp;quot;&amp;amp;[^;]+;&amp;quot;, &amp;quot;&amp;quot;) -- This may catch things that are not valid character entities.&lt;br /&gt;
	result = str_gsub(result, &amp;quot;^%*&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	result = gsub(result, &amp;quot;,%s+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	result = gsub(result, &amp;quot;⁽[&amp;quot;.. m_symbols.superscripts .. &amp;quot;]+⁾&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	result = gsub(result, &amp;#039;[&amp;#039; .. m_symbols.valid .. &amp;#039;]&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	if result ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local suggestions = {}&lt;br /&gt;
		mw.log(pron, result)&lt;br /&gt;
		local namespace = mw.title.getCurrentTitle().namespace&lt;br /&gt;
		local category&lt;br /&gt;
		if namespace == 0 then&lt;br /&gt;
			-- main namespace&lt;br /&gt;
			category = &amp;quot;IPA pronunciations with invalid IPA characters&amp;quot;&lt;br /&gt;
		elseif namespace == 118 then&lt;br /&gt;
			-- reconstruction namespace&lt;br /&gt;
			category = &amp;quot;IPA pronunciations with invalid IPA characters/reconstruction&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			category = &amp;quot;IPA pronunciations with invalid IPA characters/non_mainspace&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		for character in gmatch(result, &amp;quot;.&amp;quot;) do&lt;br /&gt;
			local suggestion = m_symbols.suggestions[character]&lt;br /&gt;
			if suggestion then&lt;br /&gt;
				table.insert(suggestions, character .. &amp;quot; with &amp;quot; .. suggestion)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(categories, &amp;quot;[[Category:&amp;quot; .. category .. &amp;quot;|&amp;quot; .. character .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(err, &amp;quot;invalid IPA characters (&amp;quot; .. result .. &amp;quot;)&amp;quot;)&lt;br /&gt;
		if suggestions[1] then&lt;br /&gt;
			table.insert(err, &amp;quot;replace &amp;quot; .. table.concat(suggestions, &amp;quot;, &amp;quot;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if found_HTML then&lt;br /&gt;
		table.insert(categories, &amp;quot;[[Category:IPA pronunciations with paired HTML tags]]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Reference inside IPA template usage&lt;br /&gt;
	-- FIXME: Doesn&amp;#039;t work; you can&amp;#039;t put HTML in module output.&lt;br /&gt;
	--if mw.ustring.find(pron, &amp;#039;&amp;lt;/ref&amp;gt;&amp;#039;) then&lt;br /&gt;
	--	table.insert(categories, &amp;quot;[[Category:IPA pronunciations with reference]]&amp;quot;)&lt;br /&gt;
	--end&lt;br /&gt;
	&lt;br /&gt;
	if repr == &amp;quot;phonemic&amp;quot; or repr == &amp;quot;rhyme&amp;quot; then&lt;br /&gt;
		if lang and m_data.phonemes[lang:getCode()] then&lt;br /&gt;
			local valid_phonemes = m_data.phonemes[lang:getCode()]&lt;br /&gt;
			local rest = pron&lt;br /&gt;
			local phonemes = {}&lt;br /&gt;
			&lt;br /&gt;
			while mw.ustring.len(rest) &amp;gt; 0 do&lt;br /&gt;
				local longestmatch = &amp;quot;&amp;quot;&lt;br /&gt;
				&lt;br /&gt;
				if sub(rest, 1, 1) == &amp;quot;(&amp;quot; or sub(rest, 1, 1) == &amp;quot;)&amp;quot; then&lt;br /&gt;
					longestmatch = sub(rest, 1, 1)&lt;br /&gt;
				else&lt;br /&gt;
					for _, phoneme in ipairs(valid_phonemes) do&lt;br /&gt;
						if mw.ustring.len(phoneme) &amp;gt; mw.ustring.len(longestmatch) and sub(rest, 1, mw.ustring.len(phoneme)) == phoneme then&lt;br /&gt;
							longestmatch = phoneme&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if mw.ustring.len(longestmatch) &amp;gt; 0 then&lt;br /&gt;
					table.insert(phonemes, longestmatch)&lt;br /&gt;
					rest = sub(rest, mw.ustring.len(longestmatch) + 1)&lt;br /&gt;
				else&lt;br /&gt;
					local phoneme = sub(rest, 1, 1)&lt;br /&gt;
					table.insert(phonemes, &amp;quot;&amp;lt;span style=\&amp;quot;color: red\&amp;quot;&amp;gt;&amp;quot; .. phoneme .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
					rest = sub(rest, 2)&lt;br /&gt;
					table.insert(categories, &amp;quot;[[Category:IPA pronunciations with invalid phonemes/&amp;quot; .. lang:getCode() .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
					require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;IPA/invalid phonemes/&amp;quot; .. phoneme)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			pron = table.concat(phonemes)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if repr == &amp;quot;phonemic&amp;quot; then&lt;br /&gt;
			pron = &amp;quot;/&amp;quot; .. pron .. &amp;quot;/&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			pron = &amp;quot;-&amp;quot; .. pron&lt;br /&gt;
		end&lt;br /&gt;
	elseif repr == &amp;quot;phonetic&amp;quot; then&lt;br /&gt;
		pron = &amp;quot;[&amp;quot; .. pron .. &amp;quot;]&amp;quot;&lt;br /&gt;
	elseif repr == &amp;quot;orthographic&amp;quot; then&lt;br /&gt;
		pron = &amp;quot;⟨&amp;quot; .. pron .. &amp;quot;⟩&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if reconstructed then&lt;br /&gt;
		pron = &amp;quot;*&amp;quot; .. pron&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if err[1] then&lt;br /&gt;
		err = &amp;#039;&amp;lt;span class=&amp;quot;previewonly error&amp;quot; style=&amp;quot;font-size: small;&amp;gt;&amp;amp;#32;&amp;#039; .. table.concat(err, &amp;#039;, &amp;#039;) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		err = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if split_output then -- for use of IPA in links &lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. pron .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;, table.concat(categories), err&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. pron .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; .. err .. table.concat(categories)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.example(frame)&lt;br /&gt;
	local output = {}&lt;br /&gt;
	&lt;br /&gt;
	local m_links = require(&amp;#039;Module:links&amp;#039;)&lt;br /&gt;
	local m_languages = require(&amp;#039;Module:languages&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	table.insert(&lt;br /&gt;
		output,&lt;br /&gt;
[[&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Term !! IPA !! Generated X-SAMPA !! Regenerated IPA !! Matched?&lt;br /&gt;
]]&lt;br /&gt;
	)&lt;br /&gt;
	local row =&lt;br /&gt;
[[&lt;br /&gt;
|-&lt;br /&gt;
| link || IPA || XSAMPA || regenerated_IPA || matched&lt;br /&gt;
]]&lt;br /&gt;
	&lt;br /&gt;
	local examples = mw.text.split(frame.args[1], &amp;quot;,%s*&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local m_XSAMPA = require(&amp;quot;Module:IPA/X-SAMPA&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	for _, example in pairs(examples) do&lt;br /&gt;
		local lang, word = match(example, &amp;quot;(%l%l%l?):(.+) [/%[]&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		if lang then&lt;br /&gt;
			lang = m_languages.getByCode(lang) or error(&amp;#039;&amp;quot;&amp;#039; .. lang .. &amp;#039;&amp;quot; is not a valid language code.&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local IPA = match(example, &amp;quot;/[^/]+/&amp;quot;)&lt;br /&gt;
			or match(example, &amp;quot;%[[^%]]+%]&amp;quot;)&lt;br /&gt;
			or error(&amp;#039;No IPA transcription found in &amp;quot;&amp;#039; .. example .. &amp;#039;&amp;quot;.&amp;#039;)&lt;br /&gt;
		local XSAMPA = m_XSAMPA.IPA_to_XSAMPA(IPA)&lt;br /&gt;
		local regenerated_IPA = m_XSAMPA.XSAMPA_to_IPA(XSAMPA)&lt;br /&gt;
		&lt;br /&gt;
		content = {&lt;br /&gt;
			link = lang and word and m_links.full_link{ term = word, lang = lang },&lt;br /&gt;
			matched = IPA == regenerated_IPA&lt;br /&gt;
				and &amp;#039;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;yes&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				or &amp;#039;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			IPA = &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. IPA .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			XSAMPA = &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. XSAMPA .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			regenerated_IPA = &amp;#039;&amp;lt;span class=&amp;quot;IPA&amp;quot;&amp;gt;&amp;#039; .. regenerated_IPA .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		local function add_content(item)&lt;br /&gt;
			return content[item] or &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		local row = gsub(row, &amp;quot;[%a_]+&amp;quot;, add_content)&lt;br /&gt;
		table.insert(output, row)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(output, &amp;quot;|}&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>bob&gt;Juelos</name></author>
	</entry>
</feed>