Difference between revisions of "Module:Citation"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
− | + | require('Module:No globals') | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | local | + | 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 | + | 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 | 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 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | -- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | -- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 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 | end | ||
− | return | + | return p |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Revision as of 22:24, 12 August 2017
![]() | Module:Citation is retained for historical and structural reasons; consider using Module:Citation/CS1. |
Development of Lua support for both Citation Style 1 and Citation Style 2 began at Module:Citation. That development was abandoned in 2013 as development of Module:Citation/CS1 began.
Though this module remained unused, it is and has been the root page of the several module subpages that implement cs1 and cs2. The content of this module was replaced with an error message return as the result of a 2018 TfD.
require('Module:No globals')
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