Переглянути джерело

feat(xtintin): 新增 buffer 处理函数

dzp 2 роки тому
батько
коміт
7056516f68
2 змінених файлів з 108 додано та 0 видалено
  1. 1 0
      plugins/lib/xtintin/__init__.tin
  2. 107 0
      plugins/lib/xtintin/buffer.tin

+ 1 - 0
plugins/lib/xtintin/__init__.tin

@@ -23,6 +23,7 @@ load-file plugins/lib/xtintin/fp.tin;
 load-file plugins/lib/xtintin/default.tin;
 load-file plugins/lib/xtintin/cmds.tin;
 load-file plugins/lib/xtintin/mslp.tin;
+load-file plugins/lib/xtintin/buffer.tin;
 
 ///=== {
 ///// 以上文档采用 PaoTin++ 的文档化注释工具生成。

+ 107 - 0
plugins/lib/xtintin/buffer.tin

@@ -0,0 +1,107 @@
+#nop vim: set filetype=tt:;
+
+/*
+本文件属于 PaoTin++ 的一部分。
+PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+*/
+
+#nop 本文件是 xtintin 的一部分,实现了一些 buffer 工具函数。;
+
+///=== {
+///// buffer 操作函数
+/////
+// ## buffer.RawLine
+//    打印当前触发行的原始文本,而不论当前触发器是否为颜色触发。
+// };
+#alias {buffer.RawLine} {
+    #line quiet #info output save;
+    #echo {%s} {$info[OUTPUT][LINE]};
+};
+
+///=== {
+// ## buffer.PlainLine
+//    打印当前触发行的无色文本,而不论当前触发器是否为颜色触发。
+// };
+#alias {buffer.PlainLine} {
+    #line quiet #info output save;
+    #echo {%s} {@str.Plain{$info[OUTPUT][LINE]}};
+};
+
+///=== {
+// #@ buffer.RawLine
+//    获得当前触发行的原始文本,而不论当前触发器是否为颜色触发。
+// };
+#func {buffer.RawLine} {
+    #line quiet #info output save;
+    #return {$info[OUTPUT][LINE]};
+};
+
+///=== {
+// #@ buffer.PlainLine
+//    获得当前触发行的无色文本,而不论当前触发器是否为颜色触发。
+// };
+#func {buffer.PlainLine} {
+    #line quiet #info output save;
+    #local line {$info[OUTPUT][LINE]};
+    #return {@str.Plain{$line}};
+};
+
+///=== {
+// #@ buffer.GetRawLine <行号> [<截止行号>]
+//    获得缓冲区中的文本,以原始格式返回。行号从 -1 开始往上数,最后一行为 -1。
+//    如果只提供一个行号,则返回字符串,否则返回列表。
+// };
+#func {buffer.GetRawLine} {
+    #local lineNo   {%1};
+    #local endNo    {%2};
+
+    #if { "$endNo" != "" } {
+        #if { $endNo < $lineNo } {
+            #local tmp $endNo;
+            #local endNo $lineNo;
+            #local lineNo $tmp;
+        };
+    };
+
+    #local line {};
+    #line quiet #buffer {get} {line} {$lineNo} {$endNo};
+
+    #if { "$endNo" == "" } {
+        #return {$line[1]};
+    };
+    #else {
+        #return {$line};
+    };
+};
+
+///=== {
+// #@ buffer.GetPlainLine <行号> [<截止行号>]
+//    获得缓冲区中的文本,以无色格式返回。行号从 -1 开始往上数,最后一行为 -1。
+//    如果只提供一个行号,则返回字符串,否则返回列表。
+// };
+#func {buffer.GetPlainLine} {
+    #local lineNo   {%1};
+    #local endNo    {%2};
+
+    #if { "$endNo" != "" } {
+        #if { $endNo < $lineNo } {
+            #local tmp $endNo;
+            #local endNo $lineNo;
+            #local lineNo $tmp;
+        };
+    };
+
+    #local line {};
+    #line quiet #buffer {get} {line} {$lineNo} {$endNo};
+
+    #if { "$endNo" == "" } {
+        #return {@str.Plain{$line[1]}};
+    };
+    #else {
+        #foreach {*line[]} {lineNo} {
+            #local line[$lineNo] {@str.Plain{$line[$lineNo]}};
+        };
+        #return {$line};
+    };
+};