版本更新,修复部分文本包裹器处理过程中可能遇到的下标错误的问题。

添加一些列表用法,如迭代直到……和直到……迭代
This commit is contained in:
2025-08-25 14:55:35 +08:00
parent 4c3f840141
commit 7ad6555795
7 changed files with 289 additions and 25 deletions
+14 -2
View File
@@ -1,6 +1,18 @@
# Changelog
## [Unrelase]
## [UnRealse]
修复富文本包裹器中SpriteBlock在处理颜色元素时选择到错误下标的问题。
增加了一些windows窗口命令。
超链接管理器增加了在启动时自动修复射线检测的问题,详见XchartsUIForXeric #1。
列表库添加
* 迭代直到[真,假,相等,不等]
* 迭代重复
列表库差异比较库添加了
* 通过数量比较(也支持替换)
## [0.5.1]
修复反射库钟使用方法类型检查时,产生数组越界,或空引用问题,这会在部分匿名转换过程中发生。
修复使用匿名对象赋值时,如果类型不匹配会报错的问题,现在改为了产生警告。
@@ -11,9 +23,9 @@
## [0.5.0] - 2025-07-04
中间那个版本感觉不吉利,所以没有,并不是缺少了这部分版本。我是坚定的唯物主义者这点并没有改变,我甚至在小区里买过44号车位(它确实要便宜一些),虽然后面长租给别人了。
调整了插件编译结构
插件的部署地址换到了自己的[服务器](https://xeric.zicp.fun/).
中间那个版本感觉不吉利,所以没有,并不是缺少了这部分版本。
本体切换使用il2cpp版本的json dll,后面会将这部分内容放在dll外面,避免对某一特定版本dll依赖。
添加了一个tmp超链接处理功能。
修复超级单例中对示例获取逻辑。
Binary file not shown.
@@ -43,6 +43,13 @@ namespace Deconstruction.UI.TmpText
/// </summary>
private Dictionary<string, Action> _linkCallbacks = new Dictionary<string, Action>();
#if UNITY_EDITOR
protected void OnValidate()
{
canvas = GetComponentInParent<Canvas>();
}
#endif
protected void Awake()
{
if (canvas == null)
+21 -5
View File
@@ -5,6 +5,7 @@ using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
using XericLibrary.Runtime.MacroLibrary;
namespace Deconstruction.UI.TmpText
@@ -17,6 +18,8 @@ namespace Deconstruction.UI.TmpText
{
private TextMeshProUGUI _tmpText;
public bool autoFixRayCastTargetState = true;
#if ODIN_INSPECTOR
[LabelText("超链接管理器*")]
#endif
@@ -56,17 +59,30 @@ namespace Deconstruction.UI.TmpText
yield return link;
}
}
private void Awake()
#if UNITY_EDITOR
protected void OnValidate()
{
_tmpText = GetComponent<TextMeshProUGUI>();
}
#endif
protected virtual void Awake()
{
if (_tmpText == null)
_tmpText = GetComponent<TextMeshProUGUI>();
if (manager == null)
transform.GetParents().Startup(transform).GetComponent(out manager);
if (manager == null)
throw new Exception("TMP文本超链接集成捕获组件必须放在具有管理器的父级下");
}
protected virtual void OnEnable()
{
if (autoFixRayCastTargetState)
_tmpText.raycastTarget = true;
}
public void OnPointerClick(PointerEventData eventData)
{
ClickPoint(eventData.position);
@@ -87,7 +103,7 @@ namespace Deconstruction.UI.TmpText
}
catch (Exception e)
{
Debug.LogError($"点击 {_tmpText.text.LimitStringLength(32)} 的超链接 {linkID} 时出错:\n{e.Message}\n{e.Data}", this);
Debug.LogError($"超链接目标事件存在错误 {_tmpText.text.LimitStringLength(32)} :\n{e.Message}\n{e.Data}", this);
}
}
}
Binary file not shown.
+246 -17
View File
@@ -934,6 +934,11 @@
游戏方法调用标记类型
</summary>
</member>
<member name="T:XericLibrary.Runtime.CustomEditor.MacroMonoAttribute.AutoFindComponent">
<summary>
自动查找组件
</summary>
</member>
<member name="T:XericLibrary.Runtime.CustomEditor.MenuAttribute.CusMeAttribute">
<summary>
自定义菜单特性。
@@ -3491,6 +3496,24 @@
<param name="values">当目标枚举不实现Flags时,需要进行完全匹配</param>
<returns>返回是否存在至少有一个有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum[])">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumGreater1(System.Enum)">
<summary>
枚举1有效
@@ -3539,18 +3562,6 @@
</summary>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.EnumLess(System.Enum,System.Enum)">
<summary>
枚举小于0,或者说不存在有效的枚举项目
</summary>
<returns>返回是否不存在有效的枚举项目</returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.FisherYatesShuffle(System.Int32,System.Int32)">
<summary>
Fisher-Yates洗牌算法,时间复杂度为O(n*n),空间复杂度为O(n);
@@ -3662,6 +3673,113 @@
<param name="interpolationSyntax">内插语法,表示此foreachdo不会作为执行器运行,而是作为其中一步执行</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Repeat``1(System.Collections.Generic.IEnumerable{``0},System.Int32)">
<summary>
重复枚举器中的每个对象
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="repeatEachCount"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Repeat``1(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,System.Int32}})">
<summary>
重复枚举器中的每个对象
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="repeatEachCount"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilTrue``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
迭代直到真状态
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilFalse``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
迭代直到假状态
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
迭代直到相等
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="target"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilNotEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
迭代直到不相等
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="target"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterTure``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
从首个条件为真的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterFalse``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean},System.Boolean)">
<summary>
从首个条件为假的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
从首个相等的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.AfterNotEqules``1(System.Collections.Generic.IEnumerable{``0},``0,System.Boolean)">
<summary>
从首个不等的成员开始迭代
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="getState"></param>
<param name="includeCulprit">输出迭代成员包括使条件翻转的成员</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.UntilEndOfTime``1(System.Collections.Generic.IEnumerable{``0},System.Int32)">
<summary>
迭代直到计数超出
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
<param name="count"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.IndexOf``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean})">
<summary>
在枚举器中定位到首个当equals结果为真的项目索引
@@ -3767,7 +3885,7 @@
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.Merge``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``0,``0})">
<summary>
将枚举器成员合并为一个结果
将枚举器成员合并为一个结果(比如用这个方法计算加法?)
</summary>
<typeparam name="T"></typeparam>
<param name="source"></param>
@@ -4128,6 +4246,15 @@
<param name="target"></param>
<param name="index"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.SetAtIndex``1(System.Collections.Generic.IList{``0},``0,System.Int32)">
<summary>
在列表的指定位置添加目标,如果中间为空,则会填充空
</summary>
<typeparam name="T"></typeparam>
<param name="targetList"></param>
<param name="target"></param>
<param name="index"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.TryDoAtIndex``1(System.Collections.Generic.IList{``0},System.Int32,System.Action{``0})">
<summary>
尝试给定索引处做些什么,如果索引或项目无效,则不执行(这是获取语句,空项目也不会执行)
@@ -4186,6 +4313,17 @@
<param name="addition">添加成员(从源数组末尾开始添加)</param>
<param name="replaceAt">替换成员(如果为空,则不会检查数组成员差异)</param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.DiscrepancyOrder``1(System.Collections.Generic.IList{``0},System.Int32,System.Action{System.Int32},System.Action{System.Int32},System.Action{System.Int32})">
<summary>
比较这个列表的数量与目标数量的差异,
</summary>
<typeparam name="T"></typeparam>
<param name="origin"></param>
<param name="count"></param>
<param name="removeAt"></param>
<param name="addition"></param>
<param name="replaceAt"></param>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.TryGetAtIndex``1(System.Collections.Generic.IList{``0},System.Int32,``0@)">
<summary>
尝试从列表中读取,如果项目为空,则先填充空,然后再获取
@@ -4453,6 +4591,15 @@
<param name="seed"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.RandomBoolean(System.Int32,System.Single,System.Int32)">
<summary>
获取在概率分布中的随机布尔值(如果需要非绝对概率随机,请移步洗牌算法)
</summary>
<param name="probability">概率基数</param>
<param name="percent">百分比(≤1)</param>
<param name="seed"></param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.GetNextRand(System.Random,System.Int32,System.Int32)">
<summary>
统一的单维随机数获取
@@ -5612,12 +5759,12 @@
值
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.min">
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.minValid">
<summary>
最小值
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.max">
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.maxValid">
<summary>
最大值
</summary>
@@ -5642,6 +5789,18 @@
无效时展示
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.NumberValueBlock.#ctor(System.Double,System.Double,System.Double,System.String,System.String,System.Boolean,System.String)">
<summary>
值包裹器
</summary>
<param name="defaultValue"></param>
<param name="minValid"></param>
<param name="maxValid"></param>
<param name="name"></param>
<param name="format"></param>
<param name="enableInvalidValue"></param>
<param name="invalidString"></param>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.ValueExpressionBlock">
<summary>
值表达式包裹器(没有子项,不计数)
@@ -5699,6 +5858,19 @@
<param name="mode"></param>
<param name="expression"></param>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.ConditionBlock">
<summary>
条件包裹器
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.ConditionBlock.SetParamter(System.Int32,System.Object[])">
<summary>
设置参数
</summary>
<param name="startIndex">参数起点索引</param>
<param name="parameters">所有参数</param>
<returns>返回使用了多少参数</returns>
</member>
<member name="T:XericLibrary.Runtime.MacroLibrary.MacroMath.AlignBlock">
<summary>
对齐
@@ -6158,6 +6330,53 @@
<param name="dis">当前返回的最优单词的编辑距离</param>
<returns>当前最优的单词</returns>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.Contain">
<summary>
右值为左值的一部分时为包含
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.Belong">
<summary>
左值为右值的一部分时为属于
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.ImpactSpace">
<summary>
文本比较时考虑空格
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.ExactlyEquivalen">
<summary>
两者完全相等
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.EquivalentButIgnoreSpace">
<summary>
忽略空格
</summary>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode.EquivalentButIgnoreCase">
<summary>
忽略空格,大小写
</summary>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.IsEquals(System.String,System.String,XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode)">
<summary>
判断两个文本是否相等
</summary>
<param name="lhs"></param>
<param name="rhs"></param>
<param name="mode">判断模式</param>
<returns></returns>
</member>
<member name="M:XericLibrary.Runtime.MacroLibrary.MacroMath.ProcessString(System.String,XericLibrary.Runtime.MacroLibrary.MacroMath.EqualsMode)">
<summary>
预处理字符串(应用所有模式规则)
</summary>
<param name="str"></param>
<param name="mode"></param>
<returns></returns>
</member>
<member name="F:XericLibrary.Runtime.MacroLibrary.MacroMath.DayPerYear">
<summary>
一年有多少天
@@ -12567,8 +12786,8 @@
<summary>
可以直接获取一些没有空的类的空对象
<code>
与直接使用default不同的是,这里会尝试创建一个空示例,这对于使用
与直接使用default不同的是,这里会尝试创建一个空示例
(可能存在性能或aot问题,可能还是建议在各个类自身里编写空对象。)
</code>
</summary>
<typeparam name="T"></typeparam>
@@ -12740,6 +12959,11 @@
当前时刻
</summary>
</member>
<member name="F:XericLibrary.Runtime.Type.Base.TimingStamp.Today">
<summary>
当天的起始时刻
</summary>
</member>
<member name="F:XericLibrary.Runtime.Type.Base.TimingStamp.tickTime">
<summary>
时间节点
@@ -14128,6 +14352,11 @@
先导事件(如果MONO不允许启动Awake,先导事件仍会触发)
</summary>
</member>
<member name="T:XericLibrary.Runtime.Type.Weakly.MacroMonoBehaviour">
<summary>
原生支持各种宏用法的mono脚本
</summary>
</member>
<member name="T:XericLibrary.Runtime.Type.Weakly.XericSeriousMonoBehaviour">
<summary>
严格模式脚本
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "com.lrss3.deconstruction",
"displayName": "Xeric Library",
"version": "0.5.0",
"version": "0.5.1",
"unity": "2021.3",
"description": "\u8fd9\u662f\u4e00\u4e2a\u89c4\u8303\u57fa\u7840\u7528\u4f8b\u7684\u6269\u5c55\u5e93, \u4e3b\u8981\u63d0\u4f9b\u4ee5\u4e0b\u529f\u80fd\r\n\r\n\u25aa\u7f16\u7a0b\u652f\u6301\uff1a\u51fd\u6570\u5e73\u6ed1\u3001 \u591a\u9879\u5f0f\u8ba1\u7b97\u3001 \u6743\u91cd\u62df\u5408\u3001 \u8fc7\u7a0b\u5206\u7ea7\u3001 \u5de5\u4e1a\u63a7\u5236\u3001 \u66f2\u7ebf\u7ed8\u5236\u3001 \u8def\u5f84\u8bbe\u7f6e\u3001 \u5bf9\u8c61\u63a7\u5236\u3001 \u8fed\u4ee3\u6269\u5c55\u3001 \u7a7a\u95f4\u53d8\u6362\u3001 \u72ec\u7279\u7ed3\u6784\u3001 \u6587\u672c\u683c\u5f0f\u3001 \u7c7b\u578b\u8f6c\u6362\u3001 \u673a\u5668\u7f16\u7801\u3001 \u5f00\u53d1\u8c03\u8bd5\u3001 \u52a8\u6001\u751f\u6210\u3001 \u51e0\u4f55\u521b\u5efa\u3001 \u5feb\u901f\u6c60\u5316\u3001 \u5bfc\u822a\u5bfb\u8def\u3001 \u9694\u79bb\u63a7\u5236\u3001 \u9694\u79bb\u8f93\u5165\u3001 \u8bed\u4e49\u5316\u59d4\u6258\u3001 \u53cd\u5c04\u8d85\u9a70\u3001 \u6570\u5b66\u5e38\u6570\u3001 \u5355\u4f4d\u6362\u7b97\u3001 \u6392\u5e8f\u7b97\u6cd5\u3001 \u7a0b\u5e8f\u8c03\u7528\u3001 \u7f51\u7edc\u8fde\u63a5\u7b49\u3002\r\n\u8fd8\u6709\u591a\u79cd\u7279\u6b8a\u7c7b\u578b, \u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\u591a\u7ef4\u5e03\u5c14\u3001 \u6837\u6761\u66f2\u7ebf\u3001 \u8d85\u7ea7\u5355\u4f8b\u3001 \u591a\u4f8b\u7cfb\u7edf\u3001 \u90bb\u5c45\u7f51\u7edc\u3001 \u56db\u53c9\u6811\u3001 \u5b57\u5178\u6811\u3001 \u8f6f\u5f15\u7528\u5c01\u88c5\u5668\u7b49\u3002\r\n\r\n\u25aa\u5e38\u7528\u811a\u672c\uff1a\u6e38\u620f\u4ea4\u4e92\u3001 \u754c\u9762\u9002\u914d\u3001 \u5f31\u6269\u5c55\u3001 \u7ed8\u5236\u5de5\u5382\u3001 SQL\u6269\u5c55\u3002\r\n\r\n\u25aa\u5f53\u524d\u63d2\u4ef6\u63d0\u4f9b\u7f16\u8f91\u5668\u529f\u80fd\uff1aDeepseek AI\u5bf9\u8bdd\u3002\r\n\u66f4\u591a\u7f16\u8f91\u5668\u529f\u80fd\u53c2\u8003\uff1a\r\n\u25aa\u5b89\u88c5Xeric Blueprint Graph\u4ee5\u83b7\u53d6Unity\u4e0a\u84dd\u56fe\u8282\u70b9\u529f\u80fd, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25aa\u5b89\u88c5Xeric UI Graph\u4ee5\u83b7\u53d6\u84dd\u56fe\u5316UI\u751f\u6210\u529f\u80fd, \u4f7f\u7528\u84dd\u56fe\u903b\u8f91\u63a7\u5236UI\u4ea4\u4e92, \u751f\u6210\u903b\u8f91, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n\u25aa\u5b89\u88c5Digital Twin Tool\u4ee5\u83b7\u53d6\u5e38\u7528\u8c03\u8bd5\u5de5\u5177\u96c6\u3002\r\n\u25aa\u5b89\u88c5Nexus Frame Flow\u4ee5\u83b7\u53d6\u5de5\u4f5c\u67b6\u6784\u5904\u7406\u529f\u80fd\u3002\r\n\u25aa\u5b89\u88c5Xeric Editor\u8f85\u52a9\u5f15\u64ce\u5927\u7eb2\u7f8e\u5316\u7ec4\u4ef6\u3001 \u8d44\u6e90\u5783\u573e\u5904\u7406\u7ec4\u4ef6\u3001 \u8d44\u6e90\u7f13\u5b58\u7ec4\u4ef6\u3001 \u5feb\u901f\u622a\u56fe\u529f\u80fd, \u4ee5\u53ca\u66f4\u591a\u5feb\u6377\u952e\u529f\u80fd\r\n\r\n\u9700\u8981\u6ce8\u610f\uff1a\u63d2\u4ef6\u5185\u5982\u679c\u6d89\u53ca\u591a\u5e73\u53f0\u5207\u6362, \u53ef\u80fd\u4f1a\u63d0\u4f9b\u591a\u79cd\u81ea\u52a8\u6216\u624b\u52a8\u7684\u5207\u6362\u65b9\u6848, \u6216\u9ed8\u8ba4\u4f7f\u7528windows\u5e73\u53f0, \u8bf7\u6ce8\u610f\u8fa8\u522b\u3002\r\n\r\n\u5efa\u8bae\u6dfb\u52a0ODin\u63d2\u4ef6, \u4fbf\u4e8e\u5448\u73b0\u66f4\u591a\u754c\u9762\u529f\u80fd\u3002\r\n\r\n\u66f4\u591a\u8be6\u7ec6\u5185\u5bb9\u8bf4\u660e\u8bf7\u7ffb\u9605README\u6587\u6863\u3002\r\n\u5982\u679c\u53d1\u73b0\u4efb\u4f55\u95ee\u9898, \u5305\u62ec\u7248\u672c\u517c\u5bb9\u6027, \u8ba1\u7b97\u9519\u8bef, \u8c03\u7528\u9519\u8bef, \u4f7f\u7528\u95ee\u9898, \u90fd\u53ef\u4ee5\u901a\u8fc7\u53d1\u5e03\u9875Issues\u6216\u5176\u4ed6\u8054\u7cfb\u65b9\u5f0f\u627e\u6211\u83b7\u5f97\u5e2e\u52a9\u3002",
"keywords": [