option.tin 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var lib_option[META] {
  8. {NAME} {全局选项管理}
  9. {DESC} {为全局选项提供了一个储存位置,并提供一些实用的 API。}
  10. {AUTHOR} {担子炮}
  11. };
  12. #func {lib_option.Init} {
  13. #class lib/option open;
  14. #var gOptions {};
  15. #class lib/option close;
  16. #return {true};
  17. };
  18. ///=== {
  19. ///// 全局选项管理。
  20. /////
  21. ///// 全局选项本质上就是一些变量,这个模块主要是为了提供一些公共 API,和一个统
  22. ///// 一的管理方式,能够把散落在各处的选项集中管理。
  23. /////
  24. // ## option.Define <名称> <数据类型> <中文含义> [<默认值>]
  25. // 定义一个全局选项。选项被定义之后有一些公共 API 可供使用。
  26. // 选项必须经过定义之后才能使用。选项的名称按照大骆驼风格命名。
  27. // 目前仅支持 Bool 型选项。
  28. // };
  29. #alias {option.Define} {
  30. #local option {%1};
  31. #local type {%2};
  32. #local meaning {%3};
  33. #local default {%4};
  34. #if { "$option" == "" || "$type" == "" || "$meaning" == "" } {
  35. xtt.Usage option.Define;
  36. #return;
  37. };
  38. #if { "$gOptions[$option]" != "" } {
  39. errLog 选项「$option」已存在,请检查代码。;
  40. #return;
  41. };
  42. #local types {Bool};
  43. #if { "$type" != "{$types}" } {
  44. errLog 不能识别的选项类型: 「$type」,目前仅支持选项类型:{$types};
  45. #return;
  46. };
  47. #if { "$type" == "Bool" && "$default" != "{true|false}" } {
  48. errLog Bool 型的选项值只能是 true 或者 false。;
  49. #return;
  50. };
  51. #var gOptions[$option] {
  52. {name} {$option}
  53. {type} {$type}
  54. {meaning} {$meaning}
  55. {value} {$default}
  56. };
  57. };
  58. ///=== {
  59. // ## option.List
  60. // 列出所有的选项。
  61. // };
  62. #alias {option.List} {
  63. #echo {};
  64. #echo {<128>%+20s %+10s %+30s %+20s} {选项名称} {选项类型} {选项含义} {选项当前值};
  65. #draw Yellow scroll line 1 1 1 83;
  66. #local option {};
  67. #foreach {*gOptions[]} {option} {
  68. #echo {%+20s %+10s %+30s %+20s}
  69. {$gOptions[$option][name]}
  70. {$gOptions[$option][type]}
  71. {$gOptions[$option][meaning]}
  72. {$gOptions[$option][value]};
  73. };
  74. #echo {};
  75. };
  76. ///=== {
  77. // #@ option.Get <选项名称>
  78. // 获取选项的当前值。
  79. // };
  80. #func {option.Get} {
  81. #local {option} {%1};
  82. #if { "$gOptions[$option]" == "" } {
  83. errLog 不存在选项「$option」,请先定义后再使用。;
  84. #return {};
  85. };
  86. #return {$gOptions[$option][value]};
  87. };
  88. ///=== {
  89. // #@ option.Set <选项名称> <选项新值>
  90. // 设置选项的当前值,返回之前的旧值。
  91. // };
  92. #func {option.Set} {
  93. #local {option} {%1};
  94. #local {value} {%2};
  95. #local old {$gOptions[$option][value]};
  96. #if { "$old" == "" } {
  97. errLog 不存在选项「$option」,请先定义后再使用。;
  98. #return {};
  99. };
  100. #var {gOptions[$option][value]} {$value};
  101. #return {$old};
  102. };
  103. ///=== {
  104. // ## option.Set <选项名称> <选项值>
  105. // 设置选项的当前值。
  106. // };
  107. #alias {option.Set} {
  108. #local {option} {%1};
  109. #local {value} {%2};
  110. #local _ {@option.Set{$option;{$value}}};
  111. };
  112. ///=== {
  113. // #@ option.IsEnable <选项名称>
  114. // 检查选项是否已被开启。
  115. // };
  116. #func {option.IsEnable} {
  117. #local option {%1};
  118. #local value {@option.Get{$option}};
  119. #return @isTrue{$value};
  120. };
  121. ///=== {
  122. // #@ option.IsDisable <选项名称>
  123. // 检查选项是否已被禁用。
  124. // };
  125. #func {option.IsDisable} {
  126. #local option {%1};
  127. #local value {@option.Get{$option}};
  128. #return @isFalse{$value};
  129. };
  130. ///=== {
  131. // #@ option.Toggle <选项名称>
  132. // 翻转选项的当前值。如果是启用则改为禁用;如果是禁用则改为启用。
  133. // 本函数将返回之前的值。
  134. // };
  135. #func {option.Toggle} {
  136. #local {option} {%1};
  137. #local value {@option.Get{$option}};
  138. #if { "$value" == "true" } {
  139. option.Disable $option;
  140. infoLog <169>选项「<139>$option<169>」 <119>已禁用。<299>;
  141. };
  142. #elseif { "$value" == "false" } {
  143. option.Enable $option;
  144. infoLog <169>选项「<139>$option<169>」 <129>已启用。<299>;
  145. };
  146. #return {$value};
  147. };
  148. ///=== {
  149. // ## option.Toggle <选项名称>
  150. // 翻转选项的当前值。如果是启用则改为禁用;如果是禁用则改为启用。
  151. // };
  152. #alias {option.Toggle} {
  153. #local {option} {%1};
  154. #local _ {@option.Toggle{$option}};
  155. };
  156. ///=== {
  157. // ## option.Enable <选项名称>
  158. // 启用该选项。
  159. // };
  160. #alias {option.Enable} {
  161. #local {option} {%1};
  162. option.Set $option {true};
  163. };
  164. ///=== {
  165. // ## option.Disable <选项名称>
  166. // 禁用该选项。
  167. // };
  168. #alias {option.Disable} {
  169. #local {option} {%1};
  170. option.Set $option {false};
  171. };