fp.tin 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #nop 本文件是 xtintin 的一部分,实现了一些 FP 风格函数;
  8. #func {map} {
  9. #local table {%1};
  10. #local body {%2};
  11. #local key {};
  12. #local value {};
  13. #replace {body} {KEY} {\$key};
  14. #replace {body} {VALUE} {\$value};
  15. #local newTable {};
  16. #local key {};
  17. #foreach {*table[]} {key} {
  18. #local value {$table[$key]};
  19. #line sub {var;functions;escapes} #format value {%s} {$body};
  20. #cat newTable {{$key}{$value}};
  21. };
  22. #return {$newTable};
  23. };
  24. #func {mapIf} {
  25. #local table {%1};
  26. #local cond {%2};
  27. #local body {%3};
  28. #local key {};
  29. #local value {};
  30. #replace {cond} {KEY} {\$key};
  31. #replace {cond} {VALUE} {\$value};
  32. #replace {body} {KEY} {\$key};
  33. #replace {body} {VALUE} {\$value};
  34. #local newTable {};
  35. #local key {};
  36. #foreach {*table[]} {key} {
  37. #local value {$table[$key]};
  38. #local c {};
  39. #line sub {var;functions;escapes} #format c {%s} {$cond};
  40. #if { $c } {
  41. #line sub {var;functions;escapes} #format value {%s} {$body};
  42. };
  43. #cat newTable {{$key}{$value}};
  44. };
  45. #return {$newTable};
  46. };
  47. #func {filter} {
  48. #local table {%1};
  49. #local cond {%2};
  50. #local key {};
  51. #local value {};
  52. #replace {cond} {KEY} {\$key};
  53. #replace {cond} {VALUE} {\$value};
  54. #local newTable {};
  55. #local key {};
  56. #foreach {*table[]} {key} {
  57. #local value {$table[$key]};
  58. #local c {};
  59. #line sub {var;functions;escapes} #format c {%s} {$cond};
  60. #if { $c } {
  61. #cat newTable {{$key}{$value}};
  62. };
  63. };
  64. #return {$newTable};
  65. };
  66. #func {filterMap} {
  67. #local table {%1};
  68. #local cond {%2};
  69. #local body {%3};
  70. #local key {};
  71. #local value {};
  72. #replace {cond} {KEY} {\$key};
  73. #replace {cond} {VALUE} {\$value};
  74. #replace {body} {KEY} {\$key};
  75. #replace {body} {VALUE} {\$value};
  76. #local newTable {};
  77. #local key {};
  78. #foreach {*table[]} {key} {
  79. #local value {$table[$key]};
  80. #local c {};
  81. #line sub {var;functions;escapes} #format c {%s} {$cond};
  82. #if { $c } {
  83. #line sub {var;functions;escapes} #format value {%s} {$body};
  84. #cat newTable {{$key}{$value}};
  85. };
  86. };
  87. #return {$newTable};
  88. };
  89. #func {transform} {
  90. #local strList {%1};
  91. #local body {%2};
  92. #local value {};
  93. #replace {body} {VALUE} {\$value};
  94. #local newStrList {};
  95. #foreach {$strList} {value} {
  96. #line sub {var;functions;escapes} #format value {%s} {$body};
  97. #cat newStrList {$value;};
  98. };
  99. #replace newStrList {;$} {};
  100. #return {$newStrList};
  101. };
  102. #func {transformIf} {
  103. #local strList {%1};
  104. #local cond {%2};
  105. #local body {%3};
  106. #replace {cond} {VALUE} {\$value};
  107. #replace {body} {VALUE} {\$value};
  108. #local value {};
  109. #local newStrList {};
  110. #foreach {$strList} {value} {
  111. #local c {};
  112. #line sub {var;functions;escapes} #format c {%s} {$cond};
  113. #if { $c } {
  114. #line sub {var;functions;escapes} #format value {%s} {$body};
  115. };
  116. #cat newStrList {$value;};
  117. };
  118. #replace newStrList {;$} {};
  119. #return {$newStrList};
  120. };
  121. #func {select} {
  122. #local strList {%1};
  123. #local cond {%2};
  124. #local value {};
  125. #replace {cond} {VALUE} {\$value};
  126. #local newStrList {};
  127. #local value {};
  128. #foreach {$strList} {value} {
  129. #local c {};
  130. #line sub {var;functions;escapes} #format c {%s} {$cond};
  131. #if { $c } {
  132. #cat newStrList {$value;};
  133. };
  134. };
  135. #replace newStrList {;$} {};
  136. #return {$newStrList};
  137. };
  138. #func {selectTransform} {
  139. #local strList {%1};
  140. #local cond {%2};
  141. #local body {%3};
  142. #replace {cond} {VALUE} {\$value};
  143. #replace {body} {VALUE} {\$value};
  144. #local value {};
  145. #local newStrList {};
  146. #foreach {$strList} {value} {
  147. #local c {};
  148. #line sub {var;functions;escapes} #format c {%s} {$cond};
  149. #if { $c } {
  150. #line sub {var;functions;escapes} #format value {%s} {$body};
  151. #cat newStrList {$value;};
  152. };
  153. };
  154. #replace newStrList {;$} {};
  155. #return {$newStrList};
  156. };