require('মডিউল:No globals')  local p = {}  -- নিবন্ধসমূহ যেখানে সরলীকৃত চীনা পূর্ববর্তীতে প্রথাগত  চীনা ছিল local t1st = { 	["February 28 Incident"] = true, 	["চীনা বর্ষপঞ্জি"] = true, 	["Lippo Centre (Hong Kong)"] = true, 	["Republic of China at the 1924 Summer Olympics"] = true, 	["তাইওয়ান"] = true, 	["Geography of Taiwan"] = true, 	["Taiwan Province"] = true, 	["Wei Boyang"] = true, }  -- প্রতিটি অংশের জন্য লেবেল local labels = { 	["c"] = "চীনা", 	["s"] = "সরলীকৃত চীনা", 	["t"] = "প্রথাগত চীনা", 	["p"] = "ফিনিন", 	["tp"] = "টোংইয়োং ফিনিন", 	["w"] = "ওয়েড-জাইলস", 	["j"] = "জিউটপিং", 	["cy"] = "ক্যানটোনীয় ইয়েল", 	["sl"] = "সিডনি লাউ", 	["poj"] = "Pe̍h-ōe-jī", 	["zhu"] = "ঝুয়িন ফুহাও", 	["l"] = "আক্ষরিক", }  -- প্রতিটি অংশের জন্য উইকিসংযোগসমূহের জন্য নিবন্ধের শিরোনামসমূহ local wlinks = { 	["c"] = "চীনা ভাষা", 	["s"] = "সরলীকৃত চীনা অক্ষর", 	["t"] = "প্রথাগত চীনা অক্ষরসমূহ", 	["p"] = "ফিনিন", 	["tp"] = "টোংইয়োং ফিনিন", 	["w"] = "ওয়েড-জাইলস", 	["j"] = "জিউটপিং", 	["cy"] = "ক্যানটোনীয় ইয়েল রোমানীকরণ", 	["sl"] = "সিডনি লাউ রোমানীকরণ", 	["poj"] = "Pe̍h-ōe-jī", 	["zhu"] = "বোপোমোফো", }  -- for those parts which are to be treated as languages their ISO code local ISOlang = { 	["c"] = "zh", 	["t"] = "zh-Hant", 	["s"] = "zh-Hans", 	["p"] = "zh-Latn-pinyin", 	["tp"] = "zh-Latn", 	["w"] = "zh-Latn-wadegile", 	["j"] = "yue-jyutping", 	["cy"] = "yue", 	["sl"] = "yue", 	["poj"] = "nan", 	["zhu"] = "zh-Bopo", }  local italic = { 	["p"] = true, 	["tp"] = true, 	["w"] = true, 	["j"] = true, 	["cy"] = true, 	["sl"] = true, 	["poj"] = true, }  local superscript = { 	["w"] = true, 	["sl"] = true, } -- Categories for different kinds of Chinese text local cats = { 	["c"] = "বিষয়শ্রেণী:চীনা ভাষার লেখা থাকা নিবন্ধ", 	["s"] = "বিষয়শ্রেণী:সরলীকৃত চীনা ভাষার লেখা থাকা নিবন্ধ", 	["t"] = "বিষয়শ্রেণী:প্রথাগত চীনা ভাষার লেখা থাকা নিবন্ধ", }  function p.Zh(frame) 	-- load arguments module to simplify handling of args 	local getArgs = require('মডিউল:Arguments').getArgs 	 	local args = getArgs(frame) 	return p._Zh(args) end 	 function p._Zh(args) 	local uselinks = not (args["links"] == "no") -- whether to add links 	local uselabels = not (args["labels"] == "no") -- whether to have labels 	local capfirst = args["scase"] ~= nil   	local t1 = false -- whether traditional Chinese characters go first 	local j1 = false -- whether Cantonese Romanisations go first 	local testChar 	if (args["first"]) then 	 	 for testChar in mw.ustring.gmatch(args["first"], "%a+") do 			if (testChar == "t") then 				t1 = true 			 end 			if (testChar == "j") then 				j1 = true 			 end 		end 	end 	if (t1 == false) then 		local title = mw.title.getCurrentTitle() 		t1 = t1st[title.text] == true 	end  	-- based on setting/preference specify order 	local orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "sl", "poj", "zhu", "l"} 	if (t1) then 		orderlist[2] = "t" 		orderlist[3] = "s" 	end 	if (j1) then 		orderlist[4] = "j" 		orderlist[5] = "cy" 		orderlist[6] = "sl" 		orderlist[7] = "p" 		orderlist[8] = "tp" 		orderlist[9] = "w" 	end 	 	-- rename rules. Rules to change parameters and labels based on other parameters 	if args["hp"] then 		-- hp an alias for p ([hanyu] pinyin) 		args["p"] = args["hp"] 	end 	if args["tp"] then 		-- if also Tongyu pinyin use full name for Hanyu pinyin 		labels["p"] = "Hanyu Pinyin" 	end 	 	if (args["s"] and args["s"] == args["t"]) then 		-- Treat simplified + traditional as Chinese if they're the same 		args["c"] = args["s"] 		args["s"] = nil 		args["t"] = nil 	elseif (not (args["s"] and args["t"])) then 		-- use short label if only one of simplified and traditional 		labels["s"] = labels["c"] 		labels["t"] = labels["c"] 	end  	local body = "" -- the output string 	local params -- for creating HTML spans 	local label -- the label, i.e. the bit preceeding the supplied text 	local val -- the supplied text 	 	-- go through all possible fields in loop, adding them to the output 	for i, part in ipairs(orderlist) do 		if (args[part]) then 			-- build label 			label = "" 			if (uselabels) then 				label = labels[part] 				if (capfirst) then 					label = mw.language.getContentLanguage():ucfirst(label) 					capfirst = false 				end 				if (uselinks and part ~= "l") then 					label = "[[" .. wlinks[part] .. "|" .. label .. "]]" 				end 				label = label .. ": " 			end 			-- build value 			val = args[part] 			if (cats[part]) and mw.title.getCurrentTitle().namespace == 0 then 				-- if has associated category AND current page in article namespace, add category 				val = cats[part] .. val 			end 			if (ISOlang[part]) then 				-- add span for language if needed 				params = {["lang"] = ISOlang[part], ["xml:lang"] = ISOlang[part]} 				val = mw.text.tag({name="span",attrs=params, content=val}) 			elseif (part == "l") then 				-- put literals in quotes 				val = '"' .. val .. '"' 			end 			if (italic[part]) then 				-- italicise 				val = "" .. val .. "" 			end 			if string.match(val, "</?sup>") then val = val.."Category:Pages using template Zh with sup tags" end 			if (superscript[part]) then 				-- superscript 				val = val:gsub("(%d)", "%1"):gsub("(%d)</sup>%*<sup>(%d)", "%1*%2"):gsub("([%d%*]+)", "%1") 			end 			-- add both to body 			body = body .. label .. val .. "; " 		end 	end 	 	if (body > "") then -- check for empty string 		return string.sub(body, 1, -3) -- chop off final semicolon and space 	else --no named parameters; see if there's a first parameter, ignoring its name 		if (args[1]) then 			-- if there is treat it as Chinese 			label = "" 			if (uselabels) then 				label = labels["c"] 				if (uselinks) then 					label = "[[" .. wlinks["c"] .. "|" .. label .. "]]" 				end 				label = label .. ": " 			end 			-- default to show links and labels as no options given 			if mw.title.getCurrentTitle().namespace == 0 then 				-- if current page in article namespace 				val = cats["c"] .. args[1] 			else 				val = args[1] 			end 			params = {["lang"] = ISOlang["c"], ["xml:lang"] = ISOlang["c"]} 			val = mw.text.tag({name="span",attrs=params, content=val}) 			return label .. val 		end 		return "" 	end end  return p