模組:機動兵器

local p ={}
local infoboxFunc
local getArgs 
local argsIndex = 1

function partFunc2(index, origArgs, outputArgs, labelVF , argsSelect)
	local prefix = index == 1 and  '' or tostring(index)
	if --labelVF == 'above' or 
		labelVF == 'header' then
		--outputArgs[labelVF == 'above' and 'above' or ('header' .. argsIndex) ] = argsSelect[1]
		outputArgs['header' .. argsIndex] = argsSelect[1]
		argsIndex = argsIndex + 1 
	else
		local key1, key2, val1, val2
		key1, key2, argsIndex =
		'label' .. argsIndex, 'data' .. argsIndex, argsIndex + 1 
		
		local lengthArgs=#argsSelect
		local argPick = ''
		for i=lengthArgs,1,-1 do
			argPick = prefix .. argsSelect[i]
			val2 = origArgs[ argPick ]
			if val2 then
				break
			end
		end
		if val2 then
			if type(labelVF) == 'function' then
				val1 = labelVF(prefix,origArgs)
			else
				val1 = labelVF
			end

			outputArgs[key1]=val1
			outputArgs[key2]=val2
		end
	end
end

local labelVFFuncMap = {}
function labelVFFunc(a,b,c)
	local key = a .. "|" ..  b .. "|" .. c
	if labelVFFuncMap[key] ==nil then
		labelVFFuncMap[key] = function(prefix,origArgs) return origArgs[prefix .. a] and b or c end
	end
	return labelVFFuncMap[key]
end

function partFunc(index,origArgs,outputArgs)
	local isFirst = index == 1
	local prefix = isFirst and  '' or tostring(index)
	
	local name = origArgs[prefix .. '名称']
	local must = (isFirst or name )
	if isFirst and not name then
		name = '{{{名称}}}'
	end
	--mw.log('name',name)
	if must then
		local name2 
		if origArgs[prefix..'正式名称'] then
			name2 = name .. '<br/>' .. origArgs[prefix..'正式名称']
		else 
			name2 = name 
		end
		partFunc2(index, origArgs, outputArgs, 'header' , {name2})
		--
		partFunc2(index, origArgs, outputArgs, '別稱', {'別稱'})
		partFunc2(index, origArgs, outputArgs, '形式編號', {'形式番号','形式編號'})
		partFunc2(index, origArgs, outputArgs, '型式編號', {'型式番号','型式編號'})
		partFunc2(index, origArgs, outputArgs, '登錄編號', {'登録番号','登錄編號'})
		partFunc2(index, origArgs, outputArgs, '艦籍編號', {'艦籍番号','艦籍編號'})
		partFunc2(index, origArgs, outputArgs, '分類', {'分類'})
		partFunc2(index, origArgs, outputArgs, '種別', {'種別'})
		partFunc2(index, origArgs, outputArgs, '艦級', {'艦級'})
		partFunc2(index, origArgs, outputArgs, '所屬', {'所属','所屬'})
		partFunc2(index, origArgs, outputArgs, '設計', {'設計'})
		partFunc2(index, origArgs, outputArgs, '開發', {'開発','開發'})
		partFunc2(index, origArgs, outputArgs, '製造', {'製造'})
		partFunc2(index, origArgs, outputArgs, '建造', {'建造'})
		partFunc2(index, origArgs, outputArgs, '生產形態', {'生産形態','生產形態'})
		partFunc2(index, origArgs, outputArgs, '全高', {'全高'})
		partFunc2(index, origArgs, outputArgs, '頭頂高', {'頭頂高'})
		partFunc2(index, origArgs, outputArgs, '全長', {'全長'})
		partFunc2(index, origArgs, outputArgs, '宽度', {'宽度'})
		partFunc2(index, origArgs, outputArgs, '翼長', {'翼長'})
		partFunc2(index, origArgs, outputArgs, '全高', {'全高 (非人型)'})
		partFunc2(index, origArgs, outputArgs, labelVFFunc('全備重量','本体重量','重量'), {'重量'})
		partFunc2(index, origArgs, outputArgs, '全備重量', {'全備重量'})
		partFunc2(index, origArgs, outputArgs, '出力', {'出力'})
		partFunc2(index, origArgs, outputArgs, '能量输出', {'能量输出'})
		partFunc2(index, origArgs, outputArgs, '推力', {'推力'})
		partFunc2(index, origArgs, outputArgs, '传感器<br />有効半径', {'传感器'})
		partFunc2(index, origArgs, outputArgs, labelVFFunc('最高速度','巡航速度','速度'), {'速度'})
		partFunc2(index, origArgs, outputArgs, '最高速度', {'最高速度'})
		partFunc2(index, origArgs, outputArgs, '續航距離', {'航続距離','續航距離'})
		partFunc2(index, origArgs, outputArgs, '上昇限度', {'上昇限度'})
		partFunc2(index, origArgs, outputArgs, '推進機關', {'推進機関','推進機關'})
		partFunc2(index, origArgs, outputArgs, '裝甲材質', {'装甲','裝甲'})
		partFunc2(index, origArgs, outputArgs, 'OS', {'OS'})
		partFunc2(index, origArgs, outputArgs, '動力源', {'動力'})
		partFunc2(index, origArgs, outputArgs, '燃料', {'燃料'})
		partFunc2(index, origArgs, outputArgs, '武裝', {'武装','武裝'})
		partFunc2(index, origArgs, outputArgs, labelVFFunc('携帯火器','&nbsp;', '副武裝'), {'携帯火器'})
		partFunc2(index, origArgs, outputArgs, '使用彈種', {'使用弾種','使用彈種'})
		partFunc2(index, origArgs, outputArgs, '有效射程', {'有効射程','有效射程'})
		partFunc2(index, origArgs, outputArgs, '攻撃用裝備', {'攻撃用装備','攻撃用裝備'})
		partFunc2(index, origArgs, outputArgs, '防禦用裝備', {'防御用装備','防禦用裝備'})
		partFunc2(index, origArgs, outputArgs, '防禦裝備', {'防御装備','防禦裝備'})
		partFunc2(index, origArgs, outputArgs, '性能級數', {'性能級數'})
		partFunc2(index, origArgs, outputArgs, '技', {'技'})
		partFunc2(index, origArgs, outputArgs, '必殺技', {'必殺技'})
		partFunc2(index, origArgs, outputArgs, 'MMI', {'人机交互'})
		partFunc2(index, origArgs, outputArgs, '搭載人數', {'乗員人数','搭載人數'})
		partFunc2(index, origArgs, outputArgs, '主運用領域', {'主運用領域'})
		partFunc2(index, origArgs, outputArgs, '主戰鬥距離', {'主戦闘距離','主戰鬥距離'})
		partFunc2(index, origArgs, outputArgs, '搭載者', {'搭乗者','搭載者'})
		partFunc2(index, origArgs, outputArgs, '艦長', {'艦長'})
		partFunc2(index, origArgs, outputArgs, '搭載数', {'搭載数'})
		partFunc2(index, origArgs, outputArgs, '主要搭载机', {'主要搭载机'})
		partFunc2(index, origArgs, outputArgs, '主要塗裝', {'主要塗裝'})
		partFunc2(index, origArgs, outputArgs, '其它', {'其它'})
	end
end

function p.main(frame)
	if not getArgs then getArgs = require('Module:Arguments').getArgs end	
	if not infoboxFunc then infoboxFunc = require('Module:Infobox').infobox end	
	
	local origArgs = getArgs(frame, { trim = true, --[[wrappers ={"Template:機動兵器","Template:機動兵器/sandbox"}]]})
	
	local args = {}
	args['templatestyles']='Module:Infobox/bordered/styles.css'
	args['bodyclass']='bordered'
	args['bodystyle']='clear:both; font-size:12px;'
	args['title']='規格'
	
	if origArgs['圖片'] then
		args['image'] = frame:callParserFunction("#invoke:InfoboxImage",{
				[1]="InfoboxImage",
				['image']=origArgs['圖片'],
				['alt']=origArgs['描述'],
				['class']='skin-invert'
		})
		args['caption']=origArgs['描述']
	end
	
	for i=1,5 do
		partFunc(i,origArgs,args)
	end
	
	--mw.logObject(origArgs)
	--mw.logObject(args)
	
	return tostring(infoboxFunc(args))
end

return p