<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://xiesu.error404.su/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ESUAdmin</id>
	<title>喜灰恶俗维基 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://xiesu.error404.su/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ESUAdmin"/>
	<link rel="alternate" type="text/html" href="https://xiesu.error404.su/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/ESUAdmin"/>
	<updated>2026-06-08T05:42:00Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%BF%AB%E5%AE%B3%E5%8A%A0%E9%80%9F&amp;diff=318</id>
		<title>模板:迫害加速</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%BF%AB%E5%AE%B3%E5%8A%A0%E9%80%9F&amp;diff=318"/>
		<updated>2025-12-03T01:44:59Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​更多乐子等待您发掘...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框&lt;br /&gt;
|图片=[[File:SpeedUp.png|60px]]&lt;br /&gt;
|border=red&lt;br /&gt;
|标题=迫害加速　～ persecute drive&lt;br /&gt;
|内容=鉴于{{{target|本页面涉及人士}}}{{{reason|硬度无限大，娱乐性较强}}}，故建议任何人在本模板删除之前对{{{target|其}}}实施包括但不限于下列娱乐活动：&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0em 2em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{1|*资料整理}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
更多乐子等待您发掘...&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:迫害加速人物]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=MediaWiki:Requestaccount-bio&amp;diff=317</id>
		<title>MediaWiki:Requestaccount-bio</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=MediaWiki:Requestaccount-bio&amp;diff=317"/>
		<updated>2025-12-02T10:13:30Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“在下方的的个人简介中输入更多内容以帮助我们查验您的身份。 若您留空，您的注册请求可能会被搁置。 个人简介（只限纯文本）：”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;在下方的的个人简介中输入更多内容以帮助我们查验您的身份。&lt;br /&gt;
若您留空，您的注册请求可能会被搁置。&lt;br /&gt;
个人简介（只限纯文本）：&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=316</id>
		<title>香消在风起雨后</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=316"/>
		<updated>2025-11-22T14:38:43Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​HTT！&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{月之暗面}}{{精品}}{{欣赏黑料}}{{欣赏创作}}&lt;br /&gt;
{{迫害加速|* [[{{PAGENAME}}/黑料|资料整理]]&lt;br /&gt;
* [[dark:香消在风起雨后|电话互动]]&lt;br /&gt;
* 线上互动&lt;br /&gt;
* 素材开发&lt;br /&gt;
* 高雅创作&lt;br /&gt;
* 言行存档&lt;br /&gt;
* 义务教育|target=香消喜}}{{人物信息|顶部标题=香消喜|姓名=香消在风起雨后|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=[[File:黑曜石.png|30px]]|IQ=-1|活跃度=100|所属=喜灰夜鸽社（已被免职）}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[香消在风起雨后]]&#039;&#039;&#039;，简称&#039;&#039;&#039;香消喜&#039;&#039;&#039;。江西萍乡人，原名王亦鹤，曾用网名：阿凝儿、信徒喜，[[喜灰夜鸽社]]高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。&lt;br /&gt;
&lt;br /&gt;
== 江西往事 ==&lt;br /&gt;
&lt;br /&gt;
=== 信徒喜事件 ===&lt;br /&gt;
&lt;br /&gt;
约2023年，此时的香消喜仍使用信徒喜作为网名。&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;
信徒喜更名为香消喜，&#039;&#039;&#039;但名字并不会改变他自身品行&#039;&#039;&#039;，他为了寻求管理范围的扩张，主张联邦需要更多的“傀儡”。&lt;br /&gt;
&lt;br /&gt;
通过派遣自己的手下&#039;&#039;&#039;伪造假聊天记录&#039;&#039;&#039;，排除异己，甚至试图抢夺对自己有威胁的人的群聊成员，试图为己所用&lt;br /&gt;
&lt;br /&gt;
香消喜通过&#039;&#039;&#039;伪造证据&#039;&#039;&#039;和&#039;&#039;&#039;操控裁决庭&#039;&#039;&#039;的方式将那些不忠于他的人拉黑，在喜灰联盟&amp;lt;ref&amp;gt;2025年由喜银杏，至尊小殿创建，用于牵制香消喜与西湖醋鱼&amp;lt;/ref&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;
据考证，香消喜在其麾下人士泄露她诬陷他人的证据之后，对其进行威胁，试图把别人当作“软柿子”，但并没有起到作用，最终证据被公之于众，尽管他极力辩驳，想欺骗他人，试图编造证据“是P的”的谎言，但最终未能如愿。&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;
同时，她在她的QQ小群中持续爆典，这位专科毕业生，正在大谈中国经济崩溃论：她认为经济不景气是因为上面乱搞，大谈美国关税对中国影响巨大，中国经济崩盘......，如此看来，本站建议立即调查其涉政风险并非没有道理。&lt;br /&gt;
&lt;br /&gt;
=== 放课后茶会 ===&lt;br /&gt;
&lt;br /&gt;
==== 一进宫 ====&lt;br /&gt;
&lt;br /&gt;
想来必定是本站的建议得到了相关部门认可，2025年11月17日，香消喜成功喜提一进宫。&lt;br /&gt;
&lt;br /&gt;
据其自称，17日（星期一），由于虚拟国相关事务，被网警“请到警察局里喝茶”，差点喜提羊村假期。同时决定“防止下次再出事，我决定近期在隔壁和联盟同时隐退。”&lt;br /&gt;
&lt;br /&gt;
虽然未能成功将其送入女子监狱，不过如此吓她一下也未尝不好。可喜可贺可喜可贺。&lt;br /&gt;
&lt;br /&gt;
=== 轶事 ===&lt;br /&gt;
&lt;br /&gt;
===== 智商检验 =====&lt;br /&gt;
&lt;br /&gt;
为了打击异己，香消喜曾在淘宝试图雇佣“黑客”进行点号，最终成功被骗走50（或80）元，虽然由于时间较久，记录已经丢失，但无论如何，其无与伦比的智商都让人叹为观止。&lt;br /&gt;
&lt;br /&gt;
===== 收米王哥 =====&lt;br /&gt;
&lt;br /&gt;
香消喜运营喜灰夜鸽社期间，通过侵犯官方著作权，直球搬运喜羊羊与灰太狼官方视频，并此称为“二创”以此牟利。果然有钱能使鬼推磨，为了掩饰自身实力不足的软肋，其多次买人加入群聊从而壮大群聊人数。人数虽然增加了，但活跃度并没有因此提升，而是不断下降，截至目前，羊狼回忆社群聊等级已经由残存的10%跌至7%。&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%B2%BE%E5%93%81&amp;diff=315</id>
		<title>模板:精品</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%B2%BE%E5%93%81&amp;diff=315"/>
		<updated>2025-11-22T14:37:56Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框|标题={{color|精品}}|内容=本条目已经过[[泡泡]]及[[香消喜]]小团体审查|图片=[[File:Strong.gif|80px]]|border=green}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%B2%BE%E5%93%81&amp;diff=314</id>
		<title>模板:精品</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%B2%BE%E5%93%81&amp;diff=314"/>
		<updated>2025-11-22T14:37:10Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“{{提示框|标题={{color|精品}}|内容=本条目已经过泡泡及香消喜小团体审查|图片=60px|border=green}}”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框|标题={{color|精品}}|内容=本条目已经过[[泡泡]]及[[香消喜]]小团体审查|图片=[[File:Strong.gif|60px]]|border=green}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:Strong.gif&amp;diff=313</id>
		<title>文件:Strong.gif</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:Strong.gif&amp;diff=313"/>
		<updated>2025-11-22T14:36:59Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=312</id>
		<title>香消在风起雨后</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=312"/>
		<updated>2025-11-22T14:06:52Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​格式修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{月之暗面}}{{欣赏黑料}}{{欣赏创作}}{{加速补充}}&lt;br /&gt;
{{迫害加速|* [[{{PAGENAME}}/黑料|资料整理]]&lt;br /&gt;
* [[dark:香消在风起雨后|电话互动]]&lt;br /&gt;
* 线上互动&lt;br /&gt;
* 素材开发&lt;br /&gt;
* 高雅创作&lt;br /&gt;
* 言行存档&lt;br /&gt;
* 义务教育|target=香消喜}}{{人物信息|顶部标题=香消喜|姓名=香消在风起雨后|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=[[File:黑曜石.png|30px]]|IQ=-1|活跃度=100|所属=喜灰夜鸽社（已被免职）}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[香消在风起雨后]]&#039;&#039;&#039;，简称&#039;&#039;&#039;香消喜&#039;&#039;&#039;。江西萍乡人，原名王亦鹤，曾用网名：阿凝儿、信徒喜，[[喜灰夜鸽社]]高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。&lt;br /&gt;
&lt;br /&gt;
== 江西往事 ==&lt;br /&gt;
&lt;br /&gt;
=== 信徒喜事件 ===&lt;br /&gt;
&lt;br /&gt;
约2023年，此时的香消喜仍使用信徒喜作为网名。&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;
信徒喜更名为香消喜，&#039;&#039;&#039;但名字并不会改变他自身品行&#039;&#039;&#039;，他为了寻求管理范围的扩张，主张联邦需要更多的“傀儡”。&lt;br /&gt;
&lt;br /&gt;
通过派遣自己的手下&#039;&#039;&#039;伪造假聊天记录&#039;&#039;&#039;，排除异己，甚至试图抢夺对自己有威胁的人的群聊成员，试图为己所用&lt;br /&gt;
&lt;br /&gt;
香消喜通过&#039;&#039;&#039;伪造证据&#039;&#039;&#039;和&#039;&#039;&#039;操控裁决庭&#039;&#039;&#039;的方式将那些不忠于他的人拉黑，在喜灰联盟&amp;lt;ref&amp;gt;2025年由喜银杏，至尊小殿创建，用于牵制香消喜与西湖醋鱼&amp;lt;/ref&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;
据考证，香消喜在其麾下人士泄露她诬陷他人的证据之后，对其进行威胁，试图把别人当作“软柿子”，但并没有起到作用，最终证据被公之于众，尽管他极力辩驳，想欺骗他人，试图编造证据“是P的”的谎言，但最终未能如愿。&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;
同时，她在她的QQ小群中持续爆典，这位专科毕业生，正在大谈中国经济崩溃论：她认为经济不景气是因为上面乱搞，大谈美国关税对中国影响巨大，中国经济崩盘......，如此看来，本站建议立即调查其涉政风险并非没有道理。&lt;br /&gt;
&lt;br /&gt;
==== 轶事 ====&lt;br /&gt;
&lt;br /&gt;
===== 智商检验 =====&lt;br /&gt;
&lt;br /&gt;
为了打击异己，香消喜曾在淘宝试图雇佣“黑客”进行点号，最终成功被骗走50（或80）元，虽然由于时间较久，记录已经丢失，但无论如何，其无与伦比的智商都让人叹为观止。&lt;br /&gt;
&lt;br /&gt;
===== 收米王哥 =====&lt;br /&gt;
&lt;br /&gt;
香消喜运营喜灰夜鸽社期间，通过侵犯官方著作权，直球搬运喜羊羊与灰太狼官方视频，并此称为“二创”以此牟利。果然有钱能使鬼推磨，为了掩饰自身实力不足的软肋，其多次买人加入群聊从而壮大群聊人数。人数虽然增加了，但活跃度并没有因此提升，而是不断下降，截至目前，羊狼回忆社群聊等级已经由残存的10%跌至7%。&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=Dark:%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=311</id>
		<title>Dark:香消在风起雨后</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=Dark:%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=311"/>
		<updated>2025-11-21T09:39:28Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​过短内容取消使用黑幕&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{施工中}}{{人物信息|顶部标题=香消在风起雨后|姓名=王奕鹤|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=[[File:黑曜石.png|30px]]|IQ=-1|活跃度=100|所属=[[喜灰夜鸽社]]}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[香消在风起雨后]]&#039;&#039;&#039;，实名&#039;&#039;&#039;王奕鹤&#039;&#039;&#039;。[[喜灰夜鸽社]]高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。详细信息请见[[香消在风起雨后|表页面]]。&lt;br /&gt;
&lt;br /&gt;
=== 实名信息 ===&lt;br /&gt;
姓名：王奕鹤&lt;br /&gt;
&lt;br /&gt;
身份证号码：360302{{黑幕|19981015}}0521（为保护废物隐私，隐去八位）&lt;br /&gt;
&lt;br /&gt;
出生年月：1998年10月15日&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;
电话：19907998727 江西 萍乡 电信&lt;br /&gt;
&lt;br /&gt;
区号: 0799&lt;br /&gt;
&lt;br /&gt;
区划代码: 360300&lt;br /&gt;
&lt;br /&gt;
曾用地址：江西省赣州市赣县区梅林镇赣县江西应用职业技术学校黄金校区&lt;br /&gt;
&lt;br /&gt;
=== 社交平台 ===&lt;br /&gt;
微博ID：6818666972&lt;br /&gt;
&lt;br /&gt;
[https://weibo.com/u/6818666972 主页直达]&lt;br /&gt;
----QQ：1483013420&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%9C%88%E4%B9%8B%E6%9A%97%E9%9D%A2&amp;diff=310</id>
		<title>模板:月之暗面</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%9C%88%E4%B9%8B%E6%9A%97%E9%9D%A2&amp;diff=310"/>
		<updated>2025-11-15T10:00:25Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框|标题=月之暗面|内容=此人物已获得专属[[Dark:{{PAGENAME}}|里页面]]。|背景色=black|文字颜色=white|border=red|图片=[[File:darksideofthemoon.jpg|90px]]}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=309</id>
		<title>香消在风起雨后</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=309"/>
		<updated>2025-11-15T09:55:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{月之暗面}}{{欣赏黑料}}{{欣赏创作}}{{加速补充}}&lt;br /&gt;
{{迫害加速|* [[{{PAGENAME}}/黑料|资料整理]]&lt;br /&gt;
* [[dark:香消在风起雨后|电话互动]]&lt;br /&gt;
* 线上互动&lt;br /&gt;
* 素材开发&lt;br /&gt;
* 高雅创作&lt;br /&gt;
* 言行存档&lt;br /&gt;
* 义务教育|target=香消喜}}{{人物信息|顶部标题=香消喜|姓名=香消在风起雨后|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=[[File:黑曜石.png|30px]]|IQ=-1|活跃度=100|所属=喜灰夜鸽社（已被免职）}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[香消在风起雨后]]&#039;&#039;&#039;，简称&#039;&#039;&#039;香消喜&#039;&#039;&#039;。江西萍乡人，原名王亦鹤，曾用名：阿凝儿·信徒喜，[[喜灰夜鸽社]]高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。&lt;br /&gt;
&lt;br /&gt;
此人曾在喜灰媒介矩阵频道中盗取画师图片，寻求开联联盟庇护，激怒画师，后被矩阵拉黑，导致其在喜灰圈无落脚之地，此为“信徒喜事件”&lt;br /&gt;
&lt;br /&gt;
在信徒喜事件爆发之后，信徒喜在众怒之下，删除账号并道歉，联盟为了为信徒喜提供庇护之处，创建了喜灰夜鸽社（喜灰夜鸽联邦），此后夜鸽联邦不断发展壮大，但信徒喜死性不改，为了达成自身势力范围的扩张不择手段，这也为他之后被免职以及喜灰夜鸽联邦的瓦解埋下伏笔。&lt;br /&gt;
&lt;br /&gt;
信徒喜在后面更名为香消喜，但名字并不会改变他自身品行，他为了寻求管理范围的扩张，主张联邦需要更多的“傀儡”，通过派遣自己的手下伪造假聊天记录，排除异己，甚至试图抢夺对自己有威胁的人的群聊成员，试图为己所用，他为了掩饰自身实力不足的软肋，曾多次买人加入群聊从而壮大群聊人数，当然人数虽然增加了，但活跃度并没有因此提升，而是不断下降，截至目前，羊狼回忆社群聊等级已经由残存的10%跌至7%。&lt;br /&gt;
&lt;br /&gt;
香消喜运营喜灰夜鸽社期间，通过搬运喜羊羊与灰太狼官方视频，其将此称为“二创”，实际上侵犯官方著作权，果然有钱能使鬼推磨，在他的运营下，人数不断增加，活跃度不断下降，香消喜通过伪造证据和操控裁决庭的方式将那些不忠于他的人拉黑，在喜联（喜灰联盟，２０２５年由喜银杏，至尊小殿创建，用于牵制香消喜与西湖醋鱼）成立之前，香消喜垄断了夜鸽联邦议会议员席位，将喜灰夜鸽社彻底变为她的一言堂。&lt;br /&gt;
&lt;br /&gt;
由于已经有人对香消喜产生不满，如喜银杏·茶茶等人，在香消喜绝对掌权期间对喜银杏实施拉黑处理，后至尊小殿介入，指控香消喜未经过裁决非法踢人，违反“联邦基本法”，香消喜因此赔偿２０块钱给喜银杏，后喜银杏将２０块全都发到群里，此事也算结束。&lt;br /&gt;
&lt;br /&gt;
香消喜为了打击异己，曾在淘宝试图雇佣“淘宝黑客”尝试点号，但最终被骗50（或80),由于时间较久，所以记录已经丢失，但无论如何，其无与伦比的智商都让人叹为观止。&lt;br /&gt;
&lt;br /&gt;
为了结束香消喜在夜鸽联邦愈来愈狂的行为，至尊小殿尝试安插部分人到喜灰夜鸽联邦和喜灰联盟中，但这实际上是虚拟国内部的权力牵制，在喜灰圈并没有任何积极影响，但这的确加速了香消喜的倒台以及更多人认识到香消喜及其统治下的夜鸽社的劣根性。&lt;br /&gt;
&lt;br /&gt;
在他对喜灰夜鸽社的恶毒统治下，社内外已经有很多人对其不满，包括在他周围的原本忠于他的人，也因此倒向对面，据考证，香消喜在其麾下人士泄露她诬陷他人的证据之后，对其进行威胁，试图把别人当作“软柿子”，但并没有起到作用，最终证据被公之于众，尽管他极力辩驳，想欺骗他人，试图编造证据是”P的“的假象，但无功而返，最终，香消喜被免除职务，但并未被喜灰夜鸽联邦拉黑。&lt;br /&gt;
&lt;br /&gt;
香消喜被全面免职后，开始无能狂怒，先是将所有的问题推到别人身上，搬出所谓的”自己对夜鸽社的贡献巨大“，其后又进行卖惨操作，”你们都想让我走“‘我搬完帖子就滚蛋”，以至于后面为了把自己的人带走，说出了他带来的人是他的私有财产等逆天言论。&lt;br /&gt;
&lt;br /&gt;
香消喜基本结束他在联邦的生涯之后，转而为自己开辟微博新天地，建立喜灰素材分享超话，此后将自己的时间均放在超话上，为了让自己的超话题火起来，甚至大小号轮番上阵发帖，实在是太勤奋了，我也不得不为你鼓掌，但与此同时，他们在QQ建立的小群中，又出现了逆天言论，香消喜这位专科毕业学生，正在大谈中国经济崩溃论，她认为经济不景气是因为上面乱搞，大谈美国关税对中国影响巨大，中国经济崩盘，其无知被凸显的淋漓尽致。&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%9C%88%E4%B9%8B%E6%9A%97%E9%9D%A2&amp;diff=308</id>
		<title>模板:月之暗面</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%9C%88%E4%B9%8B%E6%9A%97%E9%9D%A2&amp;diff=308"/>
		<updated>2025-11-15T09:54:02Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“{{提示框|标题=月之暗面|内容=此人物已获得专属里页面。|背景色=black|文字颜色=white|border=red|图片=60px}}”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框|标题=月之暗面|内容=此人物已获得专属[[Dark:{{PAGENAME}}|里页面]]。|背景色=black|文字颜色=white|border=red|图片=[[File:darksideofthemoon.jpg|60px]]}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:Darksideofthemoon.jpg&amp;diff=307</id>
		<title>文件:Darksideofthemoon.jpg</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:Darksideofthemoon.jpg&amp;diff=307"/>
		<updated>2025-11-15T09:53:35Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E7%A5%9E%E7%A7%98%E4%BA%BA.png&amp;diff=303</id>
		<title>文件:神秘人.png</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E7%A5%9E%E7%A7%98%E4%BA%BA.png&amp;diff=303"/>
		<updated>2025-11-15T09:41:30Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=Dark:%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=302</id>
		<title>Dark:香消在风起雨后</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=Dark:%E9%A6%99%E6%B6%88%E5%9C%A8%E9%A3%8E%E8%B5%B7%E9%9B%A8%E5%90%8E&amp;diff=302"/>
		<updated>2025-11-15T09:40:22Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“{{施工中}}{{人物信息|顶部标题=香消在风起雨后|姓名=王奕鹤|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=30px|IQ=-1|活跃度=100|所属=喜灰夜鸽社}}  &amp;#039;&amp;#039;&amp;#039;香消在风起雨后&amp;#039;&amp;#039;&amp;#039;，实名&amp;#039;&amp;#039;&amp;#039;王奕鹤&amp;#039;&amp;#039;&amp;#039;。喜灰夜鸽社高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。详细信息请见香消…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{施工中}}{{人物信息|顶部标题=香消在风起雨后|姓名=王奕鹤|照片=香消喜.jpg|职业=无业游民|能力=啃老 瞎骂 雇佣淘宝黑客|灵力=-1|硬度=[[File:黑曜石.png|30px]]|IQ=-1|活跃度=100|所属=[[喜灰夜鸽社]]}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[香消在风起雨后]]&#039;&#039;&#039;，实名&#039;&#039;&#039;王奕鹤&#039;&#039;&#039;。[[喜灰夜鸽社]]高层管理、创始人之一。近三十岁无业游民、啃老废物网瘾女、官瘾晚期患者。详细信息请见[[香消在风起雨后|表页面]]。&lt;br /&gt;
&lt;br /&gt;
=== 实名信息 ===&lt;br /&gt;
姓名：王奕鹤&lt;br /&gt;
&lt;br /&gt;
身份证号码：360302{{黑幕|19981015}}0521（为保护废物隐私，隐去八位）&lt;br /&gt;
&lt;br /&gt;
出生年月：{{黑幕|1}}998年10月15日（为保护废物隐私，隐去一位）&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;
电话：{{黑幕|1}}9907998727 江西 萍乡 电信（为保护废物隐私，隐去一位）&lt;br /&gt;
&lt;br /&gt;
区号: 0799&lt;br /&gt;
&lt;br /&gt;
区划代码: 360300&lt;br /&gt;
&lt;br /&gt;
地址：江西省赣州市赣县区梅林镇赣县江西应用职业技术学校黄金校区&lt;br /&gt;
&lt;br /&gt;
=== 社交平台 ===&lt;br /&gt;
微博ID：6818666972&lt;br /&gt;
&lt;br /&gt;
[https://weibo.com/u/6818666972 主页直达]&lt;br /&gt;
----QQ：1483013420&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A5%9E%E7%A7%98%E4%BA%BA&amp;diff=301</id>
		<title>模板:神秘人</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A5%9E%E7%A7%98%E4%BA%BA&amp;diff=301"/>
		<updated>2025-11-15T09:36:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“{{提示框|标题=神秘人|内容=我们尚不清楚此人的详细信息！为了震慑恶俗，{{SITENAME}}需要你的帮助！|图片=60px}} &amp;lt;includeonly&amp;gt;分类:实名未知的人物&amp;lt;/includeonly&amp;gt;”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{提示框|标题=神秘人|内容=我们尚不清楚此人的详细信息！为了震慑恶俗，{{SITENAME}}需要你的[[Talk:{{PAGENAME}}|帮助]]！|图片=[[File:神秘人.png|60px]]}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[分类:实名未知的人物]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=Dark:%E6%B3%A1%E6%B3%A1&amp;diff=300</id>
		<title>Dark:泡泡</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=Dark:%E6%B3%A1%E6%B3%A1&amp;diff=300"/>
		<updated>2025-11-15T09:35:00Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​创建页面，内容为“{{神秘人}}{{人物信息|姓名=泡泡（小海）|种族=非人类|能力=发布色情信息，辱骂他人，脏话连篇，跳脚，情绪失控|职业=疑似学生|硬度=30px|活跃度=10086|IQ=250|所属=夜鸽联邦，开联联盟|照片=泡泡.jpg|灵力=404 Not Found}}”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{神秘人}}{{人物信息|姓名=泡泡（小海）|种族=非人类|能力=发布色情信息，辱骂他人，脏话连篇，跳脚，情绪失控|职业=疑似学生|硬度=[[File:基岩.png|30px]]|活跃度=10086|IQ=250|所属=夜鸽联邦，开联联盟|照片=泡泡.jpg|灵力=404 Not Found}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:X.svg&amp;diff=284</id>
		<title>文件:X.svg</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:X.svg&amp;diff=284"/>
		<updated>2025-10-29T13:07:30Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E7%AC%91%E8%84%B8.svg&amp;diff=283</id>
		<title>文件:笑脸.svg</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E7%AC%91%E8%84%B8.svg&amp;diff=283"/>
		<updated>2025-10-29T13:06:30Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E5%AE%8C%E6%88%90.svg&amp;diff=280</id>
		<title>文件:完成.svg</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%96%87%E4%BB%B6:%E5%AE%8C%E6%88%90.svg&amp;diff=280"/>
		<updated>2025-10-29T13:02:56Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:At&amp;diff=279</id>
		<title>模板:At</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:At&amp;diff=279"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:Reply to]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:@&amp;diff=277</id>
		<title>模板:@</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:@&amp;diff=277"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:Reply to]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Ping&amp;diff=275</id>
		<title>模板:Ping</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Ping&amp;diff=275"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:Reply to]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Re&amp;diff=273</id>
		<title>模板:Re</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Re&amp;diff=273"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:Reply to]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%B0%A2%E8%B0%A2&amp;diff=271</id>
		<title>模板:谢谢</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%B0%A2%E8%B0%A2&amp;diff=271"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:谢谢你]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thx&amp;diff=269</id>
		<title>模板:Thx</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thx&amp;diff=269"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:谢谢你]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thanks&amp;diff=267</id>
		<title>模板:Thanks</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thanks&amp;diff=267"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:谢谢你]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thank_you&amp;diff=265</id>
		<title>模板:Thank you</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thank_you&amp;diff=265"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:谢谢你]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thank_You&amp;diff=263</id>
		<title>模板:Thank You</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Thank_You&amp;diff=263"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:谢谢你]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Done&amp;diff=261</id>
		<title>模板:Done</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Done&amp;diff=261"/>
		<updated>2025-10-29T12:58:04Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[:Template:完成]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%2B1&amp;diff=259</id>
		<title>模板:+1</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%2B1&amp;diff=259"/>
		<updated>2025-10-29T12:58:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Template:同上]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%95%AC%E5%91%8A&amp;diff=257</id>
		<title>模板:敬告</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%95%AC%E5%91%8A&amp;diff=257"/>
		<updated>2025-10-29T12:58:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Template:注意]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%AD%A6%E5%91%8A&amp;diff=255</id>
		<title>模板:警告</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%AD%A6%E5%91%8A&amp;diff=255"/>
		<updated>2025-10-29T12:58:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Template:注意]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%8F%90%E9%86%92&amp;diff=253</id>
		<title>模板:提醒</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%8F%90%E9%86%92&amp;diff=253"/>
		<updated>2025-10-29T12:58:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Template:注意]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%8F%90%E7%A4%BA&amp;diff=251</id>
		<title>模板:提示</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E6%8F%90%E7%A4%BA&amp;diff=251"/>
		<updated>2025-10-29T12:58:03Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[:Template:注意]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%AE%A8%E8%AE%BA%E6%A8%A1%E6%9D%BF&amp;diff=249</id>
		<title>模板:讨论模板</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%AE%A8%E8%AE%BA%E6%A8%A1%E6%9D%BF&amp;diff=249"/>
		<updated>2025-10-29T12:54:28Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{clear}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left;margin:5px;&amp;quot;&lt;br /&gt;
|+ 常用讨论模板 {{edit|1=Template:讨论模板}}&lt;br /&gt;
! 模板名&lt;br /&gt;
! 模板效果&lt;br /&gt;
! 注释说明及重定向&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|支持}}&lt;br /&gt;
| {{支持}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|同意}}&lt;br /&gt;
| {{同意}}&lt;br /&gt;
| 投票可用&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|带条件同意}}&lt;br /&gt;
| {{带条件同意}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|中立}}&lt;br /&gt;
| {{中立}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|不支持}}&lt;br /&gt;
| {{不支持}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|反对}}&lt;br /&gt;
| {{反对}}&lt;br /&gt;
| 投票可用&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|弱反对}}&lt;br /&gt;
| {{弱反对}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|弃权}}&lt;br /&gt;
| {{弃权}}&lt;br /&gt;
| 投票可用&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|疑问}}&lt;br /&gt;
| {{疑问}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|回应}}&lt;br /&gt;
| {{回应}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|建议}}&lt;br /&gt;
| {{建议}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|意见}}&lt;br /&gt;
| {{意见}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|注意}}&lt;br /&gt;
| {{注意}}&lt;br /&gt;
| {{tl|提示}}、{{tl|提醒}}、{{tl|警告}}、{{tl|敬告}}&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|抗议}}&lt;br /&gt;
| {{抗议}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|同上}}&lt;br /&gt;
| {{同上}}&lt;br /&gt;
| {{tl|+1}}&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|完成}}&lt;br /&gt;
| {{完成}}&lt;br /&gt;
| {{tl|done}}&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|x}}&lt;br /&gt;
| {{x}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tl|谢谢你}}&lt;br /&gt;
| {{谢谢你}}&lt;br /&gt;
| {{tl|Thank You}}、{{tl|Thank you}}、&amp;lt;br /&amp;gt;{{tl|Thanks}}、{{tl|Thx}}、{{tl|谢谢}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left;margin:5px;&amp;quot;&lt;br /&gt;
|+ 存废讨论模板&lt;br /&gt;
! 模板名&lt;br /&gt;
! 模板效果&lt;br /&gt;
! 注释说明及重定向&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|保留}}&lt;br /&gt;
| {{保留}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|删除}}&lt;br /&gt;
| {{删除}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|移动}}&lt;br /&gt;
| {{移动}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|打回}}&lt;br /&gt;
| {{打回}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{tl|合并}}&lt;br /&gt;
| {{合并}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
* [[:分类:讨论模板]]&lt;br /&gt;
* [[:分类:投票模板]]&lt;br /&gt;
* [[:分类:存废讨论模板]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[cat:讨论模板|*]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Clear&amp;diff=248</id>
		<title>模板:Clear</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Clear&amp;diff=248"/>
		<updated>2025-10-29T12:46:02Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;clear:{{{1|both}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Documentation&amp;diff=247</id>
		<title>模板:Documentation</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Documentation&amp;diff=247"/>
		<updated>2025-10-29T12:45:06Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Documentation|main|_content={{ {{#invoke:Documentation|contentTitle}}}}}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%B0%A2%E8%B0%A2%E4%BD%A0/doc&amp;diff=246</id>
		<title>模板:谢谢你/doc</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E8%B0%A2%E8%B0%A2%E4%BD%A0/doc&amp;diff=246"/>
		<updated>2025-10-29T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== 使用方法 ===&lt;br /&gt;
; 默认&lt;br /&gt;
{{tlx|谢谢你}} &amp;amp;rarr; {{谢谢你}}&lt;br /&gt;
&lt;br /&gt;
; 自定义&lt;br /&gt;
{{tlx|1=谢谢你|2=感激不尽}} &amp;amp;rarr; {{谢谢你|感激不尽}}&lt;br /&gt;
&lt;br /&gt;
; 仅使用笑脸&lt;br /&gt;
{{tlx|1=谢谢你|2=&amp;amp;nbsp;}} &amp;amp;rarr; {{谢谢你|}}&lt;br /&gt;
&lt;br /&gt;
=== 重定向页 ===&lt;br /&gt;
*{{tl|Thank You}}&lt;br /&gt;
*{{tl|Thank you}}&lt;br /&gt;
*{{tl|Thanks}}&lt;br /&gt;
*{{tl|Thx}}&lt;br /&gt;
*{{tl|谢谢}}&lt;br /&gt;
*{{tl|感谢}}&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
{{讨论模板}}&amp;lt;noinclude&amp;gt;[[Category:模板文档]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Tlx&amp;diff=244</id>
		<title>模板:Tlx</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Tlx&amp;diff=244"/>
		<updated>2025-10-29T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{#if:{{{subst|}}}|[[Help:替换引用|subst]]:}}[[{{{LANG|}}}{{{SISTER|}}}{{ns:Template}}:{{{1|}}}|{{{1|}}}]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#vardefine:tlx-argcount|2}}{{#vardefine:tlx-args|{{!}}subst{{!}}LANG{{!}}SISTER{{!}}1{{!}}}}{{#fornumargs:num|val|{{#ifeq:{{#var:num|}}|{{#var:tlx-argcount|}}|{{!}}{{#var:val|}}{{#vardefine:tlx-argcount|{{#expr:{{#var:tlx-argcount|}}+1}}}}{{#vardefine:tlx-args|{{#var:tlx-args|}}{{#var:num|}}{{!}}}}|}}}}{{#forargs:|key|val|{{#if:{{str match|str={{#var:tlx-args|}}|ptn={{!}}{{#var:key|}}{{!}}}}||{{!}}{{#var:key|}}={{#var:val|}}}}}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{FromOther|site=萌娘百科|originURL=https://zh.moegirl.org.cn/Template:Tlx|origin=Tlx|copyright=cc|lsubtype=by-nc-sa|lver=3.0|contribURL=https://zh.moegirl.org.cn/index.php?title=Template:Tlx&amp;amp;action=history}}{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:X/doc&amp;diff=242</id>
		<title>模板:X/doc</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:X/doc&amp;diff=242"/>
		<updated>2025-10-29T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;可以自定义后面的文字。比如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{{x|错误}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{x|错误}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
{{讨论模板}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:讨论模板]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:模板文档]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E5%AE%8C%E6%88%90/doc&amp;diff=240</id>
		<title>模板:完成/doc</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E5%AE%8C%E6%88%90/doc&amp;diff=240"/>
		<updated>2025-10-29T12:43:01Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;完成被请求操作时使用。可以通过&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{完成|文字}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;来显示其他文字{{完成|文字}}或者&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{完成|by=用户}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;来显示完成该操作的用户名{{完成|by=用户}}。&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
{{讨论模板}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:讨论模板]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:模板文档]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Documentation/config&amp;diff=237</id>
		<title>模块:Documentation/config</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Documentation/config&amp;diff=237"/>
		<updated>2025-10-29T12:40:34Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Documentation/config&amp;amp;oldid=84705147&lt;br /&gt;
--该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/)&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[&#039;protection-reason-edit&#039;]&lt;br /&gt;
-- The protection reason for edit-protected templates to pass to&lt;br /&gt;
-- [[Module:Protection banner]].&lt;br /&gt;
cfg[&#039;protection-reason-edit&#039;] = &#039;template&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox notice configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-notice-image&#039;]&lt;br /&gt;
-- The image displayed in the sandbox notice.&lt;br /&gt;
cfg[&#039;sandbox-notice-image&#039;] = &#039;[[File:Sandbox.svg|50px|alt=|link=]]&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-template&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-module&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-other&#039;]&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-template&#039;] = &#039;[[zhwp:模板的沙盒和测试样例|沙盒]]&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-module&#039;] = &#039;[[zhwp:模板的沙盒和测试样例|沙盒]]&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-other&#039;] = &#039;沙盒&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-notice-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-compare-link-display&#039;]&lt;br /&gt;
cfg[&#039;sandbox-notice-blurb&#039;] = &#039;这是$2的$1。&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-diff-blurb&#039;] = &#039;这是$2（$3）的$1。&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-compare-link-display&#039;] = &#039;差异&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-link-display&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-link-display&#039;]&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-blurb&#039;] = &#039;参见本$1的$2。&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-link-display&#039;] = &#039;测试样例&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-blurb&#039;] = &#039;参见本$1的$2（$3）。&#039;&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-link-display&#039;] = &#039;运行&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-category&#039;]&lt;br /&gt;
-- cfg[&#039;module-sandbox-category&#039;]&lt;br /&gt;
-- cfg[&#039;other-sandbox-category&#039;]&lt;br /&gt;
cfg[&#039;sandbox-category&#039;] = &#039;模板沙盒&#039;&lt;br /&gt;
cfg[&#039;module-sandbox-category&#039;] = &#039;模块沙盒&#039;&lt;br /&gt;
cfg[&#039;other-sandbox-category&#039;] = &#039;模板或模块命名空间之外的沙盒&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Start box configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;documentation-icon-wikitext&#039;]&lt;br /&gt;
cfg[&#039;documentation-icon-wikitext&#039;] = &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-namespace-heading&#039;]&lt;br /&gt;
cfg[&#039;template-namespace-heading&#039;] = &#039;模板文档&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-namespace-heading&#039;]&lt;br /&gt;
cfg[&#039;module-namespace-heading&#039;] = &#039;模块文档&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;file-namespace-heading&#039;]&lt;br /&gt;
cfg[&#039;file-namespace-heading&#039;] = &#039;摘要&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;other-namespaces-heading&#039;]&lt;br /&gt;
cfg[&#039;other-namespaces-heading&#039;] = &#039;文档&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;view-link-display&#039;]&lt;br /&gt;
cfg[&#039;view-link-display&#039;] = &#039;查看&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;edit-link-display&#039;]&lt;br /&gt;
cfg[&#039;edit-link-display&#039;] = &#039;编辑&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;history-link-display&#039;]&lt;br /&gt;
cfg[&#039;history-link-display&#039;] = &#039;历史&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;purge-link-display&#039;]&lt;br /&gt;
cfg[&#039;purge-link-display&#039;] = &#039;清除缓存&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;create-link-display&#039;]&lt;br /&gt;
cfg[&#039;create-link-display&#039;] = &#039;创建&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Link box (end box) configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;transcluded-from-blurb&#039;]&lt;br /&gt;
cfg[&#039;transcluded-from-blurb&#039;] = &#039;上述文档[[zhwp:嵌入包含|嵌入]]自$1。&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;create-module-doc-blurb&#039;]&lt;br /&gt;
cfg[&#039;create-module-doc-blurb&#039;] = &#039;您可能想要$1本模块的文档。&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Experiment blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;experiment-blurb-template&#039;]&lt;br /&gt;
-- cfg[&#039;experiment-blurb-module&#039;]&lt;br /&gt;
cfg[&#039;experiment-blurb-template&#039;] = &#039;编者可以在本模板的$1和$2页面进行实验。&#039;&lt;br /&gt;
cfg[&#039;experiment-blurb-module&#039;] = &#039;编者可以在本模块的$1和$2页面进行实验。&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-subpage&#039;]&lt;br /&gt;
cfg[&#039;sandbox-subpage&#039;] = &#039;sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-sandbox-preload&#039;]&lt;br /&gt;
cfg[&#039;template-sandbox-preload&#039;] = &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-sandbox-preload&#039;]&lt;br /&gt;
cfg[&#039;module-sandbox-preload&#039;] = &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-link-display&#039;]&lt;br /&gt;
cfg[&#039;sandbox-link-display&#039;] = &#039;沙盒&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-edit-link-display&#039;]&lt;br /&gt;
cfg[&#039;sandbox-edit-link-display&#039;] = &#039;编辑&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-create-link-display&#039;]&lt;br /&gt;
cfg[&#039;sandbox-create-link-display&#039;] = &#039;创建&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;compare-link-display&#039;]&lt;br /&gt;
cfg[&#039;compare-link-display&#039;] = &#039;差异&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-edit-summary&#039;]&lt;br /&gt;
cfg[&#039;mirror-edit-summary&#039;] = &#039;建立$1的沙盒版本&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-display&#039;]&lt;br /&gt;
cfg[&#039;mirror-link-display&#039;] = &#039;镜像&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-preload&#039;]&lt;br /&gt;
cfg[&#039;mirror-link-preload&#039;] = &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test cases link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-subpage&#039;]&lt;br /&gt;
cfg[&#039;testcases-subpage&#039;] = &#039;testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-testcases-preload&#039;]&lt;br /&gt;
cfg[&#039;template-testcases-preload&#039;] = &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-testcases-preload&#039;]&lt;br /&gt;
cfg[&#039;module-testcases-preload&#039;] = &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-link-display&#039;]&lt;br /&gt;
cfg[&#039;testcases-link-display&#039;] = &#039;测试样例&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-edit-link-display&#039;]&lt;br /&gt;
cfg[&#039;testcases-edit-link-display&#039;] = &#039;编辑&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-run-link-display&#039;]&lt;br /&gt;
cfg[&#039;testcases-run-link-display&#039;] = &#039;运行&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-create-link-display&#039;]&lt;br /&gt;
cfg[&#039;testcases-create-link-display&#039;] = &#039;创建&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Add categories blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;add-categories-blurb&#039;]&lt;br /&gt;
cfg[&#039;add-categories-blurb&#039;] = &#039;请在$1子页面中添加分类。&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-link-display&#039;]&lt;br /&gt;
cfg[&#039;doc-link-display&#039;] = &#039;/doc&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Subpages link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;subpages-blurb&#039;]&lt;br /&gt;
cfg[&#039;subpages-blurb&#039;] = &#039;$1。&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;subpages-link-display&#039;]&lt;br /&gt;
cfg[&#039;subpages-link-display&#039;] = &#039;本$1的子页面&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-pagetype&#039;]&lt;br /&gt;
cfg[&#039;template-pagetype&#039;] = &#039;模板&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-pagetype&#039;]&lt;br /&gt;
cfg[&#039;module-pagetype&#039;] = &#039;模块&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;default-pagetype&#039;]&lt;br /&gt;
cfg[&#039;default-pagetype&#039;] = &#039;页&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Doc link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-subpage&#039;]&lt;br /&gt;
cfg[&#039;doc-subpage&#039;] = &#039;doc&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;docpage-preload&#039;]&lt;br /&gt;
cfg[&#039;docpage-preload&#039;] = &#039;Template:Documentation/preload&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-preload&#039;]&lt;br /&gt;
cfg[&#039;module-preload&#039;] = &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- HTML and CSS configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;templatestyles&#039;]&lt;br /&gt;
cfg[&#039;templatestyles&#039;] = &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;container&#039;]&lt;br /&gt;
cfg[&#039;container&#039;] = &#039;documentation-container&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-classes&#039;]&lt;br /&gt;
cfg[&#039;main-div-classes&#039;] = &#039;documentation&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-heading-class&#039;]&lt;br /&gt;
cfg[&#039;main-div-heading-class&#039;] = &#039;documentation-heading&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-class&#039;]&lt;br /&gt;
cfg[&#039;start-box-class&#039;] = &#039;documentation-startbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-link-classes&#039;]&lt;br /&gt;
cfg[&#039;start-box-link-classes&#039;] = &#039;mw-editsection-like plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;end-box-class&#039;]&lt;br /&gt;
cfg[&#039;end-box-class&#039;] = &#039;documentation-metadata&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;end-box-plainlinks&#039;]&lt;br /&gt;
cfg[&#039;end-box-plainlinks&#039;] = &#039;plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;toolbar-class&#039;]&lt;br /&gt;
cfg[&#039;toolbar-class&#039;] = &#039;documentation-toolbar&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;clear&#039;]&lt;br /&gt;
cfg[&#039;clear&#039;] = &#039;documentation-clear&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking category configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;display-strange-usage-category&#039;]&lt;br /&gt;
cfg[&#039;display-strange-usage-category&#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;strange-usage-category&#039;]&lt;br /&gt;
cfg[&#039;strange-usage-category&#039;] = &#039;异常使用((documentation))的页面&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Arguments&amp;diff=235</id>
		<title>模块:Arguments</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Arguments&amp;diff=235"/>
		<updated>2025-10-29T12:40:33Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Arguments&amp;amp;oldid=83158592&lt;br /&gt;
--该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/)&lt;br /&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(&#039;libraryUtil&#039;)&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&#039;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) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; 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) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#039;)&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) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#039;) 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 == &#039;string&#039; or tp == &#039;number&#039;) 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(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, 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&#039;s availability. If we weren&#039;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) == &#039;table&#039; and type(frame.getParent) == &#039;function&#039; 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&#039;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(&#039;/sandbox$&#039;, &#039;&#039;)&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) == &#039;table&#039; 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&#039;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&#039;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) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#039;,&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 &#039;s&#039; (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] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#039;&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) == &#039;string&#039; 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] = &#039;h&#039;&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) == &#039;string&#039; 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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#039;,&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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#039;,&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&#039;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] = &#039;h&#039;&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) ~= &#039;string&#039; 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&#039;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>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Documentation&amp;diff=233</id>
		<title>模块:Documentation</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E5%9D%97:Documentation&amp;diff=233"/>
		<updated>2025-10-29T12:40:33Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--源代码来自维基百科:https://zh.wikipedia.org/w/index.php?title=Module:Documentation&amp;amp;oldid=87749641&lt;br /&gt;
--该部分代码使用CC BY-SA 4.0许可证 (https://creativecommons.org/licenses/by-sa/4.0/)&lt;br /&gt;
-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Documentation/config&#039;)&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;
local format = mw.ustring.format&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 &#039;string&#039;.&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 &#039;Foo $2 bar $1.&#039;,&lt;br /&gt;
	-- message(&#039;foo-message&#039;, {&#039;baz&#039;, &#039;qux&#039;}) 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 &#039;string&#039;&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error(&#039;message: type error in message cfg.&#039; .. cfgKey .. &#039; (&#039; .. expectType .. &#039; expected, got &#039; .. type(msg) .. &#039;)&#039;, 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(&#039;message: no value found for key $&#039; .. match .. &#039; in message cfg.&#039; .. cfgKey, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	msg = ugsub(msg, &#039;$([1-9][0-9]*)&#039;, getMessageVal)&lt;br /&gt;
	return msg&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 format(&#039;[[%s|%s]]&#039;, page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return format(&#039;[[%s]]&#039;, 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 .. &#039;:&#039; .. 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 format(&#039;[%s %s]&#039;, 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(&#039;#&#039;, ...)&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;
	-- &#039;documentation-toolbar&#039;&lt;br /&gt;
	return format(&lt;br /&gt;
		&#039;&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;(%s)&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		message(&#039;toolbar-class&#039;),&lt;br /&gt;
		table.concat(ret, &#039; &amp;amp;#124; &#039;)&lt;br /&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) == &#039;string&#039; then&lt;br /&gt;
					value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &#039;heading&#039; or value ~= &#039;&#039; 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 == &#039;testcases&#039; then&lt;br /&gt;
		return frame:expandTemplate{title = &#039;module test cases notice&#039;}&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;
p.main = makeInvokeFunc(&#039;_main&#039;)&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;
	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;
		:tag(&#039;div&#039;)&lt;br /&gt;
			-- &#039;documentation-container&#039;&lt;br /&gt;
			:addClass(message(&#039;container&#039;))&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;complementary&#039;)&lt;br /&gt;
			:attr(&#039;aria-labelledby&#039;, args.heading ~= &#039;&#039; and &#039;documentation-heading&#039; or nil)&lt;br /&gt;
			:attr(&#039;aria-label&#039;, args.heading == &#039;&#039; and &#039;Documentation&#039; or nil)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- &#039;documentation&#039;&lt;br /&gt;
				:addClass(message(&#039;main-div-classes&#039;))&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(p._startBox(args, env))&lt;br /&gt;
				:wikitext(p._content(args, env))&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					-- &#039;documentation-clear&#039;&lt;br /&gt;
					:addClass(message(&#039;clear&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(p._endBox(args, env))&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(p.addTrackingCategories(env))&lt;br /&gt;
	-- &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag (&lt;br /&gt;
		&#039;templatestyles&#039;, &#039;&#039;, {src=cfg[&#039;templatestyles&#039;]&lt;br /&gt;
	}) .. 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&lt;br /&gt;
	-- objects and other namespace- or 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;
	--&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&#039;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&#039;t call any of the functions&lt;br /&gt;
	-- more than once. (Nils won&#039;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;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&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(&#039;sandbox-subpage&#039;) or subpage == message(&#039;testcases-subpage&#039;) 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;
		-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&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 .. &#039;/&#039; .. message(&#039;doc-subpage&#039;)&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;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;sandbox-subpage&#039;))&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;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;testcases-subpage&#039;))&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&lt;br /&gt;
		-- same as the subject namespace. However, pages in the Article, File,&lt;br /&gt;
		-- MediaWiki or Category namespaces must have their /doc, /sandbox and&lt;br /&gt;
		-- /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 .. &#039;:&#039; .. 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.canonicalUrl(&lt;br /&gt;
				&#039;Special:ComparePages&#039;,&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;
&lt;br /&gt;
p.getModuleWikitext = makeInvokeFunc(&#039;_getModuleWikitext&#039;)&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 ~= &#039;Scribunto&#039; then return end&lt;br /&gt;
	pcall(require, currentTitle.prefixedText) -- if it fails, we don&#039;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;
end&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;
	-- &#039;sandbox-notice-image&#039; --&amp;gt; &#039;[[File:Sandbox.svg|50px|alt=|link=]]&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-blurb&#039; --&amp;gt; &#039;This is the $1 for $2.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-diff-blurb&#039; --&amp;gt; &#039;This is the $1 for $2 ($3).&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-template&#039; --&amp;gt; &#039;[[Wikipedia:Template test cases|template sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-module&#039; --&amp;gt; &#039;[[Wikipedia:Template test cases|module sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-other&#039; --&amp;gt; &#039;sandbox page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-blurb&#039; --&amp;gt; &#039;See also the companion subpage for $1.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-link-display&#039; --&amp;gt; &#039;test cases&#039;&lt;br /&gt;
	-- &#039;sandbox-category&#039; --&amp;gt; &#039;Template sandboxes&#039;&lt;br /&gt;
	-- &#039;module-sandbox-category&#039; --&amp;gt; &#039;Module sandboxes&#039;&lt;br /&gt;
	-- &#039;other-sandbox-category&#039; --&amp;gt; &#039;Sandboxes outside of template or module namespace&#039;&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&lt;br /&gt;
		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(&#039;sandbox-notice-image&#039;)&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 = &#039;__EXPECTUNUSEDTEMPLATE__&#039;&lt;br /&gt;
	local pagetype, sandboxCat&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-template&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;sandbox-category&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-module&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;module-sandbox-category&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-other&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;other-sandbox-category&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local pagetypee&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetypee = message(&#039;template-pagetype&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetypee = message(&#039;module-pagetype&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetypee = message(&#039;default-pagetype&#039;) --message &#039;other-pagetype&#039; 不存在&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(&#039;sandbox-notice-compare-link-display&#039;)&lt;br /&gt;
		local compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-diff-blurb&#039;, {pagetype, templateLink, compareLink})&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-blurb&#039;, {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.contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesRunLinkDisplay = message(&#039;sandbox-notice-testcases-run-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-run-blurb&#039;, {pagetypee, testcasesLink, testcasesRunLink}) .. &#039;&amp;lt;/small&amp;gt;&#039;&lt;br /&gt;
		else&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-blurb&#039;, {pagetypee, testcasesLink}) .. &#039;&amp;lt;/small&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Add the sandbox to the sandbox category.&lt;br /&gt;
	omargs.text = text .. makeCategoryLink(sandboxCat)&lt;br /&gt;
&lt;br /&gt;
	-- &#039;documentation-clear&#039;&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;&#039; .. message(&#039;clear&#039;) .. &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
		.. require(&#039;Module:Message box&#039;).main(&#039;ombox&#039;, omargs)&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;
	-- &#039;protection-template&#039; --&amp;gt; &#039;pp-template&#039;&lt;br /&gt;
	-- &#039;protection-template-args&#039; --&amp;gt; {docusage = &#039;yes&#039;}&lt;br /&gt;
	local 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;
		return require(&#039;Module:Protection banner&#039;)._main{&lt;br /&gt;
			message(&#039;protection-reason-edit&#039;), small = true&lt;br /&gt;
		}&lt;br /&gt;
	elseif moveProt and moveProt ~= &#039;autoconfirmed&#039; 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;
		return require(&#039;Module:Protection banner&#039;)._main{&lt;br /&gt;
			action = &#039;move&#039;, small = true&lt;br /&gt;
		}&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(&#039;_startBox&#039;)&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 or args[1] 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;
	-- &#039;view-link-display&#039; --&amp;gt; &#039;view&#039;&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;purge-link-display&#039; --&amp;gt; &#039;purge&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;docpage-preload&#039; --&amp;gt; &#039;Template:Documentation/preload&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&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;
	if docTitle.isRedirect then &lt;br /&gt;
		docTitle = docTitle.redirectTarget&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create link if /doc doesn&#039;t exist.&lt;br /&gt;
	local preload = args.preload&lt;br /&gt;
	if not preload then&lt;br /&gt;
		if subjectSpace == 828 then -- Module namespace&lt;br /&gt;
			preload = message(&#039;module-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			preload = message(&#039;docpage-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		title = title,&lt;br /&gt;
		docTitle = docTitle,&lt;br /&gt;
		-- View, display, edit, and purge links if /doc exists.&lt;br /&gt;
		viewLinkDisplay = message(&#039;view-link-display&#039;),&lt;br /&gt;
		editLinkDisplay = message(&#039;edit-link-display&#039;),&lt;br /&gt;
		historyLinkDisplay = message(&#039;history-link-display&#039;),&lt;br /&gt;
		purgeLinkDisplay = message(&#039;purge-link-display&#039;),&lt;br /&gt;
		preload = preload,&lt;br /&gt;
		createLinkDisplay = message(&#039;create-link-display&#039;)&lt;br /&gt;
	}&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][purge] links from the data table.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxLinksData&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = data.docTitle&lt;br /&gt;
	-- yes, we do intend to purge the template page on which the documentation appears&lt;br /&gt;
	local purgeLink = makeWikilink(&amp;quot;Special:Purge/&amp;quot; .. data.title.prefixedText, data.purgeLinkDisplay)&lt;br /&gt;
	&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)&lt;br /&gt;
		local editLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. docTitle.prefixedText, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeWikilink(&amp;quot;Special:PageHistory/&amp;quot; .. docTitle.prefixedText, data.historyLinkDisplay)&lt;br /&gt;
		return &amp;quot;&amp;amp;#91;&amp;quot; .. viewLink .. &amp;quot;&amp;amp;#93; &amp;amp;#91;&amp;quot; .. editLink .. &amp;quot;&amp;amp;#93; &amp;amp;#91;&amp;quot; .. historyLink .. &amp;quot;&amp;amp;#93; &amp;amp;#91;&amp;quot; .. purgeLink .. &amp;quot;&amp;amp;#93;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		local createLink = makeUrlLink(docTitle:canonicalUrl{action = &#039;edit&#039;, preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		return  &amp;quot;&amp;amp;#91;&amp;quot; .. createLink .. &amp;quot;&amp;amp;#93; &amp;amp;#91;&amp;quot; .. purgeLink .. &amp;quot;&amp;amp;#93;&amp;quot;&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&#039;s an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;documentation-icon-wikitext&#039; --&amp;gt; &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]&#039;&lt;br /&gt;
	-- &#039;template-namespace-heading&#039; --&amp;gt; &#039;Template documentation&#039;&lt;br /&gt;
	-- &#039;module-namespace-heading&#039; --&amp;gt; &#039;Module documentation&#039;&lt;br /&gt;
	-- &#039;file-namespace-heading&#039; --&amp;gt; &#039;Summary&#039;&lt;br /&gt;
	-- &#039;other-namespaces-heading&#039; --&amp;gt; &#039;Documentation&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&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 == &#039;&#039; then&lt;br /&gt;
		-- Don&#039;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(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;template-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = message(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;module-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = message(&#039;file-namespace-heading&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = message(&#039;other-namespaces-heading&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading CSS&lt;br /&gt;
	local headingStyle = args[&#039;heading-style&#039;]&lt;br /&gt;
	if headingStyle then&lt;br /&gt;
		data.headingStyleText = headingStyle&lt;br /&gt;
	else&lt;br /&gt;
		-- &#039;documentation-heading&#039;&lt;br /&gt;
		data.headingClass = message(&#039;main-div-heading-class&#039;)&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;
		-- &#039;mw-editsection-like plainlinks&#039;&lt;br /&gt;
		data.linksClass = message(&#039;start-box-link-classes&#039;)&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(&#039;div&#039;)&lt;br /&gt;
	sbox&lt;br /&gt;
		-- &#039;documentation-startbox&#039;&lt;br /&gt;
		:addClass(message(&#039;start-box-class&#039;))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.headingClass)&lt;br /&gt;
			:attr(&#039;id&#039;, &#039;documentation-heading&#039;)&lt;br /&gt;
			:cssText(data.headingStyleText)&lt;br /&gt;
			:wikitext(data.heading)&lt;br /&gt;
	local links = data.links&lt;br /&gt;
	if links then&lt;br /&gt;
		sbox:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.linksClass)&lt;br /&gt;
			:attr(&#039;id&#039;, 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(&#039;_content&#039;)&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 &#039;\n&#039; .. (content or &#039;&#039;) .. &#039;\n&#039; &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc(&#039;_contentTitle&#039;)&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 &#039;&#039;&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(&#039;_endBox&#039;)&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;
	--]=]&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[&#039;link box&#039;]&lt;br /&gt;
	if linkBox == &#039;off&#039;&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 link box.&lt;br /&gt;
	local text = &#039;&#039;&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 &#039;&#039;) -- &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&#039;s sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			-- 删除 text = text .. (p.makeExperimentBlurb(args, env) or &#039;&#039;) .. &#039;&amp;lt;br /&amp;gt;&#039;&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&#039;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 &#039;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. &#039; &#039; .. (p.makeSubpagesBlurb(args, env) or &#039;&#039;) --&amp;quot;Subpages of this template&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local box = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	-- &#039;documentation-metadata&#039;&lt;br /&gt;
	box:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
		:addClass(message(&#039;end-box-class&#039;))&lt;br /&gt;
		-- &#039;plainlinks&#039;&lt;br /&gt;
		:addClass(message(&#039;end-box-plainlinks&#039;))&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	return &#039;\n&#039; .. tostring(box)&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;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;transcluded-from-blurb&#039; --&amp;gt; &lt;br /&gt;
	-- &#039;The above [[Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[Help:Transclusion|transcluded]] from $1.&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;create-module-doc-blurb&#039; --&amp;gt;&lt;br /&gt;
	-- &#039;You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].&#039;&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;
	if docTitle.exists then&lt;br /&gt;
		-- /doc exists; link to it.&lt;br /&gt;
		local docLink = makeWikilink(docTitle.prefixedText)&lt;br /&gt;
		local editDisplay = message(&#039;edit-link-display&#039;)&lt;br /&gt;
		local editLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. docTitle.prefixedText, editDisplay)&lt;br /&gt;
		local historyDisplay = message(&#039;history-link-display&#039;)&lt;br /&gt;
		local historyLink = makeWikilink(&amp;quot;Special:PageHistory/&amp;quot; .. docTitle.prefixedText, historyDisplay)&lt;br /&gt;
		return message(&#039;transcluded-from-blurb&#039;, {docLink})&lt;br /&gt;
			.. &#039; &#039;&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&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:canonicalUrl{action = &#039;edit&#039;, preload = message(&#039;module-preload&#039;)}&lt;br /&gt;
		local createDisplay = message(&#039;create-link-display&#039;)&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		return message(&#039;create-module-doc-blurb&#039;, {createLink})&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
	end&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&#039;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;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;module-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;mirror-edit-summary&#039; --&amp;gt; &#039;Create sandbox version of $1&#039;&lt;br /&gt;
	-- &#039;mirror-link-display&#039; --&amp;gt; &#039;mirror&#039;&lt;br /&gt;
	-- &#039;mirror-link-preload&#039; --&amp;gt; &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039;--&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;module-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
	-- &#039;template-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-module&#039; --&amp;gt; &#039;Editors can experiment in this module&#039;s $1 and $2 pages.&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-template&#039; --&amp;gt; &#039;Editors can experiment in this template&#039;s $1 and $2 pages.&#039;&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(&#039;sandbox-link-display&#039;)&lt;br /&gt;
		local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)&lt;br /&gt;
		local sandboxEditDisplay = message(&#039;sandbox-edit-link-display&#039;)&lt;br /&gt;
		local sandboxEditLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. sandboxPage, 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(&#039;compare-link-display&#039;)&lt;br /&gt;
			compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		end&lt;br /&gt;
		sandboxLinks = sandboxLink .. &#039; &#039; .. makeToolbar(sandboxEditLink, compareLink)&lt;br /&gt;
	else&lt;br /&gt;
		local sandboxPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			sandboxPreload = message(&#039;module-sandbox-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			sandboxPreload = message(&#039;template-sandbox-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = &#039;edit&#039;, preload = sandboxPreload}&lt;br /&gt;
		local sandboxCreateDisplay = message(&#039;sandbox-create-link-display&#039;)&lt;br /&gt;
		local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)&lt;br /&gt;
		local mirrorSummary = message(&#039;mirror-edit-summary&#039;, {makeWikilink(templatePage)})&lt;br /&gt;
		local mirrorPreload = message(&#039;mirror-link-preload&#039;)&lt;br /&gt;
		local mirrorUrl = sandboxTitle:canonicalUrl{action = &#039;edit&#039;, preload = mirrorPreload, summary = mirrorSummary}&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			mirrorUrl = sandboxTitle:canonicalUrl{action = &#039;edit&#039;, preload = templateTitle.prefixedText, summary = mirrorSummary}&lt;br /&gt;
		end&lt;br /&gt;
		local mirrorDisplay = message(&#039;mirror-link-display&#039;)&lt;br /&gt;
		local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)&lt;br /&gt;
		sandboxLinks = message(&#039;sandbox-link-display&#039;) .. &#039; &#039; .. 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(&#039;testcases-link-display&#039;)&lt;br /&gt;
		local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)&lt;br /&gt;
		local testcasesEditUrl = testcasesTitle:canonicalUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local testcasesEditDisplay = message(&#039;testcases-edit-link-display&#039;)&lt;br /&gt;
		local testcasesEditLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. testcasesPage, testcasesEditDisplay)&lt;br /&gt;
		-- for Modules, add testcases run link if exists&lt;br /&gt;
		if testcasesTitle.contentModel == &amp;quot;Scribunto&amp;quot;  and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then&lt;br /&gt;
			local testcasesRunLinkDisplay = message(&#039;testcases-run-link-display&#039;)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			testcasesLinks = testcasesLink .. &#039; &#039; .. makeToolbar(testcasesEditLink, testcasesRunLink)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesLinks = testcasesLink .. &#039; &#039; .. 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(&#039;module-testcases-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesPreload = message(&#039;template-testcases-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = &#039;edit&#039;, preload = testcasesPreload}&lt;br /&gt;
		local testcasesCreateDisplay = message(&#039;testcases-create-link-display&#039;)&lt;br /&gt;
		local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)&lt;br /&gt;
		testcasesLinks = message(&#039;testcases-link-display&#039;) .. &#039; &#039; .. makeToolbar(testcasesCreateLink)&lt;br /&gt;
	end&lt;br /&gt;
	local messageName&lt;br /&gt;
	if subjectSpace == 828 then&lt;br /&gt;
		messageName = &#039;experiment-blurb-module&#039;&lt;br /&gt;
	else&lt;br /&gt;
		messageName = &#039;experiment-blurb-template&#039;&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;
	-- &#039;doc-link-display&#039; --&amp;gt; &#039;/doc&#039;&lt;br /&gt;
	-- &#039;add-categories-blurb&#039; --&amp;gt; &#039;Please add categories to the $1 subpage.&#039;&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(&#039;doc-link-display&#039;))&lt;br /&gt;
	return message(&#039;add-categories-blurb&#039;, {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;
	-- &#039;template-pagetype&#039; --&amp;gt; &#039;template&#039;&lt;br /&gt;
	-- &#039;module-pagetype&#039; --&amp;gt; &#039;module&#039;&lt;br /&gt;
	-- &#039;default-pagetype&#039; --&amp;gt; &#039;page&#039;&lt;br /&gt;
	-- &#039;subpages-link-display&#039; --&amp;gt; &#039;Subpages of this $1&#039;&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(&#039;template-pagetype&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;module-pagetype&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;default-pagetype&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		&#039;Special:PrefixIndex/&#039; .. templateTitle.prefixedText .. &#039;/&#039;,&lt;br /&gt;
		message(&#039;subpages-link-display&#039;, {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message(&#039;subpages-blurb&#039;, {subpagesLink})&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;
	-- &#039;display-strange-usage-category&#039; --&amp;gt; true&lt;br /&gt;
	-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
	-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;strange-usage-category&#039; --&amp;gt; &#039;Wikipedia pages with strange ((documentation)) usage&#039;&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;
	if message(&#039;display-strange-usage-category&#039;, nil, &#039;boolean&#039;)&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message(&#039;doc-subpage&#039;)&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message(&#039;testcases-subpage&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return makeCategoryLink(message(&#039;strange-usage-category&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Doc&amp;diff=231</id>
		<title>模板:Doc</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Doc&amp;diff=231"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#重定向 [[模板:Documentation]]&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Documentation&amp;diff=229</id>
		<title>模板:Documentation</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Documentation&amp;diff=229"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Edit&amp;diff=225</id>
		<title>模板:Edit</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Edit&amp;diff=225"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;noprint plainlinks&amp;quot;&amp;gt;{{{4|&amp;amp;#x5b;}}}[{{fullurl:{{#if:{{{1|}}}|{{{1|}}}|{{FULLPAGENAME}}}}|action=edit{{#if:{{{section|}}}|&amp;amp;section={{{section|}}}}}{{#if:{{{preloadtitle|}}}|&amp;amp;preloadtitle={{urlencode:{{{preloadtitle}}}}}}}{{#if:{{{preload|}}}|&amp;amp;preload={{urlencode:{{{preload}}}}}}}}} &amp;lt;span title=&amp;quot;{{{3|}}}&amp;quot;&amp;gt;{{{2|编辑}}}&amp;lt;/span&amp;gt;]{{{5|&amp;amp;#x5d;}}}&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Clear&amp;diff=223</id>
		<title>模板:Clear</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Clear&amp;diff=223"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;clear:{{{1|both}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{FromOther|site=萌娘百科|originURL=https://zh.moegirl.org.cn/Template:Clear|origin=Clear|copyright=cc|lsubtype=by-nc-sa|lver=3.0|contribURL=https://zh.moegirl.org.cn/index.php?title=Template:Clear&amp;amp;action=history}}{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Tl&amp;diff=221</id>
		<title>模板:Tl</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:Tl&amp;diff=221"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;amp;#123;&amp;amp;#123;{{ {{{|safesubst:}}}#if:{{{3|}}}|{{{3|}}}:|}}[[{{ {{{|safesubst:}}}ns:Template}}:{{{1}}}|{{{1}}}]]{{ {{{|safesubst:}}}#if:{{{2|{{{arg|}}}}}}|{{!}}{{{2|{{{arg}}}}}}}}&amp;amp;#125;&amp;amp;#125;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
	<entry>
		<id>https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A7%BB%E5%8A%A8&amp;diff=219</id>
		<title>模板:移动</title>
		<link rel="alternate" type="text/html" href="https://xiesu.error404.su/index.php?title=%E6%A8%A1%E6%9D%BF:%E7%A7%BB%E5%8A%A8&amp;diff=219"/>
		<updated>2025-10-29T12:40:32Z</updated>

		<summary type="html">&lt;p&gt;ESUAdmin：​导入1个版本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- The page you specified doesn&#039;t exist. --&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold; color: blue; background: lightblue;&amp;quot;&amp;gt;(►)&amp;lt;/span&amp;gt;&#039;&#039;&#039;{{{1|移动 }}}&#039;&#039;&#039;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“移动”可转换为其它文字。方法：&amp;lt;pre&amp;gt;{{移动|要转换的文字}}&amp;lt;/pre&amp;gt;显示：{{移动|要转换的文字}}&lt;br /&gt;
----&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
{{讨论模板}}&lt;br /&gt;
[[Category:存废讨论模板]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ESUAdmin</name></author>
	</entry>
</feed>