Module:zh-pron/sandbox

From Wiktionary, the free dictionary
Jump to navigation Jump to search


Note: lorem ipsum.


Note:
  • sùi - literary;
  • chhùi - vernacular.


Note:
  • Quanzhou:
    • sùi - literary;
    • chhùi - vernacular.


Note:
  • Quanzhou:
    • lorem;
    • ipsum.
  • Zhangzhou:
    • dolor;
    • sit.


Note: lorem ipsum.


Note:
  • sùi - literary;
  • chhùi - vernacular.


Note:
  • Quanzhou:
    • sùi - literary;
    • chhùi - vernacular.


Note:
  • Quanzhou:
    • lorem;
    • ipsum.
  • Zhangzhou:
    • dolor;
    • sit.


Note: lorem ipsum.


Note:
  • sùi - literary;
  • chhùi - vernacular.


    Note:
    • Quanzhou:
      • sùi - literary;
      • chhùi - vernacular.


      Note:
      • Quanzhou:
        • lorem;
        • ipsum.
      • Zhangzhou:
        • dolor;
        • sit.

        local export = {}
        
        local m_str_utils = require("Module:string utilities")
        
        local codepoint = m_str_utils.codepoint
        local find = m_str_utils.find
        local gsub = m_str_utils.gsub
        local len = m_str_utils.len
        local match = m_str_utils.match
        local rsplit = m_str_utils.split
        local rgsplit = m_str_utils.gsplit
        
        local hanzi = "[" .. require("Module:scripts").getByCode("Hani"):getCharacters() .. "]"
        local bopomofo = "[" .. require("Module:scripts").getByCode("Bopo"):getCharacters() .. "]"
        
        local langname = {
        	["cdo"] = "Eastern Min",
        	["cjy"] = "Jin",
        	["cmn"] = "Mandarin",
        	["dng"] = "Dungan",
        	["gan"] = "Gan",
        	["hak"] = "Hakka",
        	["hsn"] = "Xiang",
        	["hsn-lou"] = "Xiang",
        	["hsn-hya"] = "Xiang",
        	["mnp"] = "Northern Min",
        	["nan-hbl"] = "Hokkien",
        	["nan-luh"] = "Leizhou Min",
        	["nan-tws"] = "Teochew",
        	["wuu"] = "Wu",
        	["wuu-jih"] = "Wu",
        	["yue"] = "Cantonese",
        	["zhx-sic"] = "Sichuanese",
        	["zhx-tai"] = "Taishanese",
        }
        
        local langname_abbr = {
        	["m"] = "Mandarin",
        	["m-s"] = "Sichuanese",
        	["dg"] = "Dungan",
        	["c"] = "Cantonese",
        	["c-t"] = "Taishanese",
        	["g"] = "Gan",
        	["h"] = "Hakka",
        	["j"] = "Jin",
        	["mb"] = "Northern Min",
        	["md"] = "Eastern Min",
        	["mn"] = "Hokkien",
        	["mn-t"] = "Teochew",
        	["mn-l"] = "Leizhou Min",
        	["w"] = "Wu",
        	["w-j"] = "Wu",
        	["x"] = "Xiang",
        	["x-l"] = "Loudi Xiang",
        	["x-h"] = "Hengyang Xiang",
        }
        
        local pos_aliases_cat = {
        	["n"] = "nouns", ["noun"] = "nouns",
        	["pn"] = "proper nouns", ["propn"] = "proper nouns", ["proper"] = "proper nouns", ["proper noun"] = "proper nouns",
        	["pron"] = "pronouns", ["pronoun"] = "pronouns",
        	["v"] = "verbs", ["verb"] = "verbs",
        	["a"] = "adjectives", ["adj"] = "adjectives", ["adjective"] = "adjectives",
        	["adv"] = "adverbs", ["adverb"] = "adverbs",
        	["prep"] = "prepositions", ["pre"] = "prepositions",
        	["postp"] = "postpositions", ["post"] = "postpositions",
        	["con"] = "conjunctions", ["conj"] = "conjunctions", ["conjunction"] = "conjunctions",
        	["part"] = "particles", ["particle"] = "particles",
        	["pref"] = "prefixes", ["prefix"] = "prefixes",
        	["suf"] = "suffixes", ["suffix"] = "suffixes",
        	["infix"] = "infixes",
        	["prov"] = "proverbs", ["proverb"] = "proverbs",
        	["id"] = "idioms", ["idiom"] = "idioms",
        	["ch"] = "four-character idioms", ["cy"] = "four-character idioms", ["chengyu"] = "four-character idioms",
        	["4ci"] = "four-character idioms",
        	["ph"] = "phrases", ["phrase"] = "phrases",
        	["int"] =  "interjections", ["intj"] = "interjections", ["interj"] = "interjections", ["interjection"] = "interjections",
        	["cl"] = "classifiers", ["cls"] = "classifiers", ["classifier"] = "classifiers",
        	["num"] = "numerals", ["numeral"] = "numerals",
        	["abb"] = "abbreviations", ["abbreviation"] = "abbreviations",
        	["det"] = "determiners", ["deter"] = "determiners", ["determiner"] = "determiners",
        	["syl"] = "syllables", ["syllable"] = "syllables",
        }
        
        local function make_note(text)
        	if find(text, ": ") then
        		text = "\n*" .. gsub(gsub(text, "\n", ".\n*"), "([:;]) ", "%1\n**")
        	elseif find(text, "; ") then
        		text = "\n*" .. gsub(text, "; ", ";\n*")
        	end
        	text = gsub(text, "“([^”]+)”", function (a) return "“" .. gsub(a, ";\n%*+", "; ") .. "”" end)
        	local last_level = ("\n"..text):match("\n(%**)[^*\n][^\n]*$")
        	local append = last_level:gsub("%*","<ul>")
        	return "\n<div style=\"border: 1px solid green; padding: 4px; margin: 8px; background: #F7F4ED; font-size: 85%\">'''Note''': " .. text .. ".</div>" .. append
        end
        
        local function ipa_format(text)
        	local numbers = { ["1"]="¹",["2"]="²",["3"]="³",["4"]="⁴",["5"]="⁵",["0"]="⁰",["-"]="⁻",["/"]="/, /" }
        	return gsub(text,"[0-5%-/]",numbers)
        end
        
        local function Consolas(text)
        	return '<span style="font-family: Consolas, monospace;">' .. text .. "</span>"
        end
        
        local function format_IPA(text)
        	return '<span class="IPA">' .. text .. "</span>"
        end
        
        function export.make(frame)
        	local parent_args = frame:getParent().args
        	local params = {
        		pagename = {},
        		namespace = {},
        		dial = {},
        		mc = {},
        		oc = {},
        		cat = {},
        		only_cat = {type = "boolean"},
        		no_foreign_script_cat = {type = "boolean"},
        	}
        	for abbr, _ in pairs(langname_abbr) do
        		params[abbr] = {}
        		params[abbr .. "a"] = {list = true}
        		params[abbr .. "_note"] = {}
        	end
        	local args = require("Module:parameters").process(parent_args, params, nil, "zh-pron", "make")
        
        	local title = mw.title.getCurrentTitle()
        	local pagename = args.pagename or title.text
        	local sortkey = (require("Module:Hani-sortkey").makeSortKey(pagename))
        	local is_single_hanzi = find(pagename, "^" .. hanzi .. "$") ~= nil
        	local namespace = args.namespace or title.nsText
        	local m_rom = args["m"]
        	local m_s_rom = args["m-s"]
        	local dg_rom = args["dg"]
        	local c_rom = args["c"]
        	local c_t_rom = args["c-t"]
        	local g_rom = args["g"]
        	local h_rom = args["h"]
        	local j_rom = args["j"]
        	local mb_rom = args["mb"]
        	local md_rom = args["md"]
        	local mn_rom = args["mn"]
        	local mn_l_rom = args["mn-l"]
        	local mn_t_rom = args["mn-t"]
        	local w_rom = args["w"]
        	local w_j_rom = args["w-j"]
        	local x_rom = args["x"]
        	local x_l_rom = args["x-l"]
        	local x_h_rom = args["x-h"]
        	local m_audio = args["ma"]
        	local m_s_audio = args["m-sa"]
        	local dg_audio = args["dga"]
        	local c_audio = args["ca"]
        	local c_t_audio = args["c-ta"]
        	local g_audio = args["ga"]
        	local h_audio = args["ha"]
        	local j_audio = args["ja"]
        	local mb_audio = args["mba"]
        	local md_audio = args["mda"]
        	local mn_audio = args["mna"]
        	local mn_l_audio = args["mn-la"]
        	local mn_t_audio = args["mn-ta"]
        	local w_audio = args["wa"]
        	local w_j_audio = args["w-ja"]
        	local x_audio = args["xa"]
        	local x_l_audio = args["x-la"]
        	local x_h_audio = args["x-ha"]
        	local dial = args["dial"]
        	local mc = args["mc"]
        	local oc = args["oc"]
        	local only_cat = args["only_cat"]
        
        	-- True if arguments exist for the specified variety, using a language param abbreviation.
        	local function has_var(var)
        		return args[var] or #args[var .. "a"] > 0
        	end
        
        	local function add_audio(text, audios, lang, show)
        		-- This function has side effects
        		for _, audio in ipairs(audios) do
        			if audio == "y" then audio = string.format("%s-%s.ogg", lang, mw.title.getCurrentTitle().baseText) end
        			table.insert(text, "\n*" .. (show and "::" or "**") .. " [[File:")
        			table.insert(text, audio)
        			table.insert(text, "]]")
        		end
        		if #audios > 0 then
        			table.insert(text, "[[Category:")
        			table.insert(text, langname[lang])
        			table.insert(text, " terms with audio links|" .. sortkey .. "]]")
        		end
        	end
        	
        	local function add_audio_show(text, audios, lang)
        		add_audio(text, audios, lang, "show")
        	end
        
        	local text = {} --the pronunciation table
        	if not only_cat then
                --The whole table consists of 4 parts
                --"textShow" contains Part 1, 3 and 4
        		local textShow = {'<div class="toccolours zhpron" style="max-width:500px; min-width: 20em; font-size:100%; overflow: hidden">'}
                --"textHide" is Part 2
        		local textHide = {}
        		local function show(txt)
        			table.insert(textShow, txt)
        		end
        		local function hide(txt)
        			table.insert(textHide, txt)
        		end
        		local function hide_note(var)
        			local note = args[var .. "_note"]
        			if note then hide(make_note(note)) end
        		end
        
        		show('<div class="vsSwitcher" data-toggle-category="pronunciations">\n<span class="vsToggleElement" style="float: right;"></span>')
                --Part 1 and 2, "Pronunciation" and "Pronunciation expressed in different romanizations"
        		if m_rom or m_s_rom or dg_rom then
        			show("\n* [[w:Mandarin Chinese|Mandarin]]")
        		end
        		if has_var("m") then
        			local m_args = {}
        			local m_pron = require("Module:cmn-pron")
        			if m_rom then
        				local str_analysis = m_pron.str_analysis
        				local other_m_vars = has_var("m-s") or has_var("dg")
        				show("\n" .. str_analysis(m_rom, "head", other_m_vars))
        
        				m_args[1] = str_analysis(m_rom, "")
        				for i = 2, 5 do
        					m_args[i] = str_analysis(m_rom, tostring(i))
        				end
        				local m_args_params_prefixed_with_1 = {"n", "na", "nb", "nc", "nd"}
        				for _, base in ipairs(m_args_params_prefixed_with_1) do
        					for i = 1, 5 do
        						local param = tostring(i) .. base
        						m_args[param] = str_analysis(m_rom, param)
        					end
        				end
        				local m_args_params = {"py", "cap", "tl", "tl2", "tl3", "a", "audio", "er", "ertl", "ertl2", "ertl3",
        					"era", "eraudio"}
        				for _, base in ipairs(m_args_params) do
        					m_args[base] = str_analysis(m_rom, base)
        					for i = 2, 5 do
        						local param = tostring(i) .. base
        						m_args[param] = str_analysis(m_rom, param)
        					end
        				end
        			end
        			for i, audio in ipairs(m_audio) do
        				local ind = i == 1 and "" or tostring(i)
        				m_args[ind .. "a"] = audio
        			end
        			show(m_pron.make_audio(m_args))
        			hide(m_pron.make_args(m_args))
        			hide_note("m")
        		end
        		if has_var("m-s") then
        			local m_s_pron = require("Module:zhx-sic-pron")
        			local m_s_processed = gsub(gsub(gsub(m_s_rom, "/", " / "), "([%d-])([%a])", "%1 %2"), "([%d-]+)", "<sup>%1</sup>")
        			if m_s_rom then
        				show("\n*: <small>(<i>[[w:Sichuanese dialect|Chengdu]], [[w:Sichuanese Pinyin|Sichuanese Pinyin]]</i>)</small>: ")
        				show(Consolas(m_s_processed))
        			end
        			add_audio_show(textShow, m_s_audio, "zhx-sic")
        			if not has_var("m") then
        				hide("\n* [[w:Mandarin Chinese|Mandarin]]")
        			end
        			hide("\n** <small>(<i>[[w:Chengdu|Chengdu]]</i>)</small>")
        			hide("\n*** <small><i>[[w:Sichuanese Pinyin|Sichuanese Pinyin]]</i></small>: ")
        			hide(Consolas(m_s_processed))
        			local xinwenz = m_s_pron.convert(m_s_rom, "SWZ")
        			if xinwenz then
        				hide("\n*** <small><i>[[w:zh:四川话拉丁化新文字|Scuanxua Ladinxua Xin Wenz]]</i></small>: ")
        				hide(Consolas(m_s_pron.convert(m_s_rom, "SWZ")))
        			end
        			hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:zh:成都话|key]])</sup></small>: ")
        			hide(format_IPA(m_s_pron.convert(m_s_rom, "IPA")))
        			hide_note("m-s")
        		end
        		if has_var("dg") then
        			local dg_pron = require("Module:dng-pron")
        			local dg_processed = dg_pron.process(dg_rom)
        			if dg_rom then
        				show("\n*: <small>(<i>[[w:Dungan language|Dungan]], [[w:Dungan alphabet|Cyrillic]] and [[Wiktionary:Dungan transliteration|Wiktionary]]</i>)</small>: ")
        				show(Consolas(dg_processed))
        			end
        			add_audio_show(textShow, dg_audio, "dng")
        			if not (has_var("m") or has_var("m-s")) then
        				hide("\n* [[w:Mandarin Chinese|Mandarin]]")
        			end
        			hide("\n** <small>(<i>[[w:Dungan language|Dungan]]</i>)</small>")
        			hide("\n*** <small><i>[[w:Dungan alphabet|Cyrillic]] and [[Wiktionary:Dungan transliteration|Wiktionary]]</i></small>: ")
        			hide(Consolas(dg_processed))
        			hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Dungan phonology|key]])</sup></small>: ")
        			hide(format_IPA(dg_pron.convert(dg_rom, "IPA")) .. "\n**: <small>(Note: Dungan pronunciation is currently experimental and may be inaccurate.)</small>")
        			hide_note("dg")
        		end
        		if has_var("c") or has_var("c-t") then
        			local c_pron = require("Module:yue-pron")
        			if c_rom or c_t_rom then
        				show("\n* [[w:Cantonese|Cantonese]]")
        				hide("\n* [[w:Cantonese|Cantonese]]")
        				if c_rom then
        					c_rom = c_rom:gsub("%*","-")
        					local c_processed = c_rom:gsub(",([^ ])",", %1")
        					if len(pagename) == 1 then
        						c_processed = c_processed:gsub("([^, ]+)","[[%1]]")
        						c_processed = c_processed:gsub("%[%[%[%[","[[")
        						c_processed = c_processed:gsub("%]%]%]%]","]]")
        						c_processed = gsub(c_processed, "%[%[([^%]]+)%]%]", function(a)
        							return "[[" .. a .. "|" .. gsub(a, "([1-9-]+)", "<sup>%1</sup>") .. "]]" end)
        					else
        						c_processed = gsub(c_processed, "([1-9-]+)", "<sup>%1</sup>")
        					end
        					if not c_t_rom then
        						show(" <small>(<i>")
        					else
        						show("\n*: <small>(<i>[[w:Guangzhou Cantonese|Guangzhou]]–[[w:Hong Kong Cantonese|Hong Kong]], ")
        					end
        					show("[[w:Jyutping|Jyutping]]</i>)</small>: " .. Consolas(c_processed))
        					add_audio_show(textShow, c_audio, "yue")
        					c_rom = c_rom:gsub("[%[%]]","")
        					local c_hom = mw.loadData("Module:yue-pron/hom")
        					local c_hom_exists = false
        					for _,c_first in ipairs(c_pron.jyutping_format(c_rom)) do
        						if c_hom[c_first] then
        							c_hom_exists = c_first
        						end
        					end
        					hide("\n** <small>(<i>[[w:Standard Cantonese|Standard Cantonese]], [[w:Guangzhou Cantonese|Guangzhou]]–[[w:Hong Kong Cantonese|Hong Kong]]</i>)</small>")
        					if not c_hom_exists then
        						hide('<sup><small><abbr title="Add Cantonese homophones"><span class="plainlinks">[')
        						hide(tostring(mw.uri.fullUrl("Module:yue-pron/hom",{["action"]="edit"})))
        						hide(" +]</span></abbr></small></sup>")
        					end
        					local c_comma = gsub(c_rom,",([^ ])",", %1")
        					hide("\n*** <small><i>[[w:Jyutping|Jyutping]]</i></small>: ")
        					hide(Consolas(tostring(gsub(c_comma, "([1-9-]+)", "<sup>%1</sup>"))))
        					hide("\n*** <small><i>[[w:Yale romanization of Cantonese|Yale]]</i></small>: ")
        					hide(Consolas(c_pron.jyutping_to_yale(c_rom)))
        					hide("\n*** <small><i>[[w:Cantonese Pinyin|Cantonese Pinyin]]</i></small>: ")
        					hide(Consolas(tostring(gsub(c_pron.jyutping_to_cantonese_pinyin(c_rom), "([1-9-]+)", "<sup>%1</sup>"))))
        					hide("\n*** <small><i>[[w:Guangdong Romanization|Guangdong Romanization]]</i></small>: ")
        					hide(Consolas(tostring(gsub(c_pron.jyutping_to_guangdong(c_rom), "([1-9-]+)", "<sup>%1</sup>"))))
        					hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Cantonese phonology|key]])</sup></small>: ")
        					hide(format_IPA("/" .. c_pron.jyutping_to_ipa(c_rom) .. "/"))
        					for _,c_first in ipairs(c_pron.jyutping_format(c_rom)) do
        						if c_hom_exists == c_first then
        							local hom_textHide = {'\n*** <small>Homophones</small>: <table class="wikitable mw-collapsible mw-collapsed" style="width:15em;margin:0;'}
        							local hom_text = {}
        							table.insert(hom_textHide, 'position:left; text-align:center"><tr><th></th></tr><tr><td><div style="float: right; clear: right;"><sup>')
        							table.insert(hom_textHide, '<span class="plainlinks">[')
        							table.insert(hom_textHide, tostring(mw.uri.fullUrl("Module:yue-pron/hom",{["action"]="edit"})))
        							table.insert(hom_textHide, ' edit]</span></sup></div><div style="visibility:hidden; float:left"><sup><span style="color:#FFF">edit</span></sup></div>')
        							local yue = require("Module:languages").getByCode("yue")
        							for _,hom in ipairs(c_hom[c_first]) do
        								table.insert(hom_text, require("Module:links").full_link( { term = hom, lang = yue, tr = "-" } ))
        							end
        							table.insert(hom_textHide, table.concat(hom_text, "<br>"))
        							table.insert(hom_textHide, "</td></tr></table>")
        							hide(table.concat(hom_textHide))
        							hide("[[Category:Cantonese terms with homophones]]")
        						end
        					end
        					if not args["c_note"] and c_rom and (find(c_rom, "^[ao]") or find(c_rom, ",[ao]")) and len(pagename) == 1 then
        						args["c_note"] = "The zero initial " .. format_IPA("/∅-/") .. " is commonly pronounced with a ''ng''-initial " .. format_IPA("/ŋ-/") .. " in some varieties of Cantonese, including Hong Kong Cantonese"
        					end
        					hide_note("c")
        				end
        				if c_t_rom then
        					local c_t_processed = c_t_rom:gsub(",([^ ])",", %1")
        					c_t_processed = gsub(c_t_processed, "([1-9%*]%-?[1-9%*]?)", "<sup>%1</sup>")
        					show((c_rom and "\n*:" or "") .. " <small>(<i>[[w:Taishanese|Taishan]], [[Wiktionary:About Chinese/Cantonese/Taishanese|Wiktionary]]</i>)</small>: ")
        					show(Consolas(c_t_processed))
        					add_audio_show(textShow, c_t_audio, "zhx-tai")
        					c_t_rom = c_t_rom:gsub("[%[%]]","")
        					local c_t_comma = gsub(c_t_rom,",([^ ])",", %1")
        					hide("\n** <small>(<i>[[w:Taishanese|Taishanese]], [[w:Taicheng Subdistrict|Taicheng]]</i>)</small>")
        					hide("\n*** <small><i>[[Wiktionary:About Chinese/Cantonese/Taishanese|Wiktionary]]</i></small>: ")
        					hide(Consolas(tostring(gsub(c_t_comma, "([1-9%*]%-?[1-9%*]?)", "<sup>%1</sup>"))))
        					hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Taishanese|key]])</sup></small>: ")
        					hide(format_IPA(c_pron.hoisanva_to_ipa(c_t_rom)))
        					hide_note("c-t")
        				end
        			end
        		end
        		if has_var("g") then
        			local g_pron = require("Module:gan-pron")
        			if g_rom then
        				show("\n* [[w:Gan Chinese|Gan]] <small>(<i>[[Wiktionary:About Chinese/Gan|Wiktionary]]</i>)</small>: ")
        				show(Consolas(g_pron.rom(g_rom)))
        			end
        			add_audio_show(textShow, g_audio, "gan")
        			hide("\n* [[w:Gan Chinese|Gan]]")
        			hide("\n** <small>(<i>[[w:Nanchang dialect|Nanchang]]</i>)</small>")
        			hide("\n*** <small><i>[[Wiktionary:About Chinese/Gan|Wiktionary]]</i></small>: ")
        			hide(Consolas(g_pron.rom(g_rom)))
        			hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Nanchang dialect|key]])</sup></small>: ")
        			hide(format_IPA("/" .. g_pron.ipa(g_rom) .. "/"))
        			hide_note("g")
        		end
        		if h_rom and (find(h_rom, "pfs=.") or find(h_rom, "gd=.")) or #h_audio > 0 then
        			local h_pron = require("Module:hak-pron")
        			if find(h_rom, "pfs=.") or find(h_rom, "gd=.") then
        				show("\n* [[w:Hakka Chinese|Hakka]]")
        				show(h_pron.rom_display(h_rom,"yes"))
        			end
        			add_audio_show(textShow, h_audio, "hak")
        			hide("\n* [[Wiktionary:About Chinese/Hakka|Hakka]]")
        			if h_rom then hide(h_pron.rom_display(h_rom,"")) end
        			hide_note("h")
        		end
        		if has_var("j") then
        			local j_pron = require("Module:cjy-pron")
        			if j_rom then
        				show("\n* [[w:Jin Chinese|Jin]] <small>(<i>[[Wiktionary:About Chinese/Jin|Wiktionary]]</i>)</small>: ")
        				show(Consolas(j_pron.rom(j_rom)))
        			end
        			add_audio_show(textShow, j_audio, "cjy")
        			hide("\n* [[w:Jin Chinese|Jin]]")
        			hide("\n** <small>(<i>[[w:Taiyuan|Taiyuan]]</i>)<sup>[[:w:zh:太原話|+]]</sup></small>")
        			if j_rom then
        				hide("\n*** <small><i>[[Wiktionary:About Chinese/Jin|Wiktionary]]</i></small>: ")
        				hide(Consolas(j_pron.rom(j_rom)))
        			end
        			local no_sandhi = false
        			local roms = rsplit(j_rom, "/")
        			for i = 1, table.getn(roms) do
        				if find(roms[i], " [^ ]+ ") then
        					no_sandhi = true
        					break
        				end
        			end
        			hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] (<i>old-style" .. (no_sandhi and ", no sandhi" or "") .. "</i>)</small>: ")
        			hide(format_IPA("/" .. j_pron.ipa(j_rom, no_sandhi and "no_sandhi" or "") .. "/"))
        			hide_note("j")
        		end
        		if has_var("mb") then
        			local mb_pron = require("Module:mnp-pron")
        			if mb_rom then
        				show("\n* [[w:Northern Min|Northern Min]] <small>(<i>[[w:Kienning Colloquial Romanized|KCR]]</i>)</small>: ")
        				show(Consolas(mb_pron.rom(mb_rom)))
        			end
        			add_audio_show(textShow, mb_audio, "mnp")
        			hide("\n* [[w:Northern Min|Northern Min]]")
        			hide("\n** <small>(<i>[[w:Jian'ou dialect|Jian'ou]]</i>)</small>")
        			if mb_rom then
        				hide("\n*** <small><i>[[w:Kienning Colloquial Romanized|Kienning Colloquial Romanized]]</i></small>: ")
        				hide(Consolas(mb_pron.rom(mb_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Jian'ou dialect|key]])</sup></small>: ")
        				hide(format_IPA(mb_pron.ipa(mb_rom)))
        			end
        			hide_note("mb")
        		end
        		if has_var("md") then
        			local md_pron = require("Module:cdo-pron")
        			if md_rom then
        				show("\n* [[w:Eastern Min|Eastern Min]] <small>(<i>[[Wiktionary:About Chinese/Eastern Min|BUC]]</i>)</small>: ")
        				show(Consolas(md_pron.rom(md_rom)))
        			end
        			add_audio_show(textShow, md_audio, "cdo")
        			hide("\n* [[w:Eastern Min|Eastern Min]]")
        			hide("\n** <small>(<i>[[w:Fuzhou dialect|Fuzhou]]</i>)</small>")
        			if md_rom then
        				hide("\n*** <small><i>[[Wiktionary:About Chinese/Eastern Min|Bàng-uâ-cê]]</i></small>: ")
        				hide(Consolas(md_pron.rom(md_rom)))
        				if not (md_rom and find(md_rom, "([^/]*)-([^/]*)-([^/]*)-([^/]*)-([^/]*)")) then
        					hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Fuzhou dialect|key]])</sup></small>: ")
        					hide(format_IPA("/" .. md_pron.ipa(md_rom) .. "/"))
        				else
        					hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Fuzhou dialect|key]])</sup> (<i>no sandhi</i>)</small>: ")
        					hide(format_IPA("/" .. md_pron.ipa(md_rom, "no_sandhi") .. "/"))
        				end
        			end
        			hide_note("md")
        		end
        		if has_var("mn") or has_var("mn-l") or has_var("mn-t") then
        			local mn_pron, mn_l_pron
        			if has_var("mn") or has_var("mn-t") then
        				mn_pron = require("Module:nan-pron")
        			end
        			if has_var("mn-l") then
        				mn_l_pron = require("Module:nan-pron-Leizhou")
        			end
        			
        			if mn_rom or mn_t_rom or mn_l_rom then
        				show("\n* [[w:Southern Min|Southern Min]]")
        				if mn_rom then
        					show(((mn_l_rom or mn_t_rom) and "\n*:" or "") .. " <small>(<i>[[w:Hokkien|Hokkien]], [[w:Pe̍h-ōe-jī|POJ]]</i>)</small>: ")
        					show(Consolas(mn_pron.poj_display(mn_pron.poj_check_invalid(mn_rom))))
        					add_audio_show(textShow, mn_audio, "nan-hbl")
        				end
        				if mn_t_rom then
        					show(((mn_rom or mn_l_rom) and "\n*:" or "") .. " <small>(<i>[[w:Teochew dialect|Teochew]], [[w:Peng'im|Peng'im]]</i>)</small>: ")
        					show(Consolas(mn_pron.pengim_display(mn_t_rom)))
        					add_audio_show(textShow, mn_t_audio, "nan-tws")
        				end
        				if mn_l_rom then
        					show(((mn_rom or mn_t_rom) and "\n*:" or "") .. " <small>(<i>[[w:Leizhou Min|Leizhou]], Leizhou Pinyin</i>)</small>: ")
        					show(Consolas(mn_l_pron.rom(mn_l_rom)))
        					add_audio_show(textShow, mn_l_audio, "nan-luh")
        				end
        			end
        			hide("\n* [[w:Southern Min|Southern Min]]")
        			if has_var("mn") then
        				hide(mn_pron.generate_all(mn_rom))
        				hide_note("mn")
        			end
        			if has_var("mn-t") then
        				hide("\n** <small>(<i>[[w:Teochew dialect|Teochew]]</i>)</small>")
        				hide("\n*** <small><i>[[w:Peng'im|Peng'im]]</i></small>: ")
        				hide(Consolas(mn_pron.pengim_display(mn_t_rom)))
        				hide("\n*** <small><i>[[w:Pe̍h-ōe-jī|Pe̍h-ōe-jī]]-like</i></small>: ")
        				hide(Consolas(mn_pron.pengim_to_pojlike_conv(mn_t_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:zh:潮州話#語音|key]])</sup></small>: ")
        				hide(format_IPA(mn_pron.pengim_to_ipa_conv(mn_t_rom)))
        				hide_note("mn-t")
        			end
        			if has_var("mn-l") then
        				hide("\n** <small>(<i>[[w:Leizhou Min|Leizhou]]</i>)</small>")
        				hide("\n*** <small><i>Leizhou Pinyin</i></small>: ")
        				hide(Consolas(mn_l_pron.rom(mn_l_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]]</small>: ")
        				hide(format_IPA(mn_l_pron.ipa(mn_l_rom)))
        				hide_note("mn-l")
        			end
        		end
        		if has_var("w") or has_var("w-j") then
        			local w_show, w_hide, w_j_show, w_j_hide
        			if w_rom then
        				w_show, w_hide = require("Module:wuu-pron/sandbox").make(w_rom)
        			end
        			if w_j_rom then
        				w_j_show, w_j_hide = require("Module:wuu-pron/Jinhua").make(w_j_rom)
        			end
        			show("\n* [[w:Wu Chinese|Wu]] <small>(<i>[[Wiktionary:About Chinese/Wu|Wugniu]]</i>)</small>")
        			show(w_show)
        			show(w_j_show)
        			add_audio_show(textShow, w_audio, "wuu")
        			hide("\n* [[w:Wu Chinese|Wu]]")
        			hide(w_hide)
        			hide(w_j_hide)
        			-- add_audio(textHide, w_audio, "wuu")
        			hide_note("w")
        			hide_note("w-j")
        		end
        		if has_var("x") or has_var("x-l") or has_var("x-h") then
        			if has_var("x") then
        				x_pron = require("Module:hsn-pron")
        			end
        			if has_var("x-l") then
        				x_l_pron = require("Module:hsn-pron-Loudi")
        			end
        			if has_var("x-h") then
        				x_h_pron = require("Module:hsn-pron-Hengyang")
        			end
        			if x_rom or x_l_rom or x_h_rom then
        				show("\n* [[w:Xiang Chinese|Xiang]]")
        				if x_rom then
        					show(((x_l_rom or x_h_rom) and "\n*:" or "") .. " <small>(<i>[[w:Changsha dialect|Changsha]], [[Wiktionary:About Chinese/Xiang|Wiktionary]]</i>)</small>: ")
        					show(Consolas(x_pron.rom(x_rom)))
        					add_audio_show(textShow, x_audio, "hsn")
        				end
        				if x_l_rom then
        					show(((x_rom or x_h_rom) and "\n*:" or "") .. " <small>(<i>[[w:zh:娄底话|Loudi]], [[Wiktionary:About Chinese/Xiang/Loudi|Wiktionary]]</i>)</small>: ")
        					show(Consolas(x_l_pron.rom(x_l_rom)))
        					add_audio_show(textShow, x_l_audio, "hsn-lou")
        				end
        				if x_h_rom then
        					show(((x_rom or x_l_rom) and "\n*:" or "") .. " <small>(<i>[[w:Hengyang dialect|Hengyang]], [[Wiktionary:About Chinese/Xiang/Hengyang|Wiktionary]]</i>)</small>: ")
        					show(Consolas(x_h_pron.rom(x_h_rom)))
        					add_audio_show(textShow, x_h_audio, "hsn-hya")
        				end
        			end
        			hide("\n* [[w:Xiang Chinese|Xiang]]")
        			if x_rom then
        				local x_diff = x_pron.stylediff(x_rom)
        				hide("\n** <small>(<i>[[w:Changsha dialect|Changsha]]</i>)</small>")
        				hide("\n*** <small><i>[[Wiktionary:About Chinese/Xiang|Wiktionary]]</i></small>: ")
        				hide(Consolas(x_pron.rom(x_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Changsha dialect|key]])</sup>")
        				hide(x_diff and " (<i>old-style</i>)" or "")
        				hide("</small>: ")
        				hide(format_IPA("/" .. x_pron.ipa(x_rom) .. "/"))
        				if x_diff then
        					hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Changsha dialect|key]])</sup> (<i>new-style</i>)</small>: ")
        					hide(format_IPA("/" .. x_pron.ipa(x_rom, "new") .. "/"))
        				end
        				hide_note("x")
        			end
        			if x_l_rom then
        				hide("\n** <small>(<i>[[w:zh:娄底话|Loudi]]</i>)</small>")
        				hide("\n*** <small><i>[[Wiktionary:About Chinese/Xiang/Loudi|Wiktionary]]</i></small>: ")
        				hide(Consolas(x_l_pron.rom(x_l_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:zh:娄底话|key]])</sup>")
        				hide("</small>: ")
        				hide(format_IPA("/" .. x_l_pron.ipa(x_l_rom) .. "/"))
        				hide_note("x-l")
        			end
        			if x_h_rom then
        				hide("\n** <small>(<i>[[w:Hengyang dialect|Hengyang]]</i>)</small>")
        				hide("\n*** <small><i>[[Wiktionary:About Chinese/Xiang/Hengyang|Wiktionary]]</i></small>: ")
        				hide(Consolas(x_h_pron.rom(x_h_rom)))
        				hide("\n*** <small>Sinological [[Wiktionary:International Phonetic Alphabet|IPA]] <sup>([[w:Hengyang dialect|key]])</sup>")
        				hide("</small>: ")
        				hide(format_IPA("/" .. x_h_pron.ipa(x_h_rom) .. "/"))
        				hide_note("x-h")
        			end
        		end
                -- combine textShow and textHide into text
        		text = {
                    table.concat(textShow),
                    '\n<div class="vsHide">\n----\n',
                    table.concat(textHide),
                    "</div></div>"
                }
        
                --Part 3 "Dialectal data"
        		if dial ~= "n" and is_single_hanzi then
        			local success, m_dial = pcall(mw.loadData, "Module:zh/data/dial-pron/" .. pagename)
        			if success then
        				local dialPron = {}
        				local temporary = {}
        				if dial and find(dial, "^[0-9\\,]+$") then
        					for element in rgsplit(dial, ",") do
        						table.insert(dialPron, m_dial[tonumber(element)])
        					end
        				else
        					for _, element in ipairs(m_dial) do
        						table.insert(dialPron, element)
        					end
        				end
        				for _, set in ipairs(dialPron) do
        					for _, object in ipairs(set[2]) do
        						table.insert(temporary, object)
        					end
        				end
        				local rand = gsub("-" .. table.concat(temporary), "[^A-Za-z0-9]", codepoint("%1"))
        				table.insert(text,
                            '\n----\n<div class="vsSwitcher" data-toggle-category="pronunciations" style="background-color:#FAFFFA">\n* ' ..
                            '<span style="color:#3366bb">Dialectal data</span>' ..
        					'<span class="vsToggleElement" style="float:right; padding:0 0; font-size:90%"></span>\n' ..
                            '<div class="vsHide">'
                        )
        
        				table.insert(text, '\n{| class="wikitable" ' ..
        					'id="' .. rand .. '" style="width:100%; margin:0; ' ..
        					'text-align:center; border-collapse: collapse; border-style: hidden;"')
        
        				local locStart = "\n|-\n!"
        				local readingStart = table.concat({'\n!style="background:#E8ECFA; width:9em"|',
        				'<div style="float: right; clear: right; font-size:60%"><span class="plainlinks">[', tostring(mw.uri.fullUrl("Module:zh/data/dial-pron/" .. pagename, {["action"]="edit"})), ' edit]</span></div><span lang="zh" class="Hani">'})
        				local locEnd = '<span class="IPA">'
        				local headclr = 'style="background:#E8ECFA"|'
        				local mclr = 'style="background:#FAF5F0"|'
        				local jclr = 'style="background:#FAF5F0"|'
        				local wclr = 'style="background:#F4F0FA"|'
        				local huclr = 'style="background:#FAF9F0"|'
        				local xclr = 'style="background:#F0F2FA"|'
        				local gclr = 'style="background:#F0FAF3"|'
        				local haclr = 'style="background:#FAF0F6"|'
        				local cclr = 'style="background:#F0F5FA"|'
        				local minclr = 'style="background:#F7FAF0"|'
        				local clrList = {
        					mclr, mclr, mclr, mclr, mclr, mclr, mclr, mclr, mclr, mclr,
        					mclr, mclr, mclr, mclr, mclr, mclr, mclr, jclr, jclr, jclr,
        					wclr, wclr, wclr, wclr, huclr, huclr, xclr, xclr, gclr, haclr,
        					haclr, cclr, cclr, cclr, minclr, minclr, minclr, minclr, minclr
        				}
        				local locList = {
        					table.concat({headclr, "Variety\n!", headclr, "Location"}),
        					table.concat({"rowspan=17 ", mclr,  "Mandarin\n!", mclr, "[[w:Beijing dialect|Beijing]]\n|", mclr}),
        					table.concat({mclr, "[[w:Harbin dialect|Harbin]]\n|", mclr}),
        					table.concat({mclr, "[[w:Tianjin dialect|Tianjin]]\n|", mclr}),
        					table.concat({mclr, "[[w:Jinan dialect|Jinan]]\n|", mclr}),
        					table.concat({mclr, "[[w:Qingdao dialect|Qingdao]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:鄭州話|Zhengzhou]]\n|", mclr}),
        					table.concat({mclr, "[[w:Xi'an dialect|Xi'an]]\n|", mclr}),
        					table.concat({mclr, "[[w:Xining|Xining]]\n|", mclr}),
        					table.concat({mclr, "[[w:Yinchuan|Yinchuan]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:蘭州話|Lanzhou]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:烏魯木齊話|Ürümqi]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:武漢話|Wuhan]]\n|", mclr}),
        					table.concat({mclr, "[[w:Chengdu dialect|Chengdu]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:貴陽話|Guiyang]]\n|", mclr}),
        					table.concat({mclr, "[[w:Kunming dialect|Kunming]]\n|", mclr}),
        					table.concat({mclr, "[[w:Nanjing dialect|Nanjing]]\n|", mclr}),
        					table.concat({mclr, "[[w:zh:合肥話|Hefei]]\n|", mclr}),
        					table.concat({"rowspan=3 ", jclr, "Jin\n!", jclr, "[[w:zh:太原話|Taiyuan]]\n|", jclr}),
        					table.concat({jclr, "[[w:Pingyao|Pingyao]]\n|", jclr}),
        					table.concat({jclr, "[[w:Hohhot dialect|Hohhot]]\n|", jclr}),
        					table.concat({"rowspan=4 ", wclr, "Wu\n!", wclr, "[[w:Shanghai dialect|Shanghai]]\n|", wclr}),
        					table.concat({wclr, "[[w:Suzhou dialect|Suzhou]]\n|", wclr}),
        					table.concat({wclr, "[[w:Hangzhou dialect|Hangzhou]]\n|" , wclr}),
        					table.concat({wclr, "[[w:Wenzhou dialect|Wenzhou]]\n|", wclr}),
        					table.concat({"rowspan=2 ", huclr, "Hui\n!", huclr, "[[w:Shexian|Shexian]]\n|", huclr}),
        					table.concat({huclr, "[[w:zh:屯溪話|Tunxi]]\n|", huclr}),
        					table.concat({"rowspan=2 ", xclr, "Xiang\n!", xclr, "[[w:Changsha dialect|Changsha]]\n|", xclr}),
        					table.concat({xclr, "[[w:zh:湘潭話|Xiangtan]]\n|", xclr}),
        					table.concat({gclr, "Gan\n!", gclr, "[[w:Nanchang dialect|Nanchang]]\n|", gclr}),
        					table.concat({"rowspan=2 ", haclr, "Hakka\n!", haclr, "[[w:Meixian dialect|Meixian]]\n|", haclr}),
        					table.concat({haclr, "[[w:Taoyuan, Taiwan|Taoyuan]]\n|", haclr}),
        					table.concat({"rowspan=3 ", cclr, "Cantonese\n!", cclr, "[[w:Guangzhou dialect|Guangzhou]]\n|", cclr}),
        					table.concat({cclr, "[[w:Nanning|Nanning]]\n|", cclr}),
        					table.concat({cclr, "[[w:Hong Kong dialect|Hong Kong]]\n|", cclr}),
        					table.concat({"rowspan=5 ", minclr, "Min\n!", minclr, "[[w:Xiamen dialect|Xiamen]] (Hokkien)\n|", minclr}),
        					table.concat({minclr, "[[w:Fuzhou dialect|Fuzhou]] (Eastern Min)\n|", minclr}),
        					table.concat({minclr, "[[w:Jian'ou dialect|Jian'ou]] (Northern Min)\n|", minclr}),
        					table.concat({minclr, "[[w:Shantou dialect|Shantou]] (Teochew)\n|", minclr}),
        					table.concat({minclr, "[[w:Haikou dialect|Haikou]] (Hainanese)\n|", minclr})}
        
        				local function ipa_correct(ipa, location)
        					if location == 22 then return (gsub(ipa, "13", "23")) else return ipa end
        				end
        
        				local function fmtDial(text, location)
        					local fmttedPron = {}
        					if text == "" then return "" end
        					for pronunciation in rgsplit(text, "|") do
        						local ipa = match(pronunciation, "^[^%(%)一-龯㐀-䶵~,]+")
        						ipa = gsub(ipa, "([ptk])([0-5])", "%1̚%2")
        						local environ = match(pronunciation, "[%(%)一-龯㐀-䶵~,]*$") or false
        						table.insert(fmttedPron, "<span class=\"IPA\"><small>/" ..
        							tostring(ipa_format(ipa_correct(ipa, location))) .. "/</small></span>" .. (environ
        							and " <span class=\"Hani\" lang=\"zh\"><small>"..environ.."</small></span>" or nil))
        					end
        					return table.concat(fmttedPron, "<br>")
        				end
        
        				for locationNo = 1, 40 do
        					for readingNo = 1, #dialPron do
        						if readingNo == 1 then
        							table.insert(text, locStart)
        							table.insert(text, locList[locationNo])
        						end
        						if locationNo == 1 then
        							local situation = dialPron[readingNo][1]
        							table.insert(text, readingStart)
        							table.insert(text, pagename)
        							table.insert(text, (pagename ~= situation and " (" ..
        								gsub(situation, pagename, "<b>" .. pagename .. "</b>") .. ")" or ""))
        							table.insert(text, "</span>")
        						else
        							table.insert(text, (readingNo == 1 and "" or "\n|" .. clrList[locationNo-1]))
        							table.insert(text, locEnd)
        							table.insert(text, fmtDial(dialPron[readingNo][2][locationNo-1], locationNo))
        							table.insert(text, "</span>")
        						end
        					end
        				end
        				table.insert(text, "\n|}</div></div>")
        			end
        		end
        
                --Part 4 "Middle Chinese & Old Chinese"
        		local mc_preview, oc_preview
        		local m_ltc_pron, m_och_pron
        
        		-- !!!
        		-- The following function modifies the tables generated by mod:ltc-pron and mod:och-pron, shifting them
        		-- from using "mw-collapsible" to using "vsSwitcher", because the former
        		-- can not collapse on the mobile site and makes Chinese entries a mess.
        		-- It is supposed to be a temporary solution.
        		-- !!!
                local function shiftCustomtoggle2Vsswitcher(s)
                    local result
                    result = (s:gsub(
                        '\n%* <div title="expand" class="mw%-customtoggle[^>]+">',
                        '\n<div class="vsSwitcher" data-toggle-category="pronunciations">\n* '
                    ):gsub(
                        '<span style="float:right; border:1px solid #ccc; border%-radius:1px; padding:0 0; font%-size:90%%">▼</span>(.-)</div>\n{| class="wikitable',
                        '<span class="vsToggleElement" style="float:right; padding:0 0; font-size:90%%"></span>%1\n<div class="vsHide">\n{| class="wikitable'
                    ):gsub(
                        '{| class="wikitable mw%-collapsible mw%-collapsed" id="[^"]+"',
                        '{| class="wikitable"'
                    ):gsub(
                        "\n|}$",
                        "\n|}</div></div>"
                    ))
                    return result
                end
        
        		if mc then
        			m_ltc_pron = require("Module:ltc-pron")
        			mc_preview = m_ltc_pron.retrieve_pron(pagename, false, mc, true)
        			if not mc_preview then
        				require("Module:debug/track")("zh-pron/Middle Chinese data not found")
        				mc = nil
        			end
        		end
        		if oc then
        			m_och_pron = require("Module:och-pron")
        			oc_preview = m_och_pron.generate_show(pagename, oc)
        			if not oc_preview then
        				require("Module:debug/track")("zh-pron/Old Chinese data not found")
        				oc = nil
        			end
        		end
        		if mc or oc then
        			table.insert(text, '\n----\n<div style="background-color:#f7fbff">')
        			if mc then
        				table.insert(text, shiftCustomtoggle2Vsswitcher(m_ltc_pron.ipa(mc, mc_preview)))
        			end
        			if oc then
        				table.insert(text, shiftCustomtoggle2Vsswitcher(m_och_pron.ipa(oc, oc_preview)))
        			end
        			table.insert(text, "</div>")
        		end
        		table.insert(text, "</div>")
        		if namespace == "" or namespace == "-" then
        			if mc then
        				table.insert(text, "[[Category:Middle Chinese lemmas|" .. sortkey .. "]]")
                        if is_single_hanzi then
                            if mc_preview:find("k̚$") then
                                table.insert(text, "[[Category:Middle Chinese -k characters|" .. sortkey .. "]]")
                            elseif mc_preview:find("t̚$") then
                                table.insert(text, "[[Category:Middle Chinese -t characters|" .. sortkey .. "]]")
                            elseif mc_preview:find("p̚$") then
                                table.insert(text, "[[Category:Middle Chinese -p characters|" .. sortkey .. "]]")
                            end
                        end
        			end
        			if oc then table.insert(text, "[[Category:Old Chinese lemmas|" .. sortkey .. "]]") end
        			if not args["cat"] then
        				table.insert(text, "[[Category:zh-pron usage missing POS]]")
        			end
        		end
        	end
        
        	local conv_text = {} --categories
        	if namespace == "" or namespace == "-" then
        		local catText = args["cat"] or ""
        		local cat_start = "[[Category:"
        		local cat_end = "]]"
        		if w_rom then
        			w_rom = gsub(w_rom, "%d", "")
        		end
        		
        		local function add_cat(cat_table, name, cat)
        			table.insert(cat_table, cat_start .. name .. cat .. "|" .. sortkey .. cat_end)
        		end
        
        		local cats = rsplit(catText, ",", true)
        		if pos_aliases_cat[cats[1]] == "four-character idioms" then
        			table.insert(cats, 2, "idioms")
        		end
        		table.insert(cats, 1, "lemmas")
        		for i = 1, #cats do
        			local cat = cats[i]
        			if cat == "" then break end
        			cat = gsub(cat, "^ +", "")
        			if find(cat, ":") then
        				local cat_split = rsplit(cat, ":", true)
        				local lang_name = langname_abbr[cat_split[1]]
        				local category = pos_aliases_cat[cat_split[2]] or cat
        				add_cat(conv_text, "Chinese ", category)
        				table.insert(conv_text, cat_start .. lang_name .. " " .. category .. "|" .. sortkey .. cat_end)
        			else
        				cat = pos_aliases_cat[cat] or cat
        				add_cat(conv_text, "Chinese ", cat)
        				if m_rom then add_cat(conv_text, "Mandarin ", cat) end
        				if has_var("m-s") then add_cat(conv_text, "Sichuanese ", cat) end
        				if has_var("dg") then add_cat(conv_text, "Dungan ", cat) end
        				if c_rom then add_cat(conv_text, "Cantonese ", cat) end
        				if c_t_rom then add_cat(conv_text, "Taishanese ", cat) end
        				if has_var("g") then add_cat(conv_text, "Gan ", cat) end
        				if h_rom and (find(h_rom, "pfs=.") or find(h_rom, "gd=.")) or #h_audio > 0 then
        					add_cat(conv_text, "Hakka ", cat)
        				end
        				if has_var("j") then add_cat(conv_text, "Jin ", cat) end
        				if has_var("mb") then add_cat(conv_text, "Northern Min ", cat) end
        				if has_var("md") then add_cat(conv_text, "Eastern Min ", cat) end
        				if has_var("mn") then add_cat(conv_text, "Hokkien ", cat) end
        				if has_var("mn-t") then add_cat(conv_text, "Teochew ", cat) end
        				if has_var("mn-l") then add_cat(conv_text, "Leizhou Min ", cat) end
        				if has_var("w") then add_cat(conv_text, "Wu ", cat) end
        				if has_var("w-j") then add_cat(conv_text, "Wu ", cat) end
        				if has_var("x") then add_cat(conv_text, "Xiang ", cat) end
        				if has_var("x-l") then add_cat(conv_text, "Xiang ", cat) end
        				if has_var("x-h") then add_cat(conv_text, "Xiang ", cat) end
        			end
        		end
        		table.insert(conv_text, cat_start .. "Chinese terms with IPA pronunciation|" .. sortkey .. cat_end)
        		if is_single_hanzi then
        			table.insert(conv_text, cat_start .. "Chinese Han characters|" .. sortkey .. cat_end)
        		end
        		if not find(pagename, hanzi) and not find(pagename, bopomofo) and not args.no_foreign_script_cat then
        			table.insert(conv_text, cat_start .. "Chinese terms written in foreign scripts|" .. sortkey .. cat_end)
        		end
        	end
        
        	local output = table.concat(text) .. table.concat(conv_text)
        	if namespace ~= "" and namespace ~= "-" then
        		output = gsub(output, "%[%[Category:[^%]]+%]%]", "")
        	end
        	return output
        end
        
        return export