<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-charinsert-core.js</id>
	<title>MediaWiki:Gadget-charinsert-core.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-charinsert-core.js"/>
	<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;action=history"/>
	<updated>2026-07-18T00:48:49Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=382&amp;oldid=prev</id>
		<title>2026年6月16日 (二) 14:04 鹿野耕云</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=382&amp;oldid=prev"/>
		<updated>2026-06-16T14:04:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;amp;diff=382&amp;amp;oldid=381&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=381&amp;oldid=prev</id>
		<title>2026年6月16日 (二) 13:23 鹿野耕云</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=381&amp;oldid=prev"/>
		<updated>2026-06-16T13:23:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年6月16日 (二) 21:23的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第44行：&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第44行：&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        // 如需修改，请同时编辑 [[MediaWiki:Edittools]]；但在该页面中，无需使用 ␥ 符号，改用 {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }} 控制主命名空间显示。&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        // 如需修改，请同时编辑 [[MediaWiki:Edittools]]；但在该页面中，无需使用 ␥ 符号，改用 {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }} 控制主命名空间显示。&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        charinsert: {&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        charinsert: {&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;插入&#039;: &#039;– — ′ ″ ‘+’ “+” 《+》 · § [\[+]] {\{+}} &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; 在讨论页签名: ~~\~~  引用来源: &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&#039;,&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;插入&#039;: &#039;– — ′ ″ ‘+’ “+” 《+》 · § [\[+]] {\{+}} &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;␥&lt;/ins&gt;在讨论页签名: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;␥&lt;/ins&gt;~~\~~  引用来源: &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&#039;,&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;维基标签&#039;: &#039;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt; ~~\~~ {\{+}} {\{\{+}}} | [+] [\[+]] [\[Category:+]] #REDIRECT.[\[+]] &amp;amp;nbsp; &amp;lt;u&amp;gt;+&amp;lt;/u&amp;gt; &amp;lt;s&amp;gt;+&amp;lt;/s&amp;gt; &amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt; &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &amp;lt;pre&amp;gt;+&amp;lt;/pre&amp;gt; &amp;lt;blockquote&amp;gt;+&amp;lt;/blockquote&amp;gt; &amp;lt;ref.name=&quot;+&quot;_/&amp;gt; {\{Reflist}} &amp;lt;references./&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt; &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;!--.+_--&amp;gt; [\[:File:+]] &amp;lt;syntaxhighlight.lang=&quot;php&quot;&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&#039;,&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;维基标签&#039;: &#039;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;␥&lt;/ins&gt;~~\~~ {\{+}} {\{\{+}}} | [+] [\[+]] [\[Category:+]] #REDIRECT.[\[+]] &amp;amp;nbsp; &amp;lt;u&amp;gt;+&amp;lt;/u&amp;gt; &amp;lt;s&amp;gt;+&amp;lt;/s&amp;gt; &amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt; &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &amp;lt;pre&amp;gt;+&amp;lt;/pre&amp;gt; &amp;lt;blockquote&amp;gt;+&amp;lt;/blockquote&amp;gt; &amp;lt;ref.name=&quot;+&quot;_/&amp;gt; {\{Reflist}} &amp;lt;references./&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt; &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;!--.+_--&amp;gt; [\[:File:+]] &amp;lt;syntaxhighlight.lang=&quot;php&quot;&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&#039;,&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;常用模板&#039;: &#039; {{subst:+}} {{SERVER}} {{localurl:+}} {{fullurl:+}} {{FULLPAGENAME}} {{PAGENAME}} {{DEFAULTSORT:+}} {{#expr:+}} {{#if:+}} {{#ifeq:+}} {{#ifexpr:+}} {{#switch:+}} {{#ifexist:+}} {{#time:Y年Fj日&amp;amp;#32;H:i|+}}&#039;,&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;常用模板&#039;: &#039; {{subst:+}} {{SERVER}} {{localurl:+}} {{fullurl:+}} {{FULLPAGENAME}} {{PAGENAME}} {{DEFAULTSORT:+}} {{#expr:+}} {{#if:+}} {{#ifeq:+}} {{#ifexpr:+}} {{#switch:+}} {{#ifexist:+}} {{#time:Y年Fj日&amp;amp;#32;H:i|+}}&#039;,&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;常用符号&#039;: &#039;“+” ‘+’ 「+」 『+』 （+） «+» ‹+› „+“ ‚+‘ － —— …… 《+》 〈+〉 【+】 〖+〗 〔+〕 ～ | ¡¿†‡↔→↑←↓↖↗↘↙•▪¶#∞ ‹+› «+» − °℃℉‰ ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩￥¥ ♠♣♥♦ 𝄫♭♮♯𝄪 ©®™ ◌ ☉☾☿♀🜨♂♃♄⛢♆&#039;,&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;            &#039;常用符号&#039;: &#039;“+” ‘+’ 「+」 『+』 （+） «+» ‹+› „+“ ‚+‘ － —— …… 《+》 〈+〉 【+】 〖+〗 〔+〕 ～ | ¡¿†‡↔→↑←↓↖↗↘↙•▪¶#∞ ‹+› «+» − °℃℉‰ ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩￥¥ ♠♣♥♦ 𝄫♭♮♯𝄪 ©®™ ◌ ☉☾☿♀🜨♂♃♄⛢♆&#039;,&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=52&amp;oldid=prev</id>
		<title>鹿野耕云：​创建页面，内容为“/**   * &lt;https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js&gt;   *   * 最初基于 mw:User:Alex Smotrov/edittools.js 开发，为英文维基百科使用进行了修改。   * 配置（需在 Special:MyPage/common.js 中设置）：   * window.charinsertCustom – 对象类型。会合并到默认的字符插入列表中。例如，将其设置为   * { Symbols: &#039;‽&#039; }，会在“符号”（Symbols）分类的末尾添加疑问惊叹号…”</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=52&amp;oldid=prev"/>
		<updated>2025-11-23T13:46:29Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“/**   * &amp;lt;https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js&amp;gt;   *   * 最初基于 &lt;a href=&quot;https://www.mediawiki.org/wiki/User:Alex_Smotrov/edittools.js&quot; class=&quot;extiw&quot; title=&quot;mw:User:Alex Smotrov/edittools.js&quot;&gt;mw:User:Alex Smotrov/edittools.js&lt;/a&gt; 开发，为英文维基百科使用进行了修改。   * 配置（需在 &lt;a href=&quot;/wiki/Special:%E6%88%91%E7%9A%84%E7%94%A8%E6%88%B7%E9%A1%B5/common.js&quot; title=&quot;Special:我的用户页/common.js&quot;&gt;Special:MyPage/common.js&lt;/a&gt; 中设置）：   * window.charinsertCustom – 对象类型。会合并到默认的字符插入列表中。例如，将其设置为   * { Symbols: &amp;#039;‽&amp;#039; }，会在“符号”（Symbols）分类的末尾添加疑问惊叹号…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/** &lt;br /&gt;
 * &amp;lt;https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js&amp;gt; &lt;br /&gt;
 * &lt;br /&gt;
 * 最初基于 [[mw:User:Alex Smotrov/edittools.js]] 开发，为英文维基百科使用进行了修改。 &lt;br /&gt;
 * 配置（需在 [[Special:MyPage/common.js]] 中设置）： &lt;br /&gt;
 * window.charinsertCustom – 对象类型。会合并到默认的字符插入列表中。例如，将其设置为 &lt;br /&gt;
 * { Symbols: &amp;#039;‽&amp;#039; }，会在“符号”（Symbols）分类的末尾添加疑问惊叹号。 &lt;br /&gt;
 * window.editToolsRecall – 布尔类型。设为 true 可创建“恢复”（recall）开关。 &lt;br /&gt;
 * window.charinsertDontMove – 布尔类型。设为 true 可让字符插入框保持默认位置，不 &lt;br /&gt;
 * 移动到编辑摘要上方。 &lt;br /&gt;
 * window.updateEditTools() – 函数。更新 window.charinsertCustom 后调用此函数，可重新生成 &lt;br /&gt;
 * 编辑工具（EditTools）窗口。 &lt;br /&gt;
 */ &lt;br /&gt;
/* 全局变量声明：$, mw, charinsertCustom */ &lt;br /&gt;
window.updateEditTools = function () { }; &lt;br /&gt;
&lt;br /&gt;
$( function () { 	&lt;br /&gt;
	var $currentFocused, 		// 存储当前获取焦点的输入元素（文本框/编辑器）&lt;br /&gt;
		editTools; 				// 编辑工具核心对象，封装所有功能和配置&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * 获取已选中的字符分类&lt;br /&gt;
	 * 优先从本地存储读取，本地存储无数据时从会话存储读取&lt;br /&gt;
	 * @returns {string|undefined} 存储的分类索引，无存储数据则返回 undefined&lt;br /&gt;
	 */&lt;br /&gt;
	function getSelectedSection() { 		&lt;br /&gt;
		var selectedSection = mw.storage.get( editTools.storageKey ) &lt;br /&gt;
			|| mw.storage.session.get( editTools.storageKey ); 		&lt;br /&gt;
		return selectedSection; &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * 保存当前选中的字符分类索引&lt;br /&gt;
	 * 优先存入本地存储，本地存储失败时存入会话存储&lt;br /&gt;
	 * @param {string} newIndex - 新的分类索引（对应下拉选择框的选项序号）&lt;br /&gt;
	 */&lt;br /&gt;
	function saveSelectedSection( newIndex ) { 		&lt;br /&gt;
		mw.storage.set( editTools.storageKey, newIndex ) &lt;br /&gt;
			|| mw.storage.session.set( editTools.storageKey, newIndex ); &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
    editTools = {&lt;br /&gt;
        // 以 ␥（U+2425，删除格式符号二）开头的条目，不会在主命名空间（命名空间 0）显示。&lt;br /&gt;
        // 如需修改，请同时编辑 [[MediaWiki:Edittools]]；但在该页面中，无需使用 ␥ 符号，改用 {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }} 控制主命名空间显示。&lt;br /&gt;
        charinsert: {&lt;br /&gt;
            &amp;#039;插入&amp;#039;: &amp;#039;– — ′ ″ ‘+’ “+” 《+》 · § [\[+]] {\{+}} &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; 在讨论页签名: ~~\~~  引用来源: &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;维基标签&amp;#039;: &amp;#039;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt; ~~\~~ {\{+}} {\{\{+}}} | [+] [\[+]] [\[Category:+]] #REDIRECT.[\[+]] &amp;amp;nbsp; &amp;lt;u&amp;gt;+&amp;lt;/u&amp;gt; &amp;lt;s&amp;gt;+&amp;lt;/s&amp;gt; &amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt; &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt; &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; &amp;lt;pre&amp;gt;+&amp;lt;/pre&amp;gt; &amp;lt;blockquote&amp;gt;+&amp;lt;/blockquote&amp;gt; &amp;lt;ref.name=&amp;quot;+&amp;quot;_/&amp;gt; {\{Reflist}} &amp;lt;references./&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt; &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;!--.+_--&amp;gt; [\[:File:+]] &amp;lt;syntaxhighlight.lang=&amp;quot;php&amp;quot;&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;常用模板&amp;#039;: &amp;#039; {{subst:+}} {{SERVER}} {{localurl:+}} {{fullurl:+}} {{FULLPAGENAME}} {{PAGENAME}} {{DEFAULTSORT:+}} {{#expr:+}} {{#if:+}} {{#ifeq:+}} {{#ifexpr:+}} {{#switch:+}} {{#ifexist:+}} {{#time:Y年Fj日&amp;amp;#32;H:i|+}}&amp;#039;,&lt;br /&gt;
            &amp;#039;常用符号&amp;#039;: &amp;#039;“+” ‘+’ 「+」 『+』 （+） «+» ‹+› „+“ ‚+‘ － —— …… 《+》 〈+〉 【+】 〖+〗 〔+〕 ～ | ¡¿†‡↔→↑←↓↖↗↘↙•▪¶#∞ ‹+› «+» − °℃℉‰ ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩￥¥ ♠♣♥♦ 𝄫♭♮♯𝄪 ©®™ ◌ ☉☾☿♀🜨♂♃♄⛢♆&amp;#039;,&lt;br /&gt;
            &amp;#039;拼音符号&amp;#039;: &amp;#039;拼音: Á á À à Ǎ ǎ Ā ā É é È è Ě ě Ē ē Í í Ì ì Ǐ ǐ Ī ī Ó ó Ò ò Ǒ ǒ Ō ō Ú ú Ù ù Ü ü Ǔ ǔ Ū ū Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ ê ê+̄ ế ê+̌ ề  注音: ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄧ ㄨ ㄩ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ˉ ˊ ˇ ˋ ˙&amp;#039;,&lt;br /&gt;
            &amp;#039;常用序号&amp;#039;: &amp;#039;⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ㉑ ㉒ ㉓ ㉔ ㉕ ㉖ ㉗ ㉘ ㉙ ㉚ ㉛ ㉜ ㉝ ㉞ ㉟ ㊱ ㊲ ㊳ ㊴ ㊵ ㊶ ㊷ ㊸ ㊹ ㊺ ㊻ ㊼ ㊽ ㊾ ㊿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ 〇 ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ 〡 〢 〣 〤 〥 〦 〧 〨 〩 ㋀ ㋁ ㋂ ㋃ ㋄ ㋅ ㋆ ㋇ ㋈ ㋉ ㋊ ㋋ ㏠ ㏡ ㏢ ㏣ ㏤ ㏥ ㏦ ㏧ ㏨ ㏩ ㏪ ㏫ ㏬ ㏭ ㏮ ㏯ ㏰ ㏱ ㏲ ㏳ ㏴ ㏵ ㏶ ㏷ ㏸ ㏹ ㏺ ㏻ ㏼ ㏽ ㏾ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㈰ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㊤ ㊥ ㊦ ㊧ ㊨&amp;#039;,&lt;br /&gt;
            &amp;#039;数学与逻辑&amp;#039;: &amp;#039;＋ − × ÷ ⋅ … ¼ ½ ¾ ¹ ² ³ ° ′ ″ ∗ ∘ ± ∓ ≤ ≥ &amp;lt; &amp;gt; ≮ ≯ ≠ ≡ ∥ ∽ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ∷ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ⌒ ⊙ ∪ ∩ ∑ ∏ ∐ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ‖ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ &amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt; {\{math|+}} {\{mvar|+}} {\{frac|+|}} {\{sfrac|+|}}&amp;#039;,&lt;br /&gt;
            &amp;#039;日语&amp;#039;: &amp;#039;平假名: あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん 片假名: ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヰ ヱ ヲ ン 日语罗马字: Ā ā Ē ē Ī ī Ō ō Ū ū&amp;#039;,&lt;br /&gt;
            &amp;#039;拉丁语&amp;#039;: &amp;#039;A a Á á À à Â â Ä ä Ǎ ǎ Ă ă Ā ā Ã ã Å å Ą ą Æ æ Ǣ ǣ  B b  C c Ć ć Ċ ċ Ĉ ĉ Č č Ç ç  D d Ď ď Đ đ Ḍ ḍ Ð ð  E e É é È è Ė ė Ê ê Ë ë Ě ě Ĕ ĕ Ē ē Ẽ ẽ Ę ę Ẹ ẹ Ɛ ɛ Ǝ ǝ Ə ə  F f  G g Ġ ġ Ĝ ĝ Ğ ğ Ģ ģ  H h Ĥ ĥ Ħ ħ Ḥ ḥ  I i İ ı Í í Ì ì Î î Ï ï Ǐ ǐ Ĭ ĭ Ī ī Ĩ ĩ Į į Ị ị  J j Ĵ ĵ  K k Ķ ķ  L l Ĺ ĺ Ŀ ŀ Ľ ľ Ļ ļ Ł ł Ḷ ḷ Ḹ ḹ  M m Ṃ ṃ  N n Ń ń Ň ň Ñ ñ Ņ ņ Ṇ ṇ Ŋ ŋ  O o Ó ó Ò ò Ô ô Ö ö Ǒ ǒ Ŏ ŏ Ō ō Õ õ Ǫ ǫ Ọ ọ Ő ő Ø ø Œ œ  Ɔ ɔ  P p  Q q  R r Ŕ ŕ Ř ř Ŗ ŗ Ṛ ṛ Ṝ ṝ  S s Ś ś Ŝ ŝ Š š Ş ş Ș ș Ṣ ṣ ß  T t Ť ť Ţ ţ Ț ț Ṭ ṭ Þ þ  U u Ú ú Ù ù Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ũ ũ Ů ů Ų ų Ụ ụ Ű ű Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ  V v  W w Ŵ ŵ  X x  Y y Ý ý Ŷ ŷ Ÿ ÿ Ỹ ỹ Ȳ ȳ  Z z Ź ź Ż ż Ž ž  ß Ð ð Þ þ Ŋ ŋ Ə ə Ɂ ɂ  Ꞌ ꞌ  ʻ  ʼ  ʽ  ꞉ ꞏ&amp;#039;,	&lt;br /&gt;
            &amp;#039;希腊语&amp;#039;: &amp;#039;ΆάΈέΉήΊίΌόΎύΏώ  ΑαΒβΓγΔδ  ΕεΖζΗηΘθ  ΙιΚκΛλΜμ  ΝνΞξΟοΠπ  ΡρΣσςΤτΥυ  ΦφΧχΨψΩω Ϝϝυ̯ι̯  ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ  ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ  ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ  ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷΪϊΐῒῗ  ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ  ῤῬῥ  ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗΫϋΰῢῧ  ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ ᾹᾱᾸᾰῙῑῘῐῩῡῨῠ&amp;#039;,&lt;br /&gt;
            &amp;#039;西里尔语&amp;#039;: &amp;#039;АаБбВвГг  ҐґЃѓДдЂђ  ЕеЁёЄєЖж  ЗзЅѕИиІі  ЇїЙйЈјКк  ЌќЛлЉљМм  НнЊњОоПп  РрСсТтЋћ  УуЎўФфХх  ЦцЧчЏџШш  ЩщЪъЫыЬь  ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ  ҔҕӢӣӮӯҘҙ  ҠҡҤҥҪҫӐӑ  ӒӓӔӕӖӗӰӱ  ӲӳӸӹӀ  ҞҟҦҧҨҩҬҭ  ҴҵҶҷҼҽҾҿ  ӁӂӃӄӇӈӋӌ  ӚӛӜӝӞӟӠӡ  ӤӥӦӧӪӫӴӵ  ́&amp;#039;,&lt;br /&gt;
            &amp;#039;阿拉伯语&amp;#039;: &amp;#039;  音译: ʾ  ā ī ū ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ á ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ&amp;#039;,&lt;br /&gt;
            &amp;#039;国际音标 (英语)&amp;#039;: &amp;#039;ˈ ˌ  ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ  ɑː ɒ æ aɪ aʊ ɛ ɛər+ eɪ ɪ ɪər+ iː ɔː ɔɪ oʊ ʊ ʊər+ uː ʌ ɜːr+  ə ər  ɒ̃ æ̃&amp;#039;,&lt;br /&gt;
            &amp;#039;国际音标&amp;#039;: &amp;#039;辅音: ɱɳɲŋɴ : t̪ d̪ ʈɖɟɡɢʡʔ : ɸβθð  ʃʒʂʐɕʑ  çʝɣχʁ  ħʕʜʢɦɧ : ʋɹɻɥɰʍ : ʙⱱɾɽʀ  ɺ  ɫɬɮɭʎʟ : ɓɗᶑʄɠʛ  ʘǀǃǂǁ  元音: ɪʏɨʉɯʊ : øɘɵɤ  ə ɚ  ɛœɜɝɞʌɔ : æɶɐɑɒ  间隔变音符号: ˈˌːˑʼˀˤᵝᵊᶢˠʰʱʲˡⁿᵑʷᶣ˞‿˕˔  组合变音符号: ̚ ̪ ̺ ̻ ̼ ̬  ̊ ̥ ̞ ̝ ̘ ̙ ̽ ̟ ̠  ̈ ̤ ̹ ̜ ̍ ̩  ̆ ̯  ̃ ̰ ͡ ͜  声调:  ̋  ́  ̄  ̀  ̏  ̌  ̂ ᷄ ᷅ ᷇ ᷆ ᷈ ᷉  ˥˦˧˨˩ꜛꜜ : ↗↘‖  扩展国际音标: ͈ ͉ ͎ ̣ ̫ ͊ ᷽ ͇ : ˭ᵻᵿ&amp;#039;,&lt;br /&gt;
            &amp;#039;古代英语&amp;#039;: &amp;#039;Ā ā Æ æ Ǣ ǣ Ǽ ǽ Ċ ċ Ð ð Ē ē Ġ ġ Ī ī Ō ō Ū ū Ƿ ƿ Ȳ ȳ Þ þ Ȝ ȝ&amp;#039;,&lt;br /&gt;
            &amp;#039;希伯来语&amp;#039;: &amp;#039;אבגדהוזחטיכךלמםנןסעפףצץקרשת  ׳ ״  װױײ&amp;#039;, &lt;br /&gt;
            &amp;#039;意第绪语&amp;#039;: &amp;#039; א אַ אָ ב בֿ ג ד ה ו וּ װ ױ ז זש ח ט י יִ ײ ײַ כ ך כּ ל ל+ מ ם נ ן ס ע ע+ פ פּ פֿ ף צ ץ ק ר ש שׂ תּ ת ׳ ״ ־&amp;#039;,&lt;br /&gt;
            &amp;#039;天成文书(梵文)&amp;#039;: &amp;#039;ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क क़ ख ख़ ग ग़ घ ङ च छ ज ज़ झ ञ ट ठ ड ड़ द ढ ढ़ ण त थ ध न ऩ प फ फ़ ब भ म य य़ र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ॊ ो ौ ् ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॐ ॑ ॒ ॓ ॔ ॠ ॡ ॢ ॣ । ॥ ॰&amp;#039;,&lt;br /&gt;
            &amp;#039;德语&amp;#039;: &amp;#039;Ä ä Ö ö Ü ü ß ẞ&amp;#039;,&lt;br /&gt;
            &amp;#039;法语&amp;#039;: &amp;#039;À à Â â Ç ç É é È è Ê ê Ë ë Î î Ï ï Ô ô Œ œ Ù ù Û û Ü ü Ÿ ÿ&amp;#039;,&lt;br /&gt;
            &amp;#039;冰岛语&amp;#039;: &amp;#039;Á á Ð ð É é Í í Ó ó Ú ú Ý ý Þ þ Æ æ Ö ö&amp;#039;,&lt;br /&gt;
            &amp;#039;波兰语&amp;#039;: &amp;#039;ą Ą ć Ć ę Ę ł Ł ń Ń ó Ó ś Ś ź Ź ż Ż&amp;#039;,&lt;br /&gt;
            &amp;#039;捷克语&amp;#039;: &amp;#039;Á á Č č Ď ď É é Ě ě Í í Ň ň Ó ó Ř ř Š š Ť ť Ú ú Ů ů Ý ý Ž ž&amp;#039;,&lt;br /&gt;
            &amp;#039;世界语&amp;#039;: &amp;#039;Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŭ ŭ&amp;#039;,&lt;br /&gt;
            &amp;#039;越南语&amp;#039;: &amp;#039;À à Ả ả Á á Ạ ạ Ã ã Ă ă Ằ ằ Ẳ ẳ Ẵ ẵ Ắ ắ Ặ ặ Â â Ầ ầ Ẩ ẩ Ẫ ẫ Ấ ấ Ậ ậ Đ đ È è Ẻ ẻ Ẽ ẽ É é Ẹ ẹ Ê ê Ề ề Ể ể Ễ ễ Ế ế Ệ ệ Ỉ ỉ Ĩ ĩ Í í Ị ị Ì ì Ỏ ỏ Ó ó Ọ ọ Ò ò Õ õ Ô ô Ồ ồ Ổ ổ Ỗ ỗ Ố ố Ộ ộ Ơ ơ Ờ ờ Ở ở Ỡ ỡ Ớ ớ Ợ ợ Ù ù Ủ ủ Ũ ũ Ú ú Ụ ụ Ư ư Ừ ừ Ử ử Ữ ữ Ứ ứ Ự ự Ỳ ỳ Ỷ ỷ Ỹ ỹ Ỵ ỵ Ý ý&amp;#039;,&lt;br /&gt;
            &amp;#039;立陶宛语&amp;#039;: &amp;#039;Ą ą Č č Ę ę Ė ė Į į Š š Ų ų Ū ū Ž ž&amp;#039;,&lt;br /&gt;
            &amp;#039;马耳他语&amp;#039;: &amp;#039;Ċ ċ Ġ ġ Ħ ħ Ż ż&amp;#039;,&lt;br /&gt;
            &amp;#039;葡萄牙语&amp;#039;: &amp;#039;Á á À à Â â Ã ã Ç ç É é Ê ê Í í Ó ó Ô ô Õ õ Ú ú Ü ü&amp;#039;,&lt;br /&gt;
            &amp;#039;土耳其语&amp;#039;: &amp;#039;Ç ç Ğ ğ İ ı Ö ö Ş ş Ü ü Â â Î î Û û&amp;#039;,&lt;br /&gt;
            &amp;#039;夏威夷语&amp;#039;: &amp;#039;Ā ā Ē ē Ī ī Ō ō Ū ū ʻ&amp;#039;,&lt;br /&gt;
            &amp;#039;匈牙利语&amp;#039;: &amp;#039;Ő ő Ű ű&amp;#039;,&lt;br /&gt;
            &amp;#039;西班牙语&amp;#039;: &amp;#039;Á á É é Í í Ñ ñ Ó ó Ú ú Ü ü ¡ ¿&amp;#039;,&lt;br /&gt;
            &amp;#039;意大利语&amp;#039;: &amp;#039;Á á À à É é È è Í í Ì ì Ó ó Ò ò Ú ú Ù ù&amp;#039;,&lt;br /&gt;
            &amp;#039;威尔士语&amp;#039;: &amp;#039;Á á À à Â â Ä ä É é È è Ê ê Ë ë Ì ì Î î Ï ï Ó ó Ò ò Ô ô Ö ö Ù ù Û û Ẁ ẁ Ŵ ŵ Ẅ ẅ Ý ý Ỳ ỳ Ŷ ŷ Ÿ ÿ&amp;#039;,&lt;br /&gt;
            &amp;#039;爱沙尼亚语&amp;#039;: &amp;#039;Č č Š š Ž ž Õ õ Ä ä Ö ö Ü ü&amp;#039;,&lt;br /&gt;
           &lt;br /&gt;
            &amp;#039;拉脱维亚语&amp;#039;: &amp;#039;Ā ā Č č Ē ē Ģ ģ Ī ī Ķ ķ Ļ ļ Ņ ņ Š š Ū ū Ž ž&amp;#039;,&lt;br /&gt;
            &amp;#039;罗马尼亚语&amp;#039;: &amp;#039;Ă ă Â â Î î Ş ş Ţ ţ&amp;#039;,&lt;br /&gt;
            &amp;#039;塞尔维亚语&amp;#039;: &amp;#039;А а Б б В в Г г Д д Ђ ђ Е е Ж ж З з И и Ј ј К к Л л Љ љ М м Н н Њ њ О о П п Р р С с Т т Ћ ћ У у Ф ф Х х Ц ц Ч ч Џ џ Ш ш&amp;#039;,&lt;br /&gt;
            &amp;#039;加泰罗尼亚语&amp;#039;: &amp;#039;Á á À à Ç ç É é È è Ë ë Í í Ï ï Ó ó Ò ò Ö ö Ú ú Ù ù&amp;#039;,&lt;br /&gt;
            &amp;#039;斯堪的纳维亚语&amp;#039;: &amp;#039;À à É é Å å Æ æ Ä ä Ø ø Ö ö&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        &lt;br /&gt;
        // 字符分隔符：使用不间断空格（\240 对应 Unicode 中的 nbsp）&lt;br /&gt;
charinsertDivider: &amp;quot;\240&amp;quot;,&lt;br /&gt;
// 用于本地存储的键名：存储字符子集的选择状态&lt;br /&gt;
storageKey: &amp;#039;edittoolscharsubset&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * 创建编辑工具（特殊字符选择面板）&lt;br /&gt;
 * @param {HTMLElement} placeholder - 占位元素，将被工具面板替换&lt;br /&gt;
 */&lt;br /&gt;
createEditTools: function (placeholder) {&lt;br /&gt;
    var sel, id;&lt;br /&gt;
    // 创建工具面板的外层容器&lt;br /&gt;
    var box = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    // 记录上一个选中的字符子集索引和当前选中的索引&lt;br /&gt;
    var prevSubset = 0, curSubset = 0;&lt;br /&gt;
&lt;br /&gt;
    // 设置工具面板的基础属性&lt;br /&gt;
    box.id = &amp;#039;editpage-specialchars&amp;#039;;&lt;br /&gt;
    box.className = &amp;quot;nopopups&amp;quot;;&lt;br /&gt;
    box.title = &amp;#039;点击字符或标签，将其插入到编辑窗口中&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    // 追加用户自定义的字符集（如果存在）&lt;br /&gt;
    if (window.charinsertCustom) {&lt;br /&gt;
        for (id in charinsertCustom) {&lt;br /&gt;
            // 若编辑工具中没有该自定义字符集，则初始化为空字符串&lt;br /&gt;
            if (!editTools.charinsert[id]) {&lt;br /&gt;
                editTools.charinsert[id] = &amp;#039;&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 创建下拉选择框（用于切换不同字符子集）&lt;br /&gt;
    sel = document.createElement(&amp;#039;select&amp;#039;);&lt;br /&gt;
    // 为每个字符子集添加下拉选项&lt;br /&gt;
    for (id in editTools.charinsert) {&lt;br /&gt;
        sel.options[sel.options.length] = new Option(id, id);&lt;br /&gt;
    }&lt;br /&gt;
    // 默认选中第一个选项&lt;br /&gt;
    sel.selectedIndex = 0;&lt;br /&gt;
    // 设置下拉框样式：右侧间距&lt;br /&gt;
    sel.style.marginRight = &amp;#039;.3em&amp;#039;;&lt;br /&gt;
    sel.title = &amp;#039;选择字符子集&amp;#039;;&lt;br /&gt;
    // 绑定下拉框的切换事件（change 和 keyup 事件均触发子集切换）&lt;br /&gt;
    sel.onchange = sel.onkeyup = selectSubset;&lt;br /&gt;
    // 将下拉框添加到工具面板&lt;br /&gt;
    box.appendChild(sel);&lt;br /&gt;
&lt;br /&gt;
    // 创建“召回”开关（用于快速切换回上一个选中的子集，若开启该功能）&lt;br /&gt;
    if (window.editToolsRecall) {&lt;br /&gt;
        var recall = document.createElement(&amp;#039;span&amp;#039;);&lt;br /&gt;
        // 添加召回按钮的图标（上下箭头）&lt;br /&gt;
        recall.appendChild(document.createTextNode(&amp;#039;↕&amp;#039;)); // ↔ 为备选图标&lt;br /&gt;
        // 点击召回按钮时，切换回上一个选中的子集&lt;br /&gt;
        recall.onclick = function () {&lt;br /&gt;
            sel.selectedIndex = prevSubset;&lt;br /&gt;
            selectSubset();&lt;br /&gt;
        };&lt;br /&gt;
        // 设置召回按钮样式：左浮动、右侧间距、鼠标指针样式&lt;br /&gt;
        recall.style.cssFloat = &amp;#039;left&amp;#039;;&lt;br /&gt;
        recall.style.marginRight = &amp;#039;5px&amp;#039;;&lt;br /&gt;
        recall.style.cursor = &amp;#039;pointer&amp;#039;;&lt;br /&gt;
        // 将召回按钮添加到工具面板&lt;br /&gt;
        box.appendChild(recall);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 如果有已选中的字符子集（从存储中读取），则设置下拉框的选中状态&lt;br /&gt;
    if (getSelectedSection()) {&lt;br /&gt;
        sel.selectedIndex = getSelectedSection();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 用工具面板替换占位元素&lt;br /&gt;
    placeholder.parentNode.replaceChild(box, placeholder);&lt;br /&gt;
    // 初始化时执行一次子集切换，显示默认选中的字符子集&lt;br /&gt;
    selectSubset();&lt;br /&gt;
    return;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 切换字符子集的核心函数&lt;br /&gt;
     * 功能：隐藏其他子集、显示/创建当前选中的子集、保存选中状态到本地存储&lt;br /&gt;
     */&lt;br /&gt;
    function selectSubset() {&lt;br /&gt;
        // 记录上一个选中的子集索引（用于召回功能）&lt;br /&gt;
        prevSubset = curSubset;&lt;br /&gt;
        // 更新当前选中的子集索引&lt;br /&gt;
        curSubset = sel.selectedIndex;&lt;br /&gt;
        // 将当前选中的子集索引保存到本地存储（实现状态持久化）&lt;br /&gt;
        saveSelectedSection(curSubset);&lt;br /&gt;
&lt;br /&gt;
        // 隐藏所有已存在的字符子集面板（p 标签）&lt;br /&gt;
        var pp = box.getElementsByTagName(&amp;#039;p&amp;#039;);&lt;br /&gt;
        for (var i = 0; i &amp;lt; pp.length; i++) {&lt;br /&gt;
            pp[i].style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 获取当前选中的子集 ID&lt;br /&gt;
        var id = sel.options[curSubset].value;&lt;br /&gt;
        // 查找当前子集对应的面板（p 标签）&lt;br /&gt;
        var p = document.getElementById(id);&lt;br /&gt;
&lt;br /&gt;
        // 如果面板不存在，则创建新面板&lt;br /&gt;
        if (!p) {&lt;br /&gt;
            p = document.createElement(&amp;#039;p&amp;#039;);&lt;br /&gt;
            p.className = &amp;#039;nowraplinks&amp;#039;; // 防止链接换行的样式类&lt;br /&gt;
            p.id = id;&lt;br /&gt;
&lt;br /&gt;
            // 针对阿拉伯语和希伯来语子集：设置特殊样式（字体大小、文字方向从右到左）&lt;br /&gt;
            if (id == &amp;#039;阿拉伯语&amp;#039; || id == &amp;#039;希伯来语&amp;#039;) {&lt;br /&gt;
                p.style.fontSize = &amp;#039;120%&amp;#039;;&lt;br /&gt;
                p.dir = &amp;#039;rtl&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // 获取当前子集的字符/标签数据&lt;br /&gt;
            var tokens = editTools.charinsert[id];&lt;br /&gt;
            // 如果存在该子集的自定义数据，则追加到原有数据中&lt;br /&gt;
            if (window.charinsertCustom &amp;amp;&amp;amp; charinsertCustom[id]) {&lt;br /&gt;
                if (tokens.length &amp;gt; 0) {&lt;br /&gt;
                    tokens += &amp;#039; &amp;#039;;&lt;br /&gt;
                }&lt;br /&gt;
                tokens += charinsertCustom[id];&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // 创建当前子集的字符/标签元素（调用 createTokens 方法）&lt;br /&gt;
            editTools.createTokens(p, tokens);&lt;br /&gt;
            // 将新面板添加到工具面板&lt;br /&gt;
            box.appendChild(p);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 显示当前选中的子集面板&lt;br /&gt;
        p.style.display = &amp;#039;inline&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * 创建字符/标签元素（将字符子集数据解析为可点击的页面元素）&lt;br /&gt;
 * @param {HTMLElement} paragraph - 承载字符/标签的容器（p 标签）&lt;br /&gt;
 * @param {string} str - 字符子集的原始数据（空格分隔的 token 字符串）&lt;br /&gt;
 */&lt;br /&gt;
createTokens: function (paragraph, str) {&lt;br /&gt;
    // 将原始数据按空格分割为单个 token&lt;br /&gt;
    var tokens = str.split(&amp;#039; &amp;#039;), token, i, n;&lt;br /&gt;
&lt;br /&gt;
    // 遍历每个 token，解析并创建对应的页面元素&lt;br /&gt;
    for (i = 0; i &amp;lt; tokens.length; i++) {&lt;br /&gt;
        token = tokens[i];&lt;br /&gt;
        // 查找 token 中的 &amp;#039;+&amp;#039; 符号（用于识别标签对，如 &amp;lt;tag&amp;gt;+&amp;lt;/tag&amp;gt;）&lt;br /&gt;
        n = token.indexOf(&amp;#039;+&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        // 处理特殊前缀 &amp;#039;␥&amp;#039;（仅在主命名空间下生效，用于过滤特定 token）&lt;br /&gt;
        if (token.charAt(0) === &amp;#039;␥&amp;#039;) {&lt;br /&gt;
            // 如果 token 长度大于 1 且当前是主命名空间（wgNamespaceNumber === 0），则跳过该 token&lt;br /&gt;
            if (token.length &amp;gt; 1 &amp;amp;&amp;amp; mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === 0) {&lt;br /&gt;
                continue;&lt;br /&gt;
            } else {&lt;br /&gt;
                // 否则，移除前缀 &amp;#039;␥&amp;#039;，保留剩余部分作为 token&lt;br /&gt;
                token = token.substring(1);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 根据 token 的不同类型，创建对应的元素&lt;br /&gt;
        if (token === &amp;#039;&amp;#039; || token === &amp;#039;_&amp;#039;) {&lt;br /&gt;
            // 空 token 或 &amp;#039;_&amp;#039;：添加字符分隔符（配合空格）&lt;br /&gt;
            addText(editTools.charinsertDivider + &amp;#039; &amp;#039;);&lt;br /&gt;
        } else if (token === &amp;#039;\n&amp;#039;) {&lt;br /&gt;
            // &amp;#039;\n&amp;#039;：添加换行标签（br）&lt;br /&gt;
            paragraph.appendChild(document.createElement(&amp;#039;br&amp;#039;));&lt;br /&gt;
        } else if (token === &amp;#039;___&amp;#039;) {&lt;br /&gt;
            // &amp;#039;___&amp;#039;：添加水平分隔线（hr）&lt;br /&gt;
            paragraph.appendChild(document.createElement(&amp;#039;hr&amp;#039;));&lt;br /&gt;
        } else if (token.charAt(token.length - 1) === &amp;#039;:&amp;#039;) {&lt;br /&gt;
            // 以 &amp;#039;:&amp;#039; 结尾的 token：创建粗体文本（仅用于显示，不可点击插入）&lt;br /&gt;
            addBold(token);&lt;br /&gt;
        } else if (n === 0) {&lt;br /&gt;
            // 以 &amp;#039;+&amp;#039; 开头的 token：解析为 &amp;lt;tag&amp;gt;+&amp;lt;/tag&amp;gt; 格式（如 +b 对应 &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt;）&lt;br /&gt;
            addLink(token.substring(1), &amp;#039;&amp;lt;/&amp;#039; + token.substring(2), token.substring(1));&lt;br /&gt;
        } else if (n &amp;gt; 0) {&lt;br /&gt;
            // 包含 &amp;#039;+&amp;#039; 且不在开头的 token：解析为标签对（如 b+ 对应 &amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;）&lt;br /&gt;
            addLink(token.substring(0, n), token.substring(n + 1));&lt;br /&gt;
        } else {&lt;br /&gt;
            // 普通 token：判断是单个字符还是多个字符的组合&lt;br /&gt;
            var chars = Array.from(token);&lt;br /&gt;
            // 如果是长度大于 2 的非 ASCII 字符（编码 &amp;gt; 127），则拆分为单个字符分别创建元素&lt;br /&gt;
            if (chars.length &amp;gt; 2 &amp;amp;&amp;amp; token.charCodeAt(0) &amp;gt; 127) {&lt;br /&gt;
                for (var j = 0; j &amp;lt; chars.length; j++) {&lt;br /&gt;
                    addLink(chars[j], &amp;#039;&amp;#039;);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                // 其他情况：直接将 token 作为可插入元素&lt;br /&gt;
                addLink(token, &amp;#039;&amp;#039;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 创建可点击的链接元素（用于插入字符或标签）&lt;br /&gt;
     * @param {string} tagOpen - 起始标签/字符（如 &amp;#039;&amp;lt;b&amp;gt;&amp;#039; 或 &amp;#039;α&amp;#039;）&lt;br /&gt;
     * @param {string} tagClose - 结束标签（如 &amp;#039;&amp;lt;/b&amp;gt;&amp;#039;，字符类型为空）&lt;br /&gt;
     * @param {string} name - 链接显示的文本（默认使用 tagOpen + tagClose）&lt;br /&gt;
     */&lt;br /&gt;
    function addLink(tagOpen, tagClose, name) {&lt;br /&gt;
        var handler;&lt;br /&gt;
        // 查找 tagOpen 中的特殊字符 &amp;#039;\x10&amp;#039;（用于识别自定义点击事件）&lt;br /&gt;
        var dle = tagOpen.indexOf(&amp;#039;\x10&amp;#039;);&lt;br /&gt;
        var a = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        // 如果存在 &amp;#039;\x10&amp;#039;，则解析为自定义事件（格式：前缀\x10对象.方法）&lt;br /&gt;
        if (dle &amp;gt; 0) {&lt;br /&gt;
            var path = tagOpen.substring(dle + 1).split(&amp;#039;.&amp;#039;);&lt;br /&gt;
            tagOpen = tagOpen.substring(0, dle);&lt;br /&gt;
            // 从 window 中获取对应的方法（如 path 为 [&amp;#039;foo&amp;#039;,&amp;#039;bar&amp;#039;] 则对应 window.foo.bar）&lt;br /&gt;
            handler = window;&lt;br /&gt;
            for (var i = 0; i &amp;lt; path.length; i++) {&lt;br /&gt;
                handler = handler[path[i]];&lt;br /&gt;
            }&lt;br /&gt;
            // 为链接绑定自定义点击事件&lt;br /&gt;
            $(a).on(&amp;#039;click&amp;#039;, handler);&lt;br /&gt;
        } else {&lt;br /&gt;
            // 普通情况：处理标签中的特殊字符（点号替换为空格，下划线替换为空格）&lt;br /&gt;
            tagOpen = tagOpen.replace(/\./g, &amp;#039; &amp;#039;);&lt;br /&gt;
            tagClose = tagClose ? tagClose.replace(/_/g, &amp;#039; &amp;#039;) : &amp;#039;&amp;#039;;&lt;br /&gt;
            // 为链接绑定默认的插入标签事件（传递标签前后缀数据）&lt;br /&gt;
            $(a).on(&amp;#039;click&amp;#039;, {&lt;br /&gt;
                tagOpen: tagOpen,&lt;br /&gt;
                sampleText: &amp;#039;&amp;#039;,&lt;br /&gt;
                tagClose: tagClose&lt;br /&gt;
            }, insertTags);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 设置链接显示的文本（默认使用标签组合，移除换行符）&lt;br /&gt;
        name = name || tagOpen + tagClose;&lt;br /&gt;
        name = name.replace(/\\n/g, &amp;#039;&amp;#039;);&lt;br /&gt;
        a.appendChild(document.createTextNode(name));&lt;br /&gt;
        // 清除链接的默认跳转行为（href 设为空）&lt;br /&gt;
        a.href = &amp;#039;&amp;#039;;&lt;br /&gt;
        // 将链接添加到面板容器&lt;br /&gt;
        paragraph.appendChild(a);&lt;br /&gt;
        // 在链接后添加空格（用于分隔元素）&lt;br /&gt;
        addText(&amp;#039; &amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 创建粗体文本元素（用于显示分类标题，不可点击）&lt;br /&gt;
     * @param {string} text - 粗体文本内容（将下划线替换为空格）&lt;br /&gt;
     */&lt;br /&gt;
    function addBold(text) {&lt;br /&gt;
        var b = document.createElement(&amp;#039;b&amp;#039;);&lt;br /&gt;
        b.appendChild(document.createTextNode(text.replace(/_/g, &amp;#039; &amp;#039;)));&lt;br /&gt;
        paragraph.appendChild(b);&lt;br /&gt;
        // 在粗体文本后添加空格（用于分隔元素）&lt;br /&gt;
        addText(&amp;#039; &amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 向容器中添加普通文本（用于分隔符或空格）&lt;br /&gt;
     * @param {string} txt - 要添加的文本内容&lt;br /&gt;
     */&lt;br /&gt;
    function addText(txt) {&lt;br /&gt;
        paragraph.appendChild(document.createTextNode(txt));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 插入标签/字符到编辑框的核心函数&lt;br /&gt;
     * @param {Event} e - 点击事件对象（包含标签前后缀数据）&lt;br /&gt;
     */&lt;br /&gt;
    function insertTags(e) {&lt;br /&gt;
        // 阻止链接的默认跳转行为&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        // 检查当前是否有聚焦的可编辑元素（且非只读）&lt;br /&gt;
        if ($currentFocused &amp;amp;&amp;amp; $currentFocused.length &amp;amp;&amp;amp; !$currentFocused.prop(&amp;#039;readonly&amp;#039;)) {&lt;br /&gt;
            // 使用 textSelection 插件，将标签插入到编辑框（包裹选中内容或直接插入）&lt;br /&gt;
            $currentFocused.textSelection(&lt;br /&gt;
                &amp;#039;encapsulateSelection&amp;#039;, {&lt;br /&gt;
                    pre: e.data.tagOpen,    // 插入到选中内容前的标签/字符&lt;br /&gt;
                    peri: e.data.sampleText,// 示例文本（此处为空）&lt;br /&gt;
                    post: e.data.tagClose   // 插入到选中内容后的标签&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;
 * 功能：创建工具面板容器、绑定焦点事件、调用 createEditTools 生成面板&lt;br /&gt;
 */&lt;br /&gt;
setup: function () {&lt;br /&gt;
    var placeholder;&lt;br /&gt;
&lt;br /&gt;
    // 查找已存在的工具面板容器（若有则复用）&lt;br /&gt;
    if ($(&amp;#039;#editpage-specialchars&amp;#039;).length) {&lt;br /&gt;
        placeholder = $(&amp;#039;#editpage-specialchars&amp;#039;)[0];&lt;br /&gt;
    } else {&lt;br /&gt;
        // 若不存在，则创建新的占位容器，并添加到编辑工具区域（.mw-editTools）&lt;br /&gt;
        placeholder = $(&amp;#039;&amp;lt;div id=&amp;quot;editpage-specialchars&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;#039;).prependTo(&amp;#039;.mw-editTools&amp;#039;)[0];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 如果占位容器不存在，则终止初始化&lt;br /&gt;
    if (!placeholder) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 如果没有设置“不移动”标记，则将占位容器移动到编辑选项（.editOptions）之前&lt;br /&gt;
    if (!window.charinsertDontMove) {&lt;br /&gt;
        $(&amp;#039;.editOptions&amp;#039;).before(placeholder);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 初始化当前聚焦的编辑框（默认是主编辑框 #wpTextbox1）&lt;br /&gt;
    $currentFocused = $(&amp;#039;#wpTextbox1&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    // 为动态创建的编辑框（如 textarea、input:text、CodeMirror）绑定焦点事件&lt;br /&gt;
    $(document).on(&amp;#039;focus&amp;#039;, &amp;#039;textarea, input:text, .CodeMirror&amp;#039;, function () {&lt;br /&gt;
        if ($(this).is(&amp;#039;.CodeMirror&amp;#039;)) {&lt;br /&gt;
            // CodeMirror 编辑器：其文本操作依赖主编辑框 #wpTextbox1，故聚焦主编辑框&lt;br /&gt;
            $currentFocused = $(&amp;#039;#wpTextbox1&amp;#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
            // 普通编辑框：直接将当前聚焦元素设为目标&lt;br /&gt;
            $currentFocused = $(this);&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // 调用 createEditTools 生成工具面板（传入占位容器）&lt;br /&gt;
    editTools.createEditTools(placeholder);&lt;br /&gt;
&lt;br /&gt;
    // 定义全局更新函数（用于动态更新工具面板）&lt;br /&gt;
    window.updateEditTools = function () {&lt;br /&gt;
        editTools.createEditTools($(&amp;#039;#editpage-specialchars&amp;#039;)[0]);&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
}; // 结束 editTools 对象定义&lt;br /&gt;
&lt;br /&gt;
// 调用初始化函数，启动编辑工具&lt;br /&gt;
editTools.setup();&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
</feed>