Dokumentation [visa] [redigera] [historik] [rensa sidcachen]


Användning redigera

Detta är den modul för mallen {{zh}}. Dess viktigaste funktioner beskrivs på denna mallens dokumentationssida, hänvisa till den för hur man använder den i artiklar. Den här dokumentationen beskriver några speciella funktioner i modulen.

Den första tabellen i modulen listar artiklar där mallen kommer att sätta traditionell kinesisk först. Lägg artiklar till listan på samma sätt (ordningen spelar ingen roll) för att inkludera dem.

Användning från andra moduler redigera

Modulen kan anropas direkt från en annan modul samt en mall. För att göra detta, ladda först modulen

<syntaxhighlight lang="lua"> local Zh = require("Module:Zh")._Zh </source>

Sedan anropa den så här, med argumenten i en tabell

<syntaxhighlight lang="lua"> local output = Zh{["c"] = "中国", ["p"] = "zhōngguó"} </source>

Modulanvändning redigera

require('strict')

local p = {}
 
-- artiklar där traditionell kinesiska föregår förenklad kinesiska
local t1st = {
	["28 februari-händelsen"] = true,
	["Kinesiska kalendern"] = true,
	["Lippo Centre (Hong Kong)"] = true,
	["Republiken Kina"] = true,
	["Republiken Kina i olympiska sommarspelen 1924"] = true,
	["Taiwan"] = true,
	["Taiwan (ö)"] = true,
	["Taiwan (provins)"] = true,
	["Wei Boyang"] = true,
}

-- etiketterna för varje del 
local labels = {
	["c"] = "kinesiska",
	["s"] = "förenklad kinesiska",
	["t"] = "traditionell kinesiska",
	["p"] = "pinyin",
	["tp"] = "Tongyong pinyin",
	["w"] = "Wade–Giles",
	["j"] = "Jyutping",
	["cy"] = "Yalekantonesiska",
	["poj"] = "Pe̍h-ōe-jī",
	["zhu"] = "Zhuyin Fuhao",
	["l"] = "ordagrant",
}

-- artikelrubriker för wikilänkar för varje del
local wlinks = {
	["c"] = "kinesiska",
	["s"] = "förenklade kinesiska tecken",
	["t"] = "traditionella kinesiska tecken",
	["p"] = "pinyin",
	["tp"] = "Tongyong pinyin",
	["w"] = "Wade–Giles",
	["j"] = "Jyutping",
	["cy"] = "Yale-romanisering av kantonesiska",
	["poj"] = "Pe̍h-ōe-jī",
	["zhu"] = "Zhuyin",
}

-- för de delar som ska behandlas som språk, deras ISO-kod
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",
	["poj"] = "hak",
	["zhu"] = "zh-Bopo",
}

local italic = {
	["p"] = true,
	["tp"] = true,
	["w"] = true,
	["j"] = true,
	["cy"] = true,
	["poj"] = true,
}
-- Kategorier för olika typer av kinesisk text
local cats = {
	["c"] = "[[Kategori:Artiklar med text på kinesiska]]",
	["s"] = "[[Kategori:Artiklar med text på förenklad kinesiska‎ ]]",
	["t"] = "[[Kategori:Artiklar med text på traditionell kinesiska‎]]",
}

function p.Zh(frame)
	-- load arguments module to simplify handling of args
	local getArgs = require('Module: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", "poj", "zhu", "l"}
	if (t1) then
		orderlist[2] = "t"
		orderlist[3] = "s"
	end
	if (j1) then
		orderlist[4] = "j"
		orderlist[5] = "cy"
		orderlist[6] = "p"
		orderlist[7] = "tp"
		orderlist[8] = "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 .. "&#58; "
			end
			-- build value
			val = args[part]
			if (cats[part]) then
				-- if has associated category add it
				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
			-- 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 .. "&#58; "
			end
			-- default to show links and labels as no options given
			val = cats["c"] .. args[1]
			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