2 次代碼提交 191459f9f9 ... fe7618b9a3

作者 SHA1 備註 提交日期
  dzp fe7618b9a3 feat(pkuxkx): 房间名解析支持 markdown 标记 1 月之前
  dzp 38fee5d64b feat(xtintin): 增加三个 API slist.Translate/slist.DictTranslate/slist.Drop 1 月之前
共有 2 個文件被更改,包括 66 次插入1 次删除
  1. 1 1
      mud/pkuxkx/plugins/basic/map/room.extra.tin
  2. 65 0
      plugins/lib/xtintin/slist.tin

+ 1 - 1
mud/pkuxkx/plugins/basic/map/room.extra.tin

@@ -25,7 +25,7 @@ VAR {可能的房间小地图} miniMapBuffer {};
     #local save     {?:[ ]+\[(存盘点)\]|};
     #local store    {?:[ ]+\[(玩家储物柜)\]|};
     #local group    {?:[ ]+\[(\S+)\]|};
-    #local mark     {?:[ ]+((?:㊣|★|☆|\s)*)|};
+    #local mark     {?:[ ]+((?:㊣|★|☆|(?:.*? (?:①|②|③|④|⑤|⑥|⑦|⑧|⑨|⑩))|\s)*)|};
     #local undef    {?:[ ]+\[未定义\]|};
 
     #class map.Room.Watch open;

+ 65 - 0
plugins/lib/xtintin/slist.tin

@@ -153,6 +153,71 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
     #return {@slist.FromList{$l}};
 };
 
+///=== {
+// #@ slist.DictTranslate <字符串列表> <字典>
+//    通过字典对字符串列表进行翻译。
+//    返回新的字符串列表。
+// };
+#func {slist.DictTranslate} {
+    #local slist {%1};
+    #local dict  {%2};
+
+    #local l {};
+
+    #local elem {};
+    #foreach {$slist} {elem} {
+        #if { "$elem" !== "" } {
+            #if { &dict[$elem] > 0 } {
+                #local new {$dict[$elem]};
+                #if { "$new" === "" } {
+                    #continue;
+                };
+                #else {
+                    #list l add {{$new}};
+                };
+            };
+        };
+    };
+
+    #list l collapse {;};
+
+    #return {$l};
+};
+
+///=== {
+// #@ slist.Translate <字符串列表> <旧元素列表> <新元素列表>
+//    对字符串列表进行翻译。将字符串列表中的旧元素用相对应的新元素替代。
+//    返回新的字符串列表。
+// };
+#func {slist.Translate} {
+    #local slist    {%1};
+    #local keys     {%2};
+    #local values   {%3};
+
+    #list values create {$values};
+
+    #local dict {};
+
+    #local idx {0};
+    #local key {};
+    #foreach {$keys} {key} {
+        #math idx {$idx + 1};
+        #local value {$values[+$idx]};
+        #local dict[$key] {$value};
+    };
+
+    #return {@slist.DictTranslate{{$slist};{$dict}}};
+};
+
+///=== {
+// #@ slist.Drop <字符串列表> <元素列表>
+//    从字符串列表中删除在元素列表中出现过的元素。
+//    返回新的字符串列表。
+// };
+#func {slist.Drop} {
+    #return {@slist.Translate{{%1};{%2}}};
+};
+
 ///=== {
 // #@ slist.IndexOf <字符串列表> <字符串>
 //    从字符串列表中查找某个字符串,并返回其位置(从 1 开始计),0 表示没找到。