什么东西止血最快| 高圆圆老公叫什么名字| 手脚发热什么原因| exo的e为什么不发音| 芒果对身体有什么好处| 胸闷气短吃什么特效药| 孩子注意力不集中缺什么微量元素| 醉清风是什么意思| 琼林是什么意思| 梦见鱼是什么意思| 骨瘤是什么病| 守护神是什么意思| 大人睡觉流口水是什么原因引起的| 药流是吃什么药| 手指关节疼痛吃什么药| 夏天爱出汗是什么原因| 天然气什么味道| 12月13号是什么星座| 为什么不建议治疗幽门螺杆菌| 肝气犯胃吃什么中成药| 八五年属什么| 喝黑枸杞有什么好处| 什么是冷暴力| 菠菜什么时候种最合适| 检查头部应该挂什么科| 女性尿特别黄是什么原因| 血压高压高低压正常是什么原因| 黑马是什么意思| 结缔组织是什么| 都有什么花| 胆固醇高应注意什么| 吃什么补白细胞最快| 重丧是什么意思| 二级警监是什么级别| t2是什么意思| 黄瓜什么时候种| 梅毒阳性是什么意思| 脸色苍白没有血色是什么原因| 凝血六项是检查什么的| 结婚32年是什么婚| 幽门杆菌的症状是什么| 动物园有什么动物| 世界上什么东西最长| 素鸡是什么| 什么字属金| 精尽人亡是什么意思| 属兔的守护神是什么菩萨| 野生天麻长什么样图片| 什么叫蛇胆疮| 女的学什么手艺最赚钱| 医保统筹是什么意思| 什么是佝偻病| 甘油三酯低有什么危害| 蛇脱皮在家有什么预兆| 实蛋是什么| 50年是什么婚| 熊猫是什么科| 风寒感冒咳嗽吃什么药| 舌苔发白是什么原因引起的| 柠檬和什么一起泡减肥| 陕西有什么特产| 腺样体肥大吃什么药| 府尹相当于现在什么官| 4月4日是什么日子| 长痣是什么原因| 放生是什么意思| 尿酸偏高是什么意思| 今天是什么纪念日| plg是什么意思| 天麻有什么作用| 尔昌尔炽什么意思| 睡觉吐气是什么原因| 梦见抓蛇是什么预兆| 7月初七是什么日子| 办健康证在什么地方办| 纤维蛋白原是什么意思| 益生菌什么时间段吃效果好| 螳螂捕蝉什么意思| 杜仲有什么功效| 百香果有什么营养| 水军是什么意思| 登对是什么意思| 中耳炎是什么引起的| 男人精子少是什么原因| 梦见去扫墓是什么预兆| 淀粉酶高是什么原因| 东盟是什么意思| 月经是什么意思| 女性虚火旺吃什么下火| 公务员和事业编有什么区别| 赵本山什么学历| 甘油脂肪酸酯是什么| 吃什么可以降低尿酸| ky什么意思| 狗吃什么会死| 生理期是什么意思| 许冠杰属什么生肖| vfu是什么牌子| 高山仰止是什么意思| 地贫是什么病| 尿频尿多吃什么药好| 来例假肚子疼吃什么药| ntr是什么意思啊| 不宁腿是什么症状| 大象是什么颜色| 空腹喝啤酒有什么危害| 西方属于五行属什么| 肩膀疼去医院挂什么科| 保拉纳啤酒什么档次| 关羽的武器叫什么| 得济是什么意思| 血清铁蛋白高说明什么| 1221是什么星座| 情景剧是什么意思| 黄历中的入宅是什么意思| 做梦梦见马是什么意思| 凌志和雷克萨斯有什么区别| 上传下达什么意思| 在什么| 鳏寡孤独是什么意思| 偏光眼镜是什么意思| 赵云字什么| 破血是什么意思| 3月5日是什么纪念日| 乏是什么意思| 九三年属什么生肖| 便秘什么意思| 烧仙草粉是什么做的| 老克勒是什么意思| cf是什么| 属狗的幸运色是什么颜色| 发霉是什么菌| 老农民韩美丽结局是什么| 养胃吃什么水果| 角瓜念什么| 拿什么让你幸福| 升米恩斗米仇什么意思| 二便是什么意思| 膜拜是什么意思| 93什么意思| 六味地黄丸吃多了有什么副作用| 天赋是什么| 淋巴细胞比率低是什么意思| 生龙活虎是什么生肖| 强迫症吃什么药效果好| 为什么低血糖| 圆房要做什么| 尿蛋白高是什么原因引起的| 得令是什么意思| 鸡蛋粘壳是什么原因| 水煮肉片放什么配菜| 尿蛋白两个加号是什么意思| 银杏叶子像什么| 鞥是什么意思| 锁阳是什么东西| 阑尾切除后有什么影响和后遗症| 肺炎用什么药| 开悟是什么意思| 撕漫男是什么意思| 肾气不足是什么原因| trab抗体偏高代表什么| fog是什么牌子| 10个月的宝宝吃什么辅食最好| 蕴是什么意思| 两融余额是什么意思| 女属猪的和什么属相最配| 什么是人肉搜索| met是什么意思| 鼻炎用什么药效果好| 有什么有什么成语| 什么油最好| 鼻炎挂什么科| 男女身份证号码有什么区分| 爱在西元前什么意思| 老年人脚肿什么原因| 黄色加红色是什么颜色| 鼻子痒是什么原因| 什么是炎症| 脂肪瘤长什么样| 招字五行属什么| 邂逅什么意思| 鼾症是什么病| 稽留流产是什么意思| 为什么土豆不能炒鸡蛋| 云南什么族| 什么人不能念阿弥陀佛| 血糖高是什么意思| 松针泡水喝有什么功效| 色戒讲的什么| 风声鹤唳的意思是什么| 耳膜炎是什么症状| 上面一个日下面一个立是什么字| 头七烧什么| 丹参是什么样子的图片| 7.14日是什么日子| 白细胞计数偏低是什么意思| 大头虾是什么意思| 肝内点状钙化灶什么意思| 旦辞爷娘去的旦是什么意思| neg是什么意思| 桃子是什么季节的水果| 皮下是什么意思| 灌溉是什么意思| 女性下体长什么样| 胰腺炎的症状是什么| 2.22什么星座| 什么情况下要打破伤风| 芒果不可以跟什么一起吃| 荨麻疹有什么忌口吗| 过敏性紫癜不能吃什么| 1995年五行属什么| 一个牙一个合是什么字| 青霉素过敏不能吃什么药| 为什么头老是晕晕的| 吃什么可以解决便秘| 农家一碗香是什么菜| 女人吃桃子有什么好处和坏处| 气短挂什么科| 比熊吃什么牌子狗粮好| 66岁属什么生肖| 三月八号是什么星座| 巳时是什么时间| 荷尔蒙什么意思| 什么啤酒好| 腐竹配什么菜炒好吃| 绍兴有什么大学| 紫外线过敏吃什么药| 色斑是什么原因引起的| 属龙的守护神是什么菩萨| 奇花异草的异是什么意思| 槟榔什么味道| 狗能吃巧克力吗为什么| 腰背疼痛挂什么科| 阴道发臭是什么原因| 浅表性胃炎吃什么药效果好| 肚脐眼痛什么原因| 睡觉脚抽筋是什么原因引起的| 521代表什么含义| 什么繁什么茂| 年糕是什么做的| 镶什么牙实惠耐用| 366红包代表什么意思| 胎儿右侧脉络丛囊肿是什么意思| 为什么老做梦| 双侧卵巢多囊性改变是什么意思| 梦见蝎子是什么预兆| 测心率手表什么牌子好| 艾滋病初期皮疹是什么样的| 甲亢做什么检查| 为什么同房不怀孕原因| 是谁送你来到我身边是什么歌| 输氨基酸对身体有什么好处和坏处| 肠道紊乱的症状是什么| 喜欢吃什么| 为什么运动完会恶心头晕想吐| 什么是结肠炎| 下午七点是什么时辰| 绿豆不能跟什么一起吃| 孔子真名叫什么| 四肢厥逆是什么意思| 巨细胞病毒是什么病| 肝弥漫性病变是什么意思| 睡眠不好去医院挂什么科| 孩子发烧挂什么科| 百度???????? ??????

全国各院校2018年保研夏令营活动通知(持续更新)

???????????
百度 前后共有4杯,约6两,新娘实在喝不下,方丽玲想帮发小挡酒,被伴郎讥讽道,“如果你来喝,就得喝我嘴里的”。

????????? ??????? ???????????? ?? ????????????: ??????:Infobox/????

local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
	plainlist_t = {
		patterns = {
			'^plainlist$',
			'%splainlist$',
			'^plainlist%s',
			'%splainlist%s'
		},
		found = false,
		styles = 'Plainlist/styles.css'
	},
	hlist_t = {
		patterns = {
			'^hlist$',
			'%shlist$',
			'^hlist%s',
			'%shlist%s'
		},
		found = false,
		styles = 'Hlist/styles.css'
	}
}

local function has_list_class(args_to_check)
	for _, list in pairs(lists) do
		if not list.found then
			for _, arg in pairs(args_to_check) do
				for _, pattern in ipairs(list.patterns) do
					if mw.ustring.find(arg or '', pattern) then
						list.found = true
						break
					end
				end
				if list.found then break end
			end
		end
	end
end

local function fixChildBoxes(sval, tt)
	local function notempty( s ) return s and s:match( '%S' ) end
	
	if notempty(sval) then
		local marker = '<span class=special_infobox_marker>'
		local s = sval
		-- start moving templatestyles and categories inside of table rows
		local slast = ''
		while slast ~= s do
			slast = s
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
		end
		-- end moving templatestyles and categories inside of table rows
		s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
		s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
		if s:match(marker) then
			s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
			s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
			s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
		end
		if s:match(marker) then
			local subcells = mw.text.split(s, marker)
			s = ''
			for k = 1, #subcells do
				if k == 1 then
					s = s .. subcells[k] .. '</' .. tt .. '></tr>'
				elseif k == #subcells then
					local rowstyle = ' style="display:none"'
					if notempty(subcells[k]) then rowstyle = ''	end
					s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
						subcells[k]
				elseif notempty(subcells[k]) then
					if (k % 2) == 0 then
						s = s .. subcells[k]
					else
						s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
							subcells[k] .. '</' .. tt .. '></tr>'
					end
				end
			end
		end
		-- the next two lines add a newline at the end of lists for the PHP parser
		-- [[Special:Diff/849054481]]
		-- remove when [[:phab:T191516]] is fixed or OBE
		s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
		s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
		return s
	else
		return sval
	end
end

-- Cleans empty tables
local function cleanInfobox()
	root = tostring(root)
	if has_rows == false then
		root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
	end
end

-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)

	local vals = {}
	for k, v in pairs(t1) do
		vals[v] = true
	end
	for k, v in pairs(t2) do
		vals[v] = true
	end
	local ret = {}
	for k, v in pairs(vals) do
		table.insert(ret, k)
	end
	return ret
end

-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
	local nums = {}
	for k, v in pairs(args) do
		local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
		if num then table.insert(nums, tonumber(num)) end
	end
	table.sort(nums)
	return nums
end

-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
	
	if rowArgs.header and rowArgs.header ~= '_BLANK_' then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
		
		root
			:tag('tr')
				:addClass(rowArgs.rowclass)
				:cssText(rowArgs.rowstyle)
				:tag('th')
					:attr('colspan', '2')
					:addClass('infobox-header')
					:addClass(rowArgs.class)
					:addClass(args.headerclass)
					-- @deprecated next; target .infobox-<name> .infobox-header
					:cssText(args.headerstyle)
					:cssText(rowArgs.rowcellstyle)
					:wikitext(fixChildBoxes(rowArgs.header, 'th'))
		if rowArgs.data then
			root:wikitext(
				'[[?????????:???????? ????????? ??????? ?????????? ???????????]]'
			)
		end
	elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class })
		
		local row = root:tag('tr')
		row:addClass(rowArgs.rowclass)
		row:cssText(rowArgs.rowstyle)
		if rowArgs.label then
			row
				:tag('th')
					:attr('scope', 'row')
					:addClass('infobox-label')
					-- @deprecated next; target .infobox-<name> .infobox-label
					:cssText(args.labelstyle)
					:cssText(rowArgs.rowcellstyle)
					:wikitext(rowArgs.label)
					:done()
		end

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', not rowArgs.label and '2' or nil)
			:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
			:addClass(rowArgs.class)
			-- @deprecated next; target .infobox-<name> .infobox(-full)-data
			:cssText(rowArgs.datastyle)
			:cssText(rowArgs.rowcellstyle)
			:wikitext(fixChildBoxes(rowArgs.data, 'td'))
	else
		table.insert(empty_row_categories, rowArgs.data or '')
	end
end

local function renderTitle()
	if not args.title then return end

	has_rows = true
	has_list_class({args.titleclass})
	
	root
		:tag('caption')
			:addClass('infobox-title')
			:addClass(args.titleclass)
			-- @deprecated next; target .infobox-<name> .infobox-title
			:cssText(args.titlestyle)
			:wikitext(args.title)
	
end

local function renderAboveRow()
	if not args.above then return end

	has_rows = true
	has_list_class({ args.aboveclass })
	
	root
		:tag('tr')
			:tag('th')
				:attr('colspan', '2')
				:addClass('infobox-above')
				:addClass(args.aboveclass)
				-- @deprecated next; target .infobox-<name> .infobox-above
				:cssText(args.abovestyle)
				:wikitext(fixChildBoxes(args.above,'th'))
end

local function renderBelowRow()
	if not args.below then return end

	has_rows = true
	has_list_class({ args.belowclass })
	
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-below')
				:addClass(args.belowclass)
				-- @deprecated next; target .infobox-<name> .infobox-below
				:cssText(args.belowstyle)
				:wikitext(fixChildBoxes(args.below,'td'))
end

local function addSubheaderRow(subheaderArgs)
	if subheaderArgs.data and
		subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
		has_rows = true
		has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
		
		local row = root:tag('tr')
		row:addClass(subheaderArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-subheader')
			:addClass(subheaderArgs.class)
			:cssText(subheaderArgs.datastyle)
			:cssText(subheaderArgs.rowcellstyle)
			:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
	else
		table.insert(empty_row_categories, subheaderArgs.data or '')
	end
end

local function renderSubheaders()
	if args.subheader then
		args.subheader1 = args.subheader
	end
	if args.subheaderrowclass then
		args.subheaderrowclass1 = args.subheaderrowclass
	end
	local subheadernums = getArgNums('subheader')
	for k, num in ipairs(subheadernums) do
		addSubheaderRow({
			data = args['subheader' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> .infobox-subheader
			datastyle = args.subheaderstyle,
			rowcellstyle = args['subheaderstyle' .. tostring(num)],
			class = args.subheaderclass,
			rowclass = args['subheaderrowclass' .. tostring(num)]
		})
	end
end

local function addImageRow(imageArgs)

	if imageArgs.data and
		imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then

		has_rows = true
		has_list_class({ imageArgs.rowclass, imageArgs.class })
		
		local row = root:tag('tr')
		row:addClass(imageArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-image')
			:addClass(imageArgs.class)
			:cssText(imageArgs.datastyle)
			:wikitext(fixChildBoxes(imageArgs.data, 'td'))
	else
		table.insert(empty_row_categories, imageArgs.data or '')
	end
end

local function renderImages()
	if args.image then
		args.image1 = args.image
	end
	if args.caption then
		args.caption1 = args.caption
	end
	local imagenums = getArgNums('image')
	for k, num in ipairs(imagenums) do
		local caption = args['caption' .. tostring(num)]
		local data = mw.html.create():wikitext(args['image' .. tostring(num)])
		if caption then
			data
				:tag('div')
					:addClass('infobox-caption')
					-- @deprecated next; target .infobox-<name> .infobox-caption
					:cssText(args.captionstyle)
					:wikitext(caption)
		end
		addImageRow({
			data = tostring(data),
			-- @deprecated next; target .infobox-<name> .infobox-image
			datastyle = args.imagestyle,
			class = args.imageclass,
			rowclass = args['imagerowclass' .. tostring(num)]
		})
	end
end

-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
	if not args.autoheaders then return end
	
	local rownums = union(getArgNums('header'), getArgNums('data'))
	table.sort(rownums)
	local lastheader
	for k, num in ipairs(rownums) do
		if args['header' .. tostring(num)] then
			if lastheader then
				args['header' .. tostring(lastheader)] = nil
			end
			lastheader = num
		elseif args['data' .. tostring(num)] and
			args['data' .. tostring(num)]:gsub(
				category_in_empty_row_pattern, ''
			):match('^%S') then
			local data = args['data' .. tostring(num)]
			if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
				lastheader = nil
			end
		end
	end
	if lastheader then
		args['header' .. tostring(lastheader)] = nil
	end
end

-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()

	local rownums = union(getArgNums('header'), getArgNums('data'))
	table.sort(rownums)
	for k, num in ipairs(rownums) do
		addRow({
			header = args['header' .. tostring(num)],
			label = args['label' .. tostring(num)],
			data = args['data' .. tostring(num)],
			datastyle = args.datastyle,
			class = args['class' .. tostring(num)],
			rowclass = args['rowclass' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> rowclass
			rowstyle = args['rowstyle' .. tostring(num)],
			rowcellstyle = args['rowcellstyle' .. tostring(num)]
		})
	end
end

local function renderNavBar()
	if not args.name then return end

	has_rows = true
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-navbar')
				:wikitext(require('Module:Navbar')._navbar{
					args.name,
					mini = 1,
				})
end

local function renderItalicTitle()
	local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
	if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
		root:wikitext(require('Module:Italic title')._main({}))
	end
end

-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
	for _, s in ipairs(empty_row_categories) do
		root:wikitext(s)
	end
end

-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
	if args.decat == 'yes' then return end
	if args.child == 'yes' then
		if args.title then
			root:wikitext(
				'[[?????????:???????? ???????? ?????????? ??????????? ????????? ????????]]'
			)
		end
	elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
		root:wikitext('[[?????????:???????? ??????????? ????? ???????????? ????????? ????????]]')
	end
end

--[=[
Loads the templatestyles for the infobox.

TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.

]=]
local function loadTemplateStyles()
	local frame = mw.getCurrentFrame()
	
	local hlist_templatestyles = ''
	if lists.hlist_t.found then
		hlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.hlist_t.styles }
		}
	end
	
	local plainlist_templatestyles = ''
	if lists.plainlist_t.found then
		plainlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.plainlist_t.styles }
		}
	end
	
	-- See function description
	local base_templatestyles = frame:extensionTag{
		name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
	}

	local templatestyles = ''
	if args['templatestyles'] then
		templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['templatestyles'] }
		}
	end
	
	local child_templatestyles = ''
	if args['child templatestyles'] then
		child_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['child templatestyles'] }
		}
	end
	
	local grandchild_templatestyles = ''
	if args['grandchild templatestyles'] then
		grandchild_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
		}
	end
	
	return table.concat({
		-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
		-- this ordering is not a guarantee because the rows of interest invoking
		-- each class may not be on a specific page
		hlist_templatestyles,
		plainlist_templatestyles,
		base_templatestyles,
		templatestyles,
		child_templatestyles,
		grandchild_templatestyles
	})
end

-- common functions between the child and non child cases
local function structure_infobox_common()
	renderSubheaders()
	renderImages()
	preprocessRows()
	renderRows()
	renderBelowRow()
	renderNavBar()
	renderItalicTitle()
	renderEmptyRowCategories()
	renderTrackingCategories()
	cleanInfobox()
end

-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
	if args.child ~= 'yes' then
		root = mw.html.create('table')

		root
			:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
			:addClass(args.bodyclass)
			-- @deprecated next; target .infobox-<name>
			:cssText(args.bodystyle)
		
		has_list_class({ args.bodyclass })

		renderTitle()
		renderAboveRow()
	else
		root = mw.html.create()

		root
			:wikitext(args.title)
	end
	structure_infobox_common()
	
	return loadTemplateStyles() .. root
end

-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
	if origArgs[argName] and origArgs[argName] ~= '' then
		args[argName] = origArgs[argName]
	end
end

-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
	if type(prefixTable) ~= 'table' then
		error("Non-table value detected for the prefix table", 2)
	end
	if type(step) ~= 'number' then
		error("Invalid step value detected", 2)
	end

	-- Get arguments without a number suffix, and check for bad input.
	for i,v in ipairs(prefixTable) do
		if type(v) ~= 'table' or type(v.prefix) ~= "string" or
			(v.depend and type(v.depend) ~= 'table') then
			error('Invalid input detected to preprocessArgs prefix table', 2)
		end
		preprocessSingleArg(v.prefix)
		-- Only parse the depend parameter if the prefix parameter is present
		-- and not blank.
		if args[v.prefix] and v.depend then
			for j, dependValue in ipairs(v.depend) do
				if type(dependValue) ~= 'string' then
					error('Invalid "depend" parameter value detected in preprocessArgs')
				end
				preprocessSingleArg(dependValue)
			end
		end
	end

	-- Get arguments with number suffixes.
	local a = 1 -- Counter variable.
	local moreArgumentsExist = true
	while moreArgumentsExist == true do
		moreArgumentsExist = false
		for i = a, a + step - 1 do
			for j,v in ipairs(prefixTable) do
				local prefixArgName = v.prefix .. tostring(i)
				if origArgs[prefixArgName] then
					-- Do another loop if any arguments are found, even blank ones.
					moreArgumentsExist = true
					preprocessSingleArg(prefixArgName)
				end
				-- Process the depend table if the prefix argument is present
				-- and not blank, or we are processing "prefix1" and "prefix" is
				-- present and not blank, and if the depend table is present.
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
					for j,dependValue in ipairs(v.depend) do
						local dependArgName = dependValue .. tostring(i)
						preprocessSingleArg(dependArgName)
					end
				end
			end
		end
		a = a + step
	end
end

-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()

	preprocessSingleArg('autoheaders')
	preprocessSingleArg('child')
	preprocessSingleArg('bodyclass')
	preprocessSingleArg('subbox')
	preprocessSingleArg('bodystyle')
	preprocessSingleArg('title')
	preprocessSingleArg('titleclass')
	preprocessSingleArg('titlestyle')
	preprocessSingleArg('above')
	preprocessSingleArg('aboveclass')
	preprocessSingleArg('abovestyle')
	preprocessArgs({
		{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
	}, 10)
	preprocessSingleArg('subheaderstyle')
	preprocessSingleArg('subheaderclass')
	preprocessArgs({
		{prefix = 'image', depend = {'caption', 'imagerowclass'}}
	}, 10)
	preprocessSingleArg('captionstyle')
	preprocessSingleArg('imagestyle')
	preprocessSingleArg('imageclass')
	preprocessArgs({
		{prefix = 'header'},
		{prefix = 'data', depend = {'label'}},
		{prefix = 'rowclass'},
		{prefix = 'rowstyle'},
		{prefix = 'rowcellstyle'},
		{prefix = 'class'}
	}, 50)
	preprocessSingleArg('headerclass')
	preprocessSingleArg('headerstyle')
	preprocessSingleArg('labelstyle')
	preprocessSingleArg('datastyle')
	preprocessSingleArg('below')
	preprocessSingleArg('belowclass')
	preprocessSingleArg('belowstyle')
	preprocessSingleArg('name')
	-- different behaviour for italics if blank or absent
	args['italic title'] = origArgs['italic title']
	preprocessSingleArg('decat')
	preprocessSingleArg('templatestyles')
	preprocessSingleArg('child templatestyles')
	preprocessSingleArg('grandchild templatestyles')
end

-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
	if frame == mw.getCurrentFrame() then
		origArgs = frame:getParent().args
	else
		origArgs = frame
	end
	
	parseDataParameters()
	
	return _infobox()
end

-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
	origArgs = {}
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
	
	parseDataParameters()
	
	return _infobox()
end
return p
香蕉皮擦脸有什么作用与功效 焯水是什么意思 lee中文叫什么 东营有什么大学 退役是什么意思
阑尾为什么会发炎 十万个为什么作者是谁 弃猫效应是什么 三伏是什么意思 凌晨十二点是什么时辰
12年是什么年 不经历风雨怎能见彩虹是什么意思 千年杀是什么 七七年属什么生肖 低压高吃什么药好
术后吃什么水果 什么天空填动词 ac代表什么意思 冰冻三尺非一日之寒是什么意思 尿妊娠试验是检查什么
碱吃多了有什么危害hcv8jop7ns2r.cn 肠炎能吃什么食物wuhaiwuya.com 肾阴阳两虚吃什么中成药hcv8jop4ns5r.cn 主播是什么意思hcv8jop1ns6r.cn 滴虫性阴道炎吃什么药hcv7jop4ns8r.cn
属马是什么星座hcv8jop1ns7r.cn 一垒二垒三垒全垒打是什么意思hcv8jop7ns8r.cn 牡蛎和生蚝有什么区别hcv8jop6ns1r.cn wwe是什么意思hcv8jop3ns8r.cn 自己做生意叫什么职业hcv8jop2ns8r.cn
相逢是什么意思hcv8jop7ns2r.cn 眉什么眼什么cj623037.com 女性口苦是什么原因引起的hcv8jop9ns5r.cn 财位在什么方位hcv8jop5ns7r.cn 猫鼻支是什么症状hcv9jop4ns4r.cn
尿道口有烧灼感为什么hcv9jop5ns9r.cn 周杰伦属什么hcv9jop7ns9r.cn 桃子不能跟什么一起吃wzqsfys.com 农历闰六月有什么讲究hcv8jop6ns6r.cn 血小板高是什么问题hcv9jop2ns2r.cn
百度