跳转到内容

模組:沙盒/Lopullinen

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

这是本页的一个历史版本,由Lopullinen留言 | 贡献2022年12月9日 (五) 17:27编辑。这可能和当前版本存在着巨大的差异。

-- require('Module:No globals')

local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local wd = function(q) 
	local args = { q, rank = 'best', fetchwikidata = 'ALL' }
	return require('Module:WikidataIB')._getValue(args)
end


local p = {}

local infobox_styles = {
	captionstyle = 'text-align: center;' ,
	subheaderstyle = 'text-align: center; vetical-align: middle; font-weight: normal;',
	labelstyle = 'white-space: nowrap;',
}

local headers = function(args)
	
	
end

local images = function(args)
	
end

local fields = function(args)
	-- 待办:
	-- 处理抓取Wikidata数据


	-- 参数配置
	local subgroup_header = { '街机参数' }
	local params = {
		official = { '[[官方译名]]', alias = {} },
		common = { '常用译名', alias = {} },
		genre = { '[[电子游戏类型|类型]]', alias = {}, wd = 'P136' },
		platforms = { '[[系统平台|平台]]', alias = {'platform'}, wd = 'P400' },
		developer = { '[[游戏开发者|开发商]]', alias = {}, wd = 'P178' },
		publisher = { '[[電子遊戲發行商|发行商]]', alias = {}, wd = 'P123' },
		director = { '总监', alias = {}, wd = 'P57' },
		producer = { '[[電子遊戲製作人|制作人]]', alias = {}, wd = 'P162' },
		designer = { '[[电子游戏设计|设计师]]' , alias = {}, wd = 'P287' },
		writer = { '编剧' , alias = {}, wd = 'P50' },
		programmer = { '[[游戏程序师|-{zh-cn:程序; zh-tw:程式;}-]]', alias = {}, wd = 'P943' },
		artist = { '[[游戏美工|美术]]' , alias = {}, wd = 'P3080' },
		composer = { '音乐', alias = {}, wd = 'P86' },
		series = { '系列', alias = {}, wd = 'P179' },
		engine = { '[[游戏引擎|引擎]]', alias = {}, wd = 'P408' },
		modes = { '模式', alias = {}, wd = 'P404' },
		released = { '发行日', alias = {'release'}, wd = 'P577' },
		shutdown = { '停运日', alias = {} },
		cabinet = { '框体', alias = {}, wd = 'P2670', subgroup = 1},
		arcade_system = { '[[街机主板|主板]]', alias = {}, subgroup = 1 },
		cpu = { '[[中央处理器|CPU]]', alias = {}, subgroup = 1 },
		sound = { '音效', alias = {}, subgroup = 1 },
		display = { '显示', alias = {}, subgroup = 1 },
	}
	local param_order = {
		'official', 'common', 'genre', 'platforms', 'developer', 'publisher',
		'director', 'producer', 'designer', 'writer', 'programmer', 'artist', 'composer',
		'series', 'engine', 'modes', 'released', 'shutdown',
		'cabinet', 'arcade_system', 'cpu', 'sound', 'display',
	}
	if yesno(args.onlinegame, false) then  -- 启用网络游戏参数时的修正
		params.publisher[1] = '-{zh-cn:运营; zh-tw:營運;}-商'
		params.released[1] = '-{zh-cn:运营; zh-tw:營運;}-日'
	end
	
	-- 将使用空格分隔的字段名作为别名
	for _, v in ipairs(param_order) do
		local alias_temp = params[v].alias
		table.insert(alias_temp, 1, v)
		
		local alias = {}
		for _, w in ipairs(alias_temp) do
			table.insert(alias, w)
			if mw.ustring.find(w, '_') then
				local str = mw.ustring.gsub(w, '_', ' ')
				table.insert(alias, str)
			end
		end
		params[v].alias = alias
	end
	
	-- 根据参数名读取标签和资料
	local function get_label_and_data(param)
		local info = params[param]
		
		local label, data, subgroup = info[1], nil, (info.subgroup or 0)
		for _, v in ipairs(info.alias) do
			data = args[v]
			if data ~= nil then break end
		end
		
		if data == '' then
			return
		end
		if data ~= nil then 
			return label, data, subgroup
		end
		if info.wd then
			data = wd(info.wd)
			if data == nil then return end 
			return label, data, subgroup
		end
	end
	
	-- 返回给Infobox的字段信息
	local result, num, previous_subgroup = {}, 0, 0
	for _, v in ipairs(param_order) do
		local label, data, subgroup = get_label_and_data(v)
		if label ~= nil then
			if subgroup > previous_subgroup then  -- 处理header
				num = num + 1
				result['header' .. tostring(num)] = subgroup_header[subgroup]
				previous_subgroup = subgroup
			end
			num = num + 1
			result['label' .. tostring(num)] = label
			result['data' .. tostring(num)] = data
		end
	end
	
	-- 返回给Check for unknown parameters的合法参数名称
	local all_parameters = {}
	for _, v in ipairs(param_order) do
		for _, w in ipairs(params[v].alias) do
			table.insert(all_parameters, w)
		end
	end
	
	-- Bye
	return result, all_parameters
end



function p.main(frame)
	local args = getArgs(frame,{
		removeBlanks = false
	})
	return p._main(args)
end

function p._main(args)
	local params, params_temp = {}, nil
	
	-- 模板式样
	for k, v in pairs(infobox_styles) do
		params[k] = v
	end

	-- 常规参数
	params_temp = fields(args)
	for k, v in pairs(params_temp) do
		params[k] = v
	end
	
	return require('Module:Infobox').infobox(params)
end

return p