跳转到内容

模組:Vgname/sandbox

维基百科,自由的百科全书

这是本页的一个历史版本,由Where was I last night?留言 | 贡献2017年2月9日 (四) 04:59编辑。这可能和当前版本存在着巨大的差异。

require('Module:No globals')

local p = {}

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local lc = require('Module:WikitextLC')
local label = mw.loadData('Module:Vgname/languages')

local akaPrefix = {
	["official"] = "官方",
	["old"] = "旧翻译",
	["main"] = "主标题",
	["sub"] = "副标题",
}

local region = {
	["cn"] = {"中国大陆", "cn"},
	["cnhk"] = {"中国大陆和香港", "cn"},
	["cntw"] = {"中国大陆和台湾", "tw"},
	["hk"] = {"香港", "hk"},
	["hkcn"] = {"中国大陆和香港", "cn"},
	["hktw"] = {"港台", "tw"},
	["tw"] = {"台湾", "tw"},
	["twcn"] = {"中国大陆和台湾", "tw"},
	["twhk"] = {"港台", "tw"},
}

local function refSplit(content)
	content = content or ""
	local pattern = '\127\'"`UNIQ%-%-ref%-%x+%-QINU`"\'\127' -- [[en:WP:UNIQ]]

	local s, _ = content:find(pattern)
	if s then
		return content:sub(1, s-1), content:sub(s)
	end
	return content, ""
end

local function bold(args, content, openBracket, closeBracket, converted) -- with refSplit()
	local text, ref = refSplit(content)
	
	if converted then
		text = lc.converted(text, {'zh-hans', 'zh-hant'})
	end
	
	if yesno(args.bold) ~= false then
		text = "<b>" .. text .. "</b>"
	end
	
	return openBracket .. text .. closeBracket .. ref
end

local function lang(args, langIndex, content) -- with italic but not prefix
	local lang = label[langIndex][1]
	local text, ref = refSplit(content or args[lang])
	local style = "normal"

	if yesno(args.italic) ~= false and label[langIndex].italic then
		style = "italic"
	end
	
	return string.format('<span lang="%s" style="font-style:%s;">-{%s}-</span>%s', lang, style, text, ref)
end

local function head(args)
	local openBracket, closeBracket = "《", "》"
	
	if args.bracket == "q" then
		openBracket, closeBracket = "「", "」"
	elseif yesno(args.bracket) == false then
		openBracket, closeBracket = "", ""
	end
		
	return bold(args, args[1], openBracket, closeBracket, false)
end

local function foreign(args)
	local tab = {}
	
	local tagcode -- For return value, see [[Module:Vgname/languages]]; e.g. 2 => "英语", 3 => "英文版名".
	if yesno(args.diff) == false then tagcode = 2
	elseif yesno(args.diff) == true then tagcode = 3 
	elseif args.na or args.eu or args.au then tagcode = 3
	else tagcode = 2
	end
	
	for _, val in ipairs{"na", "eu", "au"} do
		if args[val] then
			table.insert(tab, label[val][tagcode] .. ":" .. lang(args, val, args[val]))
		end
	end
	
	if #tab == 0 and args.en then
		table.insert(tab, label.en[tagcode] .. ":" .. lang(args, "en"))
	end
	
	for langIndex, val in ipairs(label) do
		if args[val[1]] then
			table.insert(tab, 1, val[tagcode] .. ":" .. lang(args, langIndex))
			break
		end
	end

	return #tab == 0 and "" or table.concat(tab, ",")
end

local function variant(args)
	if args.cn == nil or args.tw == nil then return '' end
	
	local tab, varUsed = {}, {}
	local _args = {
		["cn"]= args.cn,
		["hk"]= args.hk,
		["tw"]= args.tw,		
	}

	local variants = {"hans", "hant", "cn", "hk", "sg", "tw"}
	
	if _args.hk == "tw" or _args.hk == _args.tw or _args.hk == nil then
		varUsed = {'cn', 'twhk'}
	elseif _args.hk == "cn" or _args.hk == _args.cn then
		varUsed = {'cnhk', 'tw'}
	elseif _args.cn == "tw" or _args.tw == "cn" or _args.cn == _args.tw then
		if _args.tw == "cn" then _args.tw = _args.cn end
		varUsed = {'cnhk', 'tw'}
	else
		varUsed = {'cn', 'hk', 'tw'}
	end
	
	-- 要手工简体和繁体,并且要修改region的简繁体,等会打包成函数
	for _, dispVar in ipairs(variants) do
		local tabInner = {}
		for _, usedVar in ipairs(varUsed) do
			if usedVar:sub(1, 2) ~= dispVar and usedVar:sub(-2, -1) ~= dispVar then
				local regionName, translation = region[usedVar][1], _args[region[usedVar][2]]
				if translation == "en" then
					translation = "常用英文"
				else
					translation = "译作" .. bold(args, translation, "「", "」", true)
				end
				table.insert(tabInner, regionName .. translation)
			end
		end
		tab["zh-" .. dispVar] = table.concat(tabInner, "、")
	end
	tab["zh-mo"] = tab["zh-hk"]
	
	return lc.selective(tab)
end

local function aka(args)
	

end

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function p._main(args)
	-- Main module code goes here.
	local text, tab, _tab = "", {}, {}
	
	_tab = {
		foreign(args),
		variant(args),
--		aka(args),
		args[2] or ""
	}
	
	for _, val in ipairs(_tab) do
		if val ~= "" then
			table.insert(tab, val)
		end
	end
	
	if #tab > 0 then
		text = '<span style="font-weight: normal;">(' .. table.concat(tab, ",") .. ')</span>'
		text = head(args) .. text
	else
		text = head(args)
	end
	
	return text
end

return p