Mô đun:Zh
Có thể viết tài liệu về mô đun này tại Mô đun:Zh/tài liệu.
require('Mô đun:No globals') local p = {} -- articles in which traditional Chinese preceeds simplified Chinese local t1st = { ["Sự kiện 28 tháng 2"] = true, ["Nông lịch"] = true, ["Lippo Centre (Hồng Kông)"] = true, ["Đài Loan"] = true, ["Trung Hoa Dân Quốc tại Thế vận hội Mùa hè 1924"] = true, ["Tỉnh Đài Loan (Trung Hoa Dân Quốc)"] = true, ["Địa lý Đài Loan"] = true, ["Đài Loan (đảo)"] = true, ["Ngụy Bá Dương"] = true, } -- the labels for each part local labels = { ["c"] = "tiếng Trung", ["s"] = "giản thể", ["t"] = "phồn thể", ["hv"] = "Hán-Việt", ["p"] = "bính âm", ["tp"] = "bính âm thông dụng", ["w"] = "Wade–Giles", ["j"] = "Việt bính", ["cy"] = "Yale Quảng Đông", ["sl"] = "Lưu Tích Tường", ["poj"] = "Bạch thoại tự", ["zhu"] = "chú âm phù hiệu", ["l"] = "nghĩa đen", } -- article titles for wikilinks for each part local wlinks = { ["c"] = "Tiếng Trung Quốc", ["s"] = "Chữ Hán giản thể", ["t"] = "Chữ Hán phồn thể", ["hv"] = "Phiên âm Hán-Việt", ["p"] = "Bính âm Hán ngữ", ["tp"] = "Bính âm thông dụng", ["w"] = "Wade–Giles", ["j"] = "Việt bính", ["cy"] = "Latinh hóa kiểu Yale", ["sl"] = "Latinh hóa kiểu Lưu Tích Tường", ["poj"] = "Phiên âm Bạch thoại", ["zhu"] = "Chú âm phù hiệu", } -- for those parts which are to be treated as languages their ISO code local ISOlang = { ["c"] = "zh", ["t"] = "zh-Hant", ["s"] = "zh-Hans", ["hv"] = "vi", ["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"] = "[[Thể loại:Bài viết có văn bản tiếng Trung Quốc]]", ["s"] = "[[Thể loại:Bài viết có chữ Hán giản thể]]", ["t"] = "[[Thể loại:Bài viết có chữ Hán phồn thể]]", } function p.Zh(frame) -- load arguments module to simplify handling of args local getArgs = require('Mô đun: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 table.insert(orderlist, 4, "hv") -- rename rules. Rules to change parameters and labels based on other parameters if args["v"] then -- v an alias for hv (Hán-Việt) args["hv"] = args["v"] end 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"] = "bính âm Hán ngữ" 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 = "<i>" .. val .. "</i>" end if string.match(val, "</?sup>") then val = val.."[[Thể loại:Trang cho thẻ sup vào bản mẫu Zh]]" end if (superscript[part]) then -- superscript val = val:gsub("(%d)", "<sup>%1</sup>"):gsub("(%d)</sup>%*<sup>(%d)", "%1*%2"):gsub("<sup><sup>([%d%*]+)</sup></sup>", "<sup>%1</sup>") 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