<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://zh.enter-politics.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E7%99%BD%E9%BE%99</id>
	<title>Akarin - 用户贡献 [zh]</title>
	<link rel="self" type="application/atom+xml" href="https://zh.enter-politics.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E7%99%BD%E9%BE%99"/>
	<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/wiki/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/%E7%99%BD%E9%BE%99"/>
	<updated>2026-05-24T07:45:37Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Akarin:%E9%A6%96%E9%A0%81/%E6%96%B0%E8%81%9E%E5%8B%95%E6%85%8B&amp;diff=13036</id>
		<title>Akarin:首頁/新聞動態</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Akarin:%E9%A6%96%E9%A0%81/%E6%96%B0%E8%81%9E%E5%8B%95%E6%85%8B&amp;diff=13036"/>
		<updated>2025-06-12T15:03:44Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!--新闻T--&amp;gt;&lt;br /&gt;
* [[印度]]一民航客机坠毁。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--新闻F--&amp;gt;&lt;br /&gt;
参见：[[Akarin:首頁/新聞動態/評選|新闻动态评选]] • [[Akarin:首頁/新聞動態/存檔|旧闻]]&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13035</id>
		<title>User:KomacyaN</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13035"/>
		<updated>2025-06-12T14:57:24Z</updated>

		<summary type="html">&lt;p&gt;白龙：已还原白龙（对话）的编辑至最后由KomacyaN修订的版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;'''“千古伟大面对着千古灾难，我们连仰望、惊叹都来不及，怎么还会理会草丛下的琐碎？”'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#f9c462;border:1px solid #FFFF00;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
输入页面标题：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
preload=&lt;br /&gt;
editintro=&lt;br /&gt;
buttonlabel=创建一个新页面&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f9c462&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建子页&lt;br /&gt;
prefix=Special:Mypage/&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建模板&lt;br /&gt;
prefix=Template:&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
break=no&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=编辑条目&lt;br /&gt;
default=User:KomacyaN/Sandbox&lt;br /&gt;
width=29&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;「かぎなど」&amp;lt;br/&amp;gt;[https://forum.kokona.tech/d/115-miraidice-mirai Mirai骰娘]&amp;lt;br/&amp;gt;[https://anime-labo.net/anime2023-matome/ {{lang|ja|アニメ声優ラボ}}]&amp;lt;br/&amp;gt;&lt;br /&gt;
MediaWiki:Gadget-uploader.js&lt;br /&gt;
[https://zh.enter-politics.com/wiki/Special:%E5%89%8D%E7%BC%80%E7%B4%A2%E5%BC%95?prefix=KomacyaN&amp;amp;namespace=2 子页面列表]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E6%B8%B8%E9%AD%82&amp;diff=13014</id>
		<title>User:游魂</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E6%B8%B8%E9%AD%82&amp;diff=13014"/>
		<updated>2025-05-16T16:10:39Z</updated>

		<summary type="html">&lt;p&gt;白龙：生（い）きて、生（い）きて、生（い）きて、生（い）きて、生（い）きろ。&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Death}}&lt;br /&gt;
{{Deceased Akarinian}}&lt;br /&gt;
&amp;lt;s&amp;gt;如果情势稳定，我可能会用这里作为我的一个博客。&lt;br /&gt;
&lt;br /&gt;
但是情势从没有稳定过，现在也相当不稳定，并且在可预见的将来——我指的是以十年为单位的时间内——也不会很稳定。&lt;br /&gt;
&lt;br /&gt;
简而言之两个字，鸽了。&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[游魂|情势是永远不会稳定的。去他妈的。]]&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E6%B8%B8%E9%AD%82&amp;diff=13013</id>
		<title>User:游魂</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E6%B8%B8%E9%AD%82&amp;diff=13013"/>
		<updated>2025-05-16T16:09:15Z</updated>

		<summary type="html">&lt;p&gt;白龙：已保护“User:游魂”：忘了（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;s&amp;gt;如果情势稳定，我可能会用这里作为我的一个博客。&lt;br /&gt;
&lt;br /&gt;
但是情势从没有稳定过，现在也相当不稳定，并且在可预见的将来——我指的是以十年为单位的时间内——也不会很稳定。&lt;br /&gt;
&lt;br /&gt;
简而言之两个字，鸽了。&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[游魂|情势是永远不会稳定的。去他妈的。]]&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13012</id>
		<title>User:KomacyaN</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13012"/>
		<updated>2025-05-16T16:00:17Z</updated>

		<summary type="html">&lt;p&gt;白龙：已保护“User:KomacyaN”：安息（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Death}}&lt;br /&gt;
{{Deceased Akarinian}}&lt;br /&gt;
&amp;lt;center&amp;gt;'''“千古伟大面对着千古灾难，我们连仰望、惊叹都来不及，怎么还会理会草丛下的琐碎？”'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#f9c462;border:1px solid #FFFF00;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
输入页面标题：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
preload=&lt;br /&gt;
editintro=&lt;br /&gt;
buttonlabel=创建一个新页面&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f9c462&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建子页&lt;br /&gt;
prefix=Special:Mypage/&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建模板&lt;br /&gt;
prefix=Template:&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
break=no&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=编辑条目&lt;br /&gt;
default=User:KomacyaN/Sandbox&lt;br /&gt;
width=29&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;「かぎなど」&amp;lt;br/&amp;gt;[https://forum.kokona.tech/d/115-miraidice-mirai Mirai骰娘]&amp;lt;br/&amp;gt;[https://anime-labo.net/anime2023-matome/ {{lang|ja|アニメ声優ラボ}}]&amp;lt;br/&amp;gt;&lt;br /&gt;
MediaWiki:Gadget-uploader.js&lt;br /&gt;
[https://zh.enter-politics.com/wiki/Special:%E5%89%8D%E7%BC%80%E7%B4%A2%E5%BC%95?prefix=KomacyaN&amp;amp;namespace=2 子页面列表]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13011</id>
		<title>User:KomacyaN</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:KomacyaN&amp;diff=13011"/>
		<updated>2025-05-16T15:59:48Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Death}}&lt;br /&gt;
{{Deceased Akarinian}}&lt;br /&gt;
&amp;lt;center&amp;gt;'''“千古伟大面对着千古灾难，我们连仰望、惊叹都来不及，怎么还会理会草丛下的琐碎？”'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#f9c462;border:1px solid #FFFF00;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
输入页面标题：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
preload=&lt;br /&gt;
editintro=&lt;br /&gt;
buttonlabel=创建一个新页面&lt;br /&gt;
width=30&lt;br /&gt;
bgcolor=#f9c462&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建子页&lt;br /&gt;
prefix=Special:Mypage/&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=创建模板&lt;br /&gt;
prefix=Template:&lt;br /&gt;
width=29&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
break=no&lt;br /&gt;
type=create&lt;br /&gt;
buttonlabel=编辑条目&lt;br /&gt;
default=User:KomacyaN/Sandbox&lt;br /&gt;
width=29&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;「かぎなど」&amp;lt;br/&amp;gt;[https://forum.kokona.tech/d/115-miraidice-mirai Mirai骰娘]&amp;lt;br/&amp;gt;[https://anime-labo.net/anime2023-matome/ {{lang|ja|アニメ声優ラボ}}]&amp;lt;br/&amp;gt;&lt;br /&gt;
MediaWiki:Gadget-uploader.js&lt;br /&gt;
[https://zh.enter-politics.com/wiki/Special:%E5%89%8D%E7%BC%80%E7%B4%A2%E5%BC%95?prefix=KomacyaN&amp;amp;namespace=2 子页面列表]&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13010</id>
		<title>Template:Death</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13010"/>
		<updated>2025-05-16T15:57:56Z</updated>

		<summary type="html">&lt;p&gt;白龙：已保护“Template:Death”（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;messagebox&amp;quot; style=&amp;quot;background:black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[File:Lilium formosanum var pricei.jpg|80px]]&lt;br /&gt;
|style=&amp;quot;text-align:left; color:white;&amp;quot;|'''{{{1|{{PAGENAME}}}}}'''{{#if:{{{2|}}}|（{{{2}}}—{{{3}}}）}}已經逝世，愿{{{4|{{gender|{{PAGENAME}}|中性=其}}}}}安息。&lt;br /&gt;
|}&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
{{#ifeq:{{NAMESPACE}}|{{ns:2}}||}} --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Gender&amp;diff=13009</id>
		<title>Template:Gender</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Gender&amp;diff=13009"/>
		<updated>2025-05-16T15:57:30Z</updated>

		<summary type="html">&lt;p&gt;白龙：已保护“Template:Gender”（[编辑=仅允许管理员]（无限期）[移动=仅允许管理员]（无限期））&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{gender:{{{1}}}|{{{2|{{{男|他}}}}}}|{{{3|{{{女|她}}}}}}|{{{4|{{{中性|{{{其他|他/她}}}}}}}}}}}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Gender&amp;diff=13008</id>
		<title>Template:Gender</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Gender&amp;diff=13008"/>
		<updated>2025-05-16T15:57:04Z</updated>

		<summary type="html">&lt;p&gt;白龙：建立内容为“&amp;lt;onlyinclude&amp;gt;{{gender:{{{1}}}|{{{2|{{{男|他}}}}}}|{{{3|{{{女|她}}}}}}|{{{4|{{{中性|{{{其他|他/她}}}}}}}}}}}&amp;lt;/onlyinclude&amp;gt;”的新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{gender:{{{1}}}|{{{2|{{{男|他}}}}}}|{{{3|{{{女|她}}}}}}|{{{4|{{{中性|{{{其他|他/她}}}}}}}}}}}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13007</id>
		<title>Template:Death</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13007"/>
		<updated>2025-05-16T15:56:55Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;messagebox&amp;quot; style=&amp;quot;background:black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[File:Lilium formosanum var pricei.jpg|80px]]&lt;br /&gt;
|style=&amp;quot;text-align:left; color:white;&amp;quot;|'''{{{1|{{PAGENAME}}}}}'''{{#if:{{{2|}}}|（{{{2}}}—{{{3}}}）}}已經逝世，愿{{{4|{{gender|{{PAGENAME}}|中性=其}}}}}安息。&lt;br /&gt;
|}&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
{{#ifeq:{{NAMESPACE}}|{{ns:2}}||}} --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Deceased_Akarinian&amp;diff=13006</id>
		<title>Template:Deceased Akarinian</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Deceased_Akarinian&amp;diff=13006"/>
		<updated>2025-05-16T15:54:59Z</updated>

		<summary type="html">&lt;p&gt;白龙：// Edit via Wikiplus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid #333; width: 75%; min-width: 20em; text-align: center; background-color: #ddd; margin: 0 auto 2em;&amp;quot;&amp;gt;&lt;br /&gt;
[[Akarin:已经去世的用户|这位Akarin用户已经逝世]]，用户页保留于此。&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- {{#ifeq:{{NAMESPACE}}|{{ns:2}}||}} --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Deceased_Akarinian&amp;diff=13005</id>
		<title>Template:Deceased Akarinian</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Deceased_Akarinian&amp;diff=13005"/>
		<updated>2025-05-16T15:54:27Z</updated>

		<summary type="html">&lt;p&gt;白龙：建立内容为“&amp;lt;div style=&amp;quot;border: 1px solid #333; width: 75%; min-width: 20em; text-align: center; background-color: #ddd; margin: 0 auto 2em;&amp;quot;&amp;gt; Wikipedia:已经去世的用…”的新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid #333; width: 75%; min-width: 20em; text-align: center; background-color: #ddd; margin: 0 auto 2em;&amp;quot;&amp;gt;&lt;br /&gt;
[[Wikipedia:已经去世的用户|这位维基人已经逝世]]，用户页保留于此。&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- {{#ifeq:{{NAMESPACE}}|{{ns:2}}||}} --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13004</id>
		<title>Template:Death</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13004"/>
		<updated>2025-05-16T15:52:39Z</updated>

		<summary type="html">&lt;p&gt;白龙：// Edit via Wikiplus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;messagebox&amp;quot; style=&amp;quot;background:black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[File:Lilium formosanum var pricei.jpg|80px]]&lt;br /&gt;
|style=&amp;quot;text-align:left; color:white;&amp;quot;|'''{{{1|{{PAGENAME}}}}}'''{{#if:{{{2|}}}|（{{{2}}}—{{{3}}}）}}已經逝世，愿{{{4|{{gender|{{PAGENAME}}|中性=其}}}}}安息。&lt;br /&gt;
|}&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
{{#ifeq:{{NAMESPACE}}|{{ns:2}}|[[Category:已去世的維基人]]|}} --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13003</id>
		<title>Template:Death</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Death&amp;diff=13003"/>
		<updated>2025-05-16T15:51:20Z</updated>

		<summary type="html">&lt;p&gt;白龙：建立内容为“{| class=&amp;quot;messagebox&amp;quot; style=&amp;quot;background:black;&amp;quot; |- ||80px |style=&amp;quot;text-align:left; color:white;&amp;quot;|'''{{{1|{{PAGENAME}}}}}…”的新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;messagebox&amp;quot; style=&amp;quot;background:black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||[[File:Lilium formosanum var pricei.jpg|80px]]&lt;br /&gt;
|style=&amp;quot;text-align:left; color:white;&amp;quot;|'''{{{1|{{PAGENAME}}}}}'''{{#if:{{{2|}}}|（{{{2}}}—{{{3}}}）}}已經逝世，愿{{{4|{{gender|{{PAGENAME}}|中性=其}}}}}安息。&lt;br /&gt;
|}&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
{{#ifeq:{{NAMESPACE}}|{{ns:2}}|[[Category:已去世的維基人]]|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}} --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=File:Lilium_formosanum_var_pricei.jpg&amp;diff=13002</id>
		<title>File:Lilium formosanum var pricei.jpg</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=File:Lilium_formosanum_var_pricei.jpg&amp;diff=13002"/>
		<updated>2025-05-16T15:47:51Z</updated>

		<summary type="html">&lt;p&gt;白龙：Uploaded a work by 	Thorkild Poulsen from http://www.gtpoulsen.dk/Lilium.htm with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{zh|1=来自过去的摄影作品}}&lt;br /&gt;
|date=2006-08-23&lt;br /&gt;
|source=http://www.gtpoulsen.dk/Lilium.htm&lt;br /&gt;
|author=	Thorkild Poulsen&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{cc-zero}}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/Sandbox&amp;diff=12544</id>
		<title>User:白龙/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/Sandbox&amp;diff=12544"/>
		<updated>2024-01-01T15:04:08Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;粵以戊辰之年，建亥之月，大盜移國，{{ProperNoun|金陵}}瓦解。余乃竄身荒谷，公私塗炭。{{ProperNoun|華}}陽奔命，有去無歸，中興道消，窮於甲戌。三日哭於都亭，三年囚於別館。天道周星，物極不反。{{ProperNoun|傅燮}}之但悲身世，無所求生；{{ProperNoun|袁安}}之每念王室，自然流涕。昔{{ProperNoun|桓君山}}之志事，{{ProperNoun|杜元凱}}之生平，竝有著書，咸能自序。{{ProperNoun|潘岳}}之文采，始述家風；{{ProperNoun|陸機}}之詞賦，先陳世德。{{ProperNoun|信}}年始二毛，即逢喪亂，藐是流離，至于暮齒。{{WavyBookMark|燕謌}}遠別，悲不自勝；{{ProperNoun|楚}}老相逢，泣將何及！畏南山之雨，忽踐{{ProperNoun|秦}}庭；讓{{ProperNoun|東海}}之濱，遂{{另|飡|餐}}{{ProperNoun|周}}粟。{{ProperNoun|下亭}}漂泊，{{ProperNoun|{{另|高|臯}}橋}}羈旅，{{ProperNoun|楚}}歌非取樂之方，{{ProperNoun|魯}}酒無忘憂之用。追{{另|為|惟}}此賦，聊以記言，不無危苦之辭，惟以悲哀為主。&lt;br /&gt;
&lt;br /&gt;
　　日暮途遠，人間何世。將軍一去，大樹飄零；壯士不還，寒風蕭瑟。{{ProperNoun|荊}}璧睨柱，受連城而見欺；載書橫階，捧珠盤而不定。{{ProperNoun|鍾儀}}君子，入就南冠之囚；{{ProperNoun|季孫}}行人，留守{{ProperNoun|西河}}之館。{{ProperNoun|申包胥}}之頓地，碎之以首；{{ProperNoun|蔡威公之}}淚盡，加之以血。{{ProperNoun|釣臺}}移柳，非{{ProperNoun|玉關}}之可望；{{ProperNoun|華亭}}鶴唳，豈{{ProperNoun|河橋}}之可聞。&lt;br /&gt;
&lt;br /&gt;
　　{{ProperNoun|孫策}}以天下為三分，眾{{另|裁|才|纔}}一旅；{{ProperNoun|項羽}}用江東之子弟，人惟八千。遂乃分裂山河，宰割天下。豈有百萬義師，一朝卷甲，芟夷斬伐，如草木焉？{{ProperNoun|江}}{{ProperNoun|淮}}無涯岸之阻，亭壁無藩籬之固。頭會箕斂者，合從締交；鉏耰棘矜者，因利乘便。將非江表王氣，終于三百年乎？是知并吞六合，不免{{ProperNoun|軹道}}之災；混一車書，無救{{ProperNoun|平陽}}之禍。嗚呼！山嶽崩頹，既履危亡之運；春秋迭代，必有去故之悲。天意人事，可以悽愴傷心者矣。況复舟檝路窮，星漢非乘槎可上；風飈道阻，{{ProperNoun|蓬萊}}無可到之期。窮者欲達其言，勞者須歌其事。{{ProperNoun|陸士衡}}聞而撫掌，是所甘心；{{ProperNoun|張平子}}見而陋之，固其宜矣。&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
　　我之掌庾承{{ProperNoun|周}}，以世功而為族；經邦佐{{ProperNoun|漢}}，用論道而當官。稟{{ProperNoun|嵩}}{{ProperNoun|華}}之玉石，潤{{ProperNoun|河}}{{ProperNoun|洛}}之波瀾。居負{{ProperNoun|洛}}而重世，邑臨河而晏安。逮{{ProperNoun|永嘉}}之艱虞，始中原之乏主。民枕倚於墻壁，路交橫於豺虎。值五馬之南奔，逢三星之東聚。彼凌江而建國，此播遷於吾祖。分{{ProperNoun|南陽}}而賜田，裂{{ProperNoun|東嶽}}而胙土。誅茅{{ProperNoun|宋玉}}之宅，穿徑{{ProperNoun|臨江}}之府。水木交運，山川崩竭。家有直道，人多全節。訓子見於純深，事君彰於義烈。{{ProperNoun|新野}}有生祠之廟，河南有胡書之碣。況乃{{ProperNoun|少微}}真人，天山逸民。階庭空谷，門巷蒲輪。移談講樹，就簡書筠。降生世德，載誕貞臣。文詞高於甲觀，模楷盛於{{ProperNoun|漳}}濱。嗟有道而無鳳，歎非時而有麟。既姦回之{{另|贔|奰}}{{另|匿|逆}}，終不悅於仁人。&lt;br /&gt;
&lt;br /&gt;
　　{{ProperNoun|王子}}濱{{ProperNoun|洛}}之歲，{{ProperNoun|蘭成}}射策之年，始含香於{{ProperNoun|建禮}}，仍矯翼於{{ProperNoun|崇賢}}。游洊雷之講肆，齒明離之冑筵。既傾蠡而酌海，遂側管以窺天。方塘水白，釣渚池圓。侍戎韜於武帳，聽雅曲於文絃。乃解懸而通籍，遂崇文而會武。居笠轂而掌兵，出{{ProperNoun|蘭池}}而典午。論兵於{{ProperNoun|江}}{{ProperNoun|漢}}之君，拭玉於{{ProperNoun|西河}}之主。&lt;br /&gt;
&lt;br /&gt;
　　于時朝野歡娛，池臺鐘鼓。里為冠蓋，門成{{ProperNoun|鄒}}{{ProperNoun|魯}}。連茂苑於{{ProperNoun|海陵}}，跨{{ProperNoun|橫塘}}於江浦。東門則鞭石成橋，南極則鑄銅為柱。樹則園植萬株，竹則家封千戶。西賮浮玉，南琛沒羽。{{ProperNoun|吳}}歈{{ProperNoun|越}}吟，{{ProperNoun|荊}}豔{{ProperNoun|楚}}舞。草木之遇陽春，魚龍之逢風雨。五十年中，江表無事。{{ProperNoun|王歙}}為和親之侯，{{ProperNoun|班超}}為定遠之使。{{ProperNoun|馬武}}無預於甲兵，{{ProperNoun|馮唐}}不論於將帥。豈知山嶽闇然，江湖潛沸。{{ProperNoun|漁陽}}有閭左戍卒，{{ProperNoun|離石}}有將兵都尉。&lt;br /&gt;
&lt;br /&gt;
　　天子方刪詩書，定禮樂。設{{ProperNoun|重雲}}之講，開士林之學。談劫燼之灰飛，辯常星之夜落。地平{{ProperNoun|魚齒}}，城危獸角。臥刁斗於{{ProperNoun|滎陽}}，絆龍媒於{{ProperNoun|平樂}}。宰衡以干戈為兒戲，縉紳以清談為廟略。乘漬水而膠船，馭奔駒以朽索。小人則將及水火，君子則方成猨鶴。弊箄不能救鹽池之鹹，阿膠不能止{{ProperNoun|黃河}}之濁。既而魴魚頳尾，四郊多壘。殿狎江鷗，宮鳴野雉。湛盧去國，艅艎失水。見被髮於{{ProperNoun|伊}}川，知百年而為戎矣。&lt;br /&gt;
&lt;br /&gt;
　　彼姦逆之熾盛，久遊魂而放命。大則有鯨有鯢，小則為梟為獍。負其牛羊之力，凶其水草之性。非玉燭之能調，豈璿璣之可正。值天下之無為，尚有欲於羈縻。飲其琉璃之酒，賞其虎豹之皮。見胡{{另|桐|柯}}於{{ProperNoun|大夏}}，識鳥卵於{{ProperNoun|條支}}。豺牙密厲，虺毒潛吹。輕九鼎而欲問，聞三川而遂窺。&lt;br /&gt;
&lt;br /&gt;
　　始則王子召戎，姦臣介冑。既官政而離逿，遂師言而洩漏。望廷尉之逋囚，反{{ProperNoun|淮}}南之窮寇。飛{{ProperNoun|狄泉}}之蒼鳥，起{{ProperNoun|橫江}}之困獸。地則石鼓鳴山，天則金精動宿。北闕龍吟，東陵麟鬬。爾乃桀黠橫扇，憑陵畿甸。擁{{ProperNoun|狼望}}於黃圖，填{{ProperNoun|盧山}}於赤縣。青袍如草，白馬如練。天子履端廢朝，單于長圍高宴。兩觀當戟，千門受箭。白虹貫日，蒼鷹擊殿。競遭{{ProperNoun|夏臺}}之禍，遂視{{ProperNoun|堯城}}之變。官守無奔問之人，干戚非平戎之戰。{{ProperNoun|陶侃}}則空裝米船，{{ProperNoun|顧榮}}則虛搖羽扇。將軍死綏，路絕重圍。烽隨星落，書逐鳶飛。遂乃{{ProperNoun|韓}}分{{ProperNoun|趙}}裂，鼓臥旗折。失羣班馬，迷輪亂轍。猛士嬰城，謀臣卷舌。{{ProperNoun|昆陽}}之戰象走林，{{ProperNoun|常山}}之陣虵奔穴。五郡則兄弟相悲，三州則父子離別。&lt;br /&gt;
&lt;br /&gt;
　　護軍慷慨，忠能死節。三世為將，終於此滅。{{ProperNoun|濟陽}}忠壯，身參末將。兄弟三人，義聲俱唱。主辱臣死，名存身喪。狄人歸元，三軍悽愴。尚書多算，守備是長。雲梯可拒，地道能防。有{{ProperNoun|齊}}將之閉壁，無{{ProperNoun|燕}}師之臥墻。大事去矣，人之云亡。{{ProperNoun|申子}}奮發，勇氣咆勃。實總元戎，身先士卒。冑落{{ProperNoun|魚門}}，兵填馬窟。屢犯通中，頻遭刮骨。功業夭枉，身名埋沒。或以隼翼鷃披，虎威狐假。霑漬鋒鏑，脂膏原野。兵弱虜彊，城孤氣寡。聞鶴唳而心驚，聽胡笳而淚下。據{{ProperNoun|神亭}}而亡戟，臨{{ProperNoun|橫江}}而棄馬。崩於{{ProperNoun|鉅鹿}}之沙，碎於{{ProperNoun|長平}}之瓦。於是桂林顛覆，長洲麋鹿。潰潰沸騰，茫茫慘黷。天地離阻，人神怨酷。{{ProperNoun|晉}}{{ProperNoun|鄭}}靡依，{{ProperNoun|魯}}{{ProperNoun|衞}}不睦。競動天關，爭回地軸。探雀鷇而未飽，待熊蹯而詎熟。乃有車側郭門，筋懸廟屋。鬼同{{ProperNoun|曹}}社之謀，人有{{ProperNoun|秦}}庭之哭。&lt;br /&gt;
&lt;br /&gt;
　　余乃假刻璽於關塞，稱使者之詶對。逢{{ProperNoun|鄂}}坂之譏嫌，值{{ProperNoun|耏門}}之征稅。乘白馬而不前，策青騾而轉礙。吹落葉之扁舟，飄長颿於上游。彼鋸牙而勾爪，又巡江而習流。排青龍之戰艦，鬬飛䴏之船樓。{{ProperNoun|張遼}}臨於{{ProperNoun|赤壁}}，{{ProperNoun|王濬}}下於{{ProperNoun|巴}}丘。乍風驚而射火，或箭重而回舟。未辨聲於{{ProperNoun|黃蓋}}，已先沈於{{ProperNoun|杜侯}}。落帆{{ProperNoun|黃鶴}}之浦，藏船{{ProperNoun|鸚鵡}}之洲。路已分於{{ProperNoun|湘}}{{ProperNoun|漢}}，星猶看於{{ProperNoun|斗}}{{ProperNoun|牛}}。若乃{{ProperNoun|陰陵}}失路，{{ProperNoun|釣臺}}斜趣。望赤{{另|岸|壁}}而霑衣，艤{{ProperNoun|烏江}}而不度。{{ProperNoun|雷池}}柵浦，{{ProperNoun|鵲陵}}焚戍。旅舍無烟，巢禽失樹。謂{{ProperNoun|荊}}{{ProperNoun|衡}}之杞梓，庶{{ProperNoun|江}}{{ProperNoun|漢}}之可恃。{{ProperNoun|淮}}海{{ProperNoun|維揚}}，三千餘里。過漂渚而寄食，托蘆中而度水。屆于七澤，濱于十死。嗟天保之未定，見殷憂之方始。本不達於危行，又無情於祿仕。謬掌衞於中軍，濫尸丞於御史。&lt;br /&gt;
&lt;br /&gt;
　　信生世等於{{ProperNoun|龍門}}，辭親同於{{ProperNoun|河}}{{ProperNoun|洛}}。奉立身之遺訓，受成書之顧託。昔三世而無慙，今七葉而始落。泣風雨於梁山，惟枯魚之銜索。入欹斜之小徑，掩蓬藋之荒扉。就汀洲之杜若，待蘆葦之單衣。&lt;br /&gt;
&lt;br /&gt;
　　于時{{ProperNoun|西楚霸王}}，劍及{{ProperNoun|繁陽}}。鏖兵金匱，校戰玉堂。蒼鷹赤雀，鐵舳牙檣。沈白馬而誓眾，負黃龍而度{{ProperNoun|湘}}。海潮迎艦，江萍送王。戎車屯于{{ProperNoun|石城}}，戈船掩乎{{ProperNoun|淮泗}}。諸侯則{{ProperNoun|鄭伯}}前驅，盟主則{{ProperNoun|荀罃}}暮至。剖巢燻穴，奔魑走魅。埋{{ProperNoun|長狄}}於{{ProperNoun|駒門}}，斬{{ProperNoun|蚩尤}}於{{ProperNoun|中冀}}。然腹為燈，飲頭為器。直虹貫壘，長星屬地。昔之虎據龍盤，加以黃旗紫氣，莫不隨狐兔而窟穴，與風塵而殄瘁。&lt;br /&gt;
&lt;br /&gt;
　　西瞻{{ProperNoun|博望}}，北臨{{ProperNoun|玄圃}}。月榭風臺，池平樹古。倚弓於玉女牕扉，繫馬於鳳凰樓柱。{{ProperNoun|仁壽}}之鏡徒懸，{{ProperNoun|茂陵}}之書空聚。若夫立德立言，謨明夤亮。聲超於繫表，道高於{{ProperNoun|河上}}。既不遇於{{ProperNoun|浮丘}}，遂無言於{{ProperNoun|師曠}}。指愛子而託人，知西陵而誰望。非無北闕之兵，猶有雲臺之仗。司徒之表裏經綸，{{ProperNoun|狐偃}}之惟王實勤。橫琱戈而對霸主，執金鼓而問賊臣。平{{ProperNoun|吳}}之功，壯於{{ProperNoun|杜元凱}}；王室是賴，深於{{ProperNoun|溫太真}}。始則地名{{ProperNoun|全節}}，終以山稱{{ProperNoun|枉人}}。{{ProperNoun|南陽}}校書，去之已遠。{{ProperNoun|上蔡}}逐獵，知之何晚。鎮北之負譽矜前，風飈懍然。水神遭箭，山靈見鞭。是以蟄熊傷馬，浮蛟沒船。才子并命，俱非百年。&lt;br /&gt;
&lt;br /&gt;
　　中宗之夷凶靜亂，大雪冤恥。去{{ProperNoun|代}}邸而承基，遷{{ProperNoun|唐}}郊而纂祀。反舊章於{{ProperNoun|司隸}}，歸餘風於{{ProperNoun|正始}}。沉猜則方逞其欲，藏疾則自矜於己。天下之事沒焉，諸侯之心搖矣。既而{{ProperNoun|齊}}交北絕，{{ProperNoun|秦}}患西起。況背關而懷{{ProperNoun|楚}}，異端委而開{{ProperNoun|吳}}。驅{{ProperNoun|綠林}}之散卒，拒{{ProperNoun|驪山}}之叛徒。營軍梁{{ProperNoun|溠}}，蒐乘{{ProperNoun|巴}}{{ProperNoun|渝}}。問諸淫昏之鬼，求諸厭劾之巫。{{ProperNoun|荊門}}遭{{ProperNoun|廩延}}之戮，{{ProperNoun|夏{{另|首|口}}}}濫{{ProperNoun|逵泉}}之誅。蔑因親於教愛，忍和樂於彎弧。慨無謀於肉食，非所望於論都。未深思於五難，先自擅於二端。登{{ProperNoun|陽城}}而避險，臥{{ProperNoun|{{另|底|砥}}柱}}而求安。既言多於忌刻，實志勇於刑殘。但坐觀於時變，本無情於急難。地為黑子，城猶彈丸。其怨則黷，其盟則寒。豈冤禽之能塞海，非愚叟之可移山。況以沴氣朝浮，妖精夜殞。赤鳥則三朝夾日，蒼雲則七重圍{{ProperNoun|軫}}。亡{{ProperNoun|吳}}之歲既窮，入{{ProperNoun|郢}}之年斯盡。&lt;br /&gt;
&lt;br /&gt;
　　{{ProperNoun|周}}含{{ProperNoun|鄭}}怒，{{ProperNoun|楚}}結{{ProperNoun|秦}}冤。有南風之不競，值西鄰之責言。俄而梯衝亂舞，冀馬雲屯。棧{{ProperNoun|秦}}車於暢轂，沓{{ProperNoun|漢}}鼓於{{ProperNoun|雷門}}。下{{ProperNoun|陳倉}}而連弩，度{{ProperNoun|臨晉}}而橫船。雖復{{ProperNoun|楚}}有七澤，人稱三戶。箭不麗於六麋，雷無驚於九虎。辭{{ProperNoun|洞庭}}兮落木，去{{ProperNoun|涔陽}}兮極浦。熾火兮焚旗，貞風兮害蠱。乃使玉軸揚灰，龍文斫柱。{{ProperNoun|下江}}餘城，{{ProperNoun|長林}}故營。徒思箝馬之秣，未見燒牛之兵。{{ProperNoun|章曼支}}以轂走，{{ProperNoun|宮之奇}}以族行。河無冰而馬度，關未曉而雞鳴。忠臣解骨，君子吞聲。{{ProperNoun|章華}}望祭之所，{{ProperNoun|雲夢}}偽遊之地。荒谷縊於莫敖，{{ProperNoun|冶父}}囚乎羣帥。{{ProperNoun|硎阱}}摺拉，鷹鸇批㩌。冤霜夏零，憤泉秋沸。城崩{{ProperNoun|杞}}婦之哭，竹染{{ProperNoun|湘}}妃之淚。&lt;br /&gt;
&lt;br /&gt;
　　水毒{{ProperNoun|秦}}{{ProperNoun|涇}}，山高{{ProperNoun|趙}}{{ProperNoun|陘}}。十里五里，長亭短亭。饑隨蟄䴏，闇逐流螢。{{ProperNoun|秦}}中水黑，關上泥青。于時瓦解冰泮，風飛電散。渾然千里，{{ProperNoun|淄}}{{ProperNoun|澠}}一亂。雪暗如沙，冰橫似岸。逢赴{{ProperNoun|洛}}之{{ProperNoun|陸機}}，見離家之{{ProperNoun|王粲}}。莫不聞隴水而掩泣，向關山而長歎。況復君在{{ProperNoun|交河}}，妾在清波。石望夫而逾遠，山望子而逾多。才人之憶{{ProperNoun|代郡}}，公主之去{{ProperNoun|清河}}。{{ProperNoun|栩陽}}亭有離別之賦，{{ProperNoun|臨江王}}有愁思之歌。別有飄颻{{ProperNoun|武威}}，羈旅{{ProperNoun|金微}}。{{ProperNoun|班超}}生而望反，{{ProperNoun|溫序}}死而思歸。{{ProperNoun|李陵}}之雙鳬永去，{{ProperNoun|蘇武}}之一鴈空飛。&lt;br /&gt;
&lt;br /&gt;
　　昔{{ProperNoun|江陵}}之中否，乃金陵之禍始。雖借人之外力，實蕭墻之內起。撥亂之主忽焉，中興之宗不祀。伯兮叔兮，同見戮於猶子。{{ProperNoun|荊山}}鵲飛而玉碎，{{ProperNoun|隨}}岸虵生而珠死。鬼火亂於{{ProperNoun|平林}}，殤魂驚於{{ProperNoun|新市}}。{{ProperNoun|梁}}故{{ProperNoun|豐}}徙，{{ProperNoun|楚}}實{{ProperNoun|秦}}亡。不有所廢，其何以昌。{{ProperNoun|有媯}}之後，遂育于{{ProperNoun|姜}}。輸我神器，居為讓王。天地之大德曰生，聖人之大寶曰位。用無賴之子孫，舉江東而全棄。惜天下之一家，遭東南之反氣。以{{ProperNoun|鶉首}}而賜{{ProperNoun|秦}}，天何為而此醉！&lt;br /&gt;
&lt;br /&gt;
　　且夫天道回旋，民生預焉。余烈祖於{{ProperNoun|西晉}}，始流播於東川。洎余身而七葉，又遭時而北遷。提挈老幼，關河累年。死生契闊，不可問天。況復零落將盡，靈光巍然。日窮于紀，歲將復始。逼切危慮，端憂暮齒。踐{{ProperNoun|長樂}}之神臯，望{{ProperNoun|宣平}}之貴里。{{ProperNoun|渭水}}貫於天門，{{ProperNoun|驪山}}回於地市。幕府大將軍之愛客，丞相平津侯之待士。見鐘鼎於{{ProperNoun|金}}、{{ProperNoun|張}}，聞絃謌於{{ProperNoun|許}}、{{ProperNoun|史}}。豈知{{ProperNoun|灞陵}}夜獵，猶是故時將軍；{{ProperNoun|咸陽}}布衣，非獨思歸王子。&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12520</id>
		<title>高等数学</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12520"/>
		<updated>2023-12-24T17:53:43Z</updated>

		<summary type="html">&lt;p&gt;白龙：/* 第十章 无穷级数 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 绪论 微积分的背景 ==&lt;br /&gt;
&lt;br /&gt;
微积分有一段漫长的历史&amp;lt;ref name=&amp;quot;mathHis&amp;quot;&amp;gt;D.J.斯特罗伊克.数学简史（第四版）[M].胡滨 译.北京：高等教育出版社，2018&amp;lt;/ref&amp;gt;。尽管大家都认为微积分是由牛顿和莱布尼兹各自独立发明的，但早在此之前，无穷分析的思想就已有了萌芽。&lt;br /&gt;
&lt;br /&gt;
=== 0.1 芝诺悖论与穷竭法 ===&lt;br /&gt;
约公元前450年，巴门尼德（Parmenides）的门徒埃利亚人芝诺提出了四个悖论，经亚里士多德记录下来，分别称为阿喀琉斯（Achilles）悖论、飞矢不动悖论、二分法悖论和游行队伍悖论。这四个悖论造成的震荡，余波至今未息。&lt;br /&gt;
&lt;br /&gt;
{{Quote|'''阿喀琉斯悖论'''&lt;br /&gt;
&lt;br /&gt;
阿喀琉斯和乌龟沿直线向相同方向运动，阿喀琉斯比乌龟快得多，但要赶上乌龟，他必须先经过乌龟的起点P.等他到达P，乌龟已经走到P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，阿喀琉斯要追上乌龟先要经过P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，但此时乌龟已经走到新点P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.等他到达P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，乌龟又走到P&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;，等等，所以阿喀琉斯永远也追不上乌龟.&lt;br /&gt;
&lt;br /&gt;
'''二分法悖论'''&lt;br /&gt;
&lt;br /&gt;
假设我想沿直线从A到B，在到达B之前先要走过AB距离的一半AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，而要到达B&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，又先要到达AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;的中点B&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，如此下去无穷无尽，运动永远无法开始.}}&lt;br /&gt;
&lt;br /&gt;
芝诺的论证表明，一条有限线段可以分为无穷多条有限长的小线段，论证还表明，解释所谓直线由点“构成”具有困难。很有可能芝诺本人也不了解他的论证的数学含义，在哲学和数学讨论中不断出现最终变成他的悖论的问题，我们将其看作是关于“潜”无穷和“实”无穷关系的问题。然而塔内里却相信芝诺的论证特别针对的是毕达哥拉斯学派空间是点之和的观点（“点就是位置的单元”）.无论事实如何，芝诺的论证确实影响了多少代人的数学思想，他的悖论可以和伯克莱主教（Bishop Berkeley）1734年使用的悖论相媲美，伯克莱主教当时表明了微积分原理构成欠缺引出的逻辑悖论，但没有提出更好的根据.&lt;br /&gt;
&lt;br /&gt;
发现无理数之后，芝诺的论证更使数学家担忧.数学作为一门准确的科学是否可能？&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|54-55}}&lt;br /&gt;
&lt;br /&gt;
“穷竭法”（exhaustion method，“exhaust”一词首见于圣樊尚(Gregoire de Saint-Vincent)，1647年）是柏拉图学派对芝诺的回答，通过舍去无穷小量并将可能导致无穷小的问题简化为只涉及形式逻辑的问题，避免了无穷小陷阱. 例如，当需要证明一个四面体的体积V等于一同底等高的棱柱体的体积P的三分之一时，证明包括表明两个假设V&amp;gt;1/3P和V&amp;lt;1/3P都不能成立. 为此引进一条与阿基米德（或欧多克索斯）公理等价的公理，阿基米德将这个公理阐述如下：对于两个不相等的量，“将大量超过小量的量加到该量本身上面，就会超过可与这两个量相比的任意指定的量”. 这里“加到该量本身上面”可以重复任意次. 在我们四面体的情况下，推理就是：假设V=A，证明A&amp;gt;1/3P是矛盾的. 将四面体置于n个棱柱组成的外切阶梯四面体之内，每个棱柱高h/n，h是四面体的高，可见当n取足够大时，阶梯四面体的体积就会小于A，因为它的体积一定大于V，我们就得到矛盾. 用类似的方法，我们用内接阶梯四面体可以证明V&amp;lt;1/3P不能成立. 欧几里得用这个方法证明了几个命题，其中有“两圆面积之比等于直径之比的平方”的定理.&lt;br /&gt;
&lt;br /&gt;
这个间接方法非常严格，称为希腊和文艺复兴时代计算面积和体积标准的严格证明模式，而且还可以很容易地翻译成满足现代分析所要求的证明. 它的一大缺陷是事先要已知需要证明的结果，数学家必须先用其他不太严格和更优实验性的方法把结果求出来.&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|58-59}}&lt;br /&gt;
&lt;br /&gt;
=== 0.2 牛顿与莱布尼兹之争 ===&lt;br /&gt;
17世纪，牛顿在《自然哲学的数学原理》中初步描述了他的流数理论。同一时期，莱布尼兹通过研究笛卡尔和帕斯卡，发现了他的新微积分。&lt;br /&gt;
&lt;br /&gt;
=== 0.3 第二次数学危机与柯西的解决方案 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.4 黎曼积分与勒贝格积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.5 计算方法与混沌系统 ===&lt;br /&gt;
&lt;br /&gt;
== 第一章 导数 ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 极限基础 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.2 导数定义及运算法则 ===&lt;br /&gt;
'''导数'''（英语：derivative）是微积分学中的一个概念。函数在某一点的导数是指这个函数在这一点附近的变化率。&lt;br /&gt;
&lt;br /&gt;
=== 1.3 一些求导技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.4 微分中值定理 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.5 洛必达法则、泰勒公式 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.6 导数的应用 ===&lt;br /&gt;
&lt;br /&gt;
== 第二章 极限 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 无穷是什么——Cauchy的ε语言 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.2 数列极限的定义、性质与证明技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.3 函数极限与连续函数 ===&lt;br /&gt;
&lt;br /&gt;
=== *2.4 实数完备性公理 ===&lt;br /&gt;
&lt;br /&gt;
== 第三章 不定积分 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 不定积分的概念——反导数 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.2 不定积分的运算法则与换元法 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.3 一些函数的不定积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4 不定积分的高级技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.5 初等不可积函数 ===&lt;br /&gt;
&lt;br /&gt;
== 第四章 定积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第五章 微分方程 ==&lt;br /&gt;
&lt;br /&gt;
== 第六章 多元函数 ==&lt;br /&gt;
&lt;br /&gt;
== 第七章 多元函数微分学 ==&lt;br /&gt;
&lt;br /&gt;
== 第八章 重积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第九章 曲线积分与曲面积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第十章 无穷级数 ==&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
*[[导数列表]]&lt;br /&gt;
*[[积分列表]]&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12519</id>
		<title>高等数学</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12519"/>
		<updated>2023-12-24T17:50:17Z</updated>

		<summary type="html">&lt;p&gt;白龙：/* 0.1 芝诺悖论与穷竭法 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 绪论 微积分的背景 ==&lt;br /&gt;
&lt;br /&gt;
微积分有一段漫长的历史&amp;lt;ref name=&amp;quot;mathHis&amp;quot;&amp;gt;D.J.斯特罗伊克.数学简史（第四版）[M].胡滨 译.北京：高等教育出版社，2018&amp;lt;/ref&amp;gt;。尽管大家都认为微积分是由牛顿和莱布尼兹各自独立发明的，但早在此之前，无穷分析的思想就已有了萌芽。&lt;br /&gt;
&lt;br /&gt;
=== 0.1 芝诺悖论与穷竭法 ===&lt;br /&gt;
约公元前450年，巴门尼德（Parmenides）的门徒埃利亚人芝诺提出了四个悖论，经亚里士多德记录下来，分别称为阿喀琉斯（Achilles）悖论、飞矢不动悖论、二分法悖论和游行队伍悖论。这四个悖论造成的震荡，余波至今未息。&lt;br /&gt;
&lt;br /&gt;
{{Quote|'''阿喀琉斯悖论'''&lt;br /&gt;
&lt;br /&gt;
阿喀琉斯和乌龟沿直线向相同方向运动，阿喀琉斯比乌龟快得多，但要赶上乌龟，他必须先经过乌龟的起点P.等他到达P，乌龟已经走到P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，阿喀琉斯要追上乌龟先要经过P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，但此时乌龟已经走到新点P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.等他到达P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，乌龟又走到P&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;，等等，所以阿喀琉斯永远也追不上乌龟.&lt;br /&gt;
&lt;br /&gt;
'''二分法悖论'''&lt;br /&gt;
&lt;br /&gt;
假设我想沿直线从A到B，在到达B之前先要走过AB距离的一半AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，而要到达B&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，又先要到达AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;的中点B&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，如此下去无穷无尽，运动永远无法开始.}}&lt;br /&gt;
&lt;br /&gt;
芝诺的论证表明，一条有限线段可以分为无穷多条有限长的小线段，论证还表明，解释所谓直线由点“构成”具有困难。很有可能芝诺本人也不了解他的论证的数学含义，在哲学和数学讨论中不断出现最终变成他的悖论的问题，我们将其看作是关于“潜”无穷和“实”无穷关系的问题。然而塔内里却相信芝诺的论证特别针对的是毕达哥拉斯学派空间是点之和的观点（“点就是位置的单元”）.无论事实如何，芝诺的论证确实影响了多少代人的数学思想，他的悖论可以和伯克莱主教（Bishop Berkeley）1734年使用的悖论相媲美，伯克莱主教当时表明了微积分原理构成欠缺引出的逻辑悖论，但没有提出更好的根据.&lt;br /&gt;
&lt;br /&gt;
发现无理数之后，芝诺的论证更使数学家担忧.数学作为一门准确的科学是否可能？&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|54-55}}&lt;br /&gt;
&lt;br /&gt;
“穷竭法”（exhaustion method，“exhaust”一词首见于圣樊尚(Gregoire de Saint-Vincent)，1647年）是柏拉图学派对芝诺的回答，通过舍去无穷小量并将可能导致无穷小的问题简化为只涉及形式逻辑的问题，避免了无穷小陷阱. 例如，当需要证明一个四面体的体积V等于一同底等高的棱柱体的体积P的三分之一时，证明包括表明两个假设V&amp;gt;1/3P和V&amp;lt;1/3P都不能成立. 为此引进一条与阿基米德（或欧多克索斯）公理等价的公理，阿基米德将这个公理阐述如下：对于两个不相等的量，“将大量超过小量的量加到该量本身上面，就会超过可与这两个量相比的任意指定的量”. 这里“加到该量本身上面”可以重复任意次. 在我们四面体的情况下，推理就是：假设V=A，证明A&amp;gt;1/3P是矛盾的. 将四面体置于n个棱柱组成的外切阶梯四面体之内，每个棱柱高h/n，h是四面体的高，可见当n取足够大时，阶梯四面体的体积就会小于A，因为它的体积一定大于V，我们就得到矛盾. 用类似的方法，我们用内接阶梯四面体可以证明V&amp;lt;1/3P不能成立. 欧几里得用这个方法证明了几个命题，其中有“两圆面积之比等于直径之比的平方”的定理.&lt;br /&gt;
&lt;br /&gt;
这个间接方法非常严格，称为希腊和文艺复兴时代计算面积和体积标准的严格证明模式，而且还可以很容易地翻译成满足现代分析所要求的证明. 它的一大缺陷是事先要已知需要证明的结果，数学家必须先用其他不太严格和更优实验性的方法把结果求出来.&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|58-59}}&lt;br /&gt;
&lt;br /&gt;
=== 0.2 牛顿与莱布尼兹之争 ===&lt;br /&gt;
17世纪，牛顿在《自然哲学的数学原理》中初步描述了他的流数理论。同一时期，莱布尼兹通过研究笛卡尔和帕斯卡，发现了他的新微积分。&lt;br /&gt;
&lt;br /&gt;
=== 0.3 第二次数学危机与柯西的解决方案 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.4 黎曼积分与勒贝格积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.5 计算方法与混沌系统 ===&lt;br /&gt;
&lt;br /&gt;
== 第一章 导数 ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 极限基础 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.2 导数定义及运算法则 ===&lt;br /&gt;
'''导数'''（英语：derivative）是微积分学中的一个概念。函数在某一点的导数是指这个函数在这一点附近的变化率。&lt;br /&gt;
&lt;br /&gt;
=== 1.3 一些求导技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.4 微分中值定理 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.5 洛必达法则、泰勒公式 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.6 导数的应用 ===&lt;br /&gt;
&lt;br /&gt;
== 第二章 极限 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 无穷是什么——Cauchy的ε语言 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.2 数列极限的定义、性质与证明技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.3 函数极限与连续函数 ===&lt;br /&gt;
&lt;br /&gt;
=== *2.4 实数完备性公理 ===&lt;br /&gt;
&lt;br /&gt;
== 第三章 不定积分 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 不定积分的概念——反导数 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.2 不定积分的运算法则与换元法 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.3 一些函数的不定积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4 不定积分的高级技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.5 初等不可积函数 ===&lt;br /&gt;
&lt;br /&gt;
== 第四章 定积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第五章 微分方程 ==&lt;br /&gt;
&lt;br /&gt;
== 第六章 多元函数 ==&lt;br /&gt;
&lt;br /&gt;
== 第七章 多元函数微分学 ==&lt;br /&gt;
&lt;br /&gt;
== 第八章 重积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第九章 曲线积分与曲面积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第十章 无穷级数 ==&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12518</id>
		<title>高等数学</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12518"/>
		<updated>2023-12-24T17:49:06Z</updated>

		<summary type="html">&lt;p&gt;白龙：/* 绪论 微积分的背景 */别用p和b这种HTML标签啊&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 绪论 微积分的背景 ==&lt;br /&gt;
&lt;br /&gt;
微积分有一段漫长的历史&amp;lt;ref name=&amp;quot;mathHis&amp;quot;&amp;gt;D.J.斯特罗伊克.数学简史（第四版）[M].胡滨 译.北京：高等教育出版社，2018&amp;lt;/ref&amp;gt;。尽管大家都认为微积分是由牛顿和莱布尼兹各自独立发明的，但早在此之前，无穷分析的思想就已有了萌芽。&lt;br /&gt;
&lt;br /&gt;
=== 0.1 芝诺悖论与穷竭法 ===&lt;br /&gt;
约公元前450年，巴门尼德（Parmenides）的门徒埃利亚人芝诺提出了四个悖论，经亚里士多德记录下来，分别称为阿喀琉斯（Achilles）悖论、飞矢不动悖论、二分法悖论和游行队伍悖论。这四个悖论造成的震荡，余波至今未息。&lt;br /&gt;
&lt;br /&gt;
{{Quote|'''阿喀琉斯悖论'''　　阿喀琉斯和乌龟沿直线向相同方向运动，阿喀琉斯比乌龟快得多，但要赶上乌龟，他必须先经过乌龟的起点P.等他到达P，乌龟已经走到P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，阿喀琉斯要追上乌龟先要经过P&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，但此时乌龟已经走到新点P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;.等他到达P&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，乌龟又走到P&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;，等等，所以阿喀琉斯永远也追不上乌龟.&lt;br /&gt;
&lt;br /&gt;
'''二分法悖论'''　　假设我想沿直线从A到B，在到达B之前先要走过AB距离的一半AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，而要到达B&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;，又先要到达AB&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;的中点B&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;，如此下去无穷无尽，运动永远无法开始.}}&lt;br /&gt;
&lt;br /&gt;
芝诺的论证表明，一条有限线段可以分为无穷多条有限长的小线段，论证还表明，解释所谓直线由点“构成”具有困难。很有可能芝诺本人也不了解他的论证的数学含义，在哲学和数学讨论中不断出现最终变成他的悖论的问题，我们将其看作是关于“潜”无穷和“实”无穷关系的问题。然而塔内里却相信芝诺的论证特别针对的是毕达哥拉斯学派空间是点之和的观点（“点就是位置的单元”）.无论事实如何，芝诺的论证确实影响了多少代人的数学思想，他的悖论可以和伯克莱主教（Bishop Berkeley）1734年使用的悖论相媲美，伯克莱主教当时表明了微积分原理构成欠缺引出的逻辑悖论，但没有提出更好的根据.&lt;br /&gt;
&lt;br /&gt;
发现无理数之后，芝诺的论证更使数学家担忧.数学作为一门准确的科学是否可能？&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|54-55}}&lt;br /&gt;
&lt;br /&gt;
“穷竭法”（exhaustion method，“exhaust”一词首见于圣樊尚(Gregoire de Saint-Vincent)，1647年）是柏拉图学派对芝诺的回答，通过舍去无穷小量并将可能导致无穷小的问题简化为只涉及形式逻辑的问题，避免了无穷小陷阱. 例如，当需要证明一个四面体的体积V等于一同底等高的棱柱体的体积P的三分之一时，证明包括表明两个假设V&amp;gt;1/3P和V&amp;lt;1/3P都不能成立. 为此引进一条与阿基米德（或欧多克索斯）公理等价的公理，阿基米德将这个公理阐述如下：对于两个不相等的量，“将大量超过小量的量加到该量本身上面，就会超过可与这两个量相比的任意指定的量”. 这里“加到该量本身上面”可以重复任意次. 在我们四面体的情况下，推理就是：假设V=A，证明A&amp;gt;1/3P是矛盾的. 将四面体置于n个棱柱组成的外切阶梯四面体之内，每个棱柱高h/n，h是四面体的高，可见当n取足够大时，阶梯四面体的体积就会小于A，因为它的体积一定大于V，我们就得到矛盾. 用类似的方法，我们用内接阶梯四面体可以证明V&amp;lt;1/3P不能成立. 欧几里得用这个方法证明了几个命题，其中有“两圆面积之比等于直径之比的平方”的定理.&lt;br /&gt;
&lt;br /&gt;
这个间接方法非常严格，称为希腊和文艺复兴时代计算面积和体积标准的严格证明模式，而且还可以很容易地翻译成满足现代分析所要求的证明. 它的一大缺陷是事先要已知需要证明的结果，数学家必须先用其他不太严格和更优实验性的方法把结果求出来.&amp;lt;ref name=&amp;quot;mathHis&amp;quot; /&amp;gt;{{rp|58-59}}&lt;br /&gt;
&lt;br /&gt;
=== 0.2 牛顿与莱布尼兹之争 ===&lt;br /&gt;
17世纪，牛顿在《自然哲学的数学原理》中初步描述了他的流数理论。同一时期，莱布尼兹通过研究笛卡尔和帕斯卡，发现了他的新微积分。&lt;br /&gt;
&lt;br /&gt;
=== 0.3 第二次数学危机与柯西的解决方案 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.4 黎曼积分与勒贝格积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.5 计算方法与混沌系统 ===&lt;br /&gt;
&lt;br /&gt;
== 第一章 导数 ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 极限基础 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.2 导数定义及运算法则 ===&lt;br /&gt;
'''导数'''（英语：derivative）是微积分学中的一个概念。函数在某一点的导数是指这个函数在这一点附近的变化率。&lt;br /&gt;
&lt;br /&gt;
=== 1.3 一些求导技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.4 微分中值定理 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.5 洛必达法则、泰勒公式 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.6 导数的应用 ===&lt;br /&gt;
&lt;br /&gt;
== 第二章 极限 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 无穷是什么——Cauchy的ε语言 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.2 数列极限的定义、性质与证明技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.3 函数极限与连续函数 ===&lt;br /&gt;
&lt;br /&gt;
=== *2.4 实数完备性公理 ===&lt;br /&gt;
&lt;br /&gt;
== 第三章 不定积分 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 不定积分的概念——反导数 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.2 不定积分的运算法则与换元法 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.3 一些函数的不定积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4 不定积分的高级技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.5 初等不可积函数 ===&lt;br /&gt;
&lt;br /&gt;
== 第四章 定积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第五章 微分方程 ==&lt;br /&gt;
&lt;br /&gt;
== 第六章 多元函数 ==&lt;br /&gt;
&lt;br /&gt;
== 第七章 多元函数微分学 ==&lt;br /&gt;
&lt;br /&gt;
== 第八章 重积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第九章 曲线积分与曲面积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第十章 无穷级数 ==&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
&amp;lt;references&amp;gt;&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12517</id>
		<title>User:白龙/世系图</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12517"/>
		<updated>2023-12-24T16:37:15Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 阿基米德-西夷夫人世系 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0 | | | | | | | | | | | | | | | | | | | | | | |:| ad |ad=过继 }}&lt;br /&gt;
{{chart| | | | | | | | Archi |~|y|~| XYFR | | | | | | |Archi=阿基米德|XYFR=西夷夫人}}&lt;br /&gt;
{{chart| | | |,|-|-|-|v|-|-|-|+|-|-|-|v|-|-|-|.| |}}&lt;br /&gt;
{{chart| | |ECU| |ORD| |USL| |AKR| |BTF|ECU=兀几儿德|ORD=兀良的是|USL=卧生力斯|AKR=亚可入诺|BTF=孛惕日亦}}&lt;br /&gt;
&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 阿基米德-乌木夫人世系图 ==&lt;br /&gt;
&lt;br /&gt;
== 阿基米德-十三郡公主世系图 ==&lt;br /&gt;
&lt;br /&gt;
== 周冠世系图 ==&lt;br /&gt;
&lt;br /&gt;
== 王阿儿子世系图 ==&lt;br /&gt;
&lt;br /&gt;
== 利兴昌世系图 ==&lt;br /&gt;
&lt;br /&gt;
== 白瑶世系图 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart | BY |BY=白瑶 }}&lt;br /&gt;
{{chart | |!| }}&lt;br /&gt;
{{chart | BP |BP=白普 }}&lt;br /&gt;
{{chart | |!| }}&lt;br /&gt;
{{chart | BM|BM=白密 }}&lt;br /&gt;
{{chart | |!}}&lt;br /&gt;
{{chart | SP |SP=白沙平 }}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12516</id>
		<title>User:白龙/世系图</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12516"/>
		<updated>2023-12-24T16:20:33Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 阿基米德-西夷夫人世系 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0 | | | | | | | | | | | | | | | | | | | | | | |:| ad |ad=过继 }}&lt;br /&gt;
{{chart| | | | | | | | Archi |~|y|~| XYFR | | | | | | |Archi=阿基米德|XYFR=西夷夫人}}&lt;br /&gt;
{{chart| | | |,|-|-|-|v|-|-|-|+|-|-|-|v|-|-|-|.| |}}&lt;br /&gt;
{{chart| | |ECU| |ORD| |USL| |AKR| |BTF|ECU=兀几儿德|ORD=兀良的是|USL=卧生力斯|AKR=亚可入诺|BTF=孛惕日亦}}&lt;br /&gt;
&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 白瑶世系图 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart | BY |BY=白瑶 }}&lt;br /&gt;
{{chart | |!| }}&lt;br /&gt;
{{chart | BP |BP=白普 }}&lt;br /&gt;
{{chart | |!| }}&lt;br /&gt;
{{chart | BYU|BYU=白彧 }}&lt;br /&gt;
{{chart | |!}}&lt;br /&gt;
{{chart | SP |SP=白沙平 }}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12515</id>
		<title>User:白龙/世系图</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12515"/>
		<updated>2023-12-24T12:29:31Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 阿基米德-西夷夫人世系 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0 | | | | | | | | | | | | | | | | | | | | | | |:| ad |ad=过继 }}&lt;br /&gt;
{{chart| | | | | | | | Archi |~|y|~| XYFR | | | | | | |Archi=阿基米德|XYFR=西夷夫人}}&lt;br /&gt;
{{chart| | | |,|-|-|-|v|-|-|-|+|-|-|-|v|-|-|-|.| |}}&lt;br /&gt;
{{chart| | |ECU| |ORD| |USL| |AKR| |BTF|ECU=兀几儿德|ORD=兀良的是|USL=卧生力斯|AKR=亚可入诺|BTF=孛惕日亦}}&lt;br /&gt;
&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12514</id>
		<title>User:白龙/世系图</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/%E4%B8%96%E7%B3%BB%E5%9B%BE&amp;diff=12514"/>
		<updated>2023-12-24T12:26:51Z</updated>

		<summary type="html">&lt;p&gt;白龙：建立内容为“&amp;lt;center&amp;gt; {{chart/start}} {{chart|border=0 | | | | | | | | | | | | | | | | | | | | | | |:| ad |ad=过继 }} {{chart| | | | | | | | Archi |~|y|~| XYFR | | | | | | |…”的新页面&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0 | | | | | | | | | | | | | | | | | | | | | | |:| ad |ad=过继 }}&lt;br /&gt;
{{chart| | | | | | | | Archi |~|y|~| XYFR | | | | | | |Archi=阿基米德|XYFR=西夷夫人}}&lt;br /&gt;
{{chart| | | |,|-|-|-|v|-|-|-|+|-|-|-|v|-|-|-|.| |}}&lt;br /&gt;
{{chart| | |ECU| |ORD| |USL| |AKR| |BTF|ECU=兀几儿德|ORD=兀良的是|USL=卧生力斯|AKR=亚可入诺|BTF=孛惕日亦}}&lt;br /&gt;
&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Tree_chart/styles.css&amp;diff=12513</id>
		<title>Template:Tree chart/styles.css</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Tree_chart/styles.css&amp;diff=12513"/>
		<updated>2023-12-24T11:42:11Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*.chart-container {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
	overflow-y: visible;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
.chart-content {&lt;br /&gt;
	border-spacing: 0;&lt;br /&gt;
	border-collapse: separate;&lt;br /&gt;
}&lt;br /&gt;
@media all and (max-width:720px) {&lt;br /&gt;
	.chart-content .ahnentafel  {&lt;br /&gt;
		min-width:auto !important;&lt;br /&gt;
		width:100% !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Tree_chart/doc&amp;diff=12511</id>
		<title>Template:Tree chart/doc</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Tree_chart/doc&amp;diff=12511"/>
		<updated>2023-12-24T11:42:11Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lua|Module:TreeChart}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{documentation subpage}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- 在本行下編輯模板說明 --&amp;gt;&lt;br /&gt;
{{Ambox&lt;br /&gt;
| image = [[File:Edit-copy purple-wikit.svg|40px]]&lt;br /&gt;
| type  = move&lt;br /&gt;
| text  = 本模板基本兼容{{tl|familytree}}的參數值，但有一部分模板參數須要調整以避免衍生出不必要的模板。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
此模板建基於{{tl|Familytree}}，使用类似[[ASCII艺术]]的句法生成[[系谱图]]。它用[[HTML]]表格和[[CSS]]在适当的位置生成文字框和线条以构成家庭树，使用者在文本框内可以任意运用维基语法。&lt;br /&gt;
&lt;br /&gt;
== 用法 ==&lt;br /&gt;
首先在紙上把家族圖畫好，如下圖：&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart | | | | GRM |~|y|~| GRP | | GRM=奶奶|GRP=爷爷}}&lt;br /&gt;
{{chart | | | | | | | |)|-|-|-|.| }}&lt;br /&gt;
{{chart | | | MOM |y| DAD | |UNCLE| MOM=妈妈|DAD=爸爸|UNCLE=&amp;lt;s&amp;gt;長腿叔叔&amp;lt;/s&amp;gt;}}&lt;br /&gt;
{{chart | |,|-|-|-|+|-|-|-|.| | | }}&lt;br /&gt;
{{chart | JOE | | ME  | | SIS | | | JOE=哥哥|ME='''我'''|SIS=妹妹}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&lt;br /&gt;
選擇資料格最貼近左邊的一行，這裡選擇了「哥哥、我、妹妹」一行，按照排位寫以下代码：&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;{{chart | JOE | | ME  | | SIS | | | JOE=哥哥|ME='''我'''|SIS=妹妹}}&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
留意名字兩旁要留空格，豎線代表框線，框線間也應留空格，再定義名字。接着便可根據符號代表的線條直接加入代碼：&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{chart | |,|-|-|-|+|-|-|-|.| | | }}&lt;br /&gt;
{{chart | JOE | | ME  | | SIS | | | JOE=哥哥|ME='''我'''|SIS=妹妹}}&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
如此類推，便生成以下代碼：&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart | | | | GRM |~|y|~| GRP | | GRM=奶奶|GRP=爷爷}}&lt;br /&gt;
{{chart | | | | | | | |)|-|-|-|.| }}&lt;br /&gt;
{{chart | | | MOM |y| DAD | |UNCLE| MOM=妈妈|DAD=爸爸|UNCLE=&amp;lt;s&amp;gt;長腿叔叔&amp;lt;/s&amp;gt;}}&lt;br /&gt;
{{chart | |,|-|-|-|+|-|-|-|.| | | }}&lt;br /&gt;
{{chart | JOE | | ME  | | SIS | | | JOE=哥哥|ME='''我'''|SIS=妹妹}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参数 ==&lt;br /&gt;
本模版中，每个参数代表一个“格子”或者一个“框”。&lt;br /&gt;
&lt;br /&gt;
*'''格子'''内含有线状元素，用来生成横纵线条以及各种拐角以连接各个“框”。每一个格子用简单的字符参数来描述，一个特别的例子是'''空格子'''，用一个空格来描述不含任何线条的格子。下面列出模版支持的格子类型：&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ 實體線&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|!}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|,}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|v}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|.}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|-}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;)&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|)}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|+}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;(&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|(}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| || ||&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|`}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|^}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;'&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|'}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''虛線'''&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|:}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|F}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|V}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|7}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|~}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|D}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|%}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|C}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| || ||&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|L}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|A}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|J}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''點線'''&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|Q}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|S}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|M}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|T}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|P}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|H}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|R}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|G}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| || ||&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|Y}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;W&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|W}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|Z}}{{chart/end}} || &amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''混合型'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;fy&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|fy}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|y}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;ye&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|ye}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|f}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|t}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|e}}{{chart/end}} &lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;fh&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|fh}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|h}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;he&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|he}}{{chart/end}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''Solid hrzntl dashes vrtcl:'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;dj&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|dj}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|j}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;jc&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|jc}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|d}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|*}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|c}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;di&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|di}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|i}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;ic&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|ic}}{{chart/end}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+'''Solid hrzntl dot vrtcl:'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;kr&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|kr}}{{chart/end}} &lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|r}}{{chart/end}} &lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;rl&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|rl}}{{chart/end}} &lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|k}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|a}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|l}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;kq&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|kq}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|q}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;ql&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|ql}}{{chart/end}}&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''Dashed hrzntl dot vrtcl:'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;kr2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|kr2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;r2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|r2}}{{chart/end}} &lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;rl2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|rl2}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;k2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|k2}}{{chart/end}} &lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;a2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|a2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;l2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|l2}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
|{{big|&amp;lt;code&amp;gt;kq2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|kq2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;q2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|q2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;ql2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|ql2}}{{chart/end}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''Dots hrzntl solid vrtcl:'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;om&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|om}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|m}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;mp&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|mp}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|o}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|b}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|p}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|on}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|n}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;np&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|np}}{{chart/end}} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+ '''Dots hrzntl dashes vrtcl:'''&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;om2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|om2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;m2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|m2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;mp2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|mp2}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;o2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|o2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;b2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|b2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;p2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|p2}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;on2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|on2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;n2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|n2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;np2&amp;lt;/code&amp;gt;}} || style=&amp;quot;border: 1px solid gray;&amp;quot; | {{chart/start}}{{chart|np2}}{{chart/end}} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
{|&lt;br /&gt;
|+ '''雜項'''&amp;lt;!-- This subset is an insufficient set or questionable, but maps onto tiles that exist in {{familytree}}: --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|T2}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;G2&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|G2}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|X}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|K}}{{chart/end}}&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;l4&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|l4}}{{chart/end}}&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
| {{big|&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;}} ||style=&amp;quot;border:1px solid gray&amp;quot;| {{chart/start}}{{chart|U}}{{chart/end}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;left&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''框'''内可以填写任意的维基标记，框内的内容用附加命名变量的方法来加以描述。每一个框为'''三个格子'''宽，并且通常具有2px宽的黑边。附加的变量可以取用任何合法的名字，但是建议不要使用单字符的名字以免与“格子”冲突。&lt;br /&gt;
&lt;br /&gt;
===框的外型設定===&lt;br /&gt;
框的外形可以由参数'''border'''和'''boxstyle'''控制，前一个以[[像素]]为单位控制框边的宽度，后者可以为任意[[CSS]]语句，用来修饰框的外观。{{tl|chart/start}}模版接受一个可选的'''style'''参数来制定整个表格的格式。例如下列代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | |,|-|^|-|.| | }}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产生如下效果：&lt;br /&gt;
&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | |,|-|^|-|.| | }}&lt;br /&gt;
{{chart|border=0|boxstyle=background:#dfd;| | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&lt;br /&gt;
此外，也接受每個框有各自的外觀設定。例如下列代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart| | | | |CLEAR| | | | |CLEAR=Clear box}}&lt;br /&gt;
{{chart| |,|-|-|'|!|`|-|-|.| }}&lt;br /&gt;
{{chart|RED  |~| GREEN |~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box&lt;br /&gt;
|boxstyle_RED  =background-color: #faa;&lt;br /&gt;
|boxstyle_ GREEN =background-color: #afa;&lt;br /&gt;
|boxstyle_BLUE =background-color: #aaf;&lt;br /&gt;
}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
产生如下效果：&lt;br /&gt;
&lt;br /&gt;
{{chart/start}}&lt;br /&gt;
{{chart| | | | |CLEAR| | | | |CLEAR=Clear box}}&lt;br /&gt;
{{chart| |,|-|-|'|!|`|-|-|.| }}&lt;br /&gt;
{{chart|RED  |~| GREEN |~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box&lt;br /&gt;
|boxstyle_RED  =background-color: #faa;&lt;br /&gt;
|boxstyle_ GREEN =background-color: #afa;&lt;br /&gt;
|boxstyle_BLUE =background-color: #aaf;&lt;br /&gt;
}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
*注意本例中的RED、GREEN和BLUE所有相關參數，如果原始定義框位的名字前後存在空格，那麼在定義其CSS風格時就必須在「boxstyle_」後補充原有的空格數，所以一般來說並不建議在定義框名字時留有任何不必要的空格。&lt;br /&gt;
&lt;br /&gt;
=== 移植自Familytree須知 ===&lt;br /&gt;
本模板基本對應{{tl|Familytree}}的大部分參數，但有一些小改動編者必須先讀，首先是在Familytree中你可以以「&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;」完結一行模板，但在Chart中請移除那個不必要的直桿「&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;」，另外有5個樹枝的參數定義改名及新增兩個混合型丁字樹枝：&lt;br /&gt;
{|  class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!標題!!{{tl|family tree}}!!{{tl|chart}}||備註&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|c}}{{chart/end}}||&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|d}}{{chart/end}}||&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|t}}{{chart/end}}||&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|e}}{{chart/end}}||&amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|f}}{{chart/end}}||&amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|di}}{{chart/end}}||&amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;di&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|fh}}{{chart/end}}||&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;fh&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|ic}}{{chart/end}}||&amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;ic&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|he}}{{chart/end}}||&amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;he&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|ye}}{{chart/end}}||&amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;ye&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|om2}}{{chart/end}}||&amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;om2&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|mp2}}{{chart/end}}||&amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;mp2&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|kr2}}{{chart/end}}||&amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;kr2&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; float: left; margin-left: 1em;&amp;quot;&lt;br /&gt;
|+Miscellaneous tiles&lt;br /&gt;
!Tile!!{{tl|family tree}}!!{{tl|chart}}||備註&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|G2}}{{chart/end}}||&amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;G2&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
||{{chart/start}}{{chart|K}}{{chart/end}}||&amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;||Same&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|T2}}{{chart/end}}||&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|-&lt;br /&gt;
||{{chart/start}}{{chart|U}}{{chart/end}}||&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;||Same&lt;br /&gt;
|-&lt;br /&gt;
||{{chart/start}}{{chart|X}}{{chart/end}}||&amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;||Same&lt;br /&gt;
|-&lt;br /&gt;
|{{chart/start}}{{chart|l4}}{{chart/end}}||&amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;l4&amp;lt;/code&amp;gt;||Change&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== 另見 ==&lt;br /&gt;
* [[:en:Template:Nerva–Antonine family tree]], a large example.&lt;br /&gt;
* [[Template:Tree list]]&lt;br /&gt;
* [[Template:Ahnentafel]]&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
*[[:en:User:GregU/familytree.js]]：用來生成Chart系譜的Java工具。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- 本行下加入模板的分類 --&amp;gt;&lt;br /&gt;
[[Category:系譜模板|{{PAGENAME}}]]&lt;br /&gt;
[[Category:圖表模板]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:TreeChart&amp;diff=12509</id>
		<title>模块:TreeChart</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:TreeChart&amp;diff=12509"/>
		<updated>2023-12-24T11:42:09Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require('Module:No globals')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local cells = mw.loadData('Module:TreeChart/data')&lt;br /&gt;
&lt;br /&gt;
function p._main(cell_args)&lt;br /&gt;
	local ret = mw.html.create()&lt;br /&gt;
	local top = ret:tag('tr')&lt;br /&gt;
						:css{ height = '1px',&lt;br /&gt;
								['text-align'] = 'center' }&lt;br /&gt;
	local bottom = ret:tag('tr')&lt;br /&gt;
						:css{ height = '1px',&lt;br /&gt;
								['text-align'] = 'center' }&lt;br /&gt;
	for _, v in ipairs(cell_args) do&lt;br /&gt;
		if type(v) == 'string' then&lt;br /&gt;
			top:wikitext(cells[v].t)&lt;br /&gt;
			bottom:wikitext(cells[v].b)&lt;br /&gt;
		else&lt;br /&gt;
			top:tag('td')&lt;br /&gt;
				:attr{ colspan = v.colspan or cell_args.colspan or 6,&lt;br /&gt;
						rowspan = v.rowspan or cell_args.rowspan or 2 }&lt;br /&gt;
				:css{ padding = '0.2em',&lt;br /&gt;
						border = (v.border or cell_args.border or '2') .. 'px solid black' }&lt;br /&gt;
				:cssText(v.boxstyle or cell_args.boxstyle)&lt;br /&gt;
				:wikitext(v.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false})&lt;br /&gt;
	local cell_args = {&lt;br /&gt;
		colspan = args.colspan,&lt;br /&gt;
		rowspan = args.rowspan,&lt;br /&gt;
		border = args.border,&lt;br /&gt;
		boxstyle = args.boxstyle&lt;br /&gt;
	}&lt;br /&gt;
	for _, val in ipairs(args) do&lt;br /&gt;
		local trimmedVal = val:match('^%s*(.-)%s*$')&lt;br /&gt;
		if trimmedVal == '' then&lt;br /&gt;
			trimmedVal = '$'&lt;br /&gt;
		end&lt;br /&gt;
		if cells[trimmedVal] then&lt;br /&gt;
			table.insert(cell_args, trimmedVal)&lt;br /&gt;
		else&lt;br /&gt;
			-- Unnamed params behave weirdly&lt;br /&gt;
			-- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it&lt;br /&gt;
			local rightTrimmedVal = val:gsub('%s+$','')&lt;br /&gt;
			table.insert(cell_args, {&lt;br /&gt;
				text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'),&lt;br /&gt;
				colspan = args['colspan_'..rightTrimmedVal],&lt;br /&gt;
				rowspan = args['rowspan_'..rightTrimmedVal],&lt;br /&gt;
				border = args['border_'..rightTrimmedVal],&lt;br /&gt;
				boxstyle = args['boxstyle_'..rightTrimmedVal]&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._main(cell_args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Tree_chart/end&amp;diff=12507</id>
		<title>Template:Tree chart/end</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Tree_chart/end&amp;diff=12507"/>
		<updated>2023-12-24T11:42:08Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;div&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|Template:Tree chart/doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Tree_chart/start&amp;diff=12505</id>
		<title>Template:Tree chart/start</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Tree_chart/start&amp;diff=12505"/>
		<updated>2023-12-24T11:42:03Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Tree chart/styles.css&amp;quot; /&amp;gt;&amp;lt;div class=&amp;quot;chart-container {{{class|}}}&amp;quot;&amp;gt;&amp;lt;table class=&amp;quot;chart-content&amp;quot; {{#if: {{{align|}}}{{{style|}}}|style=&amp;quot;{{#switch: {{{align|}}}&lt;br /&gt;
|left = float: left;&lt;br /&gt;
|right = float: right;&lt;br /&gt;
|center = margin: 0 auto;&lt;br /&gt;
|#default = &lt;br /&gt;
}} {{{style|}}}&amp;quot;}}&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Tree chart/end}}&lt;br /&gt;
{{Documentation|Template:Tree chart/doc}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Protection_banner/config&amp;diff=12503</id>
		<title>模块:Protection banner/config</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Protection_banner/config&amp;diff=12503"/>
		<updated>2023-12-24T11:42:00Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides configuration data for [[Module:Protection banner]].&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                                BANNER DATA&lt;br /&gt;
--&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Banner data consists of six fields:&lt;br /&gt;
-- * text - the main protection text that appears at the top of protection&lt;br /&gt;
--   banners.&lt;br /&gt;
-- * explanation - the text that appears below the main protection text, used&lt;br /&gt;
--   to explain the details of the protection.&lt;br /&gt;
-- * tooltip - the tooltip text you see when you move the mouse over a small&lt;br /&gt;
--   padlock icon.&lt;br /&gt;
-- * link - the page that the small padlock icon links to.&lt;br /&gt;
-- * alt - the alt text for the small padlock icon. This is also used as tooltip&lt;br /&gt;
--   text for the large protection banners.&lt;br /&gt;
-- * image - the padlock image used in both protection banners and small padlock&lt;br /&gt;
--   icons.&lt;br /&gt;
--&lt;br /&gt;
-- The module checks in three separate tables to find a value for each field.&lt;br /&gt;
-- First it checks the banners table, which has values specific to the reason&lt;br /&gt;
-- for the page being protected. Then the module checks the defaultBanners&lt;br /&gt;
-- table, which has values specific to each protection level. Finally, the&lt;br /&gt;
-- module checks the masterBanner table, which holds data for protection&lt;br /&gt;
-- templates to use if no data has been found in the previous two tables.&lt;br /&gt;
--&lt;br /&gt;
-- The values in the banner data can take parameters. These are specified&lt;br /&gt;
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name&lt;br /&gt;
-- enclosed in curly braces).&lt;br /&gt;
--&lt;br /&gt;
--                          Available parameters:&lt;br /&gt;
--&lt;br /&gt;
-- ${CURRENTVERSION} - a link to the page history or the move log, with the&lt;br /&gt;
-- display message &amp;quot;current-version-edit-display&amp;quot; or&lt;br /&gt;
-- &amp;quot;current-version-move-display&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${EDITREQUEST} - a link to create an edit request for the current page.&lt;br /&gt;
--&lt;br /&gt;
-- ${EXPIRY} - the protection expiry date in the format DD Month YYYY. If&lt;br /&gt;
-- protection is indefinite or is not set, this is the blank string.&lt;br /&gt;
--&lt;br /&gt;
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. &amp;quot;Please discuss any changes&lt;br /&gt;
-- on the talk page; you may submit a request to ask an administrator to make&lt;br /&gt;
-- an edit if it is minor or supported by consensus.&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${IMAGELINK} - a link to set the image to, depending on the protection&lt;br /&gt;
-- action and protection level.&lt;br /&gt;
--&lt;br /&gt;
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry&lt;br /&gt;
-- is set. E.g. &amp;quot;Editing of this page by new or unregistered users is currently&lt;br /&gt;
-- disabled until dd Month YYYY.&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation&lt;br /&gt;
-- so that it can be used in run-on sentences.&lt;br /&gt;
--&lt;br /&gt;
-- ${PAGETYPE} - the type of the page, e.g. &amp;quot;article&amp;quot; or &amp;quot;template&amp;quot;.&lt;br /&gt;
-- Defined in the cfg.pagetypes table.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.&lt;br /&gt;
-- &amp;quot;Editing of this page by new or unregistered users is currently disabled&amp;quot;&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the&lt;br /&gt;
-- template.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONLEVEL} - the protection level, e.g. &amp;quot;fully protected&amp;quot; or&lt;br /&gt;
-- &amp;quot;semi-protected&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,&lt;br /&gt;
-- depending on the protection action.&lt;br /&gt;
--&lt;br /&gt;
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links&lt;br /&gt;
-- straight to that talk page section.&lt;br /&gt;
--&lt;br /&gt;
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to&lt;br /&gt;
-- create a blurb like &amp;quot;This template is semi-protected&amp;quot;, or &amp;quot;This article is&lt;br /&gt;
-- move-protected until DD Month YYYY&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- ${VANDAL} - links for the specified username (or the root page name)&lt;br /&gt;
-- using Module:Vandal-m.&lt;br /&gt;
--&lt;br /&gt;
--                                 Functions&lt;br /&gt;
--&lt;br /&gt;
-- For advanced users, it is possible to use Lua functions instead of strings&lt;br /&gt;
-- in the banner config tables. Using functions gives flexibility that is not&lt;br /&gt;
-- possible just by using parameters. Functions take two arguments, the&lt;br /&gt;
-- protection object and the template arguments, and they must output a string.&lt;br /&gt;
--&lt;br /&gt;
-- For example:&lt;br /&gt;
--&lt;br /&gt;
-- text = function (protectionObj, args)&lt;br /&gt;
--     if protectionObj.level == 'autoconfirmed' then&lt;br /&gt;
--         return 'foo'&lt;br /&gt;
--     else&lt;br /&gt;
--         return 'bar'&lt;br /&gt;
--     end&lt;br /&gt;
-- end&lt;br /&gt;
--&lt;br /&gt;
-- Some protection object properties and methods that may be useful:&lt;br /&gt;
-- protectionObj.action - the protection action&lt;br /&gt;
-- protectionObj.level - the protection level&lt;br /&gt;
-- protectionObj.reason - the protection reason&lt;br /&gt;
-- protectionObj.expiry - the expiry. Nil if unset, the string &amp;quot;indef&amp;quot; if set&lt;br /&gt;
--     to indefinite, and the protection time in unix time if temporary.&lt;br /&gt;
-- protectionObj.protectionDate - the protection date in unix time, or nil if&lt;br /&gt;
--     unspecified.&lt;br /&gt;
-- protectionObj.bannerConfig - the banner config found by the module. Beware&lt;br /&gt;
--     of editing the config field used by the function, as it could create an&lt;br /&gt;
--     infinite loop.&lt;br /&gt;
-- protectionObj:isProtected - returns a boolean showing whether the page is&lt;br /&gt;
--     protected.&lt;br /&gt;
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is&lt;br /&gt;
--     temporary.&lt;br /&gt;
-- protectionObj:isIncorrect - returns a boolean showing whether the protection&lt;br /&gt;
--     template is incorrect.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- The master banner data, used if no values have been found in banners or&lt;br /&gt;
-- defaultBanners.&lt;br /&gt;
masterBanner = {&lt;br /&gt;
	text = '${INTROBLURB}',&lt;br /&gt;
	explanation = '${EXPLANATIONBLURB}',&lt;br /&gt;
	tooltip = '${TOOLTIPBLURB}',&lt;br /&gt;
	link = '${IMAGELINK}',&lt;br /&gt;
	alt = '页面被${PROTECTIONLEVEL}'&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The default banner data. This holds banner data for different protection&lt;br /&gt;
-- levels.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
defaultBanners = {&lt;br /&gt;
	edit = {},&lt;br /&gt;
	move = {},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = {&lt;br /&gt;
			alt = 'Page protected with pending changes level 1',&lt;br /&gt;
			tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',&lt;br /&gt;
			image = 'Padlock-silver-light.svg'&lt;br /&gt;
		},&lt;br /&gt;
		default = {&lt;br /&gt;
			alt = 'Page protected with pending changes level 2',&lt;br /&gt;
			tooltip = 'All edits by users who are not reviewers or administrators are'&lt;br /&gt;
				.. ' subject to review prior to becoming visible to unregistered users',&lt;br /&gt;
			image = 'Padlock-orange.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	upload = {}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The banner data. This holds banner data for different protection reasons.&lt;br /&gt;
-- In fact, the reasons specified in this table control which reasons are&lt;br /&gt;
-- valid inputs to the first positional parameter.&lt;br /&gt;
--&lt;br /&gt;
-- There is also a non-standard &amp;quot;description&amp;quot; field that can be used for items&lt;br /&gt;
-- in this table. This is a description of the protection reason for use in the&lt;br /&gt;
-- module documentation.&lt;br /&gt;
--&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
banners = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		blp = {&lt;br /&gt;
			description = '为了遵守'&lt;br /&gt;
				.. ' [[Wikipedia:生者傳記'&lt;br /&gt;
				.. '|生者傳記]]方针而保护的页面',&lt;br /&gt;
			text = '${INTROFRAGMENT}以遵守'&lt;br /&gt;
				.. ' [[Wikipedia:生者傳記'&lt;br /&gt;
				.. &amp;quot;|维基百科&amp;quot;&lt;br /&gt;
				.. '生者傳記]]方针。',&lt;br /&gt;
			tooltip = '${TOOLTIPFRAGMENT}以遵守'&lt;br /&gt;
				.. '生者傳記方针',&lt;br /&gt;
		},&lt;br /&gt;
		dmca = {&lt;br /&gt;
			description = '因[[數字千年版權法]]移除通知而'&lt;br /&gt;
				.. '被维基媒体基金会保护的页面',&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = '为回应数字'&lt;br /&gt;
					.. ' 千年版权法案（DMCA）下，文中部分内容'&lt;br /&gt;
					.. ' 权利人发来的通知，维基媒体基金会已根据'&lt;br /&gt;
					.. ' 适用法律采取行动，删除并限制了相关'&lt;br /&gt;
					.. ' 内容。'&lt;br /&gt;
				if args.notice then&lt;br /&gt;
					ret = ret .. '可以在此查看删除请求副本：'&lt;br /&gt;
						.. args.notice .. '。'&lt;br /&gt;
				end&lt;br /&gt;
				ret = ret .. '有关更多信息，包括讨论'&lt;br /&gt;
					.. '如何提交反通知的网站，请参阅'&lt;br /&gt;
					.. '[[Wikipedia:基金會行動]]及条目的${TALKPAGE}。'&lt;br /&gt;
					.. &amp;quot;'''在限制撤销之前，&amp;quot;&lt;br /&gt;
					.. &amp;quot;请勿移除此模板'''。&amp;quot;&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			image = 'Office-protection-shackle-WMFlogo.svg',&lt;br /&gt;
		},&lt;br /&gt;
		dispute = {&lt;br /&gt;
			description = '由于编辑争议而被保护的页面',&lt;br /&gt;
			text = function (protectionObj, args)&lt;br /&gt;
				-- Find the value of &amp;quot;disputes&amp;quot;.&lt;br /&gt;
				local display = '争议'&lt;br /&gt;
				local disputes&lt;br /&gt;
				if args.section then&lt;br /&gt;
					disputes = string.format(&lt;br /&gt;
						'[[%s:%s#%s|%s]]',&lt;br /&gt;
						mw.site.namespaces[protectionObj.title.namespace].talk.name,&lt;br /&gt;
						protectionObj.title.text,&lt;br /&gt;
						args.section,&lt;br /&gt;
						display&lt;br /&gt;
					)&lt;br /&gt;
				else&lt;br /&gt;
					disputes = display&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- Make the blurb, depending on the expiry.&lt;br /&gt;
				local msg&lt;br /&gt;
				if type(protectionObj.expiry) == 'number' then&lt;br /&gt;
					msg = '${INTROFRAGMENT}，或直到编辑%s被解决。'&lt;br /&gt;
				else&lt;br /&gt;
					msg = '${INTROFRAGMENT}，直到编辑%s被解决。'&lt;br /&gt;
				end&lt;br /&gt;
				return string.format(msg, disputes)&lt;br /&gt;
			end,&lt;br /&gt;
			explanation = &amp;quot;此保护'''不是'''对&amp;quot;&lt;br /&gt;
				.. '${CURRENTVERSION}的认可。${EXPLANATIONBLURB}',&lt;br /&gt;
			tooltip = '由于编辑争议，${TOOLTIPFRAGMENT}',&lt;br /&gt;
		},&lt;br /&gt;
		mainpage = {&lt;br /&gt;
			description = '由于在[[Wikipedia:首页]]展示而被保护的页面',&lt;br /&gt;
			text = '此文件目前已'&lt;br /&gt;
				.. '获[[Wikipedia:獲保護頁面|保护]]而'&lt;br /&gt;
				.. '无法编辑，因为它当前或即将'&lt;br /&gt;
				.. '在[[Wikipedia:首页]]上展示。',&lt;br /&gt;
			explanation = '首页上的图像由于其高可见性而被'&lt;br /&gt;
				.. '保护。任何必要的更改请在${TALKPAGE}上讨论。'&lt;br /&gt;
				.. '&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size:90%;&amp;quot;&amp;gt;'&lt;br /&gt;
				.. &amp;quot;'''致管理员：'''一旦此图像从首页撤下，&amp;quot;&lt;br /&gt;
				.. '请取消保护此文件，或酌情减少到'&lt;br /&gt;
				.. '半保护。&amp;lt;/span&amp;gt;',&lt;br /&gt;
		},&lt;br /&gt;
		office = {&lt;br /&gt;
			description = '被维基媒体基金会保护的页面',&lt;br /&gt;
			text = function (protectionObj, args)&lt;br /&gt;
				local ret = '此${PAGETYPE}目前正在接受'&lt;br /&gt;
					.. '[[Wikipedia:基金會行動|維基媒體基金會辦公室]]'&lt;br /&gt;
					.. '的审查，'&lt;br /&gt;
					.. '并获保护。'&lt;br /&gt;
				if protectionObj.protectionDate then&lt;br /&gt;
					ret = ret .. '此页面自${PROTECTIONDATE}起被保护。'&lt;br /&gt;
				end&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			explanation = &amp;quot;如果您可以编辑此页面，请首先在&amp;quot;&lt;br /&gt;
				.. &amp;quot;${TALKPAGE}上讨论任何修改或添加动作。'''请勿解除此页面的保护&amp;quot;&lt;br /&gt;
				.. &amp;quot;状态，除非您得到维基媒体基金会&amp;quot;&lt;br /&gt;
				.. &amp;quot;的授权。'''&amp;quot;,&lt;br /&gt;
			image = 'Office-protection-shackle-WMFlogo.svg',&lt;br /&gt;
		},&lt;br /&gt;
		reset = {&lt;br /&gt;
			description = '被维基媒体基金会保护，并将其'&lt;br /&gt;
				.. '“重置”为纯粹版本的页面',&lt;br /&gt;
 			text = '此${PAGETYPE}目前正在接受'&lt;br /&gt;
					.. '[[Wikipedia:基金會行動|維基媒體基金會辦公室]]'&lt;br /&gt;
					.. '的审查，'&lt;br /&gt;
					.. '并获保护。',&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = ''&lt;br /&gt;
				if protectionObj.protectionDate then&lt;br /&gt;
					ret = ret .. '在${PROTECTIONDATE}，此${PAGETYPE}'&lt;br /&gt;
				else&lt;br /&gt;
					ret = ret .. '此${PAGETYPE}已'&lt;br /&gt;
				end&lt;br /&gt;
				ret = ret .. '被简化为'&lt;br /&gt;
				.. '“纯粹”的版本，以便可以完全'&lt;br /&gt;
				.. '重写，确保其符合'&lt;br /&gt;
				.. '[[WP:NPOV|中立的观点]]和[[WP:V|可供查证]]方针。'&lt;br /&gt;
				.. '重写版本最终将会向所有编者开放，'&lt;br /&gt;
				.. '通常的维基百科方针都将适用于此页面，并将严格'&lt;br /&gt;
				.. '执行。此${PAGETYPE}在重建时已被'&lt;br /&gt;
				.. '${PROTECTIONLEVEL}。\n\n'&lt;br /&gt;
				.. '直接添加任何从此${PAGETYPE}'&lt;br /&gt;
				.. '保护前版本中得到的资料，或'&lt;br /&gt;
				.. '任何添加至此${PAGETYPE}中的'&lt;br /&gt;
				.. '无来源资料，都将被删除。相关讨论页也于'&lt;br /&gt;
				.. '同一天清空。\n\n'&lt;br /&gt;
				.. &amp;quot;如果您可以编辑此页面，请首先在&amp;quot;&lt;br /&gt;
				.. &amp;quot;${TALKPAGE}上讨论任何修改或添加动作。'''请勿覆盖&amp;quot;&lt;br /&gt;
				.. &amp;quot;此操作，且不要解除此页面的保护状态，&amp;quot;&lt;br /&gt;
				.. &amp;quot;除非您已获得维基媒体基金会的&amp;quot;&lt;br /&gt;
				.. &amp;quot;授权。任何编者均不可移除此通知。'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
				return ret&lt;br /&gt;
			end,&lt;br /&gt;
			image = 'Office-protection-shackle-WMFlogo.svg',&lt;br /&gt;
		},&lt;br /&gt;
		sock = {&lt;br /&gt;
			description = '由于滥用'&lt;br /&gt;
				.. '[[Wikipedia:傀儡|傀儡]]而被保护的页面。',&lt;br /&gt;
			text = '${INTROFRAGMENT}，以防止被'&lt;br /&gt;
				.. '[[Wikipedia:封禁方针|封禁]]或被'&lt;br /&gt;
				.. '[[Wikipedia:編輯禁制方針|編輯禁制]]用户的[[Wikipedia:傀儡|傀儡]]'&lt;br /&gt;
				.. '编辑。',&lt;br /&gt;
			tooltip = '为防止被封禁或被編輯禁制用户的傀儡编辑，'&lt;br /&gt;
				.. '${TOOLTIPFRAGMENT}',&lt;br /&gt;
		},&lt;br /&gt;
		template = {&lt;br /&gt;
			description = '[[Wikipedia:高風險模板|高風險模板]]'&lt;br /&gt;
				.. '和Lua模块',&lt;br /&gt;
			text = '此${PAGETYPE}为[[Wikipedia:高風險模板|高風險模板]]，'&lt;br /&gt;
				.. '已被永久[[Wikipedia:獲保護頁面|保護]]。',&lt;br /&gt;
			explanation = '请在${TALKPAGE}上讨论任何修改或添加动作。如果'&lt;br /&gt;
				.. '编辑[[Help:小修改#何时标明编辑为小修改'&lt;br /&gt;
				.. '|无争议]]或有'&lt;br /&gt;
				.. '[[Wikipedia:共识|共识]]基础，您可以'&lt;br /&gt;
				.. '向[[Wikipedia:管理员|管理员]]或'&lt;br /&gt;
				.. '[[Wikipedia:模板编辑员|模板编辑员]]'&lt;br /&gt;
				.. '${EDITREQUEST}。您也可以'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面|请求]]解除'&lt;br /&gt;
				.. '页面保护。',&lt;br /&gt;
			tooltip = '此高风险${PAGETYPE}已被永久${PROTECTIONLEVEL}'&lt;br /&gt;
				.. '，以避免破坏',&lt;br /&gt;
			alt = '被永久保护的${PAGETYPE}',&lt;br /&gt;
		},&lt;br /&gt;
		usertalk = {&lt;br /&gt;
			description = '由于特定用户破坏而'&lt;br /&gt;
				.. '被保护的页面',&lt;br /&gt;
			text = '${INTROFRAGMENT}，以防止${VANDAL}使用其进行破坏性编辑，'&lt;br /&gt;
				.. '如滥用'&lt;br /&gt;
				.. '&amp;amp;#123;&amp;amp;#123;[[Template:unblock|unblock]]&amp;amp;#125;&amp;amp;#125;模板。',&lt;br /&gt;
			explanation = '如果您不能编辑此用户讨论页，且需要'&lt;br /&gt;
				.. '修改或留言，您可以'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面'&lt;br /&gt;
				.. '#请求编辑'&lt;br /&gt;
				.. '|请求编辑]]，'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面'&lt;br /&gt;
				.. '#请求解除保护'&lt;br /&gt;
				.. '|请求解除保护]]，'&lt;br /&gt;
				.. '[[Special:用户登录|登录]]，'&lt;br /&gt;
				.. '或[[Special:创建账户|创建帐户]]。',&lt;br /&gt;
		},&lt;br /&gt;
		vandalism = {&lt;br /&gt;
			description = '由于'&lt;br /&gt;
				.. '[[Wikipedia:破坏|破坏]]而被保护的页面',&lt;br /&gt;
			text = '由于[[Wikipedia:破坏|破坏]]，${INTROFRAGMENT}。',&lt;br /&gt;
			explanation = function (protectionObj, args)&lt;br /&gt;
				local ret = ''&lt;br /&gt;
				if protectionObj.level == 'sysop' then&lt;br /&gt;
					ret = ret .. &amp;quot;此保护'''不是'''对&amp;quot;&lt;br /&gt;
						.. '${CURRENTVERSION}的认可。'&lt;br /&gt;
				end&lt;br /&gt;
				return ret .. '${EXPLANATIONBLURB}'&lt;br /&gt;
			end,&lt;br /&gt;
			tooltip = '由于破坏，${TOOLTIPFRAGMENT}',&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		dispute = {&lt;br /&gt;
			description = '由于标题争议而'&lt;br /&gt;
				.. '被移动保护的页面',&lt;br /&gt;
			explanation = &amp;quot;此保护'''不是'''对&amp;quot;&lt;br /&gt;
				.. '${CURRENTVERSION}的认可。${EXPLANATIONBLURB}',&lt;br /&gt;
			image = 'Move-protection-shackle.svg'&lt;br /&gt;
		},&lt;br /&gt;
		vandalism = {&lt;br /&gt;
			description = '由于'&lt;br /&gt;
				.. '[[Wikipedia:破坏#移动破坏'&lt;br /&gt;
				.. '|移动破坏]]而被保护的页面'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {},&lt;br /&gt;
	upload = {}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                            GENERAL DATA TABLES&lt;br /&gt;
--&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection blurbs&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the protection blurbs available with the&lt;br /&gt;
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and&lt;br /&gt;
-- protection level, and is checked by the module in the following order:&lt;br /&gt;
-- 1. page's protection action, page's protection level&lt;br /&gt;
-- 2. page's protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
protectionBlurbs = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = '此${PAGETYPE}当前已被[[Wikipedia:獲保護頁面|'&lt;br /&gt;
			.. '保護]]，无法编辑',&lt;br /&gt;
		autoconfirmed = '[[Wikipedia:用户权限'&lt;br /&gt;
			.. '级别#新用户|新用户]]或[[Wikipedia:用户权限级别#匿名'&lt;br /&gt;
			.. '用户|匿名用户]]用户编辑此${PAGETYPE}目前[[Wikipedia:獲保護頁面|已禁用]]',&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = '此${PAGETYPE}当前已被[[Wikipedia:獲保護頁面|保護]]，'&lt;br /&gt;
			.. '无法[[Help:页面重命名|移动]]'&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = 'All edits made to this ${PAGETYPE} by'&lt;br /&gt;
			.. ' [[Wikipedia:用户权限级别#新用户|新用户]] or'&lt;br /&gt;
			.. ' [[Wikipedia:用户权限级别#匿名用户|匿名用户]]'&lt;br /&gt;
			.. ' users are currently'&lt;br /&gt;
			.. ' [[Wikipedia:Pending changes|subject to review]]',&lt;br /&gt;
		default = 'All edits made to this ${PAGETYPE} by users who are not'&lt;br /&gt;
			.. ' [[Wikipedia:Reviewing|reviewers]] or'&lt;br /&gt;
			.. ' [[Wikipedia:管理员|管理员]] are currently'&lt;br /&gt;
			.. ' [[Wikipedia:Pending changes|subject to review]]'&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = '上传此${PAGETYPE}的新版本目前已禁用'&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Explanation blurbs&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the explanation blurbs available with the&lt;br /&gt;
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,&lt;br /&gt;
-- protection level, and whether the page is a talk page or not. If the page is&lt;br /&gt;
-- a talk page it will have a talk key of &amp;quot;talk&amp;quot;; otherwise it will have a talk&lt;br /&gt;
-- key of &amp;quot;subject&amp;quot;. The table is checked in the following order:&lt;br /&gt;
-- 1. page's protection action, page's protection level, page's talk key&lt;br /&gt;
-- 2. page's protection action, page's protection level, default talk key&lt;br /&gt;
-- 3. page's protection action, default protection level, page's talk key&lt;br /&gt;
-- 4. page's protection action, default protection level, default talk key&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
explanationBlurbs = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		autoconfirmed = {&lt;br /&gt;
			subject = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。如果您'&lt;br /&gt;
				.. '不能编辑，且希望修改此${PAGETYPE}，您可以'&lt;br /&gt;
				.. '${EDITREQUEST}，在${TALKPAGE}上讨论更改，'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面'&lt;br /&gt;
				.. '#请求解除保护'&lt;br /&gt;
				.. '|请求解除保护]]，[[Special:用户登录|登录]]，'&lt;br /&gt;
				.. '或[[Special:创建账户|创建帐户]]。',&lt;br /&gt;
			default = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。如果您'&lt;br /&gt;
				.. '不能编辑，且希望修改此${PAGETYPE}，您可以'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面'&lt;br /&gt;
				.. '#请求解除保护'&lt;br /&gt;
				.. '|请求解除保护]]，[[Special:用户登录|登录]]，'&lt;br /&gt;
				.. '或[[Special:创建账户|创建帐户]]。',&lt;br /&gt;
		},&lt;br /&gt;
		default = {&lt;br /&gt;
			subject = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. '请在${TALKPAGE}上讨论任何修改动作。如果'&lt;br /&gt;
				.. '编辑[[Help:小修改#何时标明编辑为小修改'&lt;br /&gt;
				.. '|无争议]]或有[[Wikipedia:共识'&lt;br /&gt;
				.. '|共识]]基础，您可以向'&lt;br /&gt;
				.. '[[Wikipedia:管理员|管理员]]'&lt;br /&gt;
				.. '${EDITREQUEST}。您也可以[[Wikipedia:请求'&lt;br /&gt;
				.. '保护页面#请求解除保护'&lt;br /&gt;
				.. '|请求]]解除页面保护。',&lt;br /&gt;
			default = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. '您可以[[Wikipedia:请求'&lt;br /&gt;
				.. '保护页面#请求编辑|请求'&lt;br /&gt;
				.. '编辑]]此页面，或[[Wikipedia:请求'&lt;br /&gt;
				.. '保护页面#请求解除保护'&lt;br /&gt;
				.. '|请求]]解除页面保护。',&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = {&lt;br /&gt;
			subject = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. '该页面仍可编辑，但在解除保护后'&lt;br /&gt;
				.. '才能移动。请在${TALKPAGE}或[[Wikipedia:移動請求]]'&lt;br /&gt;
				.. '上讨论任何移动建议。您也可以'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面|请求]]解除'&lt;br /&gt;
				.. '页面保护。',&lt;br /&gt;
			default = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. '该页面仍可编辑，但在解除保护后'&lt;br /&gt;
				.. '才能移动。请在[[Wikipedia:移動請求]]'&lt;br /&gt;
				.. '上讨论任何移动建议。您也可以'&lt;br /&gt;
				.. '[[Wikipedia:请求保护页面|请求]]解除'&lt;br /&gt;
				.. '页面保护。',&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		default = {&lt;br /&gt;
			reviewer = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. ' Edits to this ${PAGETYPE} will not be visible to readers'&lt;br /&gt;
				.. ' until they are accepted by a reviewer or an administrator.'&lt;br /&gt;
				.. ' To avoid the need for your edits to be reviewed, you may'&lt;br /&gt;
				.. ' [[Wikipedia:Requests for page protection'&lt;br /&gt;
				.. '#Current requests for reduction in protection level'&lt;br /&gt;
				.. '|request unprotection]]. Experienced editors may also'&lt;br /&gt;
				.. ' request the [[Wikipedia:Reviewing|reviewer user right]].',&lt;br /&gt;
			default = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. ' Edits to this ${PAGETYPE} by new and unregistered users'&lt;br /&gt;
				.. ' will not be visible to readers until they are accepted by'&lt;br /&gt;
				.. ' a reviewer. To avoid the need for your edits to be'&lt;br /&gt;
				.. ' reviewed, you may'&lt;br /&gt;
				.. ' [[Wikipedia:Requests for page protection'&lt;br /&gt;
				.. '#Current requests for reduction in protection level'&lt;br /&gt;
				.. '|request unprotection]], [[Special:Userlogin|log in]], or'&lt;br /&gt;
				.. ' [[Special:UserLogin/signup|create an account]].'&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = {&lt;br /&gt;
			default = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
				.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
				.. '页面可能仍可以编辑，但在解除保护后'&lt;br /&gt;
				.. '才能上传文件的新版本。您可以使用'&lt;br /&gt;
				.. '[[Wikipedia:编辑请求|受保护页面编辑请求]]'&lt;br /&gt;
				.. '来请求上传新版本，或者您'&lt;br /&gt;
				.. '可以[[Wikipedia:请求保护页面|请求]]'&lt;br /&gt;
				.. '解除文件保护。'&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection levels&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which&lt;br /&gt;
-- produces a short label for different protection levels. It is sorted by&lt;br /&gt;
-- protection action and protection level, and is checked in the following&lt;br /&gt;
-- order:&lt;br /&gt;
-- 1. page's protection action, page's protection level&lt;br /&gt;
-- 2. page's protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
protectionLevels = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = '全保护',&lt;br /&gt;
		templateeditor = '模板保护',&lt;br /&gt;
		extendedconfirmed = '延伸確認保護',&lt;br /&gt;
		autoconfirmed = '半保护',&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = '移动保护'&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = '文件保护'&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Images&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table lists different padlock images for each protection action and&lt;br /&gt;
-- protection level. It is used if an image is not specified in any of the&lt;br /&gt;
-- banner data tables, and if the page does not satisfy the conditions for using&lt;br /&gt;
-- the ['image-filename-indef'] image. It is checked in the following order:&lt;br /&gt;
-- 1. page's protection action, page's protection level&lt;br /&gt;
-- 2. page's protection action, default protection level&lt;br /&gt;
images = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = 'Full-protection-shackle-block.svg',&lt;br /&gt;
		templateeditor = 'Template-protection-shackle-picture-1.svg',&lt;br /&gt;
		extendedconfirmed = 'Extended-protection-shackle-account-pro-plus.svg',&lt;br /&gt;
		autoconfirmed = 'Semi-protection-shackle.svg'&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = 'Move-protection-shackle.svg',&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = 'Padlock-silver-light.svg',&lt;br /&gt;
		default = 'Padlock-orange.svg'&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = 'Upload-protection-shackle.svg'&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- Pages with a reason specified in this table will show the special &amp;quot;indef&amp;quot;&lt;br /&gt;
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.&lt;br /&gt;
indefImageReasons = {&lt;br /&gt;
	template = true&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Image links&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the data for the ${IMAGELINK} parameter, which gets&lt;br /&gt;
-- the image link for small padlock icons based on the page's protection action&lt;br /&gt;
-- and protection level. It is checked in the following order:&lt;br /&gt;
-- 1. page's protection action, page's protection level&lt;br /&gt;
-- 2. page's protection action, default protection level&lt;br /&gt;
-- 3. &amp;quot;edit&amp;quot; protection action, default protection level&lt;br /&gt;
--&lt;br /&gt;
-- It is possible to use banner parameters inside this table.&lt;br /&gt;
-- *required* - this table needs edit, move, autoreview and upload subtables.&lt;br /&gt;
imageLinks = {&lt;br /&gt;
	edit = {&lt;br /&gt;
		default = 'Wikipedia:保護方針#全保护',&lt;br /&gt;
		templateeditor = 'Wikipedia:保護方針#模板保护',&lt;br /&gt;
		extendedconfirmed = 'Wikipedia:保護方針#延伸確認保護',&lt;br /&gt;
		autoconfirmed = 'Wikipedia:保護方針#半保护'&lt;br /&gt;
	},&lt;br /&gt;
	move = {&lt;br /&gt;
		default = 'Wikipedia:保護方針#移动保护'&lt;br /&gt;
	},&lt;br /&gt;
	autoreview = {&lt;br /&gt;
		autoconfirmed = 'Wikipedia:保護方針#pc1',&lt;br /&gt;
		reviewer = 'Wikipedia:保護方針#pc2'&lt;br /&gt;
	},&lt;br /&gt;
	upload = {&lt;br /&gt;
		default = 'Wikipedia:保護方針#文件保护'&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Padlock indicator names&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table provides the &amp;quot;name&amp;quot; attribute for the &amp;lt;indicator&amp;gt; extension tag&lt;br /&gt;
-- with which small padlock icons are generated. All indicator tags on a page&lt;br /&gt;
-- are displayed in alphabetical order based on this attribute, and with&lt;br /&gt;
-- indicator tags with duplicate names, the last tag on the page wins.&lt;br /&gt;
-- The attribute is chosen based on the protection action; table keys must be a&lt;br /&gt;
-- protection action name or the string &amp;quot;default&amp;quot;.&lt;br /&gt;
padlockIndicatorNames = {&lt;br /&gt;
	autoreview = 'pp-autoreview',&lt;br /&gt;
	default = 'pp-default'&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection categories&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- The protection categories are stored in the protectionCategories table.&lt;br /&gt;
-- Keys to this table are made up of the following strings:&lt;br /&gt;
--&lt;br /&gt;
-- 1. the expiry date&lt;br /&gt;
-- 2. the namespace&lt;br /&gt;
-- 3. the protection reason (e.g. &amp;quot;dispute&amp;quot; or &amp;quot;vandalism&amp;quot;)&lt;br /&gt;
-- 4. the protection level (e.g. &amp;quot;sysop&amp;quot; or &amp;quot;autoconfirmed&amp;quot;)&lt;br /&gt;
-- 5. the action (e.g. &amp;quot;edit&amp;quot; or &amp;quot;move&amp;quot;)&lt;br /&gt;
--&lt;br /&gt;
-- When the module looks up a category in the table, first it will will check to&lt;br /&gt;
-- see a key exists that corresponds to all five parameters. For example, a&lt;br /&gt;
-- user page semi-protected from vandalism for two weeks would have the key&lt;br /&gt;
-- &amp;quot;temp-user-vandalism-autoconfirmed-edit&amp;quot;. If no match is found, the module&lt;br /&gt;
-- changes the first part of the key to &amp;quot;all&amp;quot; and checks the table again. It&lt;br /&gt;
-- keeps checking increasingly generic key combinations until it finds the&lt;br /&gt;
-- field, or until it reaches the key &amp;quot;all-all-all-all-all&amp;quot;.&lt;br /&gt;
--&lt;br /&gt;
-- The module uses a binary matrix to determine the order in which to search.&lt;br /&gt;
-- This is best demonstrated by a table. In this table, the &amp;quot;0&amp;quot; values&lt;br /&gt;
-- represent &amp;quot;all&amp;quot;, and the &amp;quot;1&amp;quot; values represent the original data (e.g.&lt;br /&gt;
-- &amp;quot;indef&amp;quot; or &amp;quot;file&amp;quot; or &amp;quot;vandalism&amp;quot;).&lt;br /&gt;
--&lt;br /&gt;
--        expiry    namespace reason   level     action&lt;br /&gt;
-- order&lt;br /&gt;
-- 1      1         1         1        1         1&lt;br /&gt;
-- 2      0         1         1        1         1&lt;br /&gt;
-- 3      1         0         1        1         1&lt;br /&gt;
-- 4      0         0         1        1         1&lt;br /&gt;
-- 5      1         1         0        1         1&lt;br /&gt;
-- 6      0         1         0        1         1&lt;br /&gt;
-- 7      1         0         0        1         1&lt;br /&gt;
-- 8      0         0         0        1         1&lt;br /&gt;
-- 9      1         1         1        0         1&lt;br /&gt;
-- 10     0         1         1        0         1&lt;br /&gt;
-- 11     1         0         1        0         1&lt;br /&gt;
-- 12     0         0         1        0         1&lt;br /&gt;
-- 13     1         1         0        0         1&lt;br /&gt;
-- 14     0         1         0        0         1&lt;br /&gt;
-- 15     1         0         0        0         1&lt;br /&gt;
-- 16     0         0         0        0         1&lt;br /&gt;
-- 17     1         1         1        1         0&lt;br /&gt;
-- 18     0         1         1        1         0&lt;br /&gt;
-- 19     1         0         1        1         0&lt;br /&gt;
-- 20     0         0         1        1         0&lt;br /&gt;
-- 21     1         1         0        1         0&lt;br /&gt;
-- 22     0         1         0        1         0&lt;br /&gt;
-- 23     1         0         0        1         0&lt;br /&gt;
-- 24     0         0         0        1         0&lt;br /&gt;
-- 25     1         1         1        0         0&lt;br /&gt;
-- 26     0         1         1        0         0&lt;br /&gt;
-- 27     1         0         1        0         0&lt;br /&gt;
-- 28     0         0         1        0         0&lt;br /&gt;
-- 29     1         1         0        0         0&lt;br /&gt;
-- 30     0         1         0        0         0&lt;br /&gt;
-- 31     1         0         0        0         0&lt;br /&gt;
-- 32     0         0         0        0         0&lt;br /&gt;
--&lt;br /&gt;
-- In this scheme the action has the highest priority, as it is the last&lt;br /&gt;
-- to change, and the expiry has the least priority, as it changes the most.&lt;br /&gt;
-- The priorities of the expiry, the protection level and the action are&lt;br /&gt;
-- fixed, but the priorities of the reason and the namespace can be swapped&lt;br /&gt;
-- through the use of the cfg.bannerDataNamespaceHasPriority table.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- If the reason specified to the template is listed in this table,&lt;br /&gt;
-- namespace data will take priority over reason data in the protectionCategories&lt;br /&gt;
-- table.&lt;br /&gt;
reasonsWithNamespacePriority = {&lt;br /&gt;
	vandalism = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-- The string to use as a namespace key for the protectionCategories table for each&lt;br /&gt;
-- namespace number.&lt;br /&gt;
categoryNamespaceKeys = {&lt;br /&gt;
	[  2] = 'user',&lt;br /&gt;
	[  3] = 'user',&lt;br /&gt;
	[  4] = 'project',&lt;br /&gt;
	[  6] = 'file',&lt;br /&gt;
	[  8] = 'mediawiki',&lt;br /&gt;
	[ 10] = 'template',&lt;br /&gt;
	[ 12] = 'project',&lt;br /&gt;
	[ 14] = 'category',&lt;br /&gt;
	[100] = 'portal',&lt;br /&gt;
	[828] = 'module',&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
protectionCategories = {&lt;br /&gt;
	['all|all|all|all|all']                  = '被保护的页面',&lt;br /&gt;
	['all|all|office|all|all']               = '被基金会保护的页面',&lt;br /&gt;
	['all|all|reset|all|all']                = '被基金会保护的页面',&lt;br /&gt;
	['all|all|dmca|all|all']                 = '被基金会保护的页面',&lt;br /&gt;
	['all|all|mainpage|all|all']             = '被保护的首页文件',&lt;br /&gt;
	['all|template|all|all|edit']            = '被保護的模板',&lt;br /&gt;
	['all|all|all|autoconfirmed|edit']       = '被半保护的页面',&lt;br /&gt;
	['indef|all|all|autoconfirmed|edit']     = '被永久半保护的页面',&lt;br /&gt;
	['all|all|blp|autoconfirmed|edit']       = '被永久半保护的生者传记',&lt;br /&gt;
	['temp|all|blp|autoconfirmed|edit']      = '被暂时半保护的生者传记',&lt;br /&gt;
	['all|all|dispute|autoconfirmed|edit']   = '由于争议而被半保护的页面',&lt;br /&gt;
	['all|all|sock|autoconfirmed|edit']      = '由于滥用傀儡而被半保护的页面',&lt;br /&gt;
	['all|all|vandalism|autoconfirmed|edit'] = '避免破坏而被半保护的页面',&lt;br /&gt;
	['all|category|all|autoconfirmed|edit']  = '被半保護的分類',&lt;br /&gt;
	['all|file|all|autoconfirmed|edit']      = '被半保護的圖像',&lt;br /&gt;
	['all|portal|all|autoconfirmed|edit']    = '被半保護的主題',&lt;br /&gt;
	['all|project|all|autoconfirmed|edit']   = '被半保護的專題',&lt;br /&gt;
	['all|talk|all|autoconfirmed|edit']      = '被半保護的討論頁',&lt;br /&gt;
	['all|template|all|autoconfirmed|edit']  = '被半保護的模板',&lt;br /&gt;
	['all|user|all|autoconfirmed|edit']      = '被半保護的用戶頁',&lt;br /&gt;
	['all|template|all|templateeditor|edit'] = '被模板保護的模板',&lt;br /&gt;
	['all|all|blp|sysop|edit']               = '被永久保护的生者传记',&lt;br /&gt;
	['temp|all|blp|sysop|edit']              = '被暂时保护的生者传记',&lt;br /&gt;
	['all|all|dispute|sysop|edit']           = '由于争议而被保护的页面',&lt;br /&gt;
	['all|all|sock|sysop|edit']              = '由于滥用傀儡而被保护的页面',&lt;br /&gt;
	['all|all|vandalism|sysop|edit']         = '避免破坏而被保护的页面',&lt;br /&gt;
	['all|category|all|sysop|edit']          = '被保護的分類',&lt;br /&gt;
	['all|file|all|sysop|edit']              = '被保護的圖像',&lt;br /&gt;
	['all|project|all|sysop|edit']           = '被保護的專題',&lt;br /&gt;
	['all|talk|all|sysop|edit']              = '被保護的討論頁',&lt;br /&gt;
	['all|template|all|sysop|edit']          = '被保護的模板',&lt;br /&gt;
	['all|user|all|sysop|edit']              = '被保護的用戶頁',&lt;br /&gt;
	['all|module|all|all|edit']              = '被保护的模块',&lt;br /&gt;
	['all|module|all|templateeditor|edit']   = '被模板保护的模块',&lt;br /&gt;
	['all|module|all|autoconfirmed|edit']    = '被半保护的模块',&lt;br /&gt;
	['all|all|all|sysop|move']               = '被移動保護的頁面',&lt;br /&gt;
	['indef|all|all|sysop|move']             = '被永久移動保護的頁面',&lt;br /&gt;
	['all|all|dispute|sysop|move']           = '由于争议而被移动保护的页面',&lt;br /&gt;
	['all|all|vandalism|sysop|move']         = '避免破坏而被移动保护的页面',&lt;br /&gt;
	['all|portal|all|sysop|move']            = '被移動保護的主題',&lt;br /&gt;
	['all|portal|all|sysop|move']            = '被移動保護的主題',&lt;br /&gt;
	['all|project|all|sysop|move']           = '被移動保護的專題',&lt;br /&gt;
	['all|talk|all|sysop|move']              = '被移動保護的討論頁',&lt;br /&gt;
	['all|template|all|sysop|move']          = '被移動保護的模板',&lt;br /&gt;
	['all|user|all|sysop|move']              = '被移動保護的用戶頁',&lt;br /&gt;
	['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',&lt;br /&gt;
	['all|all|all|reviewer|autoreview']      = 'Wikipedia pending changes protected pages (level 2)',&lt;br /&gt;
	['all|file|all|all|upload']              = '被文件保护的文件',&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Expiry category config&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table configures the expiry category behaviour for each protection&lt;br /&gt;
-- action.&lt;br /&gt;
-- * If set to true, setting that action will always categorise the page if&lt;br /&gt;
--   an expiry parameter is not set.&lt;br /&gt;
-- * If set to false, setting that action will never categorise the page.&lt;br /&gt;
-- * If set to nil, the module will categorise the page if:&lt;br /&gt;
--   1) an expiry parameter is not set, and&lt;br /&gt;
--   2) a reason is provided, and&lt;br /&gt;
--   3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck&lt;br /&gt;
--      table.&lt;br /&gt;
&lt;br /&gt;
expiryCheckActions = {&lt;br /&gt;
	edit = nil,&lt;br /&gt;
	move = false,&lt;br /&gt;
	autoreview = true,&lt;br /&gt;
	upload = false&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
reasonsWithoutExpiryCheck = {&lt;br /&gt;
	blp = true,&lt;br /&gt;
	template = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Pagetypes&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table produces the page types available with the ${PAGETYPE} parameter.&lt;br /&gt;
-- Keys are namespace numbers, or the string &amp;quot;default&amp;quot; for the default value.&lt;br /&gt;
pagetypes = {&lt;br /&gt;
	[0] = '条目',&lt;br /&gt;
	[6] = '文件',&lt;br /&gt;
	[10] = '模板',&lt;br /&gt;
	[14] = '分类',&lt;br /&gt;
	[828] = '模块',&lt;br /&gt;
	default = '页面'&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Strings marking indefinite protection&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table contains values passed to the expiry parameter that mean the page&lt;br /&gt;
-- is protected indefinitely.&lt;br /&gt;
indefStrings = {&lt;br /&gt;
	['indef'] = true,&lt;br /&gt;
	['indefinite'] = true,&lt;br /&gt;
	['indefinitely'] = true,&lt;br /&gt;
	['infinite'] = true,&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Group hierarchy&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table maps each group to all groups that have a superset of the original&lt;br /&gt;
-- group's page editing permissions.&lt;br /&gt;
hierarchy = {&lt;br /&gt;
	sysop = {},&lt;br /&gt;
	reviewer = {'sysop'},&lt;br /&gt;
	filemover = {'sysop'},&lt;br /&gt;
	templateeditor = {'sysop'},&lt;br /&gt;
	extendedconfirmed = {'sysop'},&lt;br /&gt;
	autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},&lt;br /&gt;
	user = {'autoconfirmed'},&lt;br /&gt;
	['*'] = {'user'}&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Wrapper templates and their default arguments&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table contains wrapper templates used with the module, and their&lt;br /&gt;
-- default arguments. Templates specified in this table should contain the&lt;br /&gt;
-- following invocation, and no other template content:&lt;br /&gt;
--&lt;br /&gt;
-- {{#invoke:Protection banner|main}}&lt;br /&gt;
--&lt;br /&gt;
-- If other content is desired, it can be added between&lt;br /&gt;
-- &amp;lt;noinclude&amp;gt;...&amp;lt;/noinclude&amp;gt; tags.&lt;br /&gt;
--&lt;br /&gt;
-- When a user calls one of these wrapper templates, they will use the&lt;br /&gt;
-- default arguments automatically. However, users can override any of the&lt;br /&gt;
-- arguments.&lt;br /&gt;
--&lt;br /&gt;
-- [[Wikipedia:模板消息/保護模板]]&lt;br /&gt;
wrappers = {&lt;br /&gt;
	['Template:Pp-protected']               = {},&lt;br /&gt;
	['Template:Pp-semi-blp']                = {'blp'},&lt;br /&gt;
	-- we don't need Template:Pp-create&lt;br /&gt;
	['Template:Pp-dispute']                 = {'dispute'},&lt;br /&gt;
	-- ['Template:Pp-main-page']               = {'mainpage'},&lt;br /&gt;
	['Template:Pp-move']                    = {action = 'move'},&lt;br /&gt;
	['Template:Pp-move-dispute']            = {'dispute', action = 'move'},&lt;br /&gt;
	-- we don't need Template:Pp-move-indef&lt;br /&gt;
	['Template:Pp-move-vandalism']          = {'vandalism', action = 'move'},&lt;br /&gt;
	['Template:Pp-office']                  = {'office'},&lt;br /&gt;
	['Template:Pp-office-dmca']             = {'dmca'},&lt;br /&gt;
	['Template:Pp-pc1']                     = {action = 'autoreview', small = true},&lt;br /&gt;
	['Template:Pp-pc2']                     = {action = 'autoreview', small = true},&lt;br /&gt;
	['Template:Pp-reset']                   = {'reset'},&lt;br /&gt;
	['Template:Pp-semi-indef']              = {small = true},&lt;br /&gt;
	['Template:Pp-semi-sock']               = {'sock'},&lt;br /&gt;
	['Template:Pp-template']                = {'template', small = true},&lt;br /&gt;
	['Template:Pp-upload']                  = {action = 'upload'},&lt;br /&gt;
	['Template:Pp-usertalk']                = {'usertalk'},&lt;br /&gt;
	['Template:Pp-vandalism']               = {'vandalism'},&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                                 MESSAGES&lt;br /&gt;
--&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
msg = {&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Intro blurb and intro fragment&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages specify what is produced by the ${INTROBLURB} and&lt;br /&gt;
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the&lt;br /&gt;
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use&lt;br /&gt;
-- intro-blurb-noexpiry or intro-fragment-noexpiry.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
['intro-blurb-expiry'] = '${PROTECTIONBLURB}至${EXPIRY}。',&lt;br /&gt;
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}。',&lt;br /&gt;
['intro-fragment-expiry'] = '${PROTECTIONBLURB}至${EXPIRY}，',&lt;br /&gt;
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Tooltip blurb&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.&lt;br /&gt;
-- If the protection is temporary the tooltip-blurb-expiry message is used, and&lt;br /&gt;
-- if not the tooltip-blurb-noexpiry message is used.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
['tooltip-blurb-expiry'] = '此${PAGETYPE}已被${PROTECTIONLEVEL}至${EXPIRY}。',&lt;br /&gt;
['tooltip-blurb-noexpiry'] = '此${PAGETYPE}已被${PROTECTIONLEVEL}。',&lt;br /&gt;
['tooltip-fragment-expiry'] = '此${PAGETYPE}已被${PROTECTIONLEVEL}至${EXPIRY}，',&lt;br /&gt;
['tooltip-fragment-noexpiry'] = '此${PAGETYPE}已被${PROTECTIONLEVEL}',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Special explanation blurb&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages&lt;br /&gt;
-- in the MediaWiki namespace.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
['explanation-blurb-nounprotect'] = '更多信息，请参见[[Wikipedia:保護方針|'&lt;br /&gt;
	.. '保護方針]]及${PROTECTIONLOG}。'&lt;br /&gt;
	.. '请在${TALKPAGE}上讨论任何修改或添加动作。如果'&lt;br /&gt;
	.. '编辑[[Help:小修改#何时标明编辑为小修改'&lt;br /&gt;
	.. '|无争议]]或有'&lt;br /&gt;
	.. '[[Wikipedia:共识|共识]]基础，您可以'&lt;br /&gt;
	.. '向[[Wikipedia:管理员|管理员]]'&lt;br /&gt;
	.. '${EDITREQUEST}。',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection log display values&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine the display values for the protection log link&lt;br /&gt;
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
['protection-log-display'] = '保护日志',&lt;br /&gt;
['pc-log-display'] = '待更改日志',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Current version display values&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine the display values for the page history link&lt;br /&gt;
-- or the move log link produced by the ${CURRENTVERSION} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in these messages.&lt;br /&gt;
['current-version-move-display'] = '当前标题',&lt;br /&gt;
['current-version-edit-display'] = '当前版本',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Talk page&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This message determines the display value of the talk page link produced&lt;br /&gt;
-- with the ${TALKPAGE} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
['talk-page-link-display'] = '讨论页',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Edit requests&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This message determines the display value of the edit request link produced&lt;br /&gt;
-- with the ${EDITREQUEST} parameter.&lt;br /&gt;
-- It is possible to use banner parameters in this message.&lt;br /&gt;
['edit-request-display'] = '提出编辑请求',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Expiry date format&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This is the format for the blurb expiry date. It should be valid input for&lt;br /&gt;
-- the first parameter of the #time parser function.&lt;br /&gt;
['expiry-date-format'] = 'Y F j',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These messages determine which tracking categories the module outputs.&lt;br /&gt;
['tracking-category-incorrect'] = '保護狀態與保護標誌不符的頁面‎',&lt;br /&gt;
['tracking-category-template'] = '非模板和模块的模板保护页面',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Images&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- These are images that are not defined by their protection action and protection level.&lt;br /&gt;
['image-filename-indef'] = 'Full-protection-shackle-block.svg',&lt;br /&gt;
['image-filename-default'] = 'Transparent.gif',&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End messages&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Effective_protection_expiry&amp;diff=12501</id>
		<title>模块:Effective protection expiry</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Effective_protection_expiry&amp;diff=12501"/>
		<updated>2023-12-24T11:42:00Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.&lt;br /&gt;
-- If no title is specified, the title of the page being displayed is used.&lt;br /&gt;
function p._main(action, pagename)&lt;br /&gt;
	local title&lt;br /&gt;
	if type(pagename) == 'table' and pagename.prefixedText then&lt;br /&gt;
		title = pagename&lt;br /&gt;
	elseif pagename then&lt;br /&gt;
		title = mw.title.new(pagename)&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	pagename = title.prefixedText&lt;br /&gt;
	if action == 'autoreview' then&lt;br /&gt;
		local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)&lt;br /&gt;
		return stabilitySettings and stabilitySettings.expiry or 'unknown'&lt;br /&gt;
	elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then&lt;br /&gt;
		error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )&lt;br /&gt;
	end&lt;br /&gt;
	local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)&lt;br /&gt;
	if rawExpiry == 'infinity' then&lt;br /&gt;
		return 'infinity'&lt;br /&gt;
	elseif rawExpiry == '' then&lt;br /&gt;
		return 'unknown'&lt;br /&gt;
	else&lt;br /&gt;
		local year, month, day, hour, minute, second = rawExpiry:match(&lt;br /&gt;
			'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'&lt;br /&gt;
		)&lt;br /&gt;
		if year then&lt;br /&gt;
			return string.format(&lt;br /&gt;
				'%s-%s-%sT%s:%s:%s',&lt;br /&gt;
				year, month, day, hour, minute, second&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			error('internal error in Module:Effective protection expiry; malformed expiry timestamp')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setmetatable(p, { __index = function(t, k)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		return t._main(k, frame.args[1])&lt;br /&gt;
	end&lt;br /&gt;
end })&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Protection_banner&amp;diff=12499</id>
		<title>模块:Protection banner</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Protection_banner&amp;diff=12499"/>
		<updated>2023-12-24T11:41:59Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{pp-meta}} and its daughter templates such as&lt;br /&gt;
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.&lt;br /&gt;
&lt;br /&gt;
-- Initialise necessary modules.&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
local makeFileLink = require('Module:File link')._main&lt;br /&gt;
local effectiveProtectionLevel = require('Module:Effective protection level')._main&lt;br /&gt;
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
-- Lazily initialise modules and objects we don't always need.&lt;br /&gt;
local getArgs, makeMessageBox, lang&lt;br /&gt;
&lt;br /&gt;
-- Set constants.&lt;br /&gt;
local CONFIG_MODULE = 'Module:Protection banner/config'&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	if cat then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			'[[%s:%s|%s]]',&lt;br /&gt;
			mw.site.namespaces[14].name,&lt;br /&gt;
			cat,&lt;br /&gt;
			sort&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Validation function for the expiry and the protection date&lt;br /&gt;
local function validateDate(dateString, dateType)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		lang = mw.language.getContentLanguage()&lt;br /&gt;
	end&lt;br /&gt;
	local success, result = pcall(lang.formatDate, lang, 'U', dateString)&lt;br /&gt;
	if success then&lt;br /&gt;
		result = tonumber(result)&lt;br /&gt;
		if result then&lt;br /&gt;
			return result&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	error(string.format(&lt;br /&gt;
		'%s「%s」並非有效的格式！',&lt;br /&gt;
		dateType,&lt;br /&gt;
		tostring(dateString)&lt;br /&gt;
	), 4)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFullUrl(page, query, display)&lt;br /&gt;
	return require('Module:Fullurl')._fullurl2(page, query, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a directed graph formatted as node -&amp;gt; table of direct successors,&lt;br /&gt;
-- get a table of all nodes reachable from a given node (though always&lt;br /&gt;
-- including the given node).&lt;br /&gt;
local function getReachableNodes(graph, start)&lt;br /&gt;
	local toWalk, retval = {[start] = true}, {}&lt;br /&gt;
	while true do&lt;br /&gt;
		-- Can't use pairs() since we're adding and removing things as we're iterating&lt;br /&gt;
		local k = next(toWalk) -- This always gets the &amp;quot;first&amp;quot; key&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return retval&lt;br /&gt;
		end&lt;br /&gt;
		toWalk[k] = nil&lt;br /&gt;
		retval[k] = true&lt;br /&gt;
		for _,v in ipairs(graph[k]) do&lt;br /&gt;
			if not retval[v] then&lt;br /&gt;
				toWalk[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Protection = {}&lt;br /&gt;
Protection.__index = Protection&lt;br /&gt;
&lt;br /&gt;
Protection.supportedActions = {&lt;br /&gt;
	edit = true,&lt;br /&gt;
	move = true,&lt;br /&gt;
	autoreview = true,&lt;br /&gt;
	upload = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Protection.bannerConfigFields = {&lt;br /&gt;
	'text',&lt;br /&gt;
	'explanation',&lt;br /&gt;
	'tooltip',&lt;br /&gt;
	'alt',&lt;br /&gt;
	'link',&lt;br /&gt;
	'image'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Protection.new(args, cfg, title)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
	obj.title = title or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set action&lt;br /&gt;
	if not args.action then&lt;br /&gt;
		obj.action = 'edit'&lt;br /&gt;
	elseif Protection.supportedActions[args.action] then&lt;br /&gt;
		obj.action = args.action&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			'未知動作「%s」',&lt;br /&gt;
			tostring(args.action)&lt;br /&gt;
		), 3)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set level&lt;br /&gt;
	obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)&lt;br /&gt;
	if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then&lt;br /&gt;
		-- Users need to be autoconfirmed to move pages anyway, so treat&lt;br /&gt;
		-- semi-move-protected pages as unprotected.&lt;br /&gt;
		obj.level = '*'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set expiry&lt;br /&gt;
	local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)&lt;br /&gt;
	if effectiveExpiry == 'infinity' then&lt;br /&gt;
		obj.expiry = 'indef'&lt;br /&gt;
	elseif effectiveExpiry ~= 'unknown' then&lt;br /&gt;
		obj.expiry = validateDate(effectiveExpiry, '截止時間')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set reason&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		obj.reason = mw.ustring.lower(args[1])&lt;br /&gt;
		if obj.reason:find('|') then&lt;br /&gt;
			error('理由中不得存在「|」！', 3)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set protection date&lt;br /&gt;
	if args.date then&lt;br /&gt;
		obj.protectionDate = validateDate(args.date, '保護日期')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Set banner config&lt;br /&gt;
	do&lt;br /&gt;
		obj.bannerConfig = {}&lt;br /&gt;
		local configTables = {}&lt;br /&gt;
		if cfg.banners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]&lt;br /&gt;
		end&lt;br /&gt;
		if cfg.defaultBanners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default&lt;br /&gt;
		end&lt;br /&gt;
		configTables[#configTables + 1] = cfg.masterBanner&lt;br /&gt;
		for i, field in ipairs(Protection.bannerConfigFields) do&lt;br /&gt;
			for j, t in ipairs(configTables) do&lt;br /&gt;
				if t[field] then&lt;br /&gt;
					obj.bannerConfig[field] = t[field]&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, Protection)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isProtected()&lt;br /&gt;
	return self.level ~= '*'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemporary()&lt;br /&gt;
	return type(self.expiry) == 'number'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeProtectionCategory()&lt;br /&gt;
	local cfg = self._cfg&lt;br /&gt;
	local title = self.title&lt;br /&gt;
	&lt;br /&gt;
	-- Exit if the page is not protected.&lt;br /&gt;
	if not self:isProtected() then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Get the expiry key fragment.&lt;br /&gt;
	local expiryFragment&lt;br /&gt;
	if self.expiry == 'indef' then&lt;br /&gt;
		expiryFragment = self.expiry&lt;br /&gt;
	elseif type(self.expiry) == 'number' then&lt;br /&gt;
		expiryFragment = 'temp'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get the namespace key fragment.&lt;br /&gt;
	local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]&lt;br /&gt;
	if not namespaceFragment and title.namespace % 2 == 1 then&lt;br /&gt;
			namespaceFragment = 'talk'&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	-- Define the order that key fragments are tested in. This is done with an&lt;br /&gt;
	-- array of tables containing the value to be tested, along with its&lt;br /&gt;
	-- position in the cfg.protectionCategories table.&lt;br /&gt;
	local order = {&lt;br /&gt;
		{val = expiryFragment,    keypos = 1},&lt;br /&gt;
		{val = namespaceFragment, keypos = 2},&lt;br /&gt;
		{val = self.reason,       keypos = 3},&lt;br /&gt;
		{val = self.level,        keypos = 4},&lt;br /&gt;
		{val = self.action,       keypos = 5}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- The old protection templates used an ad-hoc protection category system,&lt;br /&gt;
	-- with some templates prioritising namespaces in their categories, and&lt;br /&gt;
	-- others prioritising the protection reason. To emulate this in this module&lt;br /&gt;
	-- we use the config table cfg.reasonsWithNamespacePriority to set the&lt;br /&gt;
	-- reasons for which namespaces have priority over protection reason.&lt;br /&gt;
	-- If we are dealing with one of those reasons, move the namespace table to&lt;br /&gt;
	-- the end of the order table, i.e. give it highest priority. If not, the&lt;br /&gt;
	-- reason should have highest priority, so move that to the end of the table&lt;br /&gt;
	-- instead.&lt;br /&gt;
	--]]&lt;br /&gt;
	table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define the attempt order. Inactive subtables (subtables with nil &amp;quot;value&amp;quot;&lt;br /&gt;
	-- fields) are moved to the end, where they will later be given the key&lt;br /&gt;
	-- &amp;quot;all&amp;quot;. This is to cut down on the number of table lookups in&lt;br /&gt;
	-- cfg.protectionCategories, which grows exponentially with the number of&lt;br /&gt;
	-- non-nil keys. We keep track of the number of active subtables with the&lt;br /&gt;
	-- noActive parameter.&lt;br /&gt;
	--]]&lt;br /&gt;
	local noActive, attemptOrder&lt;br /&gt;
	do&lt;br /&gt;
		local active, inactive = {}, {}&lt;br /&gt;
		for i, t in ipairs(order) do&lt;br /&gt;
			if t.val then&lt;br /&gt;
				active[#active + 1] = t&lt;br /&gt;
			else&lt;br /&gt;
				inactive[#inactive + 1] = t&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		noActive = #active&lt;br /&gt;
		attemptOrder = active&lt;br /&gt;
		for i, t in ipairs(inactive) do&lt;br /&gt;
			attemptOrder[#attemptOrder + 1] = t&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check increasingly generic key combinations until we find a match. If a&lt;br /&gt;
	-- specific category exists for the combination of key fragments we are&lt;br /&gt;
	-- given, that match will be found first. If not, we keep trying different&lt;br /&gt;
	-- key fragment combinations until we match using the key&lt;br /&gt;
	-- &amp;quot;all-all-all-all-all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- To generate the keys, we index the key subtables using a binary matrix&lt;br /&gt;
	-- with indexes i and j. j is only calculated up to the number of active&lt;br /&gt;
	-- subtables. For example, if there were three active subtables, the matrix&lt;br /&gt;
	-- would look like this, with 0 corresponding to the key fragment &amp;quot;all&amp;quot;, and&lt;br /&gt;
	-- 1 corresponding to other key fragments.&lt;br /&gt;
	-- &lt;br /&gt;
	--   j 1  2  3&lt;br /&gt;
	-- i  &lt;br /&gt;
	-- 1   1  1  1&lt;br /&gt;
	-- 2   0  1  1&lt;br /&gt;
	-- 3   1  0  1&lt;br /&gt;
	-- 4   0  0  1&lt;br /&gt;
	-- 5   1  1  0&lt;br /&gt;
	-- 6   0  1  0&lt;br /&gt;
	-- 7   1  0  0&lt;br /&gt;
	-- 8   0  0  0&lt;br /&gt;
	-- &lt;br /&gt;
	-- Values of j higher than the number of active subtables are set&lt;br /&gt;
	-- to the string &amp;quot;all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- A key for cfg.protectionCategories is constructed for each value of i.&lt;br /&gt;
	-- The position of the value in the key is determined by the keypos field in&lt;br /&gt;
	-- each subtable.&lt;br /&gt;
	--]]&lt;br /&gt;
	local cats = cfg.protectionCategories&lt;br /&gt;
	for i = 1, 2^noActive do&lt;br /&gt;
		local key = {}&lt;br /&gt;
		for j, t in ipairs(attemptOrder) do&lt;br /&gt;
			if j &amp;gt; noActive then&lt;br /&gt;
				key[t.keypos] = 'all'&lt;br /&gt;
			else&lt;br /&gt;
				local quotient = i / 2 ^ (j - 1)&lt;br /&gt;
				quotient = math.ceil(quotient)&lt;br /&gt;
				if quotient % 2 == 1 then&lt;br /&gt;
					key[t.keypos] = t.val&lt;br /&gt;
				else&lt;br /&gt;
					key[t.keypos] = 'all'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		key = table.concat(key, '|')&lt;br /&gt;
		local attempt = cats[key]&lt;br /&gt;
		if attempt then&lt;br /&gt;
			return makeCategoryLink(attempt, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isIncorrect()&lt;br /&gt;
	local expiry = self.expiry&lt;br /&gt;
	return not self:isProtected()&lt;br /&gt;
		or type(expiry) == 'number' and expiry &amp;lt; os.time()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemplateProtectedNonTemplate()&lt;br /&gt;
	local action, namespace = self.action, self.title.namespace&lt;br /&gt;
	return self.level == 'templateeditor'&lt;br /&gt;
		and (&lt;br /&gt;
			(action ~= 'edit' and action ~= 'move')&lt;br /&gt;
			or (namespace ~= 10 and namespace ~= 828)&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeCategoryLinks()&lt;br /&gt;
	local msg = self._cfg.msg&lt;br /&gt;
	local ret = { self:makeProtectionCategory() }&lt;br /&gt;
	if self:isIncorrect() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg['tracking-category-incorrect'],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	if self:isTemplateProtectedNonTemplate() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg['tracking-category-template'],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Blurb class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Blurb = {}&lt;br /&gt;
Blurb.__index = Blurb&lt;br /&gt;
&lt;br /&gt;
Blurb.bannerTextFields = {&lt;br /&gt;
	text = true,&lt;br /&gt;
	explanation = true,&lt;br /&gt;
	tooltip = true,&lt;br /&gt;
	alt = true,&lt;br /&gt;
	link = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	return setmetatable({&lt;br /&gt;
		_cfg = cfg,&lt;br /&gt;
		_protectionObj = protectionObj,&lt;br /&gt;
		_args = args&lt;br /&gt;
	}, Blurb)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Private methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:_formatDate(num)&lt;br /&gt;
	-- Formats a Unix timestamp into dd Month, YYYY format.&lt;br /&gt;
	lang = lang or mw.language.getContentLanguage()&lt;br /&gt;
	local success, date = pcall(&lt;br /&gt;
		lang.formatDate,&lt;br /&gt;
		lang,&lt;br /&gt;
		self._cfg.msg['expiry-date-format'] or 'j F Y',&lt;br /&gt;
		'@' .. tostring(num)&lt;br /&gt;
	)&lt;br /&gt;
	if success then&lt;br /&gt;
		return date&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_getExpandedMessage(msgKey)&lt;br /&gt;
	return self:_substituteParameters(self._cfg.msg[msgKey])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_substituteParameters(msg)&lt;br /&gt;
	if not self._params then&lt;br /&gt;
		local parameterFuncs = {}&lt;br /&gt;
&lt;br /&gt;
		parameterFuncs.CURRENTVERSION     = self._makeCurrentVersionParameter&lt;br /&gt;
		parameterFuncs.EDITREQUEST        = self._makeEditRequestParameter&lt;br /&gt;
		parameterFuncs.EXPIRY             = self._makeExpiryParameter&lt;br /&gt;
		parameterFuncs.EXPLANATIONBLURB   = self._makeExplanationBlurbParameter&lt;br /&gt;
		parameterFuncs.IMAGELINK          = self._makeImageLinkParameter&lt;br /&gt;
		parameterFuncs.INTROBLURB         = self._makeIntroBlurbParameter&lt;br /&gt;
		parameterFuncs.INTROFRAGMENT      = self._makeIntroFragmentParameter&lt;br /&gt;
		parameterFuncs.PAGETYPE           = self._makePagetypeParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONBLURB    = self._makeProtectionBlurbParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONDATE     = self._makeProtectionDateParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLEVEL    = self._makeProtectionLevelParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLOG      = self._makeProtectionLogParameter&lt;br /&gt;
		parameterFuncs.TALKPAGE           = self._makeTalkPageParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPBLURB       = self._makeTooltipBlurbParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPFRAGMENT    = self._makeTooltipFragmentParameter&lt;br /&gt;
		parameterFuncs.VANDAL             = self._makeVandalTemplateParameter&lt;br /&gt;
		&lt;br /&gt;
		self._params = setmetatable({}, {&lt;br /&gt;
			__index = function (t, k)&lt;br /&gt;
				local param&lt;br /&gt;
				if parameterFuncs[k] then&lt;br /&gt;
					param = parameterFuncs[k](self)&lt;br /&gt;
				end&lt;br /&gt;
				param = param or ''&lt;br /&gt;
				t[k] = param&lt;br /&gt;
				return param&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	msg = msg:gsub('${(%u+)}', self._params)&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeCurrentVersionParameter()&lt;br /&gt;
	-- A link to the page history or the move log, depending on the kind of&lt;br /&gt;
	-- protection.&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == 'move' then&lt;br /&gt;
		-- We need the move log link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			'Special:Log',&lt;br /&gt;
			{type = 'move', page = pagename},&lt;br /&gt;
			self:_getExpandedMessage('current-version-move-display')&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the history link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			pagename,&lt;br /&gt;
			{action = 'history'},&lt;br /&gt;
			self:_getExpandedMessage('current-version-edit-display')&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeEditRequestParameter()&lt;br /&gt;
	local mEditRequest = require('Module:Submit an edit request')&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	&lt;br /&gt;
	-- Get the edit request type.&lt;br /&gt;
	local requestType&lt;br /&gt;
	if action == 'edit' then&lt;br /&gt;
		if level == 'autoconfirmed' then&lt;br /&gt;
			requestType = 'semi'&lt;br /&gt;
		elseif level == 'extendedconfirmed' then&lt;br /&gt;
			requestType = 'extended'&lt;br /&gt;
		elseif level == 'templateeditor' then&lt;br /&gt;
			requestType = 'template'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	requestType = requestType or 'full'&lt;br /&gt;
	&lt;br /&gt;
	-- Get the display value.&lt;br /&gt;
	local display = self:_getExpandedMessage('edit-request-display')&lt;br /&gt;
&lt;br /&gt;
	return mEditRequest._link{type = requestType, display = display}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExpiryParameter()&lt;br /&gt;
	local expiry = self._protectionObj.expiry&lt;br /&gt;
	if type(expiry) == 'number' then&lt;br /&gt;
		return self:_formatDate(expiry)&lt;br /&gt;
	else&lt;br /&gt;
		return expiry&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExplanationBlurbParameter()&lt;br /&gt;
	-- Cover special cases first.&lt;br /&gt;
	if self._protectionObj.title.namespace == 8 then&lt;br /&gt;
		-- MediaWiki namespace&lt;br /&gt;
		return self:_getExpandedMessage('explanation-blurb-nounprotect')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get explanation blurb table keys&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'&lt;br /&gt;
&lt;br /&gt;
	-- Find the message in the explanation blurb table and substitute any&lt;br /&gt;
	-- parameters.&lt;br /&gt;
	local explanations = self._cfg.explanationBlurbs&lt;br /&gt;
	local msg&lt;br /&gt;
	if explanations[action][level] and explanations[action][level][talkKey] then&lt;br /&gt;
		msg = explanations[action][level][talkKey]&lt;br /&gt;
	elseif explanations[action][level] and explanations[action][level].default then&lt;br /&gt;
		msg = explanations[action][level].default&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default[talkKey] then&lt;br /&gt;
		msg = explanations[action].default[talkKey]&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default.default then&lt;br /&gt;
		msg = explanations[action].default.default&lt;br /&gt;
	else&lt;br /&gt;
		istalk = talkKey == 'talk' and true or false&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			'找不到 action=%s protectionlevel=%s istalkpage=%s 時的解釋說明',&lt;br /&gt;
			action,&lt;br /&gt;
			level,&lt;br /&gt;
			istalk&lt;br /&gt;
		), 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeImageLinkParameter()&lt;br /&gt;
	local imageLinks = self._cfg.imageLinks&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if imageLinks[action][level] then&lt;br /&gt;
		msg = imageLinks[action][level]&lt;br /&gt;
	elseif imageLinks[action].default then&lt;br /&gt;
		msg = imageLinks[action].default&lt;br /&gt;
	else&lt;br /&gt;
		msg = imageLinks.edit.default&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage('intro-blurb-expiry')&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage('intro-blurb-noexpiry')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage('intro-fragment-expiry')&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage('intro-fragment-noexpiry')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makePagetypeParameter()&lt;br /&gt;
	local pagetypes = self._cfg.pagetypes&lt;br /&gt;
	return pagetypes[self._protectionObj.title.namespace]&lt;br /&gt;
		or pagetypes.default&lt;br /&gt;
		or error('「pagetypes.default」丟失！', 8)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionBlurbParameter()&lt;br /&gt;
	local protectionBlurbs = self._cfg.protectionBlurbs&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionBlurbs[action][level] then&lt;br /&gt;
		msg = protectionBlurbs[action][level]&lt;br /&gt;
	elseif protectionBlurbs[action].default then&lt;br /&gt;
		msg = protectionBlurbs[action].default&lt;br /&gt;
	elseif protectionBlurbs.edit.default then&lt;br /&gt;
		msg = protectionBlurbs.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error('沒有為「protectionBlurbs.edit.default」定義保護說明！', 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionDateParameter()&lt;br /&gt;
	local protectionDate = self._protectionObj.protectionDate&lt;br /&gt;
	if type(protectionDate) == 'number' then&lt;br /&gt;
		return self:_formatDate(protectionDate)&lt;br /&gt;
	else&lt;br /&gt;
		return protectionDate&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLevelParameter()&lt;br /&gt;
	local protectionLevels = self._cfg.protectionLevels&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionLevels[action][level] then&lt;br /&gt;
		msg = protectionLevels[action][level]&lt;br /&gt;
	elseif protectionLevels[action].default then&lt;br /&gt;
		msg = protectionLevels[action].default&lt;br /&gt;
	elseif protectionLevels.edit.default then&lt;br /&gt;
		msg = protectionLevels.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error('沒有為「protectionLevels.edit.default」定義保護級別！', 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLogParameter()&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == 'autoreview' then&lt;br /&gt;
		-- We need the pending changes log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			'Special:Log',&lt;br /&gt;
			{type = 'stable', page = pagename},&lt;br /&gt;
			self:_getExpandedMessage('pc-log-display')&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the protection log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			'Special:Log',&lt;br /&gt;
			{type = 'protect', page = pagename},&lt;br /&gt;
			self:_getExpandedMessage('protection-log-display')&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTalkPageParameter()&lt;br /&gt;
	return string.format(&lt;br /&gt;
		'[[%s:%s#%s|%s]]',&lt;br /&gt;
		mw.site.namespaces[self._protectionObj.title.namespace].talk.name,&lt;br /&gt;
		self._protectionObj.title.text,&lt;br /&gt;
		self._args.section or 'top',&lt;br /&gt;
		self:_getExpandedMessage('talk-page-link-display')&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage('tooltip-blurb-expiry')&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage('tooltip-blurb-noexpiry')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage('tooltip-fragment-expiry')&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage('tooltip-fragment-noexpiry')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeVandalTemplateParameter()&lt;br /&gt;
	return require('Module:Vandal-m')._main{&lt;br /&gt;
		self._args.user or self._protectionObj.title.baseText&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:makeBannerText(key)&lt;br /&gt;
	-- Validate input.&lt;br /&gt;
	if not key or not Blurb.bannerTextFields[key] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			'「%s」不是有效的橫幅配置金鑰。',&lt;br /&gt;
			tostring(key)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Generate the text.&lt;br /&gt;
	local msg = self._protectionObj.bannerConfig[key]&lt;br /&gt;
	if type(msg) == 'string' then&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	elseif type(msg) == 'function' then&lt;br /&gt;
		msg = msg(self._protectionObj, self._args)&lt;br /&gt;
		if type(msg) ~= 'string' then&lt;br /&gt;
			error(string.format(&lt;br /&gt;
				'解析橫幅配置時生成錯誤「%s」',&lt;br /&gt;
				tostring(key),&lt;br /&gt;
				type(msg)&lt;br /&gt;
			), 4)&lt;br /&gt;
		end&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- BannerTemplate class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local BannerTemplate = {}&lt;br /&gt;
BannerTemplate.__index = BannerTemplate&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate.new(protectionObj, cfg)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
&lt;br /&gt;
	-- Set the image filename.&lt;br /&gt;
	local imageFilename = protectionObj.bannerConfig.image&lt;br /&gt;
	if imageFilename then&lt;br /&gt;
		obj._imageFilename = imageFilename&lt;br /&gt;
	else&lt;br /&gt;
		-- If an image filename isn't specified explicitly in the banner config,&lt;br /&gt;
		-- generate it from the protection status and the namespace.&lt;br /&gt;
		local action = protectionObj.action&lt;br /&gt;
		local level = protectionObj.level&lt;br /&gt;
		local namespace = protectionObj.title.namespace&lt;br /&gt;
		local reason = protectionObj.reason&lt;br /&gt;
		&lt;br /&gt;
		-- Deal with special cases first.&lt;br /&gt;
		if (&lt;br /&gt;
			namespace == 10&lt;br /&gt;
			or namespace == 828&lt;br /&gt;
			or reason and obj._cfg.indefImageReasons[reason]&lt;br /&gt;
			)&lt;br /&gt;
			and action == 'edit'&lt;br /&gt;
			and level == 'sysop'&lt;br /&gt;
			and not protectionObj:isTemporary()&lt;br /&gt;
		then&lt;br /&gt;
			-- Fully protected modules and templates get the special red &amp;quot;indef&amp;quot;&lt;br /&gt;
			-- padlock.&lt;br /&gt;
			obj._imageFilename = obj._cfg.msg['image-filename-indef']&lt;br /&gt;
		else&lt;br /&gt;
			-- Deal with regular protection types.&lt;br /&gt;
			local images = obj._cfg.images&lt;br /&gt;
			if images[action] then&lt;br /&gt;
				if images[action][level] then&lt;br /&gt;
					obj._imageFilename = images[action][level]&lt;br /&gt;
				elseif images[action].default then&lt;br /&gt;
					obj._imageFilename = images[action].default&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, BannerTemplate)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate:renderImage()&lt;br /&gt;
	local filename = self._imageFilename&lt;br /&gt;
		or self._cfg.msg['image-filename-default']&lt;br /&gt;
		or 'Transparent.gif'&lt;br /&gt;
	return makeFileLink{&lt;br /&gt;
		file = filename,&lt;br /&gt;
		size = (self.imageWidth or 20) .. 'px',&lt;br /&gt;
		alt = self._imageAlt,&lt;br /&gt;
		link = self._imageLink,&lt;br /&gt;
		caption = self.imageCaption&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Banner class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Banner = setmetatable({}, BannerTemplate)&lt;br /&gt;
Banner.__index = Banner&lt;br /&gt;
&lt;br /&gt;
function Banner.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.&lt;br /&gt;
	obj.imageWidth = 40&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.&lt;br /&gt;
	obj._reasonText = blurbObj:makeBannerText('text')&lt;br /&gt;
	obj._explanationText = blurbObj:makeBannerText('explanation')&lt;br /&gt;
	obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.&lt;br /&gt;
	return setmetatable(obj, Banner)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Banner:__tostring()&lt;br /&gt;
	-- Renders the banner.&lt;br /&gt;
	makeMessageBox = makeMessageBox or require('Module:Message box').main&lt;br /&gt;
	local reasonText = self._reasonText or error('沒有理由！', 2)&lt;br /&gt;
	local explanationText = self._explanationText&lt;br /&gt;
	local mbargs = {&lt;br /&gt;
		page = self._page,&lt;br /&gt;
		type = 'protection',&lt;br /&gt;
		image = self:renderImage(),&lt;br /&gt;
		text = string.format(&lt;br /&gt;
			&amp;quot;'''%s'''%s&amp;quot;,&lt;br /&gt;
			reasonText,&lt;br /&gt;
			explanationText and '&amp;lt;br /&amp;gt;' .. explanationText or ''&lt;br /&gt;
		)&lt;br /&gt;
	}&lt;br /&gt;
	return makeMessageBox('mbox', mbargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Padlock class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Padlock = setmetatable({}, BannerTemplate)&lt;br /&gt;
Padlock.__index = Padlock&lt;br /&gt;
&lt;br /&gt;
function Padlock.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.&lt;br /&gt;
	obj.imageWidth = 20&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText('tooltip')&lt;br /&gt;
	obj._imageAlt = blurbObj:makeBannerText('alt')&lt;br /&gt;
	obj._imageLink = blurbObj:makeBannerText('link')&lt;br /&gt;
	obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]&lt;br /&gt;
		or cfg.padlockIndicatorNames.default&lt;br /&gt;
		or 'pp-default'&lt;br /&gt;
	return setmetatable(obj, Padlock)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Padlock:__tostring()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- The nowiki tag helps prevent whitespace at the top of articles.&lt;br /&gt;
	return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{&lt;br /&gt;
		name = 'indicator',&lt;br /&gt;
		args = {name = self._indicatorName},&lt;br /&gt;
		content = self:renderImage()&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- This is used for testing purposes.&lt;br /&gt;
	return {&lt;br /&gt;
		Protection = Protection,&lt;br /&gt;
		Blurb = Blurb,&lt;br /&gt;
		BannerTemplate = BannerTemplate,&lt;br /&gt;
		Banner = Banner,&lt;br /&gt;
		Padlock = Padlock,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, cfg, title)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	local protectionObj = Protection.new(args, cfg, title)&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	-- If a page's edit protection is equally or more restrictive than its&lt;br /&gt;
	-- protection from some other action, then don't bother displaying anything&lt;br /&gt;
	-- for the other action (except categories).&lt;br /&gt;
	if protectionObj.action == 'edit' or&lt;br /&gt;
		args.demolevel or&lt;br /&gt;
		not getReachableNodes(&lt;br /&gt;
			cfg.hierarchy,&lt;br /&gt;
			protectionObj.level&lt;br /&gt;
		)[effectiveProtectionLevel('edit', protectionObj.title)]&lt;br /&gt;
	then&lt;br /&gt;
		-- Initialise the blurb object&lt;br /&gt;
		local blurbObj = Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	&lt;br /&gt;
		-- Render the banner&lt;br /&gt;
		if protectionObj:isProtected() then&lt;br /&gt;
			ret[#ret + 1] = tostring(&lt;br /&gt;
				(yesno(args.small) and Padlock or Banner)&lt;br /&gt;
				.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the categories&lt;br /&gt;
	if yesno(args.category) ~= false then&lt;br /&gt;
		ret[#ret + 1] = protectionObj:makeCategoryLinks()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, cfg)&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	-- Find default args, if any.&lt;br /&gt;
	local parent = frame.getParent and frame:getParent()&lt;br /&gt;
	local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]&lt;br /&gt;
&lt;br /&gt;
	-- Find user args, and use the parent frame if we are being called from a&lt;br /&gt;
	-- wrapper template.&lt;br /&gt;
	getArgs = getArgs or require('Module:Arguments').getArgs&lt;br /&gt;
	local userArgs = getArgs(frame, {&lt;br /&gt;
		parentOnly = defaultArgs,&lt;br /&gt;
		frameOnly = not defaultArgs&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Build the args table. User-specified args overwrite default args.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(defaultArgs or {}) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(userArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args, cfg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Lua_banner&amp;diff=12497</id>
		<title>模块:Lua banner</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Lua_banner&amp;diff=12497"/>
		<updated>2023-12-24T11:41:59Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[=[&lt;br /&gt;
&lt;br /&gt;
本模块由[[Template:Lua]]调用&lt;br /&gt;
暂无模块调用&lt;br /&gt;
/****************************/&lt;br /&gt;
本模組由[[Template:Lua]]調用&lt;br /&gt;
暫無模組調用&lt;br /&gt;
&lt;br /&gt;
]=]--&lt;br /&gt;
&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
local mList = require('Module:List')&lt;br /&gt;
local mTableTools = require('Module:TableTools')&lt;br /&gt;
local mMessageBox = require('Module:Message box')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match('^%s*(.-)%s*$')&lt;br /&gt;
		if v ~= '' then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(frame, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(frame, args)&lt;br /&gt;
	local modules = mTableTools.compressSparseArray(args)&lt;br /&gt;
	local box = p.renderBox(modules)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args, modules)&lt;br /&gt;
	return box .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
-- if action=edit &lt;br /&gt;
function p.main2(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match('^%s*(.-)%s*$')&lt;br /&gt;
		if v ~= '' then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local modules = mTableTools.compressSparseArray(args)&lt;br /&gt;
	return p.renderBox(modules)&lt;br /&gt;
end&lt;br /&gt;
--end&lt;br /&gt;
&lt;br /&gt;
function p.renderBox(modules)&lt;br /&gt;
	local boxArgs = {}&lt;br /&gt;
	if #modules &amp;lt; 1 then&lt;br /&gt;
		boxArgs.text = '&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;错误：未指定-{zh-hans:模块; zh-hant:模組;}-&amp;lt;/strong&amp;gt;'&lt;br /&gt;
	else&lt;br /&gt;
		local moduleLinks = {}&lt;br /&gt;
		for i, module in ipairs(modules) do&lt;br /&gt;
			moduleLinks[i] = string.format('%s', module)&lt;br /&gt;
			moduleLinks[i] = '[[:Module:' .. mw.title.new(moduleLinks[i]).text .. ']]'&lt;br /&gt;
			local maybeSandbox = mw.title.new(module .. '/sandbox')&lt;br /&gt;
			if maybeSandbox.exists then&lt;br /&gt;
				moduleLinks[i] = moduleLinks[i] .. string.format('（[[:%s|沙盒]]）', maybeSandbox.fullText)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local moduleList = mList.makeList('bulleted', moduleLinks)&lt;br /&gt;
		boxArgs.text = '此' .. &lt;br /&gt;
			(mw.title.getCurrentTitle():inNamespaces(828,829) and '-{zh-hans:模块; zh-hant:模組;}-' or '模板') ..&lt;br /&gt;
			'使用[[Wikipedia:Lua|Lua语言]]：\n' .. moduleList&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = 'notice'&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'&lt;br /&gt;
	return mMessageBox.main('mbox', boxArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args, modules, titleObj)&lt;br /&gt;
	if yesno(args.nocat) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	&lt;br /&gt;
	-- 错误分类&lt;br /&gt;
	if #modules &amp;lt; 1 then&lt;br /&gt;
		cats[#cats + 1] = '有错误的Lua模板'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Lua templates category&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	local subpageBlacklist = {&lt;br /&gt;
		doc = true,&lt;br /&gt;
		sandbox = true,&lt;br /&gt;
		sandbox2 = true,&lt;br /&gt;
		testcases = true&lt;br /&gt;
	}&lt;br /&gt;
	if titleObj.namespace == 10 &lt;br /&gt;
		and not subpageBlacklist[titleObj.subpageText]&lt;br /&gt;
	then&lt;br /&gt;
		local category = args.category&lt;br /&gt;
		if not category then&lt;br /&gt;
			local categories = {&lt;br /&gt;
				['Module:String'] = '使用Module:String的模板',&lt;br /&gt;
				--['Module:Math'] = '使用LuaMath的模板',&lt;br /&gt;
				--['Module:BaseConvert'] = '使用LuaBaseConvert的模板',&lt;br /&gt;
				--['Module:Citation'] = '使用LuaCitation的模板'&lt;br /&gt;
			}&lt;br /&gt;
			categories['Module:Citation/CS1'] = categories['Module:Citation']&lt;br /&gt;
			category = modules[1] and categories[modules[1]]&lt;br /&gt;
			category = category or 'x'&lt;br /&gt;
		end&lt;br /&gt;
		cats[#cats + 1] = category&lt;br /&gt;
		local protLevels = {&lt;br /&gt;
			autoconfirmed = 1,&lt;br /&gt;
			extendedconfirmed = 2,&lt;br /&gt;
			templateeditor = 3,&lt;br /&gt;
			sysop = 4&lt;br /&gt;
		}&lt;br /&gt;
		local currentProt = titleObj.protectionLevels[&amp;quot;edit&amp;quot;][1]&lt;br /&gt;
		if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end&lt;br /&gt;
		for i, module in ipairs(modules) do&lt;br /&gt;
			if mw.title.new(module).protectionLevels[&amp;quot;edit&amp;quot;] then&lt;br /&gt;
				local moduleProt = mw.title.new(module).protectionLevels[&amp;quot;edit&amp;quot;][1]&lt;br /&gt;
				if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end&lt;br /&gt;
				if moduleProt &amp;lt; currentProt then&lt;br /&gt;
					cats[#cats + 1] = &amp;quot;使用受保护Lua模块的模板&amp;quot;&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, cat in ipairs(cats) do&lt;br /&gt;
		cats[i] = string.gsub(string.format('[[Category:%s]]', cat), '%[%[Category:x%]%]', '')&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(cats) .. '[[Category:Lua模板]]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Lua&amp;diff=12495</id>
		<title>Template:Lua</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Lua&amp;diff=12495"/>
		<updated>2023-12-24T11:41:59Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[Template:Uses Lua]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|1=&lt;br /&gt;
{{移動重定向}}&lt;br /&gt;
{{模板重定向}}&lt;br /&gt;
{{模板捷徑重定向}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Large&amp;diff=12493</id>
		<title>Template:Large</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Large&amp;diff=12493"/>
		<updated>2023-12-24T11:41:58Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:120%&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Resize/doc}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:File_link&amp;diff=12491</id>
		<title>模块:File link</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:File_link&amp;diff=12491"/>
		<updated>2023-12-24T11:41:58Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides a library for formatting file wikilinks.&lt;br /&gt;
&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
local checkType = require('libraryUtil').checkType&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	checkType('_main', 1, args, 'table')&lt;br /&gt;
&lt;br /&gt;
	-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our&lt;br /&gt;
	-- own function to get the right error level.&lt;br /&gt;
	local function checkArg(key, val, level)&lt;br /&gt;
		if type(val) ~= 'string' then&lt;br /&gt;
			error(string.format(&lt;br /&gt;
				&amp;quot;type error in '%s' parameter of '_main' (expected string, got %s)&amp;quot;,&lt;br /&gt;
				key, type(val)&lt;br /&gt;
			), level)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	-- Adds a positional parameter to the buffer.&lt;br /&gt;
	local function addPositional(key)&lt;br /&gt;
		local val = args[key]&lt;br /&gt;
		if not val then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		checkArg(key, val, 4)&lt;br /&gt;
		ret[#ret + 1] = val&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Adds a named parameter to the buffer. We assume that the parameter name&lt;br /&gt;
	-- is the same as the argument key.&lt;br /&gt;
	local function addNamed(key)&lt;br /&gt;
		local val = args[key]&lt;br /&gt;
		if not val then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		checkArg(key, val, 4)&lt;br /&gt;
		ret[#ret + 1] = key .. '=' .. val&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Filename&lt;br /&gt;
	checkArg('file', args.file, 3)&lt;br /&gt;
	ret[#ret + 1] = 'File:' .. args.file&lt;br /&gt;
&lt;br /&gt;
	-- Format&lt;br /&gt;
	if args.format then&lt;br /&gt;
		checkArg('format', args.format)&lt;br /&gt;
		if args.formatfile then&lt;br /&gt;
			checkArg('formatfile', args.formatfile)&lt;br /&gt;
			ret[#ret + 1] = args.format .. '=' .. args.formatfile&lt;br /&gt;
		else&lt;br /&gt;
			ret[#ret + 1] = args.format&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Border&lt;br /&gt;
	if yesno(args.border) then&lt;br /&gt;
		ret[#ret + 1] = 'border'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	addPositional('location')&lt;br /&gt;
	addPositional('alignment')&lt;br /&gt;
	addPositional('size')&lt;br /&gt;
	addNamed('upright')&lt;br /&gt;
	addNamed('link')&lt;br /&gt;
	addNamed('alt')&lt;br /&gt;
	addNamed('page')&lt;br /&gt;
	addNamed('class')&lt;br /&gt;
	addNamed('lang')&lt;br /&gt;
	addNamed('start')&lt;br /&gt;
	addNamed('end')&lt;br /&gt;
	addNamed('thumbtime')&lt;br /&gt;
	addPositional('caption')&lt;br /&gt;
&lt;br /&gt;
	return string.format('[[%s]]', table.concat(ret, '|'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = require('Module:Arguments').getArgs(frame, {&lt;br /&gt;
		wrappers = 'Template:File link'&lt;br /&gt;
	})&lt;br /&gt;
	if not origArgs.file then&lt;br /&gt;
		error(&amp;quot;'file' parameter missing from [[Template:File link]]&amp;quot;, 0)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Copy the arguments that were passed to a new table to avoid looking up&lt;br /&gt;
	-- every possible parameter in the frame object.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		-- Make _BLANK a special argument to add a blank parameter. For use in&lt;br /&gt;
		-- conditional templates etc. it is useful for blank arguments to be&lt;br /&gt;
		-- ignored, but we still need a way to specify them so that we can do&lt;br /&gt;
		-- things like [[File:Example.png|link=]].&lt;br /&gt;
		if v == '_BLANK' then&lt;br /&gt;
			v = ''&lt;br /&gt;
		end&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Documentation/config&amp;diff=12489</id>
		<title>模块:Documentation/config</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Documentation/config&amp;diff=12489"/>
		<updated>2023-12-24T11:41:58Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                               Configuration for Module:Documentation&lt;br /&gt;
--&lt;br /&gt;
-- Here you can set the values of the parameters and messages used in Module:Documentation to&lt;br /&gt;
-- localise it to your wiki and your language. Unless specified otherwise, values given here&lt;br /&gt;
-- should be string values.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Do not edit this line.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Protection template configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['protection-reason-edit']&lt;br /&gt;
-- The protection reason for edit-protected templates to pass to&lt;br /&gt;
-- [[Module:Protection banner]].&lt;br /&gt;
cfg['protection-reason-edit'] = 'template'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox notice configuration&lt;br /&gt;
--&lt;br /&gt;
-- On sandbox pages the module can display a template notifying users that the current page is a&lt;br /&gt;
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a&lt;br /&gt;
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the&lt;br /&gt;
-- messages that the notices contains.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-notice-image']&lt;br /&gt;
-- The image displayed in the sandbox notice.&lt;br /&gt;
cfg['sandbox-notice-image'] = '[[Image:Sandbox.svg|50px|alt=|link=]]'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['sandbox-notice-pagetype-template']&lt;br /&gt;
-- cfg['sandbox-notice-pagetype-module']&lt;br /&gt;
-- cfg['sandbox-notice-pagetype-other']&lt;br /&gt;
-- The page type of the sandbox page. The message that is displayed depends on the current subject&lt;br /&gt;
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or&lt;br /&gt;
-- cfg['sandbox-notice-diff-blurb'].&lt;br /&gt;
--]]&lt;br /&gt;
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:模板的沙盒和测试样例|沙盒]]'&lt;br /&gt;
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:模板的沙盒和测试样例|沙盒]]'&lt;br /&gt;
cfg['sandbox-notice-pagetype-other'] = '沙盒'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['sandbox-notice-blurb']&lt;br /&gt;
-- cfg['sandbox-notice-diff-blurb']&lt;br /&gt;
-- cfg['sandbox-notice-diff-display']&lt;br /&gt;
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence&lt;br /&gt;
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page&lt;br /&gt;
-- type, which is either cfg['sandbox-notice-pagetype-template'],&lt;br /&gt;
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what&lt;br /&gt;
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between&lt;br /&gt;
-- the sandbox and the main template. The display value of the diff link is set by &lt;br /&gt;
-- cfg['sandbox-notice-compare-link-display'].&lt;br /&gt;
--]]&lt;br /&gt;
cfg['sandbox-notice-blurb'] = '这是$2的$1。'&lt;br /&gt;
cfg['sandbox-notice-diff-blurb'] = '这是$2（$3）的$1。'&lt;br /&gt;
cfg['sandbox-notice-compare-link-display'] = '差异'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['sandbox-notice-testcases-blurb']&lt;br /&gt;
-- cfg['sandbox-notice-testcases-link-display']&lt;br /&gt;
-- cfg['sandbox-notice-testcases-run-blurb']&lt;br /&gt;
-- cfg['sandbox-notice-testcases-run-link-display']&lt;br /&gt;
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.&lt;br /&gt;
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.&lt;br /&gt;
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test&lt;br /&gt;
-- cases page, and $2 is a link to the page to run it.&lt;br /&gt;
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test&lt;br /&gt;
-- cases.&lt;br /&gt;
--]]&lt;br /&gt;
cfg['sandbox-notice-testcases-blurb'] = '参见本$1的$2。'&lt;br /&gt;
cfg['sandbox-notice-testcases-link-display'] = '测试样例'&lt;br /&gt;
cfg['sandbox-notice-testcases-run-blurb'] = '参见本$1的$2（$3）。'&lt;br /&gt;
cfg['sandbox-notice-testcases-run-link-display'] = '-{zh-cn:运行; zh-tw:執行;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-category']&lt;br /&gt;
-- A category to add to all template sandboxes.&lt;br /&gt;
cfg['sandbox-category'] = '模板沙盒'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Start box configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['documentation-icon-wikitext']&lt;br /&gt;
-- The wikitext for the icon shown at the top of the template.&lt;br /&gt;
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=-{zh-cn:文档; zh-tw:文件;}-图示]]'&lt;br /&gt;
&lt;br /&gt;
-- cfg['template-namespace-heading']&lt;br /&gt;
-- The heading shown in the template namespace.&lt;br /&gt;
cfg['template-namespace-heading'] = '模板-{zh-cn:文档; zh-tw:文件;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['module-namespace-heading']&lt;br /&gt;
-- The heading shown in the module namespace.&lt;br /&gt;
cfg['module-namespace-heading'] = '-{zh-hans:模块;zh-hant:模組}--{zh-cn:文档; zh-tw:文件;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['file-namespace-heading']&lt;br /&gt;
-- The heading shown in the file namespace.&lt;br /&gt;
cfg['file-namespace-heading'] = 'Summary'&lt;br /&gt;
&lt;br /&gt;
-- cfg['other-namespaces-heading']&lt;br /&gt;
-- The heading shown in other namespaces.&lt;br /&gt;
cfg['other-namespaces-heading'] = '-{zh-cn:文档; zh-tw:文件;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['view-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;view&amp;quot; links.&lt;br /&gt;
cfg['view-link-display'] = '-{zh-cn:查看;zh-tw:檢視}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['edit-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg['edit-link-display'] = '编辑'&lt;br /&gt;
&lt;br /&gt;
-- cfg['history-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;history&amp;quot; links.&lt;br /&gt;
cfg['history-link-display'] = '历史'&lt;br /&gt;
&lt;br /&gt;
-- cfg['purge-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;purge&amp;quot; links.&lt;br /&gt;
cfg['purge-link-display'] = '清除-{zh-hans:缓存;zh-hant:快取}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['create-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg['create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Link box (end box) configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['transcluded-from-blurb']&lt;br /&gt;
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.&lt;br /&gt;
cfg['transcluded-from-blurb'] = '上述[[Wikipedia:模板文檔頁模式|-{zh-cn:文档; zh-tw:文件;}-]][[Wikipedia:嵌入包含|嵌入]]自$1。'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['create-module-doc-blurb']&lt;br /&gt;
-- Notice displayed in the module namespace when the documentation subpage does not exist.&lt;br /&gt;
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the&lt;br /&gt;
-- display cfg['create-link-display'].&lt;br /&gt;
--]]&lt;br /&gt;
cfg['create-module-doc-blurb'] = '您可能想要$1本[[Wikipedia:Lua|Scribunto-{zh-hans:模块;zh-hant:模組}-]]的-{zh-cn:文档; zh-tw:文件;}-。'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Experiment blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['experiment-blurb-template']&lt;br /&gt;
-- cfg['experiment-blurb-module']&lt;br /&gt;
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.&lt;br /&gt;
-- It is only shown in the template and module namespaces. With the default English settings, it&lt;br /&gt;
-- might look like this:&lt;br /&gt;
--&lt;br /&gt;
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.&lt;br /&gt;
--&lt;br /&gt;
-- In this example, &amp;quot;sandbox&amp;quot;, &amp;quot;edit&amp;quot;, &amp;quot;diff&amp;quot;, &amp;quot;testcases&amp;quot;, and &amp;quot;edit&amp;quot; would all be links.&lt;br /&gt;
--&lt;br /&gt;
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending&lt;br /&gt;
-- on what namespace we are in.&lt;br /&gt;
-- &lt;br /&gt;
-- Parameters:&lt;br /&gt;
--&lt;br /&gt;
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg['sandbox-link-display']（cfg['sandbox-edit-link-display'] | cfg['compare-link-display']）&lt;br /&gt;
-- &lt;br /&gt;
-- If the sandbox doesn't exist, it is in the format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg['sandbox-link-display']（cfg['sandbox-create-link-display'] | cfg['mirror-link-display']）&lt;br /&gt;
-- &lt;br /&gt;
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']&lt;br /&gt;
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']&lt;br /&gt;
-- loads a default edit summary of cfg['mirror-edit-summary'].&lt;br /&gt;
--&lt;br /&gt;
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg['testcases-link-display']（cfg['testcases-edit-link-display']）&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn't exist, it is in the format:&lt;br /&gt;
-- &lt;br /&gt;
--     cfg['testcases-link-display']（cfg['testcases-create-link-display']）&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the&lt;br /&gt;
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current&lt;br /&gt;
-- namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg['experiment-blurb-template'] = &amp;quot;编者可以在本模板的$1和$2页面进行实验。&amp;quot;&lt;br /&gt;
cfg['experiment-blurb-module'] = &amp;quot;编者可以在本-{zh-cn:模块; zh-tw:模組}-的$1和$2页面进行实验。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-subpage']&lt;br /&gt;
-- The name of the template subpage typically used for sandboxes.&lt;br /&gt;
cfg['sandbox-subpage'] = 'sandbox'&lt;br /&gt;
&lt;br /&gt;
-- cfg['template-sandbox-preload']&lt;br /&gt;
-- Preload file for template sandbox pages.&lt;br /&gt;
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'&lt;br /&gt;
&lt;br /&gt;
-- cfg['module-sandbox-preload']&lt;br /&gt;
-- Preload file for Lua module sandbox pages.&lt;br /&gt;
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;sandbox&amp;quot; links.&lt;br /&gt;
cfg['sandbox-link-display'] = '沙盒'&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-edit-link-display']&lt;br /&gt;
-- The text to display for sandbox &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg['sandbox-edit-link-display'] = '编辑'&lt;br /&gt;
&lt;br /&gt;
-- cfg['sandbox-create-link-display']&lt;br /&gt;
-- The text to display for sandbox &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg['sandbox-create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['compare-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;compare&amp;quot; links.&lt;br /&gt;
cfg['compare-link-display'] = '差异'&lt;br /&gt;
&lt;br /&gt;
-- cfg['mirror-edit-summary']&lt;br /&gt;
-- The default edit summary to use when a user clicks the &amp;quot;mirror&amp;quot; link. $1 is a wikilink to the&lt;br /&gt;
-- template page.&lt;br /&gt;
cfg['mirror-edit-summary'] = '建立$1的沙盒版本'  -- 本訊息無法使用轉換&lt;br /&gt;
&lt;br /&gt;
-- cfg['mirror-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;mirror&amp;quot; links.&lt;br /&gt;
cfg['mirror-link-display'] = '镜像'&lt;br /&gt;
&lt;br /&gt;
-- cfg['mirror-link-preload']&lt;br /&gt;
-- The page to preload when a user clicks the &amp;quot;mirror&amp;quot; link.&lt;br /&gt;
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test cases link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['testcases-subpage']&lt;br /&gt;
-- The name of the template subpage typically used for test cases.&lt;br /&gt;
cfg['testcases-subpage'] = 'testcases'&lt;br /&gt;
&lt;br /&gt;
-- cfg['template-testcases-preload']&lt;br /&gt;
-- Preload file for template test cases pages.&lt;br /&gt;
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'&lt;br /&gt;
&lt;br /&gt;
-- cfg['module-testcases-preload']&lt;br /&gt;
-- Preload file for Lua module test cases pages.&lt;br /&gt;
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'&lt;br /&gt;
&lt;br /&gt;
-- cfg['testcases-link-display']&lt;br /&gt;
-- The text to display for &amp;quot;testcases&amp;quot; links.&lt;br /&gt;
cfg['testcases-link-display'] = '测试样例'&lt;br /&gt;
&lt;br /&gt;
-- cfg['testcases-edit-link-display']&lt;br /&gt;
-- The text to display for test cases &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg['testcases-edit-link-display'] = '编辑'&lt;br /&gt;
&lt;br /&gt;
-- cfg['testcases-run-link-display']&lt;br /&gt;
-- The text to display for test cases &amp;quot;run&amp;quot; links.&lt;br /&gt;
cfg['testcases-run-link-display'] = '-{zh-cn:运行; zh-tw:執行;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['testcases-create-link-display']&lt;br /&gt;
-- The text to display for test cases &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg['testcases-create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Add categories blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['add-categories-blurb']&lt;br /&gt;
-- Text to direct users to add categories to the /doc subpage. Not used if the &amp;quot;content&amp;quot; or&lt;br /&gt;
-- &amp;quot;docname fed&amp;quot; arguments are set, as then it is not clear where to add the categories. $1 is a&lt;br /&gt;
-- link to the /doc subpage with a display value of cfg['doc-link-display'].&lt;br /&gt;
--]]&lt;br /&gt;
cfg['add-categories-blurb'] = '请在$1子页面中添加分类。'&lt;br /&gt;
&lt;br /&gt;
-- cfg['doc-link-display']&lt;br /&gt;
-- The text to display when linking to the /doc subpage.&lt;br /&gt;
cfg['doc-link-display'] = '/doc'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Subpages link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['subpages-blurb']&lt;br /&gt;
-- The &amp;quot;Subpages of this template&amp;quot; blurb. $1 is a link to the main template's subpages with a&lt;br /&gt;
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply&lt;br /&gt;
-- the link followed by a period, and the link display provides the actual text.&lt;br /&gt;
--]]&lt;br /&gt;
cfg['subpages-blurb'] = '$1。'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg['subpages-link-display']&lt;br /&gt;
-- The text to display for the &amp;quot;subpages of this page&amp;quot; link. $1 is cfg['template-pagetype'],&lt;br /&gt;
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in&lt;br /&gt;
-- the template namespace, the module namespace, or another namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg['subpages-link-display'] = '本$1的子页面'&lt;br /&gt;
&lt;br /&gt;
-- cfg['template-pagetype']&lt;br /&gt;
-- The pagetype to display for template pages.&lt;br /&gt;
cfg['template-pagetype'] = '模板'&lt;br /&gt;
&lt;br /&gt;
-- cfg['module-pagetype']&lt;br /&gt;
-- The pagetype to display for Lua module pages.&lt;br /&gt;
cfg['module-pagetype'] = '-{zh-cn:模块; zh-tw:模組;}-'&lt;br /&gt;
&lt;br /&gt;
-- cfg['default-pagetype']&lt;br /&gt;
-- The pagetype to display for pages other than templates or Lua modules.&lt;br /&gt;
cfg['default-pagetype'] = '页'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Doc link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['doc-subpage']&lt;br /&gt;
-- The name of the subpage typically used for documentation pages.&lt;br /&gt;
cfg['doc-subpage'] = 'doc'&lt;br /&gt;
&lt;br /&gt;
-- cfg['file-docpage-preload']&lt;br /&gt;
-- Preload file for documentation page in the file namespace.&lt;br /&gt;
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'&lt;br /&gt;
&lt;br /&gt;
-- cfg['docpage-preload']&lt;br /&gt;
-- Preload file for template documentation pages in all namespaces.&lt;br /&gt;
cfg['docpage-preload'] = 'Template:Documentation/preload'&lt;br /&gt;
&lt;br /&gt;
-- cfg['module-preload']&lt;br /&gt;
-- Preload file for Lua module documentation pages.&lt;br /&gt;
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Print version configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['print-subpage']&lt;br /&gt;
-- The name of the template subpage used for print versions.&lt;br /&gt;
cfg['print-subpage'] = 'Print'&lt;br /&gt;
&lt;br /&gt;
-- cfg['print-link-display']&lt;br /&gt;
-- The text to display when linking to the /Print subpage.&lt;br /&gt;
cfg['print-link-display'] = '/Print'&lt;br /&gt;
&lt;br /&gt;
-- cfg['print-blurb']&lt;br /&gt;
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].&lt;br /&gt;
cfg['print-blurb'] = 'A [[Help:Books/for experts#Improving the book layout|print version]] of this template exists at $1.'&lt;br /&gt;
	.. ' If you make a change to this template, please update the print version as well.'&lt;br /&gt;
&lt;br /&gt;
-- cfg['display-print-category']&lt;br /&gt;
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.&lt;br /&gt;
-- This should be a boolean value (either true or false).&lt;br /&gt;
cfg['display-print-category'] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg['print-category']&lt;br /&gt;
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.&lt;br /&gt;
cfg['print-category'] = 'Templates with print versions'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- HTML and CSS configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['main-div-id']&lt;br /&gt;
-- The &amp;quot;id&amp;quot; attribute of the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg['main-div-id'] = 'template-documentation'&lt;br /&gt;
&lt;br /&gt;
-- cfg['main-div-classes']&lt;br /&gt;
-- The CSS classes added to the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg['main-div-classes'] = 'template-documentation iezoomfix'&lt;br /&gt;
&lt;br /&gt;
-- cfg['start-box-linkclasses']&lt;br /&gt;
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.&lt;br /&gt;
cfg['start-box-linkclasses'] = 'mw-editsection-like plainlinks'&lt;br /&gt;
&lt;br /&gt;
-- cfg['start-box-link-id']&lt;br /&gt;
-- The HTML &amp;quot;id&amp;quot; attribute for the links in the start box.&lt;br /&gt;
cfg['start-box-link-id'] = 'doc_editlinks'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- {{fmbox}} template configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['fmbox-id']&lt;br /&gt;
-- The id sent to the &amp;quot;id&amp;quot; parameter of the {{fmbox}} template.&lt;br /&gt;
cfg['fmbox-id'] = 'documentation-meta-data'&lt;br /&gt;
&lt;br /&gt;
-- cfg['fmbox-style']&lt;br /&gt;
-- The value sent to the style parameter of {{fmbox}}.&lt;br /&gt;
cfg['fmbox-style'] = 'background-color: #ecfcf4'&lt;br /&gt;
&lt;br /&gt;
-- cfg['fmbox-textstyle']&lt;br /&gt;
-- The value sent to the &amp;quot;textstyle parameter of {{fmbox}}.&lt;br /&gt;
cfg['fmbox-textstyle'] = 'font-size: small'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking category configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg['display-strange-usage-category']&lt;br /&gt;
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage&lt;br /&gt;
-- or a /testcases subpage. This should be a boolean value (either true or false).&lt;br /&gt;
cfg['display-strange-usage-category'] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg['strange-usage-category']&lt;br /&gt;
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a&lt;br /&gt;
-- /doc subpage or a /testcases subpage.&lt;br /&gt;
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--&lt;br /&gt;
-- Don't edit anything below this line.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Documentation&amp;diff=12487</id>
		<title>模块:Documentation</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Documentation&amp;diff=12487"/>
		<updated>2023-12-24T11:41:57Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local messageBox = require('Module:Message box')&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData('Module:Documentation/config')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Often-used functions.&lt;br /&gt;
local ugsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--&lt;br /&gt;
-- These are defined as local functions, but are made available in the p&lt;br /&gt;
-- table for testing purposes.&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function message(cfgKey, valArray, expectType)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Gets a message from the cfg table and formats it if appropriate.&lt;br /&gt;
	-- The function raises an error if the value from the cfg table is not&lt;br /&gt;
	-- of the type expectType. The default type for expectType is 'string'.&lt;br /&gt;
	-- If the table valArray is present, strings such as $1, $2 etc. in the&lt;br /&gt;
	-- message are substituted with values from the table keys [1], [2] etc.&lt;br /&gt;
	-- For example, if the message &amp;quot;foo-message&amp;quot; had the value 'Foo $2 bar $1.',&lt;br /&gt;
	-- message('foo-message', {'baz', 'qux'}) would return &amp;quot;Foo qux bar baz.&amp;quot;&lt;br /&gt;
	--]]&lt;br /&gt;
	local msg = cfg[cfgKey]&lt;br /&gt;
	expectType = expectType or 'string'&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not valArray then&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getMessageVal(match)&lt;br /&gt;
		match = tonumber(match)&lt;br /&gt;
		return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.message = message&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(page, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return mw.ustring.format('[[%s|%s]]', page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format('[[%s]]', page)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeWikilink = makeWikilink&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	local catns = mw.site.namespaces[14].name&lt;br /&gt;
	return makeWikilink(catns .. ':' .. cat, sort)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeCategoryLink = makeCategoryLink&lt;br /&gt;
&lt;br /&gt;
local function makeUrlLink(url, display)&lt;br /&gt;
	return mw.ustring.format('[%s %s]', url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeUrlLink = makeUrlLink&lt;br /&gt;
&lt;br /&gt;
local function makeToolbar(...)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local lim = select('#', ...)&lt;br /&gt;
	if lim &amp;lt; 1 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, lim do&lt;br /&gt;
		ret[#ret + 1] = select(i, ...)&lt;br /&gt;
	end&lt;br /&gt;
	return '&amp;lt;small style=&amp;quot;font-style: normal;&amp;quot;&amp;gt;(' .. table.concat(ret, ' &amp;amp;#124; ') .. ')&amp;lt;/small&amp;gt;'&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
p.makeToolbar = makeToolbar&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Argument processing&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if type(value) == 'string' then&lt;br /&gt;
					value = value:match('^%s*(.-)%s*$') -- Remove whitespace.&lt;br /&gt;
					if key == 'heading' or value ~= '' then&lt;br /&gt;
						return value&lt;br /&gt;
					else&lt;br /&gt;
						return nil&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Entry points&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.nonexistent(frame)&lt;br /&gt;
	if mw.title.getCurrentTitle().subpageText == 'testcases' then&lt;br /&gt;
		return frame:expandTemplate{title = 'module test cases notice'}&lt;br /&gt;
	else&lt;br /&gt;
		return p.main(frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Main function&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.main = makeInvokeFunc('_main')&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function defines logic flow for the module.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'main-div-id' --&amp;gt; 'template-documentation'&lt;br /&gt;
	-- 'main-div-classes' --&amp;gt; 'template-documentation iezoomfix'&lt;br /&gt;
	--]]&lt;br /&gt;
	local env = p.getEnvironment(args)&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root&lt;br /&gt;
		:wikitext(p._getModuleWikitext(args, env))&lt;br /&gt;
		:wikitext(p.protectionTemplate(env))&lt;br /&gt;
		:wikitext(p.sandboxNotice(args, env))&lt;br /&gt;
		 -- This div tag is from {{documentation/start box}}, but moving it here&lt;br /&gt;
		 -- so that we don't have to worry about unclosed tags.&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:attr('id', message('main-div-id'))&lt;br /&gt;
			:addClass(message('main-div-classes'))&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(p._startBox(args, env))&lt;br /&gt;
			:wikitext(p._content(args, env))&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:css('clear', 'both') -- So right or left floating items don't stick out of the doc box.&lt;br /&gt;
				:newline()&lt;br /&gt;
				:done()&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(p._endBox(args, env))&lt;br /&gt;
		:wikitext(p.addTrackingCategories(env))&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Environment settings&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.getEnvironment(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table with information about the environment, including title objects and other namespace- or&lt;br /&gt;
	-- path-related data.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--&lt;br /&gt;
	-- Title objects include:&lt;br /&gt;
	-- env.title - the page we are making documentation for (usually the current title)&lt;br /&gt;
	-- env.templateTitle - the template (or module, file, etc.)&lt;br /&gt;
	-- env.docTitle - the /doc subpage.&lt;br /&gt;
	-- env.sandboxTitle - the /sandbox subpage.&lt;br /&gt;
	-- env.testcasesTitle - the /testcases subpage.&lt;br /&gt;
	-- env.printTitle - the print version of the template, located at the /Print subpage.&lt;br /&gt;
	--&lt;br /&gt;
	-- Data includes:&lt;br /&gt;
	-- env.protectionLevels - the protection levels table of the title object.&lt;br /&gt;
	-- env.subjectSpace - the number of the title's subject namespace.&lt;br /&gt;
	-- env.docSpace - the number of the namespace the title puts its documentation in.&lt;br /&gt;
	-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.&lt;br /&gt;
	-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.&lt;br /&gt;
	-- &lt;br /&gt;
	-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value&lt;br /&gt;
	-- returned will be nil.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local env, envFuncs = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value&lt;br /&gt;
	-- returned by that function is memoized in the env table so that we don't call any of the functions&lt;br /&gt;
	-- more than once. (Nils won't be memoized.)&lt;br /&gt;
	setmetatable(env, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			local envFunc = envFuncs[key]&lt;br /&gt;
			if envFunc then&lt;br /&gt;
				local success, val = pcall(envFunc)&lt;br /&gt;
				if success then&lt;br /&gt;
					env[key] = val -- Memoise the value.&lt;br /&gt;
					return val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	})	&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.title()&lt;br /&gt;
		-- The title object for the current page, or a test page passed with args.page.&lt;br /&gt;
		local title&lt;br /&gt;
		local titleArg = args.page&lt;br /&gt;
		if titleArg then&lt;br /&gt;
			title = mw.title.new(titleArg)&lt;br /&gt;
		else&lt;br /&gt;
			title = mw.title.getCurrentTitle()&lt;br /&gt;
		end&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.templateTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- The template (or module, etc.) title object.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- 'sandbox-subpage' --&amp;gt; 'sandbox'&lt;br /&gt;
		-- 'testcases-subpage' --&amp;gt; 'testcases'&lt;br /&gt;
		--]]&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.baseText)&lt;br /&gt;
		else&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object of the /doc subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- 'doc-subpage' --&amp;gt; 'doc'&lt;br /&gt;
		--]]&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local docname = args[1] -- User-specified doc page.&lt;br /&gt;
		local docpage&lt;br /&gt;
		if docname then&lt;br /&gt;
			docpage = docname&lt;br /&gt;
		else&lt;br /&gt;
			docpage = env.docpageBase .. '/' .. message('doc-subpage')&lt;br /&gt;
		end&lt;br /&gt;
		return mw.title.new(docpage)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.sandboxTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /sandbox subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- 'sandbox-subpage' --&amp;gt; 'sandbox'&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.testcasesTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /testcases subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- 'testcases-subpage' --&amp;gt; 'testcases'&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.printTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /Print subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- 'print-subpage' --&amp;gt; 'Print'&lt;br /&gt;
		--]]&lt;br /&gt;
		return env.templateTitle:subPageTitle(message('print-subpage'))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.protectionLevels()&lt;br /&gt;
		-- The protection levels table of the title object.&lt;br /&gt;
		return env.title.protectionLevels&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.subjectSpace()&lt;br /&gt;
		-- The subject namespace number.&lt;br /&gt;
		return mw.site.namespaces[env.title.namespace].subject.id&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docSpace()&lt;br /&gt;
		-- The documentation namespace number. For most namespaces this is the same as the&lt;br /&gt;
		-- subject namespace. However, pages in the Article, File, MediaWiki or Category&lt;br /&gt;
		-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then&lt;br /&gt;
			return subjectSpace + 1&lt;br /&gt;
		else&lt;br /&gt;
			return subjectSpace&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docpageBase()&lt;br /&gt;
		-- The base page of the /doc, /sandbox, and /testcases subpages.&lt;br /&gt;
		-- For some namespaces this is the talk page, rather than the template page.&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local docSpace = env.docSpace&lt;br /&gt;
		local docSpaceText = mw.site.namespaces[docSpace].name&lt;br /&gt;
		-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.&lt;br /&gt;
		return docSpaceText .. ':' .. templateTitle.text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.compareUrl()&lt;br /&gt;
		-- Diff link between the sandbox and the main template using [[Special:ComparePages]].&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local sandboxTitle = env.sandboxTitle&lt;br /&gt;
		if templateTitle.exists and sandboxTitle.exists then&lt;br /&gt;
			local compareUrl = mw.uri.fullUrl(&lt;br /&gt;
				'Special:ComparePages',&lt;br /&gt;
				{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}&lt;br /&gt;
			)&lt;br /&gt;
			return tostring(compareUrl)&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end		&lt;br /&gt;
&lt;br /&gt;
	return env&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Auxiliary templates&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')&lt;br /&gt;
&lt;br /&gt;
function p._getModuleWikitext(args, env)&lt;br /&gt;
	local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
	if currentTitle.contentModel ~= 'Scribunto' then return end&lt;br /&gt;
	pcall(require, currentTitle.prefixedText) -- if it fails, we don't care&lt;br /&gt;
	local moduleWikitext =  package.loaded[&amp;quot;Module:Module wikitext&amp;quot;]&lt;br /&gt;
	if moduleWikitext then&lt;br /&gt;
		return moduleWikitext.main()&lt;br /&gt;
	end&lt;br /&gt;
	return ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.sandboxNotice(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Generates a sandbox notice for display above sandbox pages.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'sandbox-notice-image' --&amp;gt; '[[Image:Sandbox.svg|50px|alt=|link=]]'&lt;br /&gt;
	-- 'sandbox-notice-blurb' --&amp;gt; 'This is the $1 for $2.'&lt;br /&gt;
	-- 'sandbox-notice-diff-blurb' --&amp;gt; 'This is the $1 for $2 ($3).'&lt;br /&gt;
	-- 'sandbox-notice-pagetype-template' --&amp;gt; '[[Wikipedia:Template test cases|template sandbox]] page'&lt;br /&gt;
	-- 'sandbox-notice-pagetype-module' --&amp;gt; '[[Wikipedia:Template test cases|module sandbox]] page'&lt;br /&gt;
	-- 'sandbox-notice-pagetype-other' --&amp;gt; 'sandbox page'&lt;br /&gt;
	-- 'sandbox-notice-compare-link-display' --&amp;gt; 'diff'&lt;br /&gt;
	-- 'sandbox-notice-testcases-blurb' --&amp;gt; 'See also the companion subpage for $1.'&lt;br /&gt;
	-- 'sandbox-notice-testcases-link-display' --&amp;gt; 'test cases'&lt;br /&gt;
	-- 'sandbox-category' --&amp;gt; 'Template sandboxes'&lt;br /&gt;
	--]=]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Build the table of arguments to pass to {{ombox}}. We need just two fields, &amp;quot;image&amp;quot; and &amp;quot;text&amp;quot;.&lt;br /&gt;
	local omargs = {}&lt;br /&gt;
	omargs.image = message('sandbox-notice-image')&lt;br /&gt;
	-- Get the text. We start with the opening blurb, which is something like&lt;br /&gt;
	-- &amp;quot;This is the template sandbox for [[Template:Foo]] (diff).&amp;quot;&lt;br /&gt;
	local text = ''&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message('sandbox-notice-pagetype-template')&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message('sandbox-notice-pagetype-module')&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message('sandbox-notice-pagetype-other')&lt;br /&gt;
	end&lt;br /&gt;
	local pagetypee&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetypee = message('template-pagetype')&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetypee = message('module-pagetype')&lt;br /&gt;
	else&lt;br /&gt;
		pagetypee = message('default-pagetype')--message 'other-pagetype' 不存在&lt;br /&gt;
	end&lt;br /&gt;
	local templateLink = makeWikilink(templateTitle.prefixedText)&lt;br /&gt;
	local compareUrl = env.compareUrl&lt;br /&gt;
	if compareUrl then&lt;br /&gt;
		local compareDisplay = message('sandbox-notice-compare-link-display')&lt;br /&gt;
		local compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})&lt;br /&gt;
	end&lt;br /&gt;
	-- Get the test cases page blurb if the page exists. This is something like&lt;br /&gt;
	-- &amp;quot;See also the companion subpage for [[Template:Foo/testcases|test cases]].&amp;quot;&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	if testcasesTitle and testcasesTitle.exists then&lt;br /&gt;
		if testcasesTitle.namespace == mw.site.namespaces.Module.id then&lt;br /&gt;
			local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')&lt;br /&gt;
			local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			text = text .. '&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;' .. message('sandbox-notice-testcases-run-blurb', {pagetypee, testcasesLink, testcasesRunLink}) .. '&amp;lt;/small&amp;gt;'&lt;br /&gt;
		else&lt;br /&gt;
			local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			text = text .. '&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;' .. message('sandbox-notice-testcases-blurb', {pagetypee, testcasesLink}) .. '&amp;lt;/small&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Add the sandbox to the sandbox category.&lt;br /&gt;
	text = text .. makeCategoryLink(message('sandbox-category'))&lt;br /&gt;
	omargs.text = text&lt;br /&gt;
	local ret = '&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;'&lt;br /&gt;
	ret = ret .. messageBox.main('ombox', omargs)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.protectionTemplate(env)&lt;br /&gt;
	-- Generates the padlock icon in the top right.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'protection-template' --&amp;gt; 'pp-template'&lt;br /&gt;
	-- 'protection-template-args' --&amp;gt; {docusage = 'yes'}&lt;br /&gt;
	local protectionLevels, mProtectionBanner&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	protectionLevels = env.protectionLevels&lt;br /&gt;
	if not protectionLevels then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local editProt = protectionLevels.edit and protectionLevels.edit[1]&lt;br /&gt;
	local moveProt = protectionLevels.move and protectionLevels.move[1]&lt;br /&gt;
	if editProt then&lt;br /&gt;
		-- The page is edit-protected.&lt;br /&gt;
		mProtectionBanner = require('Module:Protection banner')&lt;br /&gt;
		local reason = message('protection-reason-edit')&lt;br /&gt;
		return mProtectionBanner._main{reason, small = true}&lt;br /&gt;
	elseif moveProt and moveProt ~= 'autoconfirmed' then&lt;br /&gt;
		-- The page is move-protected but not edit-protected. Exclude move&lt;br /&gt;
		-- protection with the level &amp;quot;autoconfirmed&amp;quot;, as this is equivalent to&lt;br /&gt;
		-- no move protection at all.&lt;br /&gt;
		mProtectionBanner = require('Module:Protection banner')&lt;br /&gt;
		return mProtectionBanner._main{action = 'move', small = true}&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Start box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.startBox = makeInvokeFunc('_startBox')&lt;br /&gt;
&lt;br /&gt;
function p._startBox(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function generates the start box.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make&lt;br /&gt;
	-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox&lt;br /&gt;
	-- which generate the box HTML.&lt;br /&gt;
	--]]&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local links&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content then&lt;br /&gt;
		-- No need to include the links if the documentation is on the template page itself.&lt;br /&gt;
		local linksData = p.makeStartBoxLinksData(args, env)&lt;br /&gt;
		if linksData then&lt;br /&gt;
			links = p.renderStartBoxLinks(linksData)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the start box html.&lt;br /&gt;
	local data = p.makeStartBoxData(args, env, links)&lt;br /&gt;
	if data then&lt;br /&gt;
		return p.renderStartBox(data)&lt;br /&gt;
	else&lt;br /&gt;
		-- User specified no heading.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxLinksData(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Does initial processing of data to make the [view] [edit] [history] [purge] links.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'view-link-display' --&amp;gt; 'view'&lt;br /&gt;
	-- 'edit-link-display' --&amp;gt; 'edit'&lt;br /&gt;
	-- 'history-link-display' --&amp;gt; 'history'&lt;br /&gt;
	-- 'purge-link-display' --&amp;gt; 'purge'&lt;br /&gt;
	-- 'file-docpage-preload' --&amp;gt; 'Template:Documentation/preload-filespace'&lt;br /&gt;
	-- 'module-preload' --&amp;gt; 'Template:Documentation/preload-module-doc'&lt;br /&gt;
	-- 'docpage-preload' --&amp;gt; 'Template:Documentation/preload'&lt;br /&gt;
	-- 'create-link-display' --&amp;gt; 'create'&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not title or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = {}&lt;br /&gt;
	data.title = title&lt;br /&gt;
	data.docTitle = docTitle&lt;br /&gt;
	-- View, display, edit, and purge links if /doc exists.&lt;br /&gt;
	data.viewLinkDisplay = message('view-link-display')&lt;br /&gt;
	data.editLinkDisplay = message('edit-link-display')&lt;br /&gt;
	data.historyLinkDisplay = message('history-link-display')&lt;br /&gt;
	data.purgeLinkDisplay = message('purge-link-display')&lt;br /&gt;
	-- Create link if /doc doesn't exist.&lt;br /&gt;
	local preload = args.preload&lt;br /&gt;
	if not preload then&lt;br /&gt;
		if subjectSpace == 6 then -- File namespace&lt;br /&gt;
			preload = message('file-docpage-preload')&lt;br /&gt;
		elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
			preload = message('module-preload')&lt;br /&gt;
		else&lt;br /&gt;
			preload = message('docpage-preload')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.preload = preload&lt;br /&gt;
	data.createLinkDisplay = message('create-link-display')&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBoxLinks(data)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the [view][edit][history][purge] or [create] links from the data table.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxLinksData&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local function escapeBrackets(s)&lt;br /&gt;
		-- Escapes square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub('%[', '&amp;amp;#91;') -- Replace square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub('%]', '&amp;amp;#93;')&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret&lt;br /&gt;
	local docTitle = data.docTitle&lt;br /&gt;
	local title = data.title&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)&lt;br /&gt;
		local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)&lt;br /&gt;
		local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)&lt;br /&gt;
		ret = '[%s] [%s] [%s] [%s]'&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)&lt;br /&gt;
	else&lt;br /&gt;
		local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		ret = '[%s]'&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, createLink)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxData(args, env, links)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'documentation-icon-wikitext' --&amp;gt; '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'&lt;br /&gt;
	-- 'template-namespace-heading' --&amp;gt; 'Template documentation'&lt;br /&gt;
	-- 'module-namespace-heading' --&amp;gt; 'Module documentation'&lt;br /&gt;
	-- 'file-namespace-heading' --&amp;gt; 'Summary'&lt;br /&gt;
	-- 'other-namespaces-heading' --&amp;gt; 'Documentation'&lt;br /&gt;
	-- 'start-box-linkclasses' --&amp;gt; 'mw-editsection-like plainlinks'&lt;br /&gt;
	-- 'start-box-link-id' --&amp;gt; 'doc_editlinks'&lt;br /&gt;
	-- 'testcases-create-link-display' --&amp;gt; 'create'&lt;br /&gt;
	--]=]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not subjectSpace then&lt;br /&gt;
		-- Default to an &amp;quot;other namespaces&amp;quot; namespace, so that we get at least some output&lt;br /&gt;
		-- if an error occurs.&lt;br /&gt;
		subjectSpace = 2&lt;br /&gt;
	end&lt;br /&gt;
	local data = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Heading&lt;br /&gt;
	local heading = args.heading -- Blank values are not removed.&lt;br /&gt;
	if heading == '' then&lt;br /&gt;
		-- Don't display the start box if the heading arg is defined but blank.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if heading then&lt;br /&gt;
		data.heading = heading&lt;br /&gt;
	elseif subjectSpace == 10 then -- Template namespace&lt;br /&gt;
		data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = message('file-namespace-heading')&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = message('other-namespaces-heading')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading CSS&lt;br /&gt;
	local headingStyle = args['heading-style']&lt;br /&gt;
	if headingStyle then&lt;br /&gt;
		data.headingStyleText = headingStyle&lt;br /&gt;
	elseif subjectSpace == 10 then&lt;br /&gt;
		-- We are in the template or template talk namespaces.&lt;br /&gt;
		data.headingFontWeight = 'bold'&lt;br /&gt;
		data.headingFontSize = '125%'&lt;br /&gt;
	else&lt;br /&gt;
		data.headingFontSize = '150%'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Data for the [view][edit][history][purge] or [create] links.&lt;br /&gt;
	if links then&lt;br /&gt;
		data.linksClass = message('start-box-linkclasses')&lt;br /&gt;
		data.linksId = message('start-box-link-id')&lt;br /&gt;
		data.links = links&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBox(data)&lt;br /&gt;
	-- Renders the start box html.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxData.&lt;br /&gt;
	local sbox = mw.html.create('div')&lt;br /&gt;
	sbox&lt;br /&gt;
		:css('padding-bottom', '3px')&lt;br /&gt;
		:css('border-bottom', '1px solid #aaa')&lt;br /&gt;
		:css('margin-bottom', '1ex')&lt;br /&gt;
		:newline()&lt;br /&gt;
		:tag('span')&lt;br /&gt;
			:cssText(data.headingStyleText)&lt;br /&gt;
			:css('font-weight', data.headingFontWeight)&lt;br /&gt;
			:css('font-size', data.headingFontSize)&lt;br /&gt;
			:wikitext(data.heading)&lt;br /&gt;
	local links = data.links&lt;br /&gt;
	if links then&lt;br /&gt;
		sbox:tag('span')&lt;br /&gt;
			:addClass(data.linksClass)&lt;br /&gt;
			:attr('id', data.linksId)&lt;br /&gt;
			:wikitext(links)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(sbox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Documentation content&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.content = makeInvokeFunc('_content')&lt;br /&gt;
&lt;br /&gt;
function p._content(args, env)&lt;br /&gt;
	-- Displays the documentation contents&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content and docTitle and docTitle.exists then&lt;br /&gt;
		content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}&lt;br /&gt;
	end&lt;br /&gt;
	-- The line breaks below are necessary so that &amp;quot;=== Headings ===&amp;quot; at the start and end&lt;br /&gt;
	-- of docs are interpreted correctly.&lt;br /&gt;
	return '\n' .. (content or '') .. '\n' &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc('_contentTitle')&lt;br /&gt;
&lt;br /&gt;
function p._contentTitle(args, env)&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not args.content and docTitle and docTitle.exists then&lt;br /&gt;
		return docTitle.prefixedText&lt;br /&gt;
	else&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- End box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.endBox = makeInvokeFunc('_endBox')&lt;br /&gt;
&lt;br /&gt;
function p._endBox(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- This function generates the end box (also known as the link box).&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'fmbox-id' --&amp;gt; 'documentation-meta-data'&lt;br /&gt;
	-- 'fmbox-style' --&amp;gt; 'background-color: #ecfcf4'&lt;br /&gt;
	-- 'fmbox-textstyle' --&amp;gt; 'font-style: italic'&lt;br /&gt;
	-- &lt;br /&gt;
	-- The HTML is generated by the {{fmbox}} template, courtesy of [[Module:Message box]].&lt;br /&gt;
	--]=]&lt;br /&gt;
	&lt;br /&gt;
	-- Get environment data.&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not subjectSpace or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Check whether we should output the end box at all. Add the end&lt;br /&gt;
	-- box by default if the documentation exists or if we are in the&lt;br /&gt;
	-- user, module or template namespaces.&lt;br /&gt;
	local linkBox = args['link box']&lt;br /&gt;
	if linkBox == 'off'&lt;br /&gt;
		or not (&lt;br /&gt;
			docTitle.exists&lt;br /&gt;
			or subjectSpace == 2&lt;br /&gt;
			or subjectSpace == 828&lt;br /&gt;
			or subjectSpace == 10&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Assemble the arguments for {{fmbox}}.&lt;br /&gt;
	local fmargs = {}&lt;br /&gt;
	fmargs.id = message('fmbox-id') -- Sets 'documentation-meta-data'&lt;br /&gt;
	fmargs.image = 'none'&lt;br /&gt;
	fmargs.style = message('fmbox-style') -- Sets 'background-color: #ecfcf4'&lt;br /&gt;
	fmargs.textstyle = message('fmbox-textstyle') -- 'font-style: italic;'&lt;br /&gt;
&lt;br /&gt;
	-- Assemble the fmbox text field.&lt;br /&gt;
	local text = ''&lt;br /&gt;
	if linkBox then&lt;br /&gt;
		text = text .. linkBox&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. (p.makeDocPageBlurb(args, env) or '') -- &amp;quot;This documentation is transcluded from [[Foo]].&amp;quot; &lt;br /&gt;
		if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then&lt;br /&gt;
			-- We are in the user, template or module namespaces.&lt;br /&gt;
			-- Add sandbox and testcases links.&lt;br /&gt;
			-- &amp;quot;Editors can experiment in this template's sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			text = text .. (p.makeExperimentBlurb(args, env) or '')&lt;br /&gt;
			text = text .. '&amp;lt;br /&amp;gt;'&lt;br /&gt;
			if not args.content and not args[1] then&lt;br /&gt;
				-- &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
				-- Don't show this message with inline docs or with an explicitly specified doc page,&lt;br /&gt;
				-- as then it is unclear where to add the categories.&lt;br /&gt;
				text = text .. (p.makeCategoriesBlurb(args, env) or '')&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. (p.makeSubpagesBlurb(args, env) or '') --&amp;quot;Subpages of this template&amp;quot;&lt;br /&gt;
			local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.&lt;br /&gt;
			if printBlurb then&lt;br /&gt;
				text = text .. '&amp;lt;br /&amp;gt;' .. printBlurb&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	fmargs.text = text&lt;br /&gt;
&lt;br /&gt;
	return messageBox.main('fmbox', fmargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDocPageBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Makes the blurb &amp;quot;This documentation is transcluded from [[Template:Foo]] (edit, history)&amp;quot;.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'edit-link-display' --&amp;gt; 'edit'&lt;br /&gt;
	-- 'history-link-display' --&amp;gt; 'history'&lt;br /&gt;
	-- 'transcluded-from-blurb' --&amp;gt; &lt;br /&gt;
	-- 'The above [[Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[Wikipedia:Transclusion|transcluded]] from $1.'&lt;br /&gt;
	-- 'module-preload' --&amp;gt; 'Template:Documentation/preload-module-doc'&lt;br /&gt;
	-- 'create-link-display' --&amp;gt; 'create'&lt;br /&gt;
	-- 'create-module-doc-blurb' --&amp;gt;&lt;br /&gt;
	-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'&lt;br /&gt;
	--]=]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ret&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		-- /doc exists; link to it.&lt;br /&gt;
		local docLink = makeWikilink(docTitle.prefixedText)&lt;br /&gt;
		local editUrl = docTitle:fullUrl{action = 'edit'}&lt;br /&gt;
		local editDisplay = message('edit-link-display')&lt;br /&gt;
		local editLink = makeUrlLink(editUrl, editDisplay)&lt;br /&gt;
		local historyUrl = docTitle:fullUrl{action = 'history'}&lt;br /&gt;
		local historyDisplay = message('history-link-display')&lt;br /&gt;
		local historyLink = makeUrlLink(historyUrl, historyDisplay)&lt;br /&gt;
		ret = message('transcluded-from-blurb', {docLink})&lt;br /&gt;
			.. ' '&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. '&amp;lt;br /&amp;gt;'&lt;br /&gt;
	elseif env.subjectSpace == 828 then&lt;br /&gt;
		-- /doc does not exist; ask to create it.&lt;br /&gt;
		local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}&lt;br /&gt;
		local createDisplay = message('create-link-display')&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		ret = message('create-module-doc-blurb', {createLink})&lt;br /&gt;
			.. '&amp;lt;br /&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeExperimentBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Renders the text &amp;quot;Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'sandbox-link-display' --&amp;gt; 'sandbox'&lt;br /&gt;
	-- 'sandbox-edit-link-display' --&amp;gt; 'edit'&lt;br /&gt;
	-- 'compare-link-display' --&amp;gt; 'diff'&lt;br /&gt;
	-- 'module-sandbox-preload' --&amp;gt; 'Template:Documentation/preload-module-sandbox'&lt;br /&gt;
	-- 'template-sandbox-preload' --&amp;gt; 'Template:Documentation/preload-sandbox'&lt;br /&gt;
	-- 'sandbox-create-link-display' --&amp;gt; 'create'&lt;br /&gt;
	-- 'mirror-edit-summary' --&amp;gt; 'Create sandbox version of $1'&lt;br /&gt;
	-- 'mirror-link-display' --&amp;gt; 'mirror'&lt;br /&gt;
	-- 'mirror-link-preload' --&amp;gt; 'Template:Documentation/mirror'&lt;br /&gt;
	-- 'sandbox-link-display' --&amp;gt; 'sandbox'&lt;br /&gt;
	-- 'testcases-link-display' --&amp;gt; 'testcases'&lt;br /&gt;
	-- 'testcases-edit-link-display'--&amp;gt; 'edit'&lt;br /&gt;
	-- 'template-sandbox-preload' --&amp;gt; 'Template:Documentation/preload-sandbox'&lt;br /&gt;
	-- 'testcases-create-link-display' --&amp;gt; 'create'&lt;br /&gt;
	-- 'testcases-link-display' --&amp;gt; 'testcases'&lt;br /&gt;
	-- 'testcases-edit-link-display' --&amp;gt; 'edit'&lt;br /&gt;
	-- 'module-testcases-preload' --&amp;gt; 'Template:Documentation/preload-module-testcases'&lt;br /&gt;
	-- 'template-testcases-preload' --&amp;gt; 'Template:Documentation/preload-testcases'&lt;br /&gt;
	-- 'experiment-blurb-module' --&amp;gt; 'Editors can experiment in this module's $1 and $2 pages.'&lt;br /&gt;
	-- 'experiment-blurb-template' --&amp;gt; 'Editors can experiment in this template's $1 and $2 pages.'&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	local templatePage = templateTitle.prefixedText&lt;br /&gt;
	if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Make links.&lt;br /&gt;
	local sandboxLinks, testcasesLinks&lt;br /&gt;
	if sandboxTitle.exists then&lt;br /&gt;
		local sandboxPage = sandboxTitle.prefixedText&lt;br /&gt;
		local sandboxDisplay = message('sandbox-link-display')&lt;br /&gt;
		local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)&lt;br /&gt;
		local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}&lt;br /&gt;
		local sandboxEditDisplay = message('sandbox-edit-link-display')&lt;br /&gt;
		local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)&lt;br /&gt;
		local compareUrl = env.compareUrl&lt;br /&gt;
		local compareLink&lt;br /&gt;
		if compareUrl then&lt;br /&gt;
			local compareDisplay = message('compare-link-display')&lt;br /&gt;
			compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		end&lt;br /&gt;
		sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)&lt;br /&gt;
	else&lt;br /&gt;
		local sandboxPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			sandboxPreload = message('module-sandbox-preload')&lt;br /&gt;
		else&lt;br /&gt;
			sandboxPreload = message('template-sandbox-preload')&lt;br /&gt;
		end&lt;br /&gt;
		local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}&lt;br /&gt;
		local sandboxCreateDisplay = message('sandbox-create-link-display')&lt;br /&gt;
		local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)&lt;br /&gt;
		local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})&lt;br /&gt;
		local mirrorPreload = message('mirror-link-preload')&lt;br /&gt;
		local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}&lt;br /&gt;
		end&lt;br /&gt;
		local mirrorDisplay = message('mirror-link-display')&lt;br /&gt;
		local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)&lt;br /&gt;
		sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)&lt;br /&gt;
	end&lt;br /&gt;
	if testcasesTitle.exists then&lt;br /&gt;
		local testcasesPage = testcasesTitle.prefixedText&lt;br /&gt;
		local testcasesDisplay = message('testcases-link-display')&lt;br /&gt;
		local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)&lt;br /&gt;
		local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}&lt;br /&gt;
		local testcasesEditDisplay = message('testcases-edit-link-display')&lt;br /&gt;
		local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)&lt;br /&gt;
		-- for Modules, add testcases run link if exists&lt;br /&gt;
		if subjectSpace == 828 and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then&lt;br /&gt;
			local testcasesRunLinkDisplay = message('testcases-run-link-display')&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local testcasesPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			testcasesPreload = message('module-testcases-preload')&lt;br /&gt;
		else&lt;br /&gt;
			testcasesPreload = message('template-testcases-preload')&lt;br /&gt;
		end&lt;br /&gt;
		local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}&lt;br /&gt;
		local testcasesCreateDisplay = message('testcases-create-link-display')&lt;br /&gt;
		local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)&lt;br /&gt;
		testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)&lt;br /&gt;
	end&lt;br /&gt;
	local messageName&lt;br /&gt;
	if subjectSpace == 828 then&lt;br /&gt;
		messageName = 'experiment-blurb-module'&lt;br /&gt;
	else&lt;br /&gt;
		messageName = 'experiment-blurb-template'&lt;br /&gt;
	end&lt;br /&gt;
	return message(messageName, {sandboxLinks, testcasesLinks})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeCategoriesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the text &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'doc-link-display' --&amp;gt; '/doc'&lt;br /&gt;
	-- 'add-categories-blurb' --&amp;gt; 'Please add categories to the $1 subpage.'&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))&lt;br /&gt;
	return message('add-categories-blurb', {docPathLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeSubpagesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the &amp;quot;Subpages of this template&amp;quot; link.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'template-pagetype' --&amp;gt; 'template'&lt;br /&gt;
	-- 'module-pagetype' --&amp;gt; 'module'&lt;br /&gt;
	-- 'default-pagetype' --&amp;gt; 'page'&lt;br /&gt;
	-- 'subpages-link-display' --&amp;gt; 'Subpages of this $1'&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	if not subjectSpace or not templateTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message('template-pagetype')&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message('module-pagetype')&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message('default-pagetype')&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',&lt;br /&gt;
		message('subpages-link-display', {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message('subpages-blurb', {subpagesLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makePrintBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Generates the blurb displayed when there is a print version of the template available.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'print-link-display' --&amp;gt; '/Print'&lt;br /&gt;
	-- 'print-blurb' --&amp;gt; 'A [[Help:Books/for experts#Improving the book layout|print version]]'&lt;br /&gt;
	--		.. ' of this template exists at $1.'&lt;br /&gt;
	--		.. ' If you make a change to this template, please update the print version as well.'&lt;br /&gt;
	-- 'display-print-category' --&amp;gt; true&lt;br /&gt;
	-- 'print-category' --&amp;gt; 'Templates with print versions'&lt;br /&gt;
	--]=]&lt;br /&gt;
	local printTitle = env.printTitle&lt;br /&gt;
	if not printTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ret&lt;br /&gt;
	if printTitle.exists then&lt;br /&gt;
		local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))&lt;br /&gt;
		ret = message('print-blurb', {printLink})&lt;br /&gt;
		local displayPrintCategory = message('display-print-category', nil, 'boolean')&lt;br /&gt;
		if displayPrintCategory then&lt;br /&gt;
			ret = ret .. makeCategoryLink(message('print-category'))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.addTrackingCategories(env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check if {{documentation}} is transcluded on a /doc or /testcases page.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- 'display-strange-usage-category' --&amp;gt; true&lt;br /&gt;
	-- 'doc-subpage' --&amp;gt; 'doc'&lt;br /&gt;
	-- 'testcases-subpage' --&amp;gt; 'testcases'&lt;br /&gt;
	-- 'strange-usage-category' --&amp;gt; 'Wikipedia pages with strange ((documentation)) usage'&lt;br /&gt;
	-- &lt;br /&gt;
	-- /testcases pages in the module namespace are not categorised, as they may have&lt;br /&gt;
	-- {{documentation}} transcluded automatically.&lt;br /&gt;
	--]]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not title or not subjectSpace then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	local ret = ''&lt;br /&gt;
	if message('display-strange-usage-category', nil, 'boolean')&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message('doc-subpage')&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message('testcases-subpage')&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		ret = ret .. makeCategoryLink(message('strange-usage-category'))&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Documentation&amp;diff=12485</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Documentation&amp;diff=12485"/>
		<updated>2023-12-24T11:41:57Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:List&amp;diff=12483</id>
		<title>模块:List</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:List&amp;diff=12483"/>
		<updated>2023-12-24T11:41:56Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module outputs different kinds of lists. At the moment, bulleted,&lt;br /&gt;
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.&lt;br /&gt;
&lt;br /&gt;
local libUtil = require('libraryUtil')&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require('Module:TableTools')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	['bulleted'] = true,&lt;br /&gt;
	['unbulleted'] = true,&lt;br /&gt;
	['horizontal'] = true,&lt;br /&gt;
	['ordered'] = true,&lt;br /&gt;
	['horizontal_ordered'] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	if listType == 'horizontal' or listType == 'horizontal_ordered' then&lt;br /&gt;
		table.insert(data.classes, 'hlist')&lt;br /&gt;
	elseif listType == 'unbulleted' then&lt;br /&gt;
		table.insert(data.classes, 'plainlist')&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == 'horizontal' or listType == 'horizontal_ordered' then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. 'em'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == 'ordered' or listType == 'horizontal_ordered' then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args['list-style-type']&lt;br /&gt;
		data.type = args['type']&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find('^%s*[1AaIi]%s*$')&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == 'ordered' or listType == 'horizontal_ordered' then&lt;br /&gt;
		data.listTag = 'ol'&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = 'ul'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == 'horizontal_ordered' then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = 'listitem ' .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for i, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args['item' .. tostring(num) .. '_style']&lt;br /&gt;
			or args['item_style' .. tostring(num)]&lt;br /&gt;
			or args['li_style' .. tostring(num)]&lt;br /&gt;
		item.value = args['item' .. tostring(num) .. '_value']&lt;br /&gt;
			or args['item_value' .. tostring(num)]&lt;br /&gt;
			or args['li_value' .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= 'table' or #data.items &amp;lt; 1 then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create('div')&lt;br /&gt;
	for i, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{['margin-left'] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or 'ul')&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			['counter-reset'] = data.counterReset,&lt;br /&gt;
			['list-style-type'] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for i, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag('li')&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args)&lt;br /&gt;
	local isDeprecated = false -- Tracks deprecated parameters.&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		if k:find('^item_style%d+$') or k:find('^item_value%d+$') then&lt;br /&gt;
			isDeprecated = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local ret = ''&lt;br /&gt;
	if isDeprecated then&lt;br /&gt;
		ret = ret .. '[[Category:含有过期参数的列表模板]]'&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to 'makeList' ('%s'不是合适的列表类型)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType('makeList', 2, args, 'table')&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	local list = p.renderList(data)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args)&lt;br /&gt;
	return list .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require('Module:Arguments')&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame)&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Tl&amp;diff=12481</id>
		<title>Template:Tl</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Tl&amp;diff=12481"/>
		<updated>2023-12-24T11:41:55Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;amp;#123;&amp;amp;#123;[[{{transclude|{{{1}}}}}|{{{1}}}]]{{#if:{{{2|{{{arg|}}}}}}|{{!}}{{{2|{{{arg}}}}}}}}&amp;amp;#125;&amp;amp;#125;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- 請在將分類與跨語言連結增加在 /doc 子頁面 --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Big&amp;diff=12479</id>
		<title>Template:Big</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Big&amp;diff=12479"/>
		<updated>2023-12-24T11:41:55Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Large]]&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{合併重定向}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=Template:Clear&amp;diff=12477</id>
		<title>Template:Clear</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=Template:Clear&amp;diff=12477"/>
		<updated>2023-12-24T11:41:55Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;clear:{{{1|both}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:TableTools&amp;diff=12475</id>
		<title>模块:TableTools</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:TableTools&amp;diff=12475"/>
		<updated>2023-12-24T11:41:54Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;------------------------------------------------------------------------------------&lt;br /&gt;
--                                   TableTools                                   --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should not --&lt;br /&gt;
-- be called directly from #invoke.                                               --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require('libraryUtil')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn't operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	return type(v) == 'number' and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false if&lt;br /&gt;
-- not. Although it doesn't operate on tables, it is included here as it is useful&lt;br /&gt;
-- for determining whether a value can be a valid table key. Lua will generate an&lt;br /&gt;
-- error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	return type(v) == 'number' and v ~= v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	checkType('shallowClone', 1, t, 'table')&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.removeDuplicates(arr)&lt;br /&gt;
	checkType('removeDuplicates', 1, arr, 'table')&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType('numKeys', 1, t, 'table')&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		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;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix &amp;quot;a&amp;quot;, affixNums will return&lt;br /&gt;
-- {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType('affixNums', 1, t, 'table')&lt;br /&gt;
	checkType('affixNums', 2, prefix, 'string', true)&lt;br /&gt;
	checkType('affixNums', 3, suffix, 'string', true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or ''&lt;br /&gt;
	suffix = suffix or ''&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		if type(k) == 'string' then&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		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;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like {&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;}, returns a table&lt;br /&gt;
-- of subtables in the format&lt;br /&gt;
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.&lt;br /&gt;
-- Keys that don't end with an integer are stored in a subtable named &amp;quot;other&amp;quot;. The&lt;br /&gt;
-- compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType('numData', 1, t, 'table')&lt;br /&gt;
	checkType('numData', 2, compress, 'boolean', true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == '' then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType('compressSparseArray', 1, t, 'table')&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType('sparseIpairs', 1, t, 'table')&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType('size', 1, t, 'table')&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then&lt;br /&gt;
		return tostring(item1) &amp;lt; tostring(item2)&lt;br /&gt;
	else&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- keysToList&lt;br /&gt;
--&lt;br /&gt;
-- Returns an array of the keys in a table, sorted using either a default&lt;br /&gt;
-- comparison function or a custom keySort function.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType('keysToList', 1, t, 'table')&lt;br /&gt;
		checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arr = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		arr[index] = k&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == 'function' and keySort or defaultKeySort&lt;br /&gt;
		table.sort(arr, keySort)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return arr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sortedPairs&lt;br /&gt;
--&lt;br /&gt;
-- Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
-- If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType('sortedPairs', 1, t, 'table')&lt;br /&gt;
	checkType('sortedPairs', 2, keySort, 'function', true)&lt;br /&gt;
&lt;br /&gt;
	local arr = p.keysToList(t, keySort, true)&lt;br /&gt;
&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = arr[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isArray&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if the given value is a table and all keys are consecutive&lt;br /&gt;
-- integers starting at 1.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isArray(v)&lt;br /&gt;
	if type(v) ~= 'table' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(v) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if v[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isArrayLike&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if the given value is iterable and all keys are consecutive&lt;br /&gt;
-- integers starting at 1.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isArrayLike(v)&lt;br /&gt;
	if not pcall(pairs, v) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(v) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if v[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- invert&lt;br /&gt;
--&lt;br /&gt;
-- Transposes the keys and values in an array. For example, {&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;} -&amp;gt;&lt;br /&gt;
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to&lt;br /&gt;
-- the index of the last duplicate) and NaN values are ignored.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.invert(arr)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(arr) do&lt;br /&gt;
		if not isNan(v) then&lt;br /&gt;
			map[v] = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- listToSet&lt;br /&gt;
--&lt;br /&gt;
-- Creates a set from the array part of the table. Indexing the set by any of the&lt;br /&gt;
-- values of the array returns true. For example, {&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;} -&amp;gt;&lt;br /&gt;
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them&lt;br /&gt;
-- never equal to any value (including other NaNs or even themselves).&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.listToSet(arr)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if not isNan(v) then&lt;br /&gt;
			set[v] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- deepCopy&lt;br /&gt;
--&lt;br /&gt;
-- Recursive deep copy function. Preserves identities of subtables.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	-- Stores copies of tables indexed by the original table.&lt;br /&gt;
	already_seen = already_seen or {}&lt;br /&gt;
&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(orig) == 'table' then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
		end&lt;br /&gt;
		already_seen[orig] = copy&lt;br /&gt;
&lt;br /&gt;
		if includeMetatable then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt ~= nil then&lt;br /&gt;
				local mt_copy = _deepCopy(mt, includeMetatable, already_seen)&lt;br /&gt;
				setmetatable(copy, mt_copy)&lt;br /&gt;
				already_seen[mt] = mt_copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseConcat&lt;br /&gt;
--&lt;br /&gt;
-- Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
-- sparseConcat{a, nil, c, d}  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
-- sparseConcat{nil, b, c, d}  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local arr = {}&lt;br /&gt;
&lt;br /&gt;
	local arr_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		arr_i = arr_i + 1&lt;br /&gt;
		arr[arr_i] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(arr, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- length&lt;br /&gt;
--&lt;br /&gt;
-- Finds the length of an array, or of a quasi-array with keys such as &amp;quot;data1&amp;quot;,&lt;br /&gt;
-- &amp;quot;data2&amp;quot;, etc., using an exponential search algorithm. It is similar to the&lt;br /&gt;
-- operator #, but may return a different value when there are gaps in the array&lt;br /&gt;
-- portion of the table. Intended to be used on data loaded with mw.loadData. For&lt;br /&gt;
-- other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of  the number&lt;br /&gt;
-- of unnamed template parameters, so use this function for frame.args.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.length(t, prefix)&lt;br /&gt;
	-- requiring module inline so that [[Module:Exponential search]] which is&lt;br /&gt;
	-- only needed by this one function doesn't get millions of transclusions&lt;br /&gt;
	local expSearch = require(&amp;quot;Module:Exponential search&amp;quot;)&lt;br /&gt;
	checkType('length', 1, t, 'table')&lt;br /&gt;
	checkType('length', 2, prefix, 'string', true)&lt;br /&gt;
	return expSearch(function (i)&lt;br /&gt;
		local key&lt;br /&gt;
		if prefix then&lt;br /&gt;
			key = prefix .. tostring(i)&lt;br /&gt;
		else&lt;br /&gt;
			key = i&lt;br /&gt;
		end&lt;br /&gt;
		return t[key] ~= nil&lt;br /&gt;
	end) or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- inArray&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if valueToFind is a member of the array, and false otherwise.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.inArray(arr, valueToFind)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	-- if valueToFind is nil, error?&lt;br /&gt;
&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if v == valueToFind then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Effective_protection_level&amp;diff=12473</id>
		<title>模块:Effective protection level</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Effective_protection_level&amp;diff=12473"/>
		<updated>2023-12-24T11:41:54Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Returns the permission required to perform a given action on a given title.&lt;br /&gt;
-- If no title is specified, the title of the page being displayed is used.&lt;br /&gt;
function p._main(action, pagename)&lt;br /&gt;
	local title&lt;br /&gt;
	if type(pagename) == 'table' and pagename.prefixedText then&lt;br /&gt;
		title = pagename&lt;br /&gt;
	elseif pagename then&lt;br /&gt;
		title = mw.title.new(pagename)&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	pagename = title.prefixedText&lt;br /&gt;
	if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then&lt;br /&gt;
		error( 'First parameter must be one of edit, move, create, upload, undelete', 2 )&lt;br /&gt;
	end&lt;br /&gt;
	if title.namespace == 8 then -- MediaWiki namespace&lt;br /&gt;
		if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page&lt;br /&gt;
			return 'interfaceadmin'&lt;br /&gt;
		else -- any non-JS/CSS MediaWiki page&lt;br /&gt;
			return 'sysop'&lt;br /&gt;
		end&lt;br /&gt;
	elseif title.namespace == 2 and title.isSubpage then&lt;br /&gt;
		if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page&lt;br /&gt;
			return 'interfaceadmin'&lt;br /&gt;
		elseif title.contentModel == 'json' then -- user JSON page&lt;br /&gt;
			return 'sysop'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if action == 'undelete' then&lt;br /&gt;
		return 'sysop'&lt;br /&gt;
	end&lt;br /&gt;
	local level = title.protectionLevels[action] and title.protectionLevels[action][1]&lt;br /&gt;
	if level == 'sysop' or level == 'editprotected' then&lt;br /&gt;
		return 'sysop'&lt;br /&gt;
	elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page&lt;br /&gt;
		return 'sysop'&lt;br /&gt;
	elseif level == 'templateeditor' then&lt;br /&gt;
		return 'templateeditor'&lt;br /&gt;
	elseif action == 'move' then&lt;br /&gt;
		local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.&lt;br /&gt;
		if blacklistentry and not blacklistentry.params.autoconfirmed then&lt;br /&gt;
			return 'sysop'&lt;br /&gt;
		elseif title.namespace == 6 then&lt;br /&gt;
			return 'filemover'&lt;br /&gt;
		elseif level == 'extendedconfirmed' then&lt;br /&gt;
			return 'extendedconfirmed'&lt;br /&gt;
		else&lt;br /&gt;
			return 'autoconfirmed'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)&lt;br /&gt;
	if blacklistentry then&lt;br /&gt;
		if not blacklistentry.params.autoconfirmed then&lt;br /&gt;
			return 'sysop'&lt;br /&gt;
		elseif level == 'extendedconfirmed' then&lt;br /&gt;
			return 'extendedconfirmed'&lt;br /&gt;
		else&lt;br /&gt;
			return 'autoconfirmed'&lt;br /&gt;
		end&lt;br /&gt;
	elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason&lt;br /&gt;
		return 'autoconfirmed'&lt;br /&gt;
	elseif level then&lt;br /&gt;
		return level&lt;br /&gt;
	elseif action == 'upload' then&lt;br /&gt;
		return 'autoconfirmed'&lt;br /&gt;
	else&lt;br /&gt;
		return '*'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setmetatable(p, { __index = function(t, k)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		return t._main(k, frame.args[1])&lt;br /&gt;
	end&lt;br /&gt;
end })&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Message_box/configuration&amp;diff=12471</id>
		<title>模块:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Message_box/configuration&amp;diff=12471"/>
		<updated>2023-12-24T11:41:54Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local ambox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ambox-speedy',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ambox-delete',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ambox-content',&lt;br /&gt;
			image = 'Ambox important.svg'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ambox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ambox-move',&lt;br /&gt;
			image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ambox-protection',&lt;br /&gt;
			image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ambox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default                     = 'notice',&lt;br /&gt;
	allowBlankParams            = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},&lt;br /&gt;
	allowSmall                  = true,&lt;br /&gt;
	smallParam                  = 'left',&lt;br /&gt;
	smallClass                  = 'mbox-small-left',&lt;br /&gt;
	substCheck                  = true,&lt;br /&gt;
	classes                     = {'metadata', 'ambox'},&lt;br /&gt;
	usePlainlinksParam          = true,&lt;br /&gt;
	allowId                     = true,&lt;br /&gt;
	imageEmptyCell              = true,&lt;br /&gt;
	imageCheckBlank             = true,&lt;br /&gt;
	imageSmallSize              = '20x20px',&lt;br /&gt;
	imageCellDiv                = true,&lt;br /&gt;
	useCollapsibleTextFields    = true,&lt;br /&gt;
	imageRightNone              = true,&lt;br /&gt;
	sectionDefault              = '條目',&lt;br /&gt;
	allowMainspaceCategories    = true,&lt;br /&gt;
	templateCategory            = '條目訊息模板',&lt;br /&gt;
        templateCategoryRequireName = true,&lt;br /&gt;
	templateErrorCategory       = '缺少參數的條目訊息模板',&lt;br /&gt;
	templateErrorParamsToCheck  = {'issue', 'fix', 'subst'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local cmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'cmbox-speedy',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'cmbox-delete',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'cmbox-content',&lt;br /&gt;
			image = 'Ambox important.svg'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'cmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'cmbox-move',&lt;br /&gt;
			image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'cmbox-protection',&lt;br /&gt;
			image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'cmbox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'cmbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local fmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = 'fmbox-warning',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		editnotice = {&lt;br /&gt;
			class = 'fmbox-editnotice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		},&lt;br /&gt;
		system = {&lt;br /&gt;
			class = 'fmbox-system',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'system',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	allowId                = true,&lt;br /&gt;
	classes              = {'fmbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = false,&lt;br /&gt;
	imageRightNone       = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local imbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'imbox-speedy',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'imbox-delete',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'imbox-content',&lt;br /&gt;
			image = 'Ambox important.svg'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'imbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'imbox-move',&lt;br /&gt;
			image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'imbox-protection',&lt;br /&gt;
			image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = 'imbox-license',&lt;br /&gt;
			image = 'Imbox license.png'&lt;br /&gt;
		},&lt;br /&gt;
		featured = {&lt;br /&gt;
			class = 'imbox-featured',&lt;br /&gt;
			image = 'Cscr-featured.svg'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'imbox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'imbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	below                = true,&lt;br /&gt;
	templateCategory     = '檔案訊息模板'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local ombox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ombox-speedy',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ombox-delete',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ombox-content',&lt;br /&gt;
			image = 'Ambox important.svg'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ombox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ombox-move',&lt;br /&gt;
			image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ombox-protection',&lt;br /&gt;
			image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ombox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		},&lt;br /&gt;
		note = {&lt;br /&gt;
			class = 'ombox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'ombox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageRightNone       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local tmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'tmbox-speedy',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'tmbox-delete',&lt;br /&gt;
			image = 'Ambox warning pn.svg'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'tmbox-content',&lt;br /&gt;
			image = 'Ambox important.svg'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'tmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg '&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'tmbox-move',&lt;br /&gt;
			image = 'Merge-split-transwiki default.svg'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'tmbox-protection',&lt;br /&gt;
			image = 'Semi-protection-shackle-keyhole.svg'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'tmbox-notice',&lt;br /&gt;
			image = 'Information icon4.svg'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'tmbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	allowId              = true,&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageRightNone       = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageEmptyCellStyle  = true,&lt;br /&gt;
	templateCategory     = '討論訊息模板'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = ambox,&lt;br /&gt;
	cmbox = cmbox,&lt;br /&gt;
	fmbox = fmbox,&lt;br /&gt;
	imbox = imbox,&lt;br /&gt;
	ombox = ombox,&lt;br /&gt;
	tmbox = tmbox&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Arguments&amp;diff=12469</id>
		<title>模块:Arguments</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Arguments&amp;diff=12469"/>
		<updated>2023-12-24T11:41:54Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require('libraryUtil')&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don't have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		val = val:match('^%s*(.-)%s*$')&lt;br /&gt;
		if val == '' then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		return val:match('^%s*(.-)%s*$')&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		if val:find('%S') then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType('getArgs', 1, frame, 'table', true)&lt;br /&gt;
	checkType('getArgs', 2, options, 'table', true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame's availability. If we weren't&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == 'table' and type(frame.getParent) == 'function' then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame's title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub('/sandbox$', '')&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == 'table' then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn't set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don't have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= 'function' then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option 'valueFunc'&amp;quot;&lt;br /&gt;
					.. '(function expected, got '&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. ')',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are 's' (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= 'h' then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = 's'&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == 'string' then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = 'h'&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == 'string' then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; the table is read-only',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; overwriting existing arguments is not permitted',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn't looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = 'h'&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= 'string' or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won't cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Message_box&amp;diff=12467</id>
		<title>模块:Message box</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Message_box&amp;diff=12467"/>
		<updated>2023-12-24T11:41:54Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This is a meta-module for producing message box templates, including {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.&lt;br /&gt;
&lt;br /&gt;
-- Require necessary modules.&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local categoryHandler = require('Module:Category handler').main&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
-- Load the configuration page.&lt;br /&gt;
local cfgTables = mw.loadData('Module:Message box/configuration')&lt;br /&gt;
&lt;br /&gt;
-- Get a language object for formatDate and ucfirst.&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
-- Set aliases for often-used functions to reduce table lookups.&lt;br /&gt;
local format = mw.ustring.format&lt;br /&gt;
local tinsert = table.insert&lt;br /&gt;
local tconcat = table.concat&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(page, ...)&lt;br /&gt;
	if type(page) == 'string' then&lt;br /&gt;
		-- Get the title object, passing the function through pcall &lt;br /&gt;
		-- in case we are over the expensive function count limit.&lt;br /&gt;
		local success, title = pcall(mw.title.new, page, ...)&lt;br /&gt;
		if success then&lt;br /&gt;
			return title&lt;br /&gt;
		end&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 two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		tinsert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
		if num then&lt;br /&gt;
			tinsert(nums, tonumber(num))&lt;br /&gt;
		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;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local box = {}&lt;br /&gt;
box.__index = box&lt;br /&gt;
&lt;br /&gt;
function box.new()&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	setmetatable(obj, box)&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box.getNamespaceId(ns)&lt;br /&gt;
	if not ns then return end&lt;br /&gt;
	if type(ns) == 'string' then&lt;br /&gt;
		ns = lang:ucfirst(mw.ustring.lower(ns))&lt;br /&gt;
		if ns == 'Main' then&lt;br /&gt;
			ns = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
	if nsTable then&lt;br /&gt;
		return nsTable.id&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box.getMboxType(nsid)&lt;br /&gt;
	-- Gets the mbox type from a namespace number.&lt;br /&gt;
	if nsid == 0 then&lt;br /&gt;
		return 'ambox' -- main namespace&lt;br /&gt;
	elseif nsid == 6 then&lt;br /&gt;
		return 'imbox' -- file namespace&lt;br /&gt;
	elseif nsid == 14 then&lt;br /&gt;
		return 'cmbox' -- category namespace&lt;br /&gt;
	else&lt;br /&gt;
		local nsTable = mw.site.namespaces[nsid]&lt;br /&gt;
		if nsTable and nsTable.isTalk then&lt;br /&gt;
			return 'tmbox' -- any talk namespace&lt;br /&gt;
		else&lt;br /&gt;
			return 'ombox' -- other namespaces or invalid input&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:addCat(ns, cat, sort)&lt;br /&gt;
	if type(cat) ~= 'string' then return end&lt;br /&gt;
	local nsVals = {'main', 'template', 'all'}&lt;br /&gt;
	local tname&lt;br /&gt;
	for i, val in ipairs(nsVals) do&lt;br /&gt;
		if ns == val then&lt;br /&gt;
			tname = ns .. 'Cats'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not tname then&lt;br /&gt;
		for i, val in ipairs(nsVals) do&lt;br /&gt;
			nsVals[i] = format('&amp;quot;%s&amp;quot;', val)&lt;br /&gt;
		end&lt;br /&gt;
		error('無效的ns參數傳送到box:addCat；有效的數值為' .. mw.text.listToText(nsVals, '、', '或'))&lt;br /&gt;
	end&lt;br /&gt;
	self[tname] = self[tname] or {}&lt;br /&gt;
	if type(sort) == 'string' then&lt;br /&gt;
		tinsert(self[tname], format('[[Category:%s|%s]]', cat, sort))&lt;br /&gt;
	else&lt;br /&gt;
		tinsert(self[tname], format('[[Category:%s]]', cat))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:addClass(class)&lt;br /&gt;
	if type(class) ~= 'string' then return end&lt;br /&gt;
	self.classes = self.classes or {}&lt;br /&gt;
	tinsert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:setTitle(args)&lt;br /&gt;
	-- Get the title object and the namespace.&lt;br /&gt;
	self.pageTitle = getTitleObject(args.page ~= '' and args.page)&lt;br /&gt;
	self.title = self.pageTitle or mw.title.getCurrentTitle()&lt;br /&gt;
	self.demospace = args.demospace ~= '' and args.demospace or nil&lt;br /&gt;
	self.nsid = box.getNamespaceId(self.demospace) or self.title.namespace&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:getConfig(boxType)&lt;br /&gt;
	-- Get the box config data from the data page.&lt;br /&gt;
	if boxType == 'mbox' then&lt;br /&gt;
		boxType = box.getMboxType(self.nsid)&lt;br /&gt;
	end&lt;br /&gt;
	local cfg = cfgTables[boxType]&lt;br /&gt;
	if not cfg then&lt;br /&gt;
		local boxTypes = {}&lt;br /&gt;
		for k, v in pairs(dataTables) do&lt;br /&gt;
			tinsert(boxTypes, format('&amp;quot;%s&amp;quot;', k))&lt;br /&gt;
		end&lt;br /&gt;
		tinsert(boxTypes, '&amp;quot;mbox&amp;quot;')&lt;br /&gt;
		error(format('無效的訊息框類型「%s」；有效的類型為%s', tostring(boxType), mw.text.listToText(boxTypes)), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return cfg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:removeBlankArgs(cfg, args)&lt;br /&gt;
	-- Only allow blank arguments for the parameter names listed in cfg.allowBlankParams.&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if v ~= '' then&lt;br /&gt;
			newArgs[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, param in ipairs(cfg.allowBlankParams or {}) do&lt;br /&gt;
		newArgs[param] = args[param]&lt;br /&gt;
	end&lt;br /&gt;
	return newArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:setBoxParameters(cfg, args)&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData and true or false&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	if cfg.substCheck and args.subst == 'SUBST' then&lt;br /&gt;
		self.isSubstituted = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	if cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
	then&lt;br /&gt;
		self.isSmall = true&lt;br /&gt;
	else&lt;br /&gt;
		self.isSmall = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	if cfg.allowId then&lt;br /&gt;
		self.id = args.id&lt;br /&gt;
		self.name = args.name&lt;br /&gt;
		if self.name then&lt;br /&gt;
			self:addClass('box-' .. string.gsub(self.name,' ','_'))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks')&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or 'mbox-small')&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.hidden) then&lt;br /&gt;
		self:addClass('infobox editsection')&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only used if useCollapsibleTextFields is set,&lt;br /&gt;
	-- or if both cfg.templateCategory and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then&lt;br /&gt;
		self.name = args.name&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$') or self.name&lt;br /&gt;
			templateName = 'Template:' .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) or false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == '' then&lt;br /&gt;
				sect = '此' .. (cfg.sectionDefault or '頁面')&lt;br /&gt;
			elseif type(args.sect) == 'string' then&lt;br /&gt;
				sect = '此' .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == 'string' and issue ~= '' and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == 'string' and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			tinsert(issues, sect)&lt;br /&gt;
			tinsert(issues, issue)&lt;br /&gt;
			tinsert(issues, text)&lt;br /&gt;
			self.issue = tconcat(issues)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		if talk == '' -- Show talk links on the template page or template subpages if the talk parameter is blank.&lt;br /&gt;
			and self.templateTitle &lt;br /&gt;
			and (mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle))&lt;br /&gt;
		then&lt;br /&gt;
			talk = '#'&lt;br /&gt;
		elseif talk == '' then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else assume that it's a section heading,&lt;br /&gt;
			-- and make a link to the talk page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(self.title.text, mw.site.namespaces[self.title.namespace].talk.id)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
				local talkText = '相關討論可見於'&lt;br /&gt;
				if talkArgIsTalkPage then&lt;br /&gt;
					talkText = format('%s[[%s|%s]].', talkText, talk, talkTitle.prefixedText)&lt;br /&gt;
				else&lt;br /&gt;
					talkText = format('%s[[%s#%s|討論頁]].', talkText, talkTitle.prefixedText, talk)&lt;br /&gt;
				end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= '' then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.time == '' and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate('Y年n月j日')&lt;br /&gt;
		elseif args.time and args.time ~= '' then&lt;br /&gt;
			date = lang:formatDate('Y年n月j日', args.time)&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			local ok, tempdate = pcall(lang.formatDate, lang, 'Y年n月j日', date) -- 正規化日期&lt;br /&gt;
			if ok then&lt;br /&gt;
				date = tempdate&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;small class='date-container'&amp;gt;''(&amp;lt;span class='date'&amp;gt;%s&amp;lt;/span&amp;gt;)''&amp;lt;/small&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		if args.fix and args.fix ~= '' then&lt;br /&gt;
			self.fix = format(&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;%s&amp;lt;/small&amp;gt;&amp;quot;, args.fix)&lt;br /&gt;
		else&lt;br /&gt;
			self.fix = ''&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box types other than ambox,&lt;br /&gt;
	-- and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv and true or false&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
	if cfg.imageEmptyCellStyle then&lt;br /&gt;
		self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= 'none'&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px'&lt;br /&gt;
			self.imageLeft = format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == 'none') then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add mainspace categories. At the moment these are only used in {{ambox}}.&lt;br /&gt;
	if cfg.allowMainspaceCategories then&lt;br /&gt;
		if args.cat then&lt;br /&gt;
			args.cat1 = args.cat&lt;br /&gt;
		end&lt;br /&gt;
		self.catNums = getArgNums(args, 'cat')&lt;br /&gt;
		if args.category then&lt;br /&gt;
			args.category1 = args.category&lt;br /&gt;
		end&lt;br /&gt;
		self.categoryNums = getArgNums(args, 'category')&lt;br /&gt;
		if args.all then&lt;br /&gt;
			args.all1 = args.all&lt;br /&gt;
		end&lt;br /&gt;
		self.allNums = getArgNums(args, 'all')&lt;br /&gt;
		self.categoryParamNums = union(self.catNums, self.categoryNums)&lt;br /&gt;
		self.categoryParamNums = union(self.categoryParamNums, self.allNums)&lt;br /&gt;
		-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
		local date&lt;br /&gt;
		local sortDay&lt;br /&gt;
		local dayName = {&lt;br /&gt;
			[1] = '㏠',&lt;br /&gt;
			[2] = '㏡',&lt;br /&gt;
			[3] = '㏢',&lt;br /&gt;
			[4] = '㏣',&lt;br /&gt;
			[5] = '㏤',&lt;br /&gt;
			[6] = '㏥',&lt;br /&gt;
			[7] = '㏦',&lt;br /&gt;
			[8] = '㏧',&lt;br /&gt;
			[9] = '㏨',&lt;br /&gt;
			[10] = '㏩',&lt;br /&gt;
			[11] = '㏪',&lt;br /&gt;
			[12] = '㏫',&lt;br /&gt;
			[13] = '㏬',&lt;br /&gt;
			[14] = '㏭',&lt;br /&gt;
			[15] = '㏮',&lt;br /&gt;
			[16] = '㏯',&lt;br /&gt;
			[17] = '㏰',&lt;br /&gt;
			[18] = '㏱',&lt;br /&gt;
			[19] = '㏲',&lt;br /&gt;
			[20] = '㏳',&lt;br /&gt;
			[21] = '㏴',&lt;br /&gt;
			[22] = '㏵',&lt;br /&gt;
			[23] = '㏶',&lt;br /&gt;
			[24] = '㏷',&lt;br /&gt;
			[25] = '㏸',&lt;br /&gt;
			[26] = '㏹',&lt;br /&gt;
			[27] = '㏺',&lt;br /&gt;
			[28] = '㏻',&lt;br /&gt;
			[29] = '㏼',&lt;br /&gt;
			[30] = '㏽',&lt;br /&gt;
			[31] = '㏾'&lt;br /&gt;
		}&lt;br /&gt;
		if args.date and args.date ~= '' then&lt;br /&gt;
			date = args.date&lt;br /&gt;
			local ok, tempdate = pcall(lang.formatDate, lang, 'Y年n月', date) -- 正規化日期&lt;br /&gt;
			if ok then&lt;br /&gt;
				date = tempdate&lt;br /&gt;
			end&lt;br /&gt;
		elseif args.time and args.time ~= '' then&lt;br /&gt;
			date = lang:formatDate('Y年n月', args.time)&lt;br /&gt;
			sortDay = lang:formatDate('j', args.time)&lt;br /&gt;
			sortDay = tonumber(sortDay)&lt;br /&gt;
			sortDay = dayName[sortDay]&lt;br /&gt;
		end&lt;br /&gt;
		date = type(date) == 'string' and date&lt;br /&gt;
		local preposition = '自'&lt;br /&gt;
		for _, num in ipairs(self.categoryParamNums) do&lt;br /&gt;
			local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)]&lt;br /&gt;
			local allCat = args['all' .. tostring(num)]&lt;br /&gt;
			mainCat = type(mainCat) == 'string' and mainCat&lt;br /&gt;
			allCat = type(allCat) == 'string' and allCat&lt;br /&gt;
			if mainCat and date and date ~= '' then&lt;br /&gt;
				local catTitle = format('%s%s%s', preposition, date, mainCat)&lt;br /&gt;
				if sortDay then&lt;br /&gt;
					self:addCat('main', catTitle, sortDay)&lt;br /&gt;
				else&lt;br /&gt;
					self:addCat('main', catTitle)&lt;br /&gt;
				end&lt;br /&gt;
				catTitle = getTitleObject('Category:' .. catTitle)&lt;br /&gt;
				if not catTitle or not catTitle.exists then&lt;br /&gt;
					self:addCat('main', '模板中使用无效日期参数的条目')&lt;br /&gt;
				end&lt;br /&gt;
			elseif mainCat and (not date or date == '') then&lt;br /&gt;
				self:addCat('main', mainCat)&lt;br /&gt;
			end&lt;br /&gt;
			if allCat then&lt;br /&gt;
				self:addCat('main', allCat)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template-namespace categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat('template', cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat('template', cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error category.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = 'C'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat('template', templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.nsid == 0 and 'Main:' or '') .. self.title.prefixedText&lt;br /&gt;
		self:addCat('all', '需要修复的信息框', allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat('all', '錯誤使用替換引用的頁面')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Convert category tables to strings and pass them through [[Module:Category handler]].&lt;br /&gt;
	self.categories = categoryHandler{&lt;br /&gt;
		main = tconcat(self.mainCats or {}),&lt;br /&gt;
		template = tconcat(self.templateCats or {}),&lt;br /&gt;
		all = tconcat(self.allCats or {}),&lt;br /&gt;
		nocat = args.nocat,&lt;br /&gt;
		demospace = self.demospace,&lt;br /&gt;
		page = self.pageTitle and self.pageTitle.prefixedText or nil&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function box:export()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('b')&lt;br /&gt;
				:addClass('error')&lt;br /&gt;
				:wikitext(format(&lt;br /&gt;
					'模板&amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt;被錯誤地替代。',&lt;br /&gt;
					mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')&lt;br /&gt;
				))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag('table')&lt;br /&gt;
	boxTable&lt;br /&gt;
		:attr('id', self.id)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable&lt;br /&gt;
			:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style)&lt;br /&gt;
		:attr('role', 'presentation')&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag('tr')&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag('td'):addClass('mbox-image')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image is inside it.&lt;br /&gt;
			-- Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the image width to 52px. If any&lt;br /&gt;
			-- images in a div are wider than that, they may overlap with the text or cause&lt;br /&gt;
			-- other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag('div'):css('width', '52px') &lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:wikitext(self.imageLeft)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and some don't.&lt;br /&gt;
		-- The old template code in templates where empty cells are specified gives the following hint:&lt;br /&gt;
		-- &amp;quot;No image. Cell with some width or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:addClass('mbox-empty-cell') &lt;br /&gt;
			:cssText(self.imageEmptyCellStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag('td'):addClass('mbox-text')&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be collapsible. At the&lt;br /&gt;
		-- moment, only ambox uses this.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle)&lt;br /&gt;
		local textCellSpan = textCell:tag('span')&lt;br /&gt;
		textCellSpan&lt;br /&gt;
			:addClass('mbox-text-span')&lt;br /&gt;
			:wikitext(self.issue)&lt;br /&gt;
		if not self.isSmall then&lt;br /&gt;
			textCellSpan&lt;br /&gt;
				:tag('span')&lt;br /&gt;
					:addClass('hide-when-compact')&lt;br /&gt;
					:wikitext(self.talk and self.talk)&lt;br /&gt;
		end&lt;br /&gt;
		textCellSpan&lt;br /&gt;
			:wikitext(self.date and self.date)&lt;br /&gt;
		if not self.isSmall and self.fix ~= '' then&lt;br /&gt;
			textCellSpan&lt;br /&gt;
				:tag('span')&lt;br /&gt;
					:addClass('hide-when-compact')&lt;br /&gt;
					:wikitext(self.fix and self.fix)&lt;br /&gt;
		end&lt;br /&gt;
		if not self.isSmall then&lt;br /&gt;
			textCellSpan&lt;br /&gt;
				:tag('span')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:wikitext(self.info and self.info)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle)&lt;br /&gt;
			:wikitext(self.text)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag('td'):addClass('mbox-imageright')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			imageRightCell = imageRightCell:tag('div'):css('width', '52px') -- If we are using a div, redefine imageRightCell so that the image is inside it.&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:wikitext(self.imageRight)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.imageRight and '3' or '2')&lt;br /&gt;
				:addClass('mbox-text')&lt;br /&gt;
				:cssText(self.textstyle)&lt;br /&gt;
				:wikitext(self.below)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:wikitext(format('此訊息框使用無效的「type=%s」參數，需要修復。', self.type or ''))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root&lt;br /&gt;
		:wikitext(self.categories)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function main(boxType, args)&lt;br /&gt;
	local outputBox = box.new()&lt;br /&gt;
	outputBox:setTitle(args)&lt;br /&gt;
	local cfg = outputBox:getConfig(boxType)&lt;br /&gt;
	args = outputBox:removeBlankArgs(cfg, args)&lt;br /&gt;
	outputBox:setBoxParameters(cfg, args)&lt;br /&gt;
	return outputBox:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeWrapper(boxType)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {trim = false, removeBlanks = false})&lt;br /&gt;
		return main(boxType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {&lt;br /&gt;
	main = main,&lt;br /&gt;
	mbox = makeWrapper('mbox')&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for boxType in pairs(cfgTables) do&lt;br /&gt;
	p[boxType] = makeWrapper(boxType)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Yesno&amp;diff=12465</id>
		<title>模块:Yesno</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E6%A8%A1%E5%9D%97:Yesno&amp;diff=12465"/>
		<updated>2023-12-24T11:41:53Z</updated>

		<summary type="html">&lt;p&gt;白龙：导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == 'string' and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == 'yes'&lt;br /&gt;
		or val == 'y'&lt;br /&gt;
		or val == 'true'&lt;br /&gt;
		or val == 't'&lt;br /&gt;
		or val == 'on'&lt;br /&gt;
		or val == '是'&lt;br /&gt;
		or val == '开'&lt;br /&gt;
		or val == '開'&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == 'no'&lt;br /&gt;
		or val == 'n'&lt;br /&gt;
		or val == 'false'&lt;br /&gt;
		or val == 'f'&lt;br /&gt;
		or val == 'off'&lt;br /&gt;
		or val == '否'&lt;br /&gt;
		or val == '关'&lt;br /&gt;
		or val == '關'&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/Sandbox&amp;diff=12454</id>
		<title>User:白龙/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:%E7%99%BD%E9%BE%99/Sandbox&amp;diff=12454"/>
		<updated>2023-12-19T15:58:20Z</updated>

		<summary type="html">&lt;p&gt;白龙：&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;无可奈何花落去&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12177</id>
		<title>高等数学</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6&amp;diff=12177"/>
		<updated>2023-05-30T14:12:21Z</updated>

		<summary type="html">&lt;p&gt;白龙：/* 1.2 导数定义及运算法则 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 绪论 微积分的背景 ==&lt;br /&gt;
&lt;br /&gt;
微积分有一段漫长的历史。尽管大家都认为微积分是由牛顿和莱布尼兹各自独立发明的，但早在此之前，无穷分析的思想就已有了萌芽。&lt;br /&gt;
&lt;br /&gt;
=== 0.1 穷竭法 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.2 牛顿与莱布尼兹之争 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.3 芝诺悖论与柯西的解答 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.4 黎曼积分与勒贝格积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 0.5 计算方法与混沌系统 ===&lt;br /&gt;
&lt;br /&gt;
== 第一章 导数 ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1 极限基础 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.2 导数定义及运算法则 ===&lt;br /&gt;
'''导数'''（英语：derivative）是微积分学中的一个概念。函数在某一点的导数是指这个函数在这一点附近的变化率。&lt;br /&gt;
&lt;br /&gt;
=== 1.3 一些求导技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.4 微分中值定理 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.5 洛必达法则、泰勒公式 ===&lt;br /&gt;
&lt;br /&gt;
=== 1.6 导数的应用 ===&lt;br /&gt;
&lt;br /&gt;
== 第二章 极限 ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 无穷是什么——Cauchy的ε语言 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.2 数列极限的定义、性质与证明技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 2.3 函数极限与连续函数 ===&lt;br /&gt;
&lt;br /&gt;
=== *2.4 实数完备性公理 ===&lt;br /&gt;
&lt;br /&gt;
== 第三章 不定积分 ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 不定积分的概念——反导数 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.2 不定积分的运算法则与换元法 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.3 一些函数的不定积分 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.4 不定积分的高级技巧 ===&lt;br /&gt;
&lt;br /&gt;
=== 3.5 初等不可积函数 ===&lt;br /&gt;
&lt;br /&gt;
== 第四章 定积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第五章 微分方程 ==&lt;br /&gt;
&lt;br /&gt;
== 第六章 多元函数 ==&lt;br /&gt;
&lt;br /&gt;
== 第七章 多元函数微分学 ==&lt;br /&gt;
&lt;br /&gt;
== 第八章 重积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第九章 曲线积分与曲面积分 ==&lt;br /&gt;
&lt;br /&gt;
== 第十章 无穷级数 ==&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
</feed>