require('strict')
local p =
-- articles in which traditional Chinese preceeds simplified Chineselocal t1st =
-- the labels for each part local labels =
-- article titles for wikilinks for each partlocal wlinks =
-- for those parts which are to be treated as languages their ISO codelocal ISOlang =
local italic =
local superscript =
-- Categories for different kinds of Chinese textlocal cats =
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) if args["link"] then args["links"] = args["link"]; end if args["label"] then args["labels"] = args["label"]; end local uselinks = args["links"] ~= "no" -- whether to add links local uselabels = args["labels"] ~= "no" -- whether to have labels local capfirst = args["scase"] ~= nil local out = nil -- which term to put before the brackets local usebrackets = 0 -- whether to have bracketed terms local numargs = 0 if args["out"] then out = args["out"] usebrackets = 1 end
local t1 = false -- whether traditional Chinese characters go first local j1 = false -- whether Cantonese Romanisations go first local poj1 = false -- whether Hokkien Romanisations go first local testChar if (args["first"]) then for testChar in mw.ustring.gmatch(args["first"], "%a+") do if (testChar
"j") then j1 = true end if (testChar
false) then local title = mw.title.getCurrentTitle t1 = t1st[title.text]
-- based on setting/preference specify order local orderlist = 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 if (poj1) then orderlist[4] = "poj" orderlist[5] = "p" orderlist[6] = "tp" orderlist[7] = "w" orderlist[8] = "j" orderlist[9] = "cy" orderlist[10] = "sl" 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"]
"s" or out
out then table.remove(orderlist, i) table.insert(orderlist, 1, v) break end end end
if (out
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 numargs = numargs + 1 -- 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" and part ~= "tr") then label = "" .. label .. "" end if (part
"tr") then label = "" .. label .. "" else label = label .. ":" end label = label .. " " end -- build value val = args[part] if (cats[part]) and mw.title.getCurrentTitle.namespace
"l") then local terms = "" -- put individual, potentially comma-separated glosses in single-quotes for term in val:gmatch("[^;,]+") do term = string.gsub(term, "^([\"']*)(.*)([\"']*)$", "%2") terms = terms .. "'" .. term .. "', " end val = string.sub(terms, 1, -3) elseif (part
usebrackets then -- opening bracket after the `out` term body = body .. label .. val .. " (" else body = body .. label .. val .. "; " end end end if (body > "") then -- check for empty string body = string.sub(body, 1, -3) -- chop off final semicolon and space if out and numargs > usebrackets then -- closing bracket after the rest of the terms body = body .. ")" end return body 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 = "" .. label .. "" end label = label .. ": " end -- default to show links and labels as no options given if mw.title.getCurrentTitle.namespace
return p