Преглед изворни кода

feat(xtintin): 增加 str.Color,用来提取字符串中的颜色,方便做颜色比较

dzp пре 1 година
родитељ
комит
efd17e5fe2
1 измењених фајлова са 25 додато и 0 уклоњено
  1. 25 0
      plugins/lib/xtintin/string.tin

+ 25 - 0
plugins/lib/xtintin/string.tin

@@ -56,6 +56,9 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 //
 // #@ str.Plain <字符串>
 //    去除字符串中的颜色代码和 ANSI 控制字符。
+//
+// #@ str.Color <字符串>
+//    仅保留字符串中的颜色代码,去掉其余成分,方便比较颜色。
 // };
 #func {str.Trim}    {#format result {%p} {%0}};
 #func {trim}        {#return {@str.Trim{%0}}};
@@ -65,6 +68,28 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 
 #func {str.Plain}   {#format result {%P} {%0}};
 
+#func {str.Color} {
+    #local str      {};
+    #local state    {START};
+    #local ch       {};
+
+    #parse {%0} {ch} {
+        #switch {"$state/$ch"} {
+            #case {"START/\e"}  {#local state {ESCAPE}};
+            #case {"START/%*"}  {#0};
+            #case {"ESCAPE/["}  {#local state {INNER}};
+            #case {"ESCAPE/%*"} {#local state {OUTER}};
+            #case {"INNER/m"}   {#cat str {;}; #local state {OUTER}};
+            #case {"INNER/%*"}  {#cat str {$ch}};
+            #case {"OUTER/\e"}  {#local state {ESCAPE}};
+        };
+    };
+
+    #replace {str} {;$} {};
+
+    #return {$str};
+};
+
 ///=== {
 // #@ str.Replace <字符串> <正则表达式> <替换表达式>
 //    在给定字符串中执行替换,凡是被正则表达式匹配的东西都会用替换表达式进行替换。