Module:zh-pron

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:zh-pron. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:zh-pron, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:zh-pron au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:zh-pron est ici. La définition du mot Module:zh-pron vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:zh-pron, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.

Travail en cours depuis 2022.

Le Module:zh-pron ici présent est la traduction non terminée de sa version originale en anglais en:Module:zh-pron.


Note pour les éventuels développeurs qui veulent aider :

Il faut faire encore différentes adaptations pour qu'il puisse fonctionner. L'ordre des phrases tel que le langage Lua est dans se module, se fait via les table.insert (insert un nouvel élément à la fin de la table si la position n'est pas donnée). Il faudrait également traduire les différents modules possiblement appelés, pour obtenir toute la richesse de la version en anglais.


local export = {}

local find = mw.ustring.find
local match = mw.ustring.match
local gsub = mw.ustring.gsub

local langname = {
	 = "mindong",
	 = "mandarin",
	 = "jin",
	 = "doungane",
	 = "gan",
	 = "hakka",
	 = "xiang",
	 = "minbei",
	 = "minnan",
	 = "wu",
	 = "yue/cantonais"
}

local langname_abbr = {
	 = "mandarin",
	 = "sichuanais",
	 = "mandarin",
	 = "mandarin",
	 = "doungane",
	 = "yue/cantonais",
	 = "cantonais",
	 = "taïshanais",
	 = "cantonais",
	 = "gan",
	 = "hakka",
	 = "jin",
	 = "minbei",
	 = "chinois médiéval",
	 = "mindong",
	 = "minnan",
     = "Min de Leizhou",
	 = "chaozhou",
	 = "chinois archaïque",
	 = "min de Puxian",
	 = "pinghua septentrional",
	 = "wu",
	 = "Wu",
	 = "xiang",
	 = "xiang loudi", -- également appelé xiang archaïque
	 = "xiang de Hengyang",
}

local pos_aliases_cat = {
	 = "Noms communs",  = "Noms communs",
	 = "Noms propres",  = "Noms propres",  = "Noms propres",  = "Noms propres",
	 = "Pronoms",  = "Pronoms",
	 = "Verbes",  = "Verbes",
	 = "Adjectifs",  = "Adjectifs",  = "Adjectifs",
	 = "Adverbes",  = "Adverbes",
	 = "Prépositions",  = "Prépositions",
	 = "Postpositions",  = "Postpositions",
	 = "Conjonctions",  = "Conjonctions",  = "Conjonctions",
	 = "Particules",  = "Particules",
	 = "Préfixes",  = "Préfixes",
	 = "Suffixes",  = "Suffixes",
	 = "Infixes",
	 = "Proverbes",  = "Proverbes",
	 = "Idiomes",  = "Idiomes",
	 = "chengyu",  = "chengyu",  = "chengyu",
	 = "Phrases",  = "Phrases",
	 = "Interjections",  = "Interjections",  = "Interjections",
	 = "Classificateurs",  = "Classificateurs",  = "Classificateurs",
	 = "Numéraux",  = "Numéraux",
	 = "Abréviations",  = "Abréviations",
	 = "Déterminants",  = "Déterminants",  = "Déterminants",
	 = "Syllabes"
}

-- if not empty
local function ine(val)
	if val == "" then
		return nil
	end
	return val
end

local function makeNote(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)
	return "\n<div style=\"border: 1px solid green; padding: 4px; margin: 8px; background: #F7F4ED; font-size: 85%\">'''Note''': " .. text .. ".</div>"
end

local function ipa_format(text)
	local numbers = { ='¹',='²',='³',='⁴',='⁵',='⁰',='⁻',='/, /' }
	return gsub(text,'',numbers)
end

local function add_audio(text, audio, lang)
	-- Cette fonction a des effets de bord
	if audio then
		if audio == "y" then audio = string.format('%s-%s.ogg', lang, mw.title.getCurrentTitle().baseText) end
		table.insert(text, '\n*** [[File:')
		table.insert(text, audio)
		table.insert(text, ']]')
		table.insert(text, '[[Catégorie:Termes en ')
		table.insert(text, langname)
		table.insert(text, ' avec lien audio]]')
	end
end

local function add_audio_show(text, audio, lang)
	-- Cette fonction a des effets de bord
	if audio then
		if audio == "y" then audio = string.format('%s-%s.ogg', lang, mw.title.getCurrentTitle().baseText) end
		table.insert(text, '\n*:: <div style="display:inline-block; position:relative; top:0.5em;">[[File:')
		table.insert(text, audio)
		table.insert(text, ']]</div>')
		table.insert(text, '[[Catégorie:Termes en ')
		table.insert(text, langname)
		table.insert(text, ' avec lien audio]]')
	end
end

local function Consolas(text)
	return '<span style="font-family: monospace;">' .. text .. '</span>'
end

local function format_IPA(text)
	return '<span class="IPA">' .. text .. '</span>'
end

function export.make(frame)
	local args = frame:getParent().args
	local title = mw.title.getCurrentTitle()
	local pagename = ine(args) or title.text
	-- Motif Unicode pour un seul caractère han, avec des caractères non-NFC
	-- insérés en utilistant mw.ustring.char parce qu’ils ne peuvent être
	-- sauvegardés dans une page de MediaWiki.
	-- https://util.unicode.org/UnicodeJsps/regex.jsp?a=\p{Hani}
	local hanzi = "^[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〻㐀-䶿一-鿼"
		.. mw.ustring.char(0xF900) .. "-" .. mw.ustring.char(0xFA6D)
		.. mw.ustring.char(0xFA70) .. "-" .. mw.ustring.char(0xFAD9)
		.. "𠀀-𪛝𪜀-𫜴𫝀-𫠝𫠠-𬺡𬺰-𮯠" .. mw.ustring.char(0x2F800)
		.. "-" .. mw.ustring.char(0x2FA1D) .. "𰀀-𱍊]$"
	local is_single_hanzi = mw.ustring.find(pagename, hanzi) ~= nil
	local namespace = ine(args) or title.nsText
	local m_rom = ine(args)
	local m_s_rom = ine(args)
	local dg_rom = ine(args)
	local c_rom = ine(args)
	local c_t_rom = ine(args)
	local g_rom = ine(args)
	local h_rom = ine(args)
	local j_rom = ine(args)
	local mb_rom = ine(args)
	local md_rom = ine(args)
	local mn_rom = ine(args)
	local mn_t_rom = ine(args)
	local w_rom = ine(args)
	local x_rom = ine(args)
	local m_audio = ine(args)
	local m_audio2 = ine(args)
	local m_s_audio = ine(args)
	local dg_audio = ine(args)
	local c_audio = ine(args)
	local c_t_audio = ine(args)
	local g_audio = ine(args)
	local h_audio = ine(args)
	local j_audio = ine(args)
	local md_audio = ine(args)
	local mn_audio = ine(args)
	local mn_t_audio = ine(args)
	local w_audio = ine(args)
	local x_audio = ine(args)
	local dial = ine(args)
	local mc = ine(args) or false
	local oc = ine(args) or false
	local only_cat = args == "yes"

	local text = {} --Table de prononciation
	if not only_cat then
        -- La table complète est constituée de 4 parties
        --"textShow" Contient les parties 1, 3 et 4
		local textShow = {'<div class="toccolours zhpron" style="max-width:500px; font-size:100%; overflow: hidden">'}
        --"textHide" est la partie 2
		local textHide = {}

		table.insert(textShow, '<div class="vsSwitcher" data-toggle-category="pronunciations">\n<span class="vsToggleElement" style="float: right;"></span>')
        --Parties 1 et 2, « Prononciation » et « Prononciation exprimée par différentes romanisations »
		if m_rom or m_s_rom or dg_rom then
			table.insert(textShow, '\n* ]')
		end
		if m_rom or m_audio 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 = { (m_s_rom or ""), (m_s_audio or ""), (dg_rom or ""), (dg_audio or "") }
				table.insert(textShow, '\n' .. str_analysis(m_rom, 'head', table.concat(other_m_vars) ~= ""))

				m_args = str_analysis(m_rom,'')
				local m_args_names = {
					'1n','1na','1nb','1nc','1nd','py','cap','tl','tl2','tl3','a','audio','er','ertl','ertl2','ertl3','era','eraudio',
					'2n','2na','2nb','2nc','2nd','2py','2cap','2tl','2tl2','2tl3','2a','2audio','2er','2ertl','2ertl2','2ertl3','2era','2eraudio',
					'3n','3na','3nb','3nc','3nd','3py','3cap','3tl','3tl2','3tl3','3a','3audio','3er','3ertl','3ertl2','3ertl3','3era','3eraudio',
					'4n','4na','4nb','4nc','4nd','4py','4cap','4tl','4tl2','4tl3','4a','4audio','4er','4ertl','4ertl2','4ertl3','4era','4eraudio',
					'5n','5na','5nb','5nc','5nd','5py','5cap','5tl','5tl2','5tl3','5a','5audio','5er','5ertl','5ertl2','5ertl3','5era','5eraudio',
				}
				for _, name in ipairs(m_args_names) do
					m_args = str_analysis(m_rom, name)
				end
				for i = 2, 5 do
					m_args = str_analysis(m_rom, tostring(i))
				end
			end
			m_args = m_audio
			m_args = m_audio2
			local debug = ""
			for code,name in pairs(m_args) do
				debug = debug .. code .. ":" .. name .. ","
			end
			table.insert(textShow, m_pron.make_audio(m_args))
			table.insert(textHide, m_pron.make_args(m_args))
			if args then table.insert(textHide, makeNote(args)) end
		end
		if m_s_rom or m_s_audio then
			local m_s_pron = require("Module:cmn-pron-Sichuan")
			local m_s_processed = gsub(gsub(gsub(m_s_rom, '/', ' / '), '()()', '%1 %2'), '(+)', '<sup>%1</sup>')
			if m_s_rom then
				table.insert(textShow, '\n*: <small>(<i>], ]</i>)</small>: ')
				table.insert(textShow, Consolas(m_s_processed))
			end
			add_audio_show(textShow, m_s_audio, 'cmn-sichuan')
			if not (m_rom or m_audio) then
				table.insert(textHide, '\n* ]')
			end
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			table.insert(textHide, '\n*** <small><i>]</i></small>: ')
			table.insert(textHide, Consolas(m_s_processed))
			local xinwenz = m_s_pron.convert(m_s_rom, 'SWZ')
			if xinwenz then
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(m_s_pron.convert(m_s_rom, 'SWZ')))
			end
			table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
			table.insert(textHide, format_IPA(m_s_pron.convert(m_s_rom, 'IPA')))
			-- add_audio(textHide, m_s_audio, 'cmn-sichuan')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if dg_rom or dg_audio then
			local dg_pron = require("Module:dng-pron")
			local dg_processed = dg_pron.process(dg_rom)
			if dg_rom then
				table.insert(textShow, "\n*: <small>(<i>], ]</i>)</small>: ")
				table.insert(textShow, Consolas(dg_processed))
			end
			add_audio_show(textShow, dg_audio, 'dng')
			if not (m_rom or m_audio or m_s_rom or m_s_audio) then
				table.insert(textHide, '\n* ]')
			end
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			table.insert(textHide, "\n*** <small><i>]</i></small>: ")
			table.insert(textHide, Consolas(dg_processed))
			table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
			table.insert(textHide, format_IPA(dg_pron.convert(dg_rom, 'IPA')) .. '\n**: <small>(Note: La prononciation du doungane est actuellement experimentale est pourrait ne pas être exacte.)</small>')
			-- add_audio(textHide, dg_audio, 'dng')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if c_rom or c_audio or c_t_rom or c_t_audio then
			local c_pron = require("Module:yue-pron")
			if c_rom or c_t_rom then
				table.insert(textShow, '\n* ]')
				table.insert(textHide, '\n* ]')
				if c_rom then
					c_rom = c_rom:gsub("%*","-")
					local c_processed = c_rom:gsub(',()',', %1')
					if mw.ustring.len(pagename) == 1 then
						c_processed = c_processed:gsub('(+)',']')
						c_processed = c_processed:gsub('%[%[%[%[','[[')
						c_processed = c_processed:gsub('%]%]%]%]',']]')
						c_processed = gsub(c_processed, '%]+)%]%]', function(a)
							return '+)', '<sup>%1</sup>') .. ']]' end)
					else
						c_processed = gsub(c_processed, '(+)', '<sup>%1</sup>')
					end
					if not c_t_rom then
						table.insert(textShow, ' <small>(<i>')
					else
						table.insert(textShow, '\n*: <small>(<i>], ')
					end
					table.insert(textShow, ']</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 then
							c_hom_exists = c_first
						end
					end
					table.insert(textHide, '\n** <small>(<i>], ]</i>)</small>')
					if not c_hom_exists then
						table.insert(textHide, '<sup><small><abbr title="Ajouter des homophones cantonais"><span class="plainlinks">[')
						table.insert(textHide, tostring(mw.uri.fullUrl("Module:yue-pron/hom",{="edit"})))
						table.insert(textHide, ' +]</span></abbr></small></sup>')
					end
					local c_comma = gsub(c_rom,',()',', %1')
					table.insert(textHide, '\n*** <small><i>]</i></small>: ')
					table.insert(textHide, Consolas(tostring(gsub(c_comma, '(+)', '<sup>%1</sup>'))))
					table.insert(textHide, '\n*** <small><i>]</i></small>: ')
					table.insert(textHide, Consolas(c_pron.jyutping_to_yale(c_rom)))
					table.insert(textHide, '\n*** <small><i>]</i></small>: ')
					table.insert(textHide, Consolas(tostring(gsub(c_pron.jyutping_to_cantonese_pinyin(c_rom), '(+)', '<sup>%1</sup>'))))
					table.insert(textHide, '\n*** <small><i>]</i></small>: ')
					table.insert(textHide, Consolas(tostring(gsub(c_pron.jyutping_to_guangdong(c_rom), '(+)', '<sup>%1</sup>'))))
					table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
					table.insert(textHide, 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",{="edit"})))
							table.insert(hom_textHide, ' edit]</span></sup></div><div style="visibility:hidden; float:left"><sup><span style="color:#FFF">edit</span></sup></div>')
							for _,hom in ipairs(c_hom) do
								table.insert(hom_text, mw.getCurrentFrame():expandTemplate{ title = "Template:zh-l", args = { hom, tr = "-" } })
							end
							table.insert(hom_textHide, table.concat(hom_text, "<br>"))
							table.insert(hom_textHide, '</td></tr></table>')
							table.insert(textHide, table.concat(hom_textHide))
							table.insert(textHide, ']')
						end
					end
					-- add_audio(textHide, c_audio, 'yue')
					if not args and c_rom and (find(c_rom, "^") or find(c_rom, ",")) and mw.ustring.len(pagename) == 1 then
						args = "L’initiale zéro " .. format_IPA("/∅-/") .. " est prononcée couramment avec un ''ng'' initial " .. format_IPA("/ŋ-/") .. " dans certaines variantes du cantonais (Yue), dont le cantonais de Hong Kong"
					end
					if args then table.insert(textHide, makeNote(args)) end
				end
				if c_t_rom then
					local c_t_processed = c_t_rom:gsub(',()',', %1')
					c_t_processed = gsub(c_t_processed, '(%-??)', '<sup>%1</sup>')
					table.insert(textShow, (c_rom and '\n*:' or '') .. ' <small>(<i>], ]</i>)</small>: ')
					table.insert(textShow, Consolas(c_t_processed))
					add_audio_show(textShow, c_t_audio, 'yue-taishan')
					c_t_rom = c_t_rom:gsub(']','')
					local c_t_comma = gsub(c_t_rom,',()',', %1')
					table.insert(textHide, '\n** <small>(<i>], ]</i>)</small>')
					table.insert(textHide, '\n*** <small><i>]</i></small>: ')
					table.insert(textHide, Consolas(tostring(gsub(c_t_comma, '(%-??)', '<sup>%1</sup>'))))
					table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
					table.insert(textHide, format_IPA(c_pron.hoisanva_to_ipa(c_t_rom)))
					-- add_audio(textHide, c_t_audio, 'yue-taishan')
					if args then table.insert(textHide, makeNote(args)) end
				end
			end
		end
		if g_rom or g_audio then
			local g_pron = require("Module:gan-pron")
			if g_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(g_pron.rom(g_rom)))
			end
			add_audio_show(textShow, g_audio, 'gan')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			table.insert(textHide, '\n*** <small><i>]</i></small>: ')
			table.insert(textHide, Consolas(g_pron.rom(g_rom)))
			table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
			table.insert(textHide, format_IPA('/' .. g_pron.ipa(g_rom) .. '/'))
			-- add_audio(textHide, g_audio, 'gan')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if h_rom and (find(h_rom, 'pfs=.') or find(h_rom, 'gd=.')) or h_audio then
			local h_pron = require("Module:hak-pron")
			if find(h_rom, "pfs=.") or find(h_rom, 'gd=.') then
				table.insert(textShow, '\n* ]')
				table.insert(textShow, h_pron.rom_display(h_rom,'yes'))
			end
			add_audio_show(textShow, h_audio, 'hak')
			table.insert(textHide, '\n* ]')
			if h_rom then table.insert(textHide, h_pron.rom_display(h_rom,'')) end
			-- add_audio(textHide, h_audio, 'hak')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if j_rom or j_audio then
			local j_pron = require("Module:cjy-pron")
			if j_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(j_pron.rom(j_rom)))
			end
			add_audio_show(textShow, j_audio, 'cjy')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, '\n** <small>(<i>]</i>)<sup>]</sup></small>')
			if j_rom then
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(j_pron.rom(j_rom)))
			end
			local no_sandhi = false
			local roms = mw.text.split(j_rom, '/')
			for i = 1, table.getn(roms) do
				if find(roms, ' + ') then
					no_sandhi = true
					break
				end
			end
			table.insert(textHide, '\n*** <small>] sinologique (<i>ancien style' .. (no_sandhi and ', no sandhi' or '') .. '</i>)</small>: ')
			table.insert(textHide, format_IPA('/' .. j_pron.ipa(j_rom, no_sandhi and "no_sandhi" or "") .. '/'))
			-- add_audio(textHide, j_audio, 'cjy')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if mb_rom or mb_audio then
			local mb_pron = require("Module:mnp-pron")
			if mb_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(mb_pron.rom(mb_rom)))
			end
			add_audio_show(textShow, mb_audio, 'mnp')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, "\n** <small>(<i>]</i>)</small>")
			if mb_rom then
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(mb_pron.rom(mb_rom)))
				table.insert(textHide, "\n*** <small>] sinologique <sup>(])</sup></small>: ")
				table.insert(textHide, format_IPA(mb_pron.ipa(mb_rom)))
			end
			-- add_audio(textHide, mb_audio, 'mnp')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if md_rom or md_audio then
			local md_pron = require("Module:cdo-pron")
			if md_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(md_pron.rom(md_rom)))
			end
			add_audio_show(textShow, md_audio, 'cdo')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			if md_rom then
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(md_pron.rom(md_rom)))
				if not (md_rom and find(md_rom, '(*)-(*)-(*)-(*)-(*)')) then
					table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
					table.insert(textHide, format_IPA('/' .. md_pron.ipa(md_rom) .. '/'))
				else
					table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup> (<i>no sandhi</i>)</small>: ')
					table.insert(textHide, format_IPA('/' .. md_pron.ipa(md_rom, "no_sandhi") .. '/'))
				end
			end
			-- add_audio(textHide, md_audio, 'cdo')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if mn_rom or mn_audio or mn_t_rom or mn_t_audio then
			local mn_pron = require("Module:nan-pron")
			if mn_rom or mn_t_rom then
				table.insert(textShow, '\n* ]')
				if mn_rom then
					table.insert(textShow, ( not mn_t_rom and " <small>(<i>" or "\n*: <small>(<i>], ") .. ']</i>)</small>: ')
					table.insert(textShow, Consolas(mn_pron.poj_display(mn_pron.poj_check_invalid(mn_rom))))
					add_audio_show(textShow, mn_audio, 'nan')
				end
				if mn_t_rom then
					table.insert(textShow, (mn_rom and '\n*:' or '') .. ' <small>(<i>], ]</i>)</small>: ')
					table.insert(textShow, Consolas(mn_pron.pengim_display(mn_t_rom)))
					add_audio_show(textShow, mn_t_audio, 'nan-teochew')
				end
			end
			table.insert(textHide, '\n* ]')
			if mn_rom or mn_audio then
				table.insert(textHide, mn_pron.generate_all(mn_rom))
				-- add_audio(textHide, mn_audio, 'nan')
				if args then table.insert(textHide, makeNote(args)) end
			end
			if mn_t_rom or mn_t_audio then
				table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(mn_pron.pengim_display(mn_t_rom)))
				table.insert(textHide, '\n*** <small><i>]-like</i></small>: ')
				table.insert(textHide,  Consolas(mn_pron.pengim_to_pojlike_conv(mn_t_rom)))
				table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
				table.insert(textHide, format_IPA(mn_pron.pengim_to_ipa_conv(mn_t_rom)))
				-- add_audio(textHide, mn_t_audio, 'nan-teochew')
				if args then table.insert(textHide, makeNote(args)) end
			end
		end
		if w_rom or w_audio then
			local w_pron = require("Module:wuu-pron")
			if w_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(w_pron.rom(w_rom)))
			end
			add_audio_show(textShow, w_audio, 'wuu')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			table.insert(textHide, '\n*** <small><i>]</i></small>: ')
			table.insert(textHide, Consolas(w_pron.rom(w_rom)))
			table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup></small>: ')
			table.insert(textHide, format_IPA('/' .. w_pron.ipa_conv(w_rom) .. '/'))
			-- add_audio(textHide, w_audio, 'wuu')
			if args then table.insert(textHide, makeNote(args)) end
		end
		if x_rom or x_audio then
			local x_pron = require("Module:hsn-pron")
			if x_rom then
				table.insert(textShow, '\n* ] <small>(<i>]</i>)</small>: ')
				table.insert(textShow, Consolas(x_pron.rom(x_rom)))
			end
			add_audio_show(textShow, x_audio, 'hsn')
			table.insert(textHide, '\n* ]')
			table.insert(textHide, '\n** <small>(<i>]</i>)</small>')
			if x_rom then
				local x_diff = x_pron.stylediff(x_rom)
				table.insert(textHide, '\n*** <small><i>]</i></small>: ')
				table.insert(textHide, Consolas(x_pron.rom(x_rom)))
				table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup>')
				table.insert(textHide, x_diff and ' (<i>old-style</i>)' or '')
				table.insert(textHide, '</small>: ')
				table.insert(textHide, format_IPA('/' .. x_pron.ipa(x_rom) .. '/'))
				if x_diff then
					table.insert(textHide, '\n*** <small>] sinologique <sup>(])</sup> (<i>new-style</i>)</small>: ')
					table.insert(textHide, format_IPA('/' .. x_pron.ipa(x_rom, 'new') .. '/'))
				end
			end
			-- add_audio(textHide, x_audio, 'hsn')
			if args then table.insert(textHide, makeNote(args)) end
		end
        -- combine textShow and textHide into text
		text = {
            table.concat(textShow),
            '\n<div class="vsHide">\n----\n',
            table.concat(textHide),
            '</div></div>'
        }
		--if not c_rom then table.insert(text, "]") end

        --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, "^+$") then
					for element in mw.text.gsplit(dial, ",") do
						table.insert(dialPron, m_dial)
					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) do
						table.insert(temporary, object)
					end
				end
				local rand = mw.ustring.gsub("-" .. table.concat(temporary), "", mw.ustring.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">="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:#F0F5FA"|'
				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, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({mclr, "]\n|", mclr}),
					table.concat({"rowspan=3 ", jclr, "Jin\n!", jclr, "]\n|", jclr}),
					table.concat({jclr, "]\n|", jclr}),
					table.concat({jclr, "]\n|", jclr}),
					table.concat({"rowspan=4 ", wclr, "Wu\n!", wclr, "]\n|", wclr}),
					table.concat({wclr, "]\n|", wclr}),
					table.concat({wclr, "]\n|" , wclr}),
					table.concat({wclr, "]\n|", wclr}),
					table.concat({"rowspan=2 ", huclr, "Hui\n!", huclr, "]\n|", huclr}),
					table.concat({huclr, "]\n|", huclr}),
					table.concat({"rowspan=2 ", xclr, "Xiang\n!", xclr, "]\n|", xclr}),
					table.concat({xclr, "]\n|", xclr}),
					table.concat({gclr, "Gan\n!", gclr, "]\n|", gclr}),
					table.concat({"rowspan=2 ", haclr, "Hakka\n!", haclr, "]\n|", haclr}),
					table.concat({haclr, "]\n|", haclr}),
					table.concat({"rowspan=3 ", cclr, "cantonais\n!", cclr, "]\n|", cclr}),
					table.concat({cclr, "]\n|", cclr}),
					table.concat({cclr, "]\n|", cclr}),
					table.concat({"rowspan=5 ", minclr, "Min\n!", minclr, "] (Min Nan)\n|", minclr}),
					table.concat({minclr, "] (Min Dong)\n|", minclr}),
					table.concat({minclr, "] (Min Bei)\n|", minclr}),
					table.concat({minclr, "] (Min Nan)\n|", minclr}),
					table.concat({minclr, "] (Min Nan)\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 mw.text.gsplit(text, "|") do
						local ipa = match(pronunciation, "^+")
						ipa = gsub(ipa, "()()", "%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)
						end
						if locationNo == 1 then
							local situation = dialPron
							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))
							table.insert(text, locEnd)
							table.insert(text, fmtDial(dialPron, locationNo))
							table.insert(text, "</span>")
						end
					end
				end
				table.insert(text, "\n|}</div></div>")
			end
		end

        --Partie 4 « chinois médiéval & chinois archaïque »
		local mc_preview, oc_preview
		local m_ltc_pron, m_och_pron

		-- !!!
		-- La fonction qui suit modifie les tables générées par mod:ltc-pron et mod:och-pron, les déplaçant
		-- de l’utilisation de "mw-collapsible" à "vsSwitcher", car la première
		-- ne peut être repliée sur le site mobile et rend les entrées en chinois illisibles.
		-- C’est supposé être une solution temporaire.
		-- !!!
        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 = false
			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 = false
			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 == ""  then
			if mc then
				mc_sortkey=gsub(gsub(mc_preview, '<*>', ''), '&*;', '')
				table.insert(text, ']')
                if is_single_hanzi then
                    if mc_preview:find'k̚$' then
                        table.insert(text, ']')
                    elseif mc_preview:find't̚$' then
                        table.insert(text, ']')
                    elseif mc_preview:find'p̚$' then
                        table.insert(text, ']')
                    end
                end
			end
			if oc then
				if match(oc_preview, 'Zhengzhang') then
					oc_sortkey=gsub(oc_preview, '^.*Zhengzhang.*/%*(*)/.*$', '%1')
				else
					oc_sortkey=gsub(oc_preview, '^.*/(*)/.*$', '%1')
				end
				oc_sortkey=gsub(gsub(oc_sortkey, '<*>', ''), '&*;', '')
				table.insert(text, ']')
			end
			if not ine(args) then
				table.insert(text, ']')
			end
		end
	end

	local conv_text = {} --categories
	if namespace == "" then
		local catText = args or ""
		local cat_start = '[[Catégorie:'
		local cat_end = ']]'
		if w_rom then
			w_rom = gsub(w_rom, '%d', '')
		end

		local sortkey = require("Module:zh-sortkey").makeSortKey(pagename)

		local function add_cat(cat_table, name, cat, rom)
			table.insert(cat_table, cat_start .. cat .. ' en ' .. name .. "|" .. rom .. cat_end)
		end

		local cats = mw.text.split(catText, ',', true)
		if pos_aliases_cat] == 'chengyu' then
			table.insert(cats, 2, 'idiomes')
		end
		table.insert(cats, 1, "Termes")
		for i = 1, #cats do
			local cat = cats
			if cat == "" then break end
			cat = gsub(cat, '^ +', '')
			if find(cat, ':') then
				local cat_split = mw.text.split(cat, ':', true)
				local lang_name = langname_abbr]
				local category = pos_aliases_cat] or cat
				add_cat(conv_text, 'chinois', category, sortkey)
				table.insert(conv_text,
					cat_start .. lang_name .. ' ' .. category .. '|'
					.. (lang_name == 'cantonais' and c_rom or
						(lang_name == 'minnan' and mn_rom or mn_t_rom or sortkey)) .. cat_end)
			else
				cat = pos_aliases_cat or cat
				add_cat(conv_text, 'chinois', cat, sortkey)
				if m_rom then add_cat(conv_text, 'mandarin', cat, m_rom) end
				if m_s_rom or m_s_audio then add_cat(conv_text, 'mandarin', cat, m_s_rom) end
				if dg_rom or dg_audio then add_cat(conv_text, 'doungane', cat, dg_rom) end
				if c_rom then add_cat(conv_text, 'cantonais', cat, c_rom:gsub(']','')) end
				if c_t_rom then add_cat(conv_text, 'taïshanais', cat, c_t_rom) end
				if g_rom or g_audio then add_cat(conv_text, 'gan', cat, g_rom:gsub("'", "")) end
				if h_rom and (find(h_rom, 'pfs=.') or find(h_rom, 'gd=.')) or h_audio then
					add_cat(conv_text, 'hakka', cat, mw.ustring.gsub(mw.ustring.gsub(h_rom, 'pfs=', ''), 'gd=', ''))
				end
				if j_rom or j_audio then add_cat(conv_text, 'jin', cat, j_rom) end
				if mb_rom or mb_audio then add_cat(conv_text, 'minbei', cat, mb_rom) end
				if md_rom or md_audio then add_cat(conv_text, 'mindong', cat, md_rom) end
				if mn_rom or mn_audio then add_cat(conv_text, 'minnan', cat, mn_rom) end
				if mn_t_rom or mn_t_audio then add_cat(conv_text, 'chaozhou', cat, mn_t_rom) end
				if w_rom or w_audio then add_cat(conv_text, 'wu', cat, w_rom) end
				if x_rom or x_audio then add_cat(conv_text, 'xiang', cat, x_rom) end
			end
		end
		table.insert(conv_text, cat_start .. 'Termes en chinois avec prononciation API|' .. sortkey .. cat_end)
		if is_single_hanzi then
			table.insert(conv_text, cat_start .. 'Sinogrammes en chinois|' .. sortkey .. cat_end)
		end
	end

	local output = table.concat(text) .. table.concat(conv_text)
	if namespace ~= '' then
		output = gsub(output, "%]+%]%]", "")
	end
	return output
end

return export