Jump to content

Module:Zh

From Simple English Wikipedia, the free encyclopedia
Revision as of 17:22, 26 April 2014 by JohnBlackburne (talk | changes) (missed one change)

Documentation for this module may be created at Module:Zh/doc

local p = {}
 
-- articles in which traditional Chinese preceeds simplified Chinese
local t1st = {
	["228 Incident"] = true,
	["Bao'an County"] = true,
	["Chinese calendar"] = true,
	["Lippo Centre, Hong Kong"] = true,
	["Republic of China"] = true,
	["Republic of China at the 1924 Summer Olympics"] = true,
	["Taiwan"] = true,
	["Taiwan (island)"] = true,
	["Taiwan Province"] = true,
	["Wei Boyang"] = true,
}

-- the labels for each part 
local labels = {
	["c"] = "Chinese",
	["s"] = "simplified Chinese",
	["t"] = "traditional Chinese",
	["p"] = "pinyin",
	["tp"] = "Tongyong Pinyin",
	["w"] = "Wade–Giles",
	["j"] = "Jyutping",
	["cy"] = "Cantonese Yale",
	["poj"] = "Pe̍h-ōe-jī",
	["zhu"] = "Zhuyin Fuhao",
	["l"] = "literally",
}

-- article titles for wikilinks for each part
local wlinks = {
	["c"] = "Chinese language",
	["s"] = "simplified Chinese characters",
	["t"] = "traditional Chinese characters",
	["p"] = "pinyin",
	["tp"] = "Tongyong Pinyin",
	["w"] = "Wade–Giles",
	["j"] = "Jyutping",
	["cy"] = "Yale romanization of Cantonese",
	["poj"] = "Pe̍h-ōe-jī",
	["zhu"] = "Bopomofo",
}

-- for those parts which are to be treated as languages their ISO code
local ISOlang = {
	["c"] = "zh",
	["t"] = "zh-Hant",
	["s"] = "zh-Hans",
}
-- Categories for different kinds of Chinese text
local cats = {
	["c"] = "[[Category:Articles containing Chinese-language text]]",
	["s"] = "[[Category:Articles containing simplified Chinese-language text]]",
	["t"] = "[[Category:Articles containing traditional Chinese-language text]]",
}

function p.Zh(frame)
	local pframe = frame:getParent()
	local args = pframe.args
	return p._Zh(args)
end
	
function p._Zh(args)
	local no = args["links"] == "no" -- whether to add links
 
	local t1 -- whether traditional Chinese characters go first
	if (args["first"] == nil) then
		local title = mw.title.getCurrentTitle()
		t1 = t1st[title.text] == true
	else
		t1 = args["first"] == "t"
	end
	-- based on setting/preference specify order
	local orderlist
	if (t1) then
		orderlist = {"c", "t", "s", "p", "tp", "w", "j", "cy", "poj", "zhu", "l"}
	else
		orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "poj", "zhu", "l"}
	end
	
	-- rename rules. Rules to change parameters based on others
	-- hp an alias for p ([hanyu] pinyin)
	if args["hp"] then
		args["p"] = args["hp"]
	end
	-- if also Tongyu pinyin use full name for Hanyu pinyin
	if args["tp"] then
		labels["p"] = "Hanyu Pinyin"
	end
	
	-- Treat Simplified + Traditional as Chinese if they're the same
	if (args["s"] == args["t"]) then
		args["c"] = args["s"]		
		args["s"] = ""
		args["t"] = ""
	end

	local body = "" -- the output string
	local params -- for creating HTML spans

	-- go through all possible fields in loop, adding them to the output
	for i, part in ipairs(orderlist) do
		if (args[part]) then
			local val = args[part]
			if (val ~= "") then
				if (ISOlang[part]) then -- add language if needed
					params = {["lang"] = ISOlang[part], ["xml:lang"] = ISOlang[part]}
					val = mw.text.tag({name="span",attr=params, content=val})
				elseif (part == "p") then -- italicise pinyin
					val = "''" .. val .. "''"
				elseif (part == "l") then -- put literals in quotes
					val = '"' .. val .. '"'
				end
				-- if has associated category add it
				if (cats[part]) then
					val = val .. cats[part]
				end
				-- build this entry
				if (no) or part == "l" then
					body = body .. labels[part] .. ": " .. val .. "; "
				else
					body = body .. "[[" .. wlinks[part] .. "|" .. labels[part] .. "]]: " .. val .. "; "
				end
			end
		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 an unnamed first parameter
		c = args[1]
		if (c) then
			if (c > "") then -- if there is treat it as Chinese
				params = {["lang"] = ISOlang["c"], ["xml:lang"] = ISOlang["c"]}
				c = mw.text.tag({name="span",attr=params, content=c})
				return "[[" .. wlinks["c"] .. "|" .. labels["c"] .. "]]: " .. c .. cats["c"]
		end
	end
		return ""
	end
end

return p