跳转到内容

模組:Vgname/sandbox

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

这是本页的一个历史版本,由Where was I last night?留言 | 贡献2017年2月10日 (五) 12:33 (目测要悲剧)编辑。这可能和当前版本存在着巨大的差异。

require('Module:No globals')

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local lc = require('Module:WikitextLC')
local foreignRegionList = mw.loadData('Module:沙盒/D2F0F5/First')

local p = {}

local function separateFootnotesFromText(str)
	local pattern = '\127\'"`UNIQ%-%-ref%-%x+%-QINU`"\'\127' -- [[en:WP:UNIQ]]
	str = str or ''
	
	local s, _ = str:find(pattern)
	if s then
		return str:sub(1, s-1), str:sub(s)
	end
	
	return str, ''
end

local function bold(args, str, openBracket, closeBracket, isConvert)
	local text, footnotes = separateFootnotesFromText(str)
	
	if yesno(isConvert) == true then
		text = lc.converted(text, {'zh-hans', 'zh-hant'})
	end
	
	if yesno(args.bold) ~= false then
		text = '<b>' .. text .. '</b>'
	end
	
	if yesno(args.bracket) == false then
		-- do nothing
	elseif openBracket and closeBracket then
		text = openBracket .. text .. closeBracket
	end
	
	return text .. footnotes
end

local function boldWithIdeographicComma(args, str, openBracket, closeBracket, isConvert)
	local tab, _tab = mw.text.split(str, '、'), {}
	
	for _, value in ipairs(tab) do
		local str = bold(args, value, openBracket, closeBracket, isConvert)
		table.insert(_tab, str)
	end
	
	return table.concat(_tab, '、')
end

local function styleForeignLanguageAndAddLabel(args, indexOfTheForeignRegion, str)
	local text, footnotes = separateFootnotesFromText(str)
	local theLanguage = foreignRegionList[indexOfTheForeignRegion]
	local langcode = theLanguage.langcode
	local style = theLanguage.italic and 'italic' or 'normal'
	local label
	
	if yesno(args.diff) == true then
		label = theLanguage.diff
	elseif yesno(args.diff) == false then
		label = theLanguage.same
	elseif args.na or args.eu or args.au then
		label = theLanguage.diff
	else
		label = theLanguage.same
	end
	
	return string.format('%s:「<span lang="%s" style="font-style:%s;">-{%s}-</span>」%s',
		label,
		langcode,
		style,
		text,
		footnotes
	)
end

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

local function foreign(args)
	local tab = {}
	local englishRegionList = {'na', 'eu', 'au'}
	
	for _, value in ipairs(englishRegionList) do
		local str = args[value]
		if str then
			local text = styleForeignLanguageAndAddLabel(args, value, str)
			table.insert(tab, text)
		end
	end
	
	if #tab == 0 and args.en then
		local text = styleForeignLanguageAndAddLabel(args, 'en', args.en)
		table.insert(tab, text)
	end
	
	for key, value in ipairs(foreignRegionList) do
		local str = args[value.langcode]
		if str then
			local text = styleForeignLanguageAndAddLabel(args, key, str)
			table.insert(tab, 1, text)
		end
	end
	
	if #tab == 0 then return '' end
	return table.concat(tab, ',')
end

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

function p._main(args)
	local tab, _tab = {}, {}
	
	tab = {
		foreign(args)
	}
	
	for _, value in ipairs(tab) do
		if value ~= '' then
			table.insert(_tab, value)
		end
	end
	
	if #_tab > 0 then
		return string.format('%s<span style="font-weight:normal;">(%s)</span>',
			head(args),
			table.concat(_tab, ',')
		)
	end
	return head(args)
end

return p