|
|
| (15 intermediate revisions by 8 users not shown) |
| Line 1: |
Line 1: |
| − | require('Module:No globals')
| + | error('This module is retained for historical and structural reasons; consider using [[Module:Citation/CS1]].') |
| − | | |
| − | local p = {}
| |
| − |
| |
| − | -- articles in which traditional Chinese preceeds simplified Chinese
| |
| − | local t1st = {
| |
| − | ["228 Incident"] = 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",
| |
| − | ["p"] = "zh-Latn-pinyin",
| |
| − | ["tp"] = "zh-Latn",
| |
| − | ["w"] = "zh-Latn-wadegile",
| |
| − | ["j"] = "yue-jyutping",
| |
| − | ["cy"] = "yue",
| |
| − | ["poj"] = "nan",
| |
| − | ["zhu"] = "zh-Bopo",
| |
| − | }
| |
| − | | |
| − | local italic = {
| |
| − | ["p"] = true,
| |
| − | ["tp"] = true,
| |
| − | ["w"] = true,
| |
| − | ["j"] = true,
| |
| − | ["cy"] = true,
| |
| − | ["poj"] = true,
| |
| − | }
| |
| − | -- 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)
| |
| − | -- 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 .. ": "
| |
| − | 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 .. ": "
| |
| − | 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
| |