option.tin 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var lib_option[META] {
  8. {NAME} {全局选项管理}
  9. {DESC} {为全局选项提供了一个储存位置,并提供一些实用的 API。}
  10. {AUTHOR} {担子炮}
  11. };
  12. #function {lib_option.Init} {
  13. #var gOptions {};
  14. #return {true};
  15. };
  16. #alias {option.Define} {
  17. #local option {%1};
  18. #local type {%2};
  19. #local meaning {%3};
  20. #local default {%4};
  21. #if { "$gOptions[$option]" != "" } {
  22. errLog 选项「$option」已存在,请检查代码。;
  23. #return;
  24. };
  25. #local types {Bool};
  26. #if { "$type" != "{$types}" } {
  27. errLog 不能识别的选项类型: 「$type」,目前仅支持选项类型:{$types};
  28. #return;
  29. };
  30. #if { "$type" == "Bool" && "$default" != "{true|false}" } {
  31. errLog Bool 型的选项值只能是 true 或者 false。;
  32. #return;
  33. };
  34. #var gOptions[$option] {
  35. {name} {$option}
  36. {type} {$type}
  37. {meaning} {$meaning}
  38. {value} {$default}
  39. };
  40. };
  41. #alias {option.List} {
  42. #echo {};
  43. #echo {<128>%+20s %+10s %+30s %+20s} {选项名称} {选项类型} {选项含义} {选项当前值};
  44. #draw Yellow scroll line 1 1 1 83;
  45. #local option {};
  46. #foreach {*gOptions[]} {option} {
  47. #echo {%+20s %+10s %+30s %+20s}
  48. {$gOptions[$option][name]}
  49. {$gOptions[$option][type]}
  50. {$gOptions[$option][meaning]}
  51. {$gOptions[$option][value]};
  52. };
  53. #echo {};
  54. };
  55. #function {option.Get} {
  56. #local {option} {%1};
  57. #if { "$gOptions[$option]" == "" } {
  58. errLog 不存在选项「$option」,请先定义后再使用。;
  59. #return {};
  60. };
  61. #return {$gOptions[$option][value]};
  62. };
  63. #function {option.Set} {
  64. #local {option} {%1};
  65. #local {value} {%2};
  66. #local old {$gOptions[$option][value]};
  67. #if { "$old" == "" } {
  68. errLog 不存在选项「$option」,请先定义后再使用。;
  69. #return {};
  70. };
  71. #var {gOptions[$option][value]} {$value};
  72. #return {$old};
  73. };
  74. #function {option.IsEnable} {
  75. #local option {%1};
  76. #local value {@option.Get{$option}};
  77. #if { "$value" == "true" } {
  78. #return 1;
  79. };
  80. #else {
  81. #return 0;
  82. };
  83. };
  84. #function {option.IsDisable} {
  85. #local option {%1};
  86. #local value {@option.Get{$option}};
  87. #if { "$value" == "false" } {
  88. #return 1;
  89. };
  90. #else {
  91. #return 0;
  92. };
  93. };
  94. #alias {option.Set} {
  95. #local {option} {%1};
  96. #local {value} {%2};
  97. #local _ {@option.Set{$option;{$value}}};
  98. };
  99. #function {option.Toggle} {
  100. #local {option} {%1};
  101. #local value {@option.Get{$option}};
  102. #if { "$value" == "true" } {
  103. option.Disable $option;
  104. infoLog <160>选项「<130>$option<160>」 <110>已禁用。<070>;
  105. };
  106. #elseif { "$value" == "false" } {
  107. option.Enable $option;
  108. infoLog <160>选项「<130>$option<160>」 <120>已启用。<070>;
  109. };
  110. #return {$value};
  111. };
  112. #alias {option.Toggle} {
  113. #local {option} {%1};
  114. #local _ {@option.Toggle{$option}};
  115. };
  116. #alias {option.Enable} {
  117. #local {option} {%1};
  118. option.Set $option {true};
  119. };
  120. #alias {option.Disable} {
  121. #local {option} {%1};
  122. option.Set $option {false};
  123. };