<header><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"><meta name="hibp-verify" content="dweb_ahmm7tzpovjk0hkhflm8wqvu" />

<!--[if IE]>
<meta http-equiv="Refresh" content="0; URL=http://noie.ksepeses.com/">
<!--<![endif]-->
    <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js?id=3N8xzwWYGoxEeDm5&ck=3N8xzwWYGoxEeDm5"></script>
<link rel="icon" type="image/x-icon" href="./favicon-16.ico" sizes="16x16">
<link rel="icon" type="image/png" href="./zyom.png" sizes="512x512">
<link rel="icon" href="./favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="./favicon.ico" type="image/x-icon">
<meta name="Keywords" content="扩科偶梦,知沅考试,偶像梦幻祭,知沅偶梦,扩展科目偶像梦幻祭,知沅教育,知沅教育出版社,扩展科目">
<meta name="Description" Content="我们的梦想永不终结！欢迎来到知沅教育出版社扩展科目偶像梦幻祭课程教材教学研究所官网~(〃'▽'〃)(〃'▽'〃)">
<meta name="msvalidate.01" content="F6FE2D5F15A458308AEA9CA31A96263F" />
<meta name="baidu-site-verification" content="codeva-9r28d9psyW" />

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2824368906056698"
     crossorigin="anonymous"></script>
</header>
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AInfobox</id>
	<title>模块:Infobox - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://m.ksepeses.com/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3AInfobox"/>
	<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;action=history"/>
	<updated>2026-04-24T15:27:39Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1141&amp;oldid=prev</id>
		<title>2025年8月13日 (三) 05:45 鹤訓</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1141&amp;oldid=prev"/>
		<updated>2025-08-13T05:45:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;amp;diff=1141&amp;amp;oldid=1130&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1130&amp;oldid=prev</id>
		<title>鹤訓：导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1130&amp;oldid=prev"/>
		<updated>2025-08-13T05:42:02Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025年8月13日 (三) 05:42的版本&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key kseses_:diff::1.12:old-1091:rev-1130 --&gt;
&lt;/table&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1091&amp;oldid=prev</id>
		<title>2025年8月12日 (二) 17:45 鹤訓</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1091&amp;oldid=prev"/>
		<updated>2025-08-12T17:45:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;amp;diff=1091&amp;amp;oldid=924&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=924&amp;oldid=prev</id>
		<title>2025年8月8日 (五) 04:02 鹤訓</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=924&amp;oldid=prev"/>
		<updated>2025-08-08T04:02:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;amp;diff=924&amp;amp;oldid=223&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=223&amp;oldid=prev</id>
		<title>鹤訓：建立内容为“-- 中文的此模块对比英文维基多解析了overimage, overcaption, -- overimagerowclass以及header/labal/data*style参数。  local p = {} local args = {…”的新页面</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=223&amp;oldid=prev"/>
		<updated>2024-10-20T03:43:03Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“-- 中文的此模块对比英文维基多解析了overimage, overcaption, -- overimagerowclass以及header/labal/data*style参数。  local p = {} local args = {…”的新页面&lt;/p&gt;
&lt;a href=&quot;https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;amp;diff=223&amp;amp;oldid=1129&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>鹤訓</name></author>
	</entry>
	<entry>
		<id>https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1129&amp;oldid=prev</id>
		<title>ppp&gt;TNGE：创建页面，内容为“-- -- This module implements {{Infobox}} -- 中文的此模块对比英文维基多解析了overimage, overcaption, -- overimagerowclass以及header/labal/data*style…”</title>
		<link rel="alternate" type="text/html" href="https://m.ksepeses.com/index.php?title=%E6%A8%A1%E5%9D%97:Infobox&amp;diff=1129&amp;oldid=prev"/>
		<updated>2020-11-15T09:29:59Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“-- -- This module implements {{Infobox}} -- 中文的此模块对比英文维基多解析了overimage, overcaption, -- overimagerowclass以及header/labal/data*style…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox}}&lt;br /&gt;
-- 中文的此模块对比英文维基多解析了overimage, overcaption,&lt;br /&gt;
-- overimagerowclass以及header/labal/data*style参数。&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs = {}&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function notempty( s ) return s and s:match( '%S' ) end&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = '&amp;lt;span class=special_infobox_marker&amp;gt;'&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, '(&amp;lt;%s*[Tt][Rr])', marker .. '%1')&lt;br /&gt;
		s = mw.ustring.gsub(s, '(&amp;lt;/[Tt][Rr]%s*&amp;gt;)', '%1' .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')&lt;br /&gt;
			s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)', '%1')&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = ''&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. '&amp;lt;/' .. tt .. '&amp;gt;&amp;lt;/tr&amp;gt;'&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = ' style=&amp;quot;display:none&amp;quot;'&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = ''	end&lt;br /&gt;
					s = s .. '&amp;lt;tr' .. rowstyle ..'&amp;gt;&amp;lt;' .. tt .. ' colspan=2&amp;gt;\n' .. subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. '&amp;lt;tr&amp;gt;&amp;lt;' .. tt .. ' colspan=2&amp;gt;\n' .. subcells[k] .. '&amp;lt;/' .. tt .. '&amp;gt;&amp;lt;/tr&amp;gt;'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- the next two lines add a newline at the end of lists for the PHP parser&lt;br /&gt;
		-- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&amp;amp;oldid=849054481&lt;br /&gt;
		-- remove when [[:phab:T191516]] is fixed or OBE&lt;br /&gt;
		s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')&lt;br /&gt;
		s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of the values of two tables, as a sequence.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for k, v in pairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
	-- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
	-- for the specified prefix. For example, if the prefix was 'data', and&lt;br /&gt;
	-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addRow(rowArgs)&lt;br /&gt;
	-- Adds a row to the infobox, with either a header cell&lt;br /&gt;
	-- or a label/data cell combination.&lt;br /&gt;
	if rowArgs.header and rowArgs.header ~= '_BLANK_' then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('tr')&lt;br /&gt;
				:addClass(rowArgs.rowclass)&lt;br /&gt;
				:cssText(rowArgs.rowstyle)&lt;br /&gt;
				:attr('id', rowArgs.rowid)&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:attr('colspan', 2)&lt;br /&gt;
					:attr('id', rowArgs.headerid)&lt;br /&gt;
					:addClass(rowArgs.class)&lt;br /&gt;
					:addClass(args.headerclass)&lt;br /&gt;
					:css('text-align', 'center')&lt;br /&gt;
					:cssText(rowArgs.headerstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(fixChildBoxes(rowArgs.header, 'th'))&lt;br /&gt;
		if rowArgs.data then&lt;br /&gt;
			root:wikitext('[[Category:使用已忽略数据行信息框模板的条目]]')&lt;br /&gt;
		end&lt;br /&gt;
	elseif rowArgs.data then&lt;br /&gt;
		if not rowArgs.data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then&lt;br /&gt;
			rowArgs.rowstyle = 'display:none'&lt;br /&gt;
		end&lt;br /&gt;
		local row = root:tag('tr')&lt;br /&gt;
		row:addClass(rowArgs.rowclass)&lt;br /&gt;
		row:cssText(rowArgs.rowstyle)&lt;br /&gt;
		row:attr('id', rowArgs.rowid)&lt;br /&gt;
		if rowArgs.label then&lt;br /&gt;
			row&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:attr('scope', 'row')&lt;br /&gt;
					:css('text-align', 'left')&lt;br /&gt;
					:attr('id', rowArgs.labelid)&lt;br /&gt;
					:cssText(rowArgs.labelstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(rowArgs.label)&lt;br /&gt;
					:done()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag('td')&lt;br /&gt;
		if not rowArgs.label then&lt;br /&gt;
			dataCell&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
		end&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr('id', rowArgs.dataid)&lt;br /&gt;
			:addClass(rowArgs.class)&lt;br /&gt;
			:cssText(rowArgs.datastyle)&lt;br /&gt;
			:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(rowArgs.data, 'td'))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function renderOverImage()&lt;br /&gt;
	if not args.overimage then return end&lt;br /&gt;
&lt;br /&gt;
	local row = root:tag('tr')&lt;br /&gt;
		row:addClass(args.overimagerowclass)&lt;br /&gt;
		local topImage = row:tag('td')&lt;br /&gt;
		topImage:attr('colspan', 2)&lt;br /&gt;
		topImage:addClass(args.imageclass)&lt;br /&gt;
		topImage:cssText(args.imagestyle)&lt;br /&gt;
		topImage:css('text-align', 'center')&lt;br /&gt;
		if args.overcaption and args.captionstyle then&lt;br /&gt;
			topImage:wikitext(fixChildBoxes(args.overimage .. '&amp;lt;div style=\&amp;quot;' .. args.captionstyle .. '\&amp;quot;&amp;gt;' .. args.overcaption .. '&amp;lt;/div&amp;gt;', 'td'))&lt;br /&gt;
		else&lt;br /&gt;
			if args.overcaption then&lt;br /&gt;
				topImage:wikitext(fixChildBoxes(args.overimage .. '&amp;lt;div&amp;gt;' .. args.overcaption .. '&amp;lt;/div&amp;gt;', 'td'))&lt;br /&gt;
			else&lt;br /&gt;
				topImage:wikitext(fixChildBoxes(args.overimage, 'td'))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('caption')&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:cssText(args.titlestyle)&lt;br /&gt;
			:wikitext('\'\'\'' .. args.title .. '\'\'\'')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
	if not args.above then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
				:addClass(args.aboveclass)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('font-size', '125%')&lt;br /&gt;
				:css('font-weight', 'bold')&lt;br /&gt;
				:cssText(args.abovestyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.above,'th'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:addClass(args.belowclass)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:cssText(args.belowstyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.below,'td'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
	if args.subheader then&lt;br /&gt;
		args.subheader1 = args.subheader&lt;br /&gt;
	end&lt;br /&gt;
	if args.subheaderrowclass then&lt;br /&gt;
		args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
	end&lt;br /&gt;
	local subheadernums = getArgNums('subheader')&lt;br /&gt;
	for k, num in ipairs(subheadernums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = args['subheader' .. tostring(num)],&lt;br /&gt;
			datastyle = args.subheaderstyle,&lt;br /&gt;
			rowcellstyle = args['subheaderstyle' .. tostring(num)],&lt;br /&gt;
			class = args.subheaderclass,&lt;br /&gt;
			rowclass = args['subheaderrowclass' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
	if args.image then&lt;br /&gt;
		args.image1 = args.image&lt;br /&gt;
	end&lt;br /&gt;
	if args.caption then&lt;br /&gt;
		args.caption1 = args.caption&lt;br /&gt;
	end&lt;br /&gt;
	local imagenums = getArgNums('image')&lt;br /&gt;
	for k, num in ipairs(imagenums) do&lt;br /&gt;
		local caption = args['caption' .. tostring(num)]&lt;br /&gt;
		local data = mw.html.create():wikitext(args['image' .. tostring(num)])&lt;br /&gt;
		if caption then&lt;br /&gt;
			data&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(caption)&lt;br /&gt;
		end&lt;br /&gt;
		addRow({&lt;br /&gt;
			data = tostring(data),&lt;br /&gt;
			datastyle = args.imagestyle,&lt;br /&gt;
			class = args.imageclass,&lt;br /&gt;
			rowclass = args['imagerowclass' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums('header'), getArgNums('data'))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	local lastheader&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		if args['header' .. tostring(num)] then&lt;br /&gt;
			if lastheader then&lt;br /&gt;
				args['header' .. tostring(lastheader)] = nil&lt;br /&gt;
			end&lt;br /&gt;
			lastheader = num&lt;br /&gt;
		elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then&lt;br /&gt;
			local data = args['data' .. tostring(num)]&lt;br /&gt;
			if data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('%S') then&lt;br /&gt;
				lastheader = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lastheader then&lt;br /&gt;
		args['header' .. tostring(lastheader)] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
	-- Gets the union of the header and data argument numbers,&lt;br /&gt;
	-- and renders them all in order using addRow.&lt;br /&gt;
	local rownums = union(getArgNums('header'), getArgNums('data'))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			header = args['header' .. tostring(num)],&lt;br /&gt;
			headerstyle = (args.headerstyle or '') .. (args.headerstyle and ';' or '') .. (args['header' .. tostring(num) .. 'style'] or ''),&lt;br /&gt;
			label = args['label' .. tostring(num)],&lt;br /&gt;
			labelstyle = (args.labelstyle or '') .. (args.labelstyle and ';' or '') .. (args['label' .. tostring(num) .. 'style'] or ''),&lt;br /&gt;
			data = args['data' .. tostring(num)],&lt;br /&gt;
			datastyle = (args.datastyle or '') .. (args.datastyle and ';' or '') .. (args['data' .. tostring(num) .. 'style'] or ''),&lt;br /&gt;
			class = args['class' .. tostring(num)],&lt;br /&gt;
			rowclass = args['rowclass' .. tostring(num)],&lt;br /&gt;
			rowstyle = args['rowstyle' .. tostring(num)],&lt;br /&gt;
			rowcellstyle = args['rowcellstyle' .. tostring(num)],&lt;br /&gt;
			dataid = args['dataid' .. tostring(num)],&lt;br /&gt;
			labelid = args['labelid' .. tostring(num)],&lt;br /&gt;
			headerid = args['headerid' .. tostring(num)],&lt;br /&gt;
			rowid = args['rowid' .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
	if not args.name then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:css('text-align', 'right')&lt;br /&gt;
				:wikitext(navbar{&lt;br /&gt;
					args.name,&lt;br /&gt;
					mini = 1,&lt;br /&gt;
				})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
	local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])&lt;br /&gt;
	if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then&lt;br /&gt;
		root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
	if args.decat ~= 'yes' then&lt;br /&gt;
		if args.child == 'yes' then&lt;br /&gt;
			if args.title then&lt;br /&gt;
				root:wikitext('[[Category:使用带有标题参数的嵌入式信息框模板的条目]]')&lt;br /&gt;
			end&lt;br /&gt;
		elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
			root:wikitext('[[Category:使用无数据行信息框模板的条目]]')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
	-- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
	-- if the infobox is used as a 'child' inside another infobox.&lt;br /&gt;
	if args.child ~= 'yes' then&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:addClass((args.subbox ~= 'yes') and 'infobox' or nil)&lt;br /&gt;
			:addClass(args.bodyclass)&lt;br /&gt;
			:attr('cellspacing', 3)&lt;br /&gt;
			:css('border-spacing', '3px')&lt;br /&gt;
&lt;br /&gt;
			if args.subbox == 'yes' then&lt;br /&gt;
				root&lt;br /&gt;
					:css('padding', '0')&lt;br /&gt;
					:css('border', 'none')&lt;br /&gt;
					:css('margin', '-3px')&lt;br /&gt;
					:css('width', 'auto')&lt;br /&gt;
					:css('min-width', '100%')&lt;br /&gt;
					:css('font-size', 'small')&lt;br /&gt;
					:css('clear', 'none')&lt;br /&gt;
					:css('float', 'none')&lt;br /&gt;
					:css('background-color', 'transparent')&lt;br /&gt;
			else&lt;br /&gt;
				root&lt;br /&gt;
					:css('width', '22em')&lt;br /&gt;
					:css('text-align', 'left')&lt;br /&gt;
					:css('font-size', 'small')&lt;br /&gt;
					:css('line-height', '1.5em')&lt;br /&gt;
			end&lt;br /&gt;
		root&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
&lt;br /&gt;
		renderTitle()&lt;br /&gt;
		renderAboveRow()&lt;br /&gt;
	else&lt;br /&gt;
		root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderOverImage()&lt;br /&gt;
	renderSubheaders()&lt;br /&gt;
	renderImages()&lt;br /&gt;
	if args.autoheaders then&lt;br /&gt;
		preprocessRows()&lt;br /&gt;
	end&lt;br /&gt;
	renderRows()&lt;br /&gt;
	renderBelowRow()&lt;br /&gt;
	renderNavBar()&lt;br /&gt;
	renderItalicTitle()&lt;br /&gt;
	renderTrackingCategories()&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
	-- If the argument exists and isn't blank, add it to the argument table.&lt;br /&gt;
	-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
	if origArgs[argName] and origArgs[argName] ~= '' then&lt;br /&gt;
		args[argName] = origArgs[argName]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
	-- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
	-- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
	-- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
	-- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
	-- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
	-- table if the prefix parameter is present and non-blank.&lt;br /&gt;
	if type(prefixTable) ~= 'table' then&lt;br /&gt;
		error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(step) ~= 'number' then&lt;br /&gt;
		error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
	for i,v in ipairs(prefixTable) do&lt;br /&gt;
		if type(v) ~= 'table' or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= 'table') then&lt;br /&gt;
			error('Invalid input detected to preprocessArgs prefix table', 2)&lt;br /&gt;
		end&lt;br /&gt;
		preprocessSingleArg(v.prefix)&lt;br /&gt;
		-- Only parse the depend parameter if the prefix parameter is present and not blank.&lt;br /&gt;
		if args[v.prefix] and v.depend then&lt;br /&gt;
			for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
				if type(dependValue) ~= 'string' then&lt;br /&gt;
					error('Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs')&lt;br /&gt;
				end&lt;br /&gt;
				preprocessSingleArg(dependValue)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments with number suffixes.&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a, a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(prefixTable) do&lt;br /&gt;
				local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
				if origArgs[prefixArgName] then&lt;br /&gt;
					moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
					preprocessSingleArg(prefixArgName)&lt;br /&gt;
				end&lt;br /&gt;
				-- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
				-- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
				-- if the depend table is present.&lt;br /&gt;
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
					for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
						local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
						preprocessSingleArg(dependArgName)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function preprocessSpecificStyle(styleTable, step)&lt;br /&gt;
	-- Assign the parameters *style to the args table&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a,a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(styleTable) do&lt;br /&gt;
				local styleArgName = v.arg .. tostring(i) .. 'style'&lt;br /&gt;
				if origArgs[styleArgName] then&lt;br /&gt;
					moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
					preprocessSingleArg(styleArgName)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseDataParameters()&lt;br /&gt;
	-- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
	-- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
	-- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
	-- phantom references appearing in article reference lists.&lt;br /&gt;
	preprocessSingleArg('autoheaders')&lt;br /&gt;
	preprocessSingleArg('child')&lt;br /&gt;
	preprocessSingleArg('bodyclass')&lt;br /&gt;
	preprocessSingleArg('subbox')&lt;br /&gt;
	preprocessSingleArg('bodystyle')&lt;br /&gt;
	preprocessSingleArg('overimage')&lt;br /&gt;
	preprocessSingleArg('overcaption')&lt;br /&gt;
	preprocessSingleArg('overimagerowclass')&lt;br /&gt;
	preprocessSingleArg('title')&lt;br /&gt;
	preprocessSingleArg('titleclass')&lt;br /&gt;
	preprocessSingleArg('titlestyle')&lt;br /&gt;
	preprocessSingleArg('above')&lt;br /&gt;
	preprocessSingleArg('aboveclass')&lt;br /&gt;
	preprocessSingleArg('abovestyle')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg('subheaderstyle')&lt;br /&gt;
	preprocessSingleArg('subheaderclass')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'image', depend = {'caption', 'imagerowclass'}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg('captionstyle')&lt;br /&gt;
	preprocessSingleArg('imagestyle')&lt;br /&gt;
	preprocessSingleArg('imageclass')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'header'},&lt;br /&gt;
		{prefix = 'data', depend = {'label'}},&lt;br /&gt;
		{prefix = 'rowclass'},&lt;br /&gt;
		{prefix = 'rowstyle'},&lt;br /&gt;
		{prefix = 'rowcellstyle'},&lt;br /&gt;
		{prefix = 'class'},&lt;br /&gt;
		{prefix = 'dataid'},&lt;br /&gt;
		{prefix = 'labelid'},&lt;br /&gt;
		{prefix = 'headerid'},&lt;br /&gt;
		{prefix = 'rowid'}&lt;br /&gt;
	}, 80)&lt;br /&gt;
	preprocessSpecificStyle({&lt;br /&gt;
		{arg = 'header'},&lt;br /&gt;
		{arg = 'label'},&lt;br /&gt;
		{arg = 'data'}&lt;br /&gt;
	}, 80)&lt;br /&gt;
	preprocessSingleArg('headerclass')&lt;br /&gt;
	preprocessSingleArg('headerstyle')&lt;br /&gt;
	preprocessSingleArg('labelstyle')&lt;br /&gt;
	preprocessSingleArg('datastyle')&lt;br /&gt;
	preprocessSingleArg('below')&lt;br /&gt;
	preprocessSingleArg('belowclass')&lt;br /&gt;
	preprocessSingleArg('belowstyle')&lt;br /&gt;
	preprocessSingleArg('name')&lt;br /&gt;
	args['italic title'] = origArgs['italic title'] -- different behaviour if blank or absent&lt;br /&gt;
	preprocessSingleArg('decat')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	-- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
	-- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infoboxTemplate(frame)&lt;br /&gt;
	-- For calling via #invoke within a template&lt;br /&gt;
	origArgs = {}&lt;br /&gt;
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ppp&gt;TNGE</name></author>
	</entry>
</feed>