carats 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. data/ChangeLog +2 -0
  2. data/LICENSE +5 -0
  3. data/README +67 -0
  4. data/Reapfile +72 -0
  5. data/ToDo +24 -0
  6. data/bench/b_harray.rb +49 -0
  7. data/bench/b_range.rb +64 -0
  8. data/demo/ansicolor/cdiff.rb +20 -0
  9. data/demo/ansicolor/example.rb +82 -0
  10. data/demo/io-reactor/chatserver.rb +347 -0
  11. data/doc/classes/Array.html +172 -0
  12. data/doc/classes/BBCode.html +638 -0
  13. data/doc/classes/BinaryReader.html +675 -0
  14. data/doc/classes/Binding.html +223 -0
  15. data/doc/classes/ByteOrder.html +284 -0
  16. data/doc/classes/Class.html +189 -0
  17. data/doc/classes/Constant.html +785 -0
  18. data/doc/classes/Constant/CGS.html +609 -0
  19. data/doc/classes/Continuation.html +113 -0
  20. data/doc/classes/Coroutine.html +387 -0
  21. data/doc/classes/CountingSemaphore.html +337 -0
  22. data/doc/classes/CrossCase.html +561 -0
  23. data/doc/classes/DynamicMixin.html +185 -0
  24. data/doc/classes/EnumerableWithArgs.html +550 -0
  25. data/doc/classes/Expect.html +428 -0
  26. data/doc/classes/Expect/DefaultChain.html +113 -0
  27. data/doc/classes/Expect/SeparatedPattern.html +223 -0
  28. data/doc/classes/Expect/Timeout.html +167 -0
  29. data/doc/classes/Expect/UnmatchedMessage.html +160 -0
  30. data/doc/classes/FileList.html +833 -0
  31. data/doc/classes/FloatString.html +534 -0
  32. data/doc/classes/Functor.html +211 -0
  33. data/doc/classes/HArray.html +1872 -0
  34. data/doc/classes/HTML.html +328 -0
  35. data/doc/classes/Heap.html +683 -0
  36. data/doc/classes/Heap/EmptyHeapException.html +111 -0
  37. data/doc/classes/Heap/Max.html +176 -0
  38. data/doc/classes/Heap/Min.html +176 -0
  39. data/doc/classes/IO.html +108 -0
  40. data/doc/classes/IO/Reactor.html +790 -0
  41. data/doc/classes/IO/Redirect.html +289 -0
  42. data/doc/classes/Infinity.html +320 -0
  43. data/doc/classes/Interval.html +1014 -0
  44. data/doc/classes/InvalidNackError.html +161 -0
  45. data/doc/classes/Kernel.html +204 -0
  46. data/doc/classes/Lisp.html +1132 -0
  47. data/doc/classes/Lisp/DottedPair.html +379 -0
  48. data/doc/classes/Lisp/Format.html +178 -0
  49. data/doc/classes/Lisp/Format/ArgumentError.html +126 -0
  50. data/doc/classes/Lisp/Format/Directives.html +155 -0
  51. data/doc/classes/Lisp/Format/Directives/ArgJump.html +178 -0
  52. data/doc/classes/Lisp/Format/Directives/Ascii.html +119 -0
  53. data/doc/classes/Lisp/Format/Directives/BeginCaseConversion.html +185 -0
  54. data/doc/classes/Lisp/Format/Directives/BeginConditional.html +307 -0
  55. data/doc/classes/Lisp/Format/Directives/BeginIteration.html +338 -0
  56. data/doc/classes/Lisp/Format/Directives/Binary.html +157 -0
  57. data/doc/classes/Lisp/Format/Directives/Character.html +228 -0
  58. data/doc/classes/Lisp/Format/Directives/CharacterDirective.html +203 -0
  59. data/doc/classes/Lisp/Format/Directives/ClauseSeparator.html +166 -0
  60. data/doc/classes/Lisp/Format/Directives/Decimal.html +119 -0
  61. data/doc/classes/Lisp/Format/Directives/Directive.html +397 -0
  62. data/doc/classes/Lisp/Format/Directives/DollarFP.html +205 -0
  63. data/doc/classes/Lisp/Format/Directives/EndCaseConversion.html +174 -0
  64. data/doc/classes/Lisp/Format/Directives/EndConditional.html +159 -0
  65. data/doc/classes/Lisp/Format/Directives/EndIteration.html +163 -0
  66. data/doc/classes/Lisp/Format/Directives/ExpFP.html +252 -0
  67. data/doc/classes/Lisp/Format/Directives/FFFP.html +224 -0
  68. data/doc/classes/Lisp/Format/Directives/Factory.html +180 -0
  69. data/doc/classes/Lisp/Format/Directives/FreshLine.html +175 -0
  70. data/doc/classes/Lisp/Format/Directives/GeneralFP.html +265 -0
  71. data/doc/classes/Lisp/Format/Directives/Hexadecimal.html +157 -0
  72. data/doc/classes/Lisp/Format/Directives/Indirection.html +183 -0
  73. data/doc/classes/Lisp/Format/Directives/Literal.html +187 -0
  74. data/doc/classes/Lisp/Format/Directives/NewLine.html +158 -0
  75. data/doc/classes/Lisp/Format/Directives/NewPage.html +158 -0
  76. data/doc/classes/Lisp/Format/Directives/Number.html +243 -0
  77. data/doc/classes/Lisp/Format/Directives/Octal.html +157 -0
  78. data/doc/classes/Lisp/Format/Directives/Plural.html +177 -0
  79. data/doc/classes/Lisp/Format/Directives/Print.html +237 -0
  80. data/doc/classes/Lisp/Format/Directives/Radix.html +432 -0
  81. data/doc/classes/Lisp/Format/Directives/SExpression.html +157 -0
  82. data/doc/classes/Lisp/Format/Directives/SkipWhitespace.html +165 -0
  83. data/doc/classes/Lisp/Format/Directives/Tabulate.html +198 -0
  84. data/doc/classes/Lisp/Format/Directives/Tilde.html +158 -0
  85. data/doc/classes/Lisp/Format/Directives/UnknownDirectiveError.html +117 -0
  86. data/doc/classes/Lisp/Format/Formatter.html +193 -0
  87. data/doc/classes/Lisp/Format/IncompleteParameterError.html +119 -0
  88. data/doc/classes/Lisp/Format/IndexError.html +126 -0
  89. data/doc/classes/Lisp/Format/Lexer.html +479 -0
  90. data/doc/classes/Lisp/Format/MalformedError.html +119 -0
  91. data/doc/classes/Lisp/Format/MissingParameterError.html +119 -0
  92. data/doc/classes/Lisp/Format/ModifierError.html +119 -0
  93. data/doc/classes/Lisp/Format/Output.html +239 -0
  94. data/doc/classes/Lisp/Format/ParameterError.html +126 -0
  95. data/doc/classes/Lisp/Format/Parameters.html +123 -0
  96. data/doc/classes/Lisp/Format/Parameters/Argument.html +172 -0
  97. data/doc/classes/Lisp/Format/Parameters/ArgumentCount.html +159 -0
  98. data/doc/classes/Lisp/Format/Parameters/Character.html +119 -0
  99. data/doc/classes/Lisp/Format/Parameters/Default.html +120 -0
  100. data/doc/classes/Lisp/Format/Parameters/Integer.html +119 -0
  101. data/doc/classes/Lisp/Format/Parameters/Parameter.html +206 -0
  102. data/doc/classes/Lisp/Format/Parser.html +212 -0
  103. data/doc/classes/Lisp/Format/Positioned.html +166 -0
  104. data/doc/classes/Lisp/Format/State.html +455 -0
  105. data/doc/classes/Lisp/Format/SyntaxError.html +126 -0
  106. data/doc/classes/Method.html +274 -0
  107. data/doc/classes/Method/DuckHunter.html +281 -0
  108. data/doc/classes/Module.html +709 -0
  109. data/doc/classes/Multiton.html +284 -0
  110. data/doc/classes/Multiton/New.html +164 -0
  111. data/doc/classes/Multiton/Semi.html +155 -0
  112. data/doc/classes/NackClass.html +322 -0
  113. data/doc/classes/NilClass.html +231 -0
  114. data/doc/classes/NilComparable.html +179 -0
  115. data/doc/classes/NotCopyable.html +273 -0
  116. data/doc/classes/Object.html +261 -0
  117. data/doc/classes/OpenStructable.html +346 -0
  118. data/doc/classes/OrderedHash.html +939 -0
  119. data/doc/classes/Parser.html +515 -0
  120. data/doc/classes/Parser/Main.html +178 -0
  121. data/doc/classes/Parser/Marker.html +475 -0
  122. data/doc/classes/Parser/Registry.html +354 -0
  123. data/doc/classes/Parser/Token.html +399 -0
  124. data/doc/classes/Parser/UnitToken.html +222 -0
  125. data/doc/classes/Ref.html +230 -0
  126. data/doc/classes/SimpleStringIO.html +183 -0
  127. data/doc/classes/StaticHash.html +202 -0
  128. data/doc/classes/String.html +172 -0
  129. data/doc/classes/Struct.html +181 -0
  130. data/doc/classes/SuperStruct.html +382 -0
  131. data/doc/classes/Term.html +156 -0
  132. data/doc/classes/Term/ANSIColor.html +185 -0
  133. data/doc/classes/Text.html +138 -0
  134. data/doc/classes/Text/Soundex.html +222 -0
  135. data/doc/classes/TextTagIterator.html +911 -0
  136. data/doc/classes/Time.html +119 -0
  137. data/doc/classes/Time/Limit.html +303 -0
  138. data/doc/classes/Time/Limit/Dummy.html +181 -0
  139. data/doc/classes/Timer.html +351 -0
  140. data/doc/classes/TracePoint.html +532 -0
  141. data/doc/classes/Tuple.html +178 -0
  142. data/doc/classes/Uninheritable.html +213 -0
  143. data/doc/classes/Version.html +783 -0
  144. data/doc/created.rid +1 -0
  145. data/doc/files/LICENSE.html +113 -0
  146. data/doc/files/README.html +201 -0
  147. data/doc/files/lib/carat/1st_rb.html +107 -0
  148. data/doc/files/lib/carat/ansicolor_rb.html +146 -0
  149. data/doc/files/lib/carat/attr_rb.html +101 -0
  150. data/doc/files/lib/carat/bbcode_rb.html +152 -0
  151. data/doc/files/lib/carat/binaryreader_rb.html +114 -0
  152. data/doc/files/lib/carat/binding-of-caller_rb.html +108 -0
  153. data/doc/files/lib/carat/byteorder_rb.html +107 -0
  154. data/doc/files/lib/carat/constant_rb.html +167 -0
  155. data/doc/files/lib/carat/coroutine_rb.html +156 -0
  156. data/doc/files/lib/carat/crosscase_rb.html +224 -0
  157. data/doc/files/lib/carat/duckhunter_rb.html +165 -0
  158. data/doc/files/lib/carat/dynamic-mixin_rb.html +101 -0
  159. data/doc/files/lib/carat/enumerable-args_rb.html +140 -0
  160. data/doc/files/lib/carat/expect_rb.html +137 -0
  161. data/doc/files/lib/carat/filelist_rb.html +130 -0
  162. data/doc/files/lib/carat/floatstring_rb.html +126 -0
  163. data/doc/files/lib/carat/functor_rb.html +140 -0
  164. data/doc/files/lib/carat/harray_rb.html +128 -0
  165. data/doc/files/lib/carat/heap_rb.html +154 -0
  166. data/doc/files/lib/carat/html-helpers_rb.html +116 -0
  167. data/doc/files/lib/carat/infinity_rb.html +142 -0
  168. data/doc/files/lib/carat/init_rb.html +127 -0
  169. data/doc/files/lib/carat/interval_rb.html +162 -0
  170. data/doc/files/lib/carat/io-reactor_rb.html +211 -0
  171. data/doc/files/lib/carat/io-redirect_rb.html +132 -0
  172. data/doc/files/lib/carat/lisp-format_rb.html +187 -0
  173. data/doc/files/lib/carat/lisp_rb.html +152 -0
  174. data/doc/files/lib/carat/macro_rb.html +129 -0
  175. data/doc/files/lib/carat/multiton_rb.html +178 -0
  176. data/doc/files/lib/carat/nack_rb.html +193 -0
  177. data/doc/files/lib/carat/nil-comparable_rb.html +126 -0
  178. data/doc/files/lib/carat/nil-missing_rb.html +101 -0
  179. data/doc/files/lib/carat/notcopyable_rb.html +166 -0
  180. data/doc/files/lib/carat/orderedhash_rb.html +107 -0
  181. data/doc/files/lib/carat/ostructable_rb.html +157 -0
  182. data/doc/files/lib/carat/parser-old_rb.html +239 -0
  183. data/doc/files/lib/carat/parser_rb.html +244 -0
  184. data/doc/files/lib/carat/ref_rb.html +107 -0
  185. data/doc/files/lib/carat/semaphore_rb.html +132 -0
  186. data/doc/files/lib/carat/snapshot_rb.html +152 -0
  187. data/doc/files/lib/carat/soundex_rb.html +128 -0
  188. data/doc/files/lib/carat/sstruct_rb.html +142 -0
  189. data/doc/files/lib/carat/statichash_rb.html +150 -0
  190. data/doc/files/lib/carat/tagiter_rb.html +236 -0
  191. data/doc/files/lib/carat/timelimit_rb.html +136 -0
  192. data/doc/files/lib/carat/timer_rb.html +153 -0
  193. data/doc/files/lib/carat/tracepoint_rb.html +160 -0
  194. data/doc/files/lib/carat/tuple_rb.html +123 -0
  195. data/doc/files/lib/carat/uninheritable_rb.html +101 -0
  196. data/doc/files/lib/carat/version_rb.html +141 -0
  197. data/doc/fr_class_index.html +159 -0
  198. data/doc/fr_file_index.html +78 -0
  199. data/doc/fr_method_index.html +663 -0
  200. data/doc/index.html +24 -0
  201. data/doc/rdoc-style.css +208 -0
  202. data/lib/carat-dev/README +11 -0
  203. data/lib/carat-dev/access-blocks/access_blocks.rb +42 -0
  204. data/lib/carat-dev/association/association.rb +70 -0
  205. data/lib/carat-dev/blankslate/blankslate.rb +51 -0
  206. data/lib/carat-dev/breakpoint.rb +518 -0
  207. data/lib/carat-dev/class-constructor/constructor_methods.rb +78 -0
  208. data/lib/carat-dev/class-constructor/tc_constructor.rb +35 -0
  209. data/lib/carat-dev/closecall/closecall-test.rb +39 -0
  210. data/lib/carat-dev/closecall/closecall.rb +101 -0
  211. data/lib/carat-dev/commandrunner/commandrunner.rb +100 -0
  212. data/lib/carat-dev/conditional/conditionals.rb +106 -0
  213. data/lib/carat-dev/daemon/daemon.rb +70 -0
  214. data/lib/carat-dev/detach/detach.rb +363 -0
  215. data/lib/carat-dev/detach/tc_detach.rb +57 -0
  216. data/lib/carat-dev/import-module/import-module-0.81.tar.gz +0 -0
  217. data/lib/carat-dev/import-module/import-module-0.81/LICENSE +1 -0
  218. data/lib/carat-dev/import-module/import-module-0.81/Makefile +11 -0
  219. data/lib/carat-dev/import-module/import-module-0.81/README +4 -0
  220. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-hash.rb +49 -0
  221. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-pip.rb +71 -0
  222. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-unbound-method.rb +36 -0
  223. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.html +293 -0
  224. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.rd +306 -0
  225. data/lib/carat-dev/import-module/import-module-0.81/doc/README.html +290 -0
  226. data/lib/carat-dev/import-module/import-module-0.81/doc/README.rd +303 -0
  227. data/lib/carat-dev/import-module/import-module-0.81/doc/style.css +85 -0
  228. data/lib/carat-dev/import-module/import-module-0.81/install.rb +99 -0
  229. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module-single-thread.rb +84 -0
  230. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module.rb +493 -0
  231. data/lib/carat-dev/import-module/import-module-0.81/test/Makefile +2 -0
  232. data/lib/carat-dev/import-module/import-module-0.81/test/test +91 -0
  233. data/lib/carat-dev/import-module/import-module-0.81/test/test-import-module.rb +936 -0
  234. data/lib/carat-dev/import-module/import-module-0.81/test/test-import_scope.rb +33 -0
  235. data/lib/carat-dev/import-module/import-module-0.81/test/test-scope_import.rb +33 -0
  236. data/lib/carat-dev/import-module/import-module-0.81/test/test-time.rb +184 -0
  237. data/lib/carat-dev/import-module/import-module-0.81/test/test.sh +91 -0
  238. data/lib/carat-dev/import-module/import-module-0.81/test/time.rb +135 -0
  239. data/lib/carat-dev/import-module/import-module-0.81/test/times-do.sh +10 -0
  240. data/lib/carat-dev/interface_work/SCRAP/i-contracts.rb +37 -0
  241. data/lib/carat-dev/interface_work/SCRAP/interface.rb +105 -0
  242. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0.zip +0 -0
  243. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/CHANGES +3 -0
  244. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/MANIFEST +15 -0
  245. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/README +32 -0
  246. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.rd +73 -0
  247. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.txt +94 -0
  248. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/install.rb +16 -0
  249. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/lib/interface.rb +50 -0
  250. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/tc_interface.rb +51 -0
  251. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test.rb +29 -0
  252. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_instance.rb +24 -0
  253. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_sub.rb +29 -0
  254. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_unrequire.rb +28 -0
  255. data/lib/carat-dev/interface_work/contracts/contract.zip +0 -0
  256. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.html +376 -0
  257. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000001.html +23 -0
  258. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000002.html +18 -0
  259. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000003.html +19 -0
  260. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000004.html +29 -0
  261. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000005.html +18 -0
  262. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000006.html +18 -0
  263. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractError.html +142 -0
  264. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractException.html +153 -0
  265. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractMismatch.html +125 -0
  266. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.html +157 -0
  267. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.src/M000007.html +112 -0
  268. data/lib/carat-dev/interface_work/contracts/contract/doc/created.rid +1 -0
  269. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/assertions_rb.html +109 -0
  270. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/exception_rb.html +108 -0
  271. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/integration_rb.html +108 -0
  272. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/overrides_rb.html +109 -0
  273. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract_rb.html +114 -0
  274. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_class_index.html +31 -0
  275. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_file_index.html +31 -0
  276. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_method_index.html +33 -0
  277. data/lib/carat-dev/interface_work/contracts/contract/doc/index.html +24 -0
  278. data/lib/carat-dev/interface_work/contracts/contract/doc/rdoc-style.css +208 -0
  279. data/lib/carat-dev/interface_work/contracts/contract/lib/contract.rb +88 -0
  280. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/assertions.rb +37 -0
  281. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/exception.rb +92 -0
  282. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/integration.rb +132 -0
  283. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/overrides.rb +32 -0
  284. data/lib/carat-dev/interface_work/must.rb +37 -0
  285. data/lib/carat-dev/interface_work/type.rb +232 -0
  286. data/lib/carat-dev/main/tc_toplevel.rb +23 -0
  287. data/lib/carat-dev/main/toplevel.rb +33 -0
  288. data/lib/carat-dev/main/toplevel_test.rb +24 -0
  289. data/lib/carat-dev/misc/1.rb +40 -0
  290. data/lib/carat-dev/misc/misc.rb +44 -0
  291. data/lib/carat-dev/misc/sys.rb +186 -0
  292. data/lib/carat-dev/misc/temp.rb +1 -0
  293. data/lib/carat-dev/misc/utils.rb +518 -0
  294. data/lib/carat-dev/predicate/predicate.rb +109 -0
  295. data/lib/carat-dev/predicate/predicate_test.rb +67 -0
  296. data/lib/carat-dev/premshree.rb +40 -0
  297. data/lib/carat-dev/priority-queue/pqueue.rb +183 -0
  298. data/lib/carat-dev/priority-queue/priorityqueue.rb +84 -0
  299. data/lib/carat-dev/quaternion/quaternion.rb +529 -0
  300. data/lib/carat-dev/range.rb +259 -0
  301. data/lib/carat-dev/system/rubyinfo.rb +75 -0
  302. data/lib/carat-dev/system/system.rb +105 -0
  303. data/lib/carat-dev/tc_range.rb +118 -0
  304. data/lib/carat-dev/timer/timer-doc/classes/Timer.html +291 -0
  305. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000001.html +26 -0
  306. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000002.html +19 -0
  307. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000003.html +18 -0
  308. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000004.html +18 -0
  309. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000005.html +21 -0
  310. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000006.html +23 -0
  311. data/lib/carat-dev/timer/timer-doc/created.rid +1 -0
  312. data/lib/carat-dev/timer/timer-doc/files/timer_rb.html +144 -0
  313. data/lib/carat-dev/timer/timer-doc/fr_class_index.html +27 -0
  314. data/lib/carat-dev/timer/timer-doc/fr_file_index.html +27 -0
  315. data/lib/carat-dev/timer/timer-doc/fr_method_index.html +32 -0
  316. data/lib/carat-dev/timer/timer-doc/index.html +24 -0
  317. data/lib/carat-dev/timer/timer-doc/rdoc-style.css +208 -0
  318. data/lib/carat-dev/timer/timer.rb +160 -0
  319. data/lib/carat-dev/vars/vars.rb +62 -0
  320. data/lib/carat/1st.rb +58 -0
  321. data/lib/carat/ansicolor.rb +122 -0
  322. data/lib/carat/attr.rb +342 -0
  323. data/lib/carat/bbcode.rb +352 -0
  324. data/lib/carat/binaryreader.rb +170 -0
  325. data/lib/carat/binding-of-caller.rb +83 -0
  326. data/lib/carat/byteorder.rb +34 -0
  327. data/lib/carat/constant.rb +287 -0
  328. data/lib/carat/coroutine.rb +102 -0
  329. data/lib/carat/crosscase.rb +309 -0
  330. data/lib/carat/duckhunter.rb +158 -0
  331. data/lib/carat/dynamic-mixin.rb +71 -0
  332. data/lib/carat/enumerable-args.rb +125 -0
  333. data/lib/carat/expect.rb +192 -0
  334. data/lib/carat/filelist.rb +277 -0
  335. data/lib/carat/floatstring.rb +153 -0
  336. data/lib/carat/functor.rb +41 -0
  337. data/lib/carat/harray.rb +507 -0
  338. data/lib/carat/heap.rb +193 -0
  339. data/lib/carat/html-helpers.rb +82 -0
  340. data/lib/carat/infinity.rb +61 -0
  341. data/lib/carat/init.rb +33 -0
  342. data/lib/carat/interval.rb +248 -0
  343. data/lib/carat/io-reactor.rb +657 -0
  344. data/lib/carat/io-redirect.rb +99 -0
  345. data/lib/carat/lisp-format.rb +1832 -0
  346. data/lib/carat/lisp.rb +336 -0
  347. data/lib/carat/macro.rb +68 -0
  348. data/lib/carat/multiton.rb +153 -0
  349. data/lib/carat/nack.rb +115 -0
  350. data/lib/carat/nil-comparable.rb +67 -0
  351. data/lib/carat/nil-missing.rb +12 -0
  352. data/lib/carat/notcopyable.rb +68 -0
  353. data/lib/carat/orderedhash.rb +249 -0
  354. data/lib/carat/ostructable.rb +138 -0
  355. data/lib/carat/parser-old.rb +350 -0
  356. data/lib/carat/parser.rb +393 -0
  357. data/lib/carat/ref.rb +31 -0
  358. data/lib/carat/semaphore.rb +69 -0
  359. data/lib/carat/snapshot.rb +94 -0
  360. data/lib/carat/soundex.rb +104 -0
  361. data/lib/carat/sstruct.rb +223 -0
  362. data/lib/carat/statichash.rb +49 -0
  363. data/lib/carat/tagiter.rb +345 -0
  364. data/lib/carat/timelimit.rb +114 -0
  365. data/lib/carat/timer.rb +99 -0
  366. data/lib/carat/tracepoint.rb +154 -0
  367. data/lib/carat/tuple.rb +31 -0
  368. data/lib/carat/uninheritable.rb +68 -0
  369. data/lib/carat/version.rb +147 -0
  370. data/pub/doc/sstruct.txt +204 -0
  371. data/pub/doc/tagiter.html +145 -0
  372. data/setup.rb +1361 -0
  373. data/test/fixtures/filelist/testfile.txt +1 -0
  374. data/test/fixtures/filelist/testfile2.txt +1 -0
  375. data/test/tc_1st.rb +16 -0
  376. data/test/tc_ansicolor.rb +23 -0
  377. data/test/tc_attr.rb +46 -0
  378. data/test/tc_bbcode.rb +20 -0
  379. data/test/tc_binaryreader.rb +14 -0
  380. data/test/tc_binding_of_caller.rb +2 -0
  381. data/test/tc_byteorder.rb +41 -0
  382. data/test/tc_constant.rb +12 -0
  383. data/test/tc_coroutine.rb +50 -0
  384. data/test/tc_crosscase.rb +33 -0
  385. data/test/tc_duckhunter.rb +37 -0
  386. data/test/tc_dynamic-mixin.rb +66 -0
  387. data/test/tc_enumerable-args.rb +66 -0
  388. data/test/tc_expect.rb +83 -0
  389. data/test/tc_filelist.rb +17 -0
  390. data/test/tc_floatstring.rb +22 -0
  391. data/test/tc_functor.rb +18 -0
  392. data/test/tc_harray.rb +280 -0
  393. data/test/tc_heap.rb +6 -0
  394. data/test/tc_infinity.rb +23 -0
  395. data/test/tc_init.rb +29 -0
  396. data/test/tc_interval.rb +153 -0
  397. data/test/tc_io-reactor.rb +5 -0
  398. data/test/tc_io-redirect.rb +5 -0
  399. data/test/tc_lisp-format.rb +24 -0
  400. data/test/tc_lisp.rb +32 -0
  401. data/test/tc_macro.rb +48 -0
  402. data/test/tc_multiton.rb +188 -0
  403. data/test/tc_nack.rb +31 -0
  404. data/test/tc_nil-as-emptiness.rb +19 -0
  405. data/test/tc_nil-comparable.rb +29 -0
  406. data/test/tc_nil-missing.rb +0 -0
  407. data/test/tc_notcopyable.rb +64 -0
  408. data/test/tc_orderedhash.rb +36 -0
  409. data/test/tc_ostructable.rb +31 -0
  410. data/test/tc_semaphore.rb +5 -0
  411. data/test/tc_snapshot.rb +20 -0
  412. data/test/tc_soundex.rb +19 -0
  413. data/test/tc_sstruct.rb +313 -0
  414. data/test/tc_statichash.rb +24 -0
  415. data/test/tc_tagiter.rb +80 -0
  416. data/test/tc_timelimit.rb +47 -0
  417. data/test/tc_timer.rb +35 -0
  418. data/test/tc_tracepoint.rb +10 -0
  419. data/test/tc_tuple.rb +25 -0
  420. data/test/tc_uninheritable.rb +33 -0
  421. data/test/tc_version.rb +90 -0
  422. metadata +531 -0
@@ -0,0 +1,138 @@
1
+ =begin rdoc
2
+
3
+ = OpenStructable
4
+
5
+ OpensStructable is a mixin module which can provide OpenStruct behavior to
6
+ any class or object. OpenStructable allows extention of data objects
7
+ with arbitrary attributes.
8
+
9
+ == Usage
10
+
11
+ require 'raspberry/new/ostructable'
12
+
13
+ class Record
14
+ include OpenStructable
15
+ end
16
+
17
+ record = Record.new
18
+ record.name = "John Smith"
19
+ record.age = 70
20
+ record.pension = 300
21
+
22
+ puts record.name # -> "John Smith"
23
+ puts record.address # -> nil
24
+
25
+ == TODO
26
+
27
+ * Keep this uptodate with ostruct.rb.
28
+ * See if Matz will accept it into core so we don't have to anymore!
29
+ * As with OpenStruct, marshalling is problematic at the moment.
30
+
31
+ == Author(s)
32
+
33
+ * Yukihiro Matsumoto
34
+ * Gavin Sinclair (Documentation)
35
+ * Thomas Sawyer
36
+
37
+ == History
38
+
39
+ * 2005.04.11 Passed basic test.
40
+
41
+ =end
42
+
43
+ module OpenStructable
44
+
45
+ # Duplicate an OpenStruct object members.
46
+ def initialize_copy(orig)
47
+ super
48
+ @__table__ = @__table__.dup
49
+ end
50
+
51
+ def new_ostruct_member(name)
52
+ self.instance_eval %{
53
+ def #{name}; @__table__[:#{name}]; end
54
+ def #{name}=(x); @__table__[:#{name}] = x; end
55
+ }
56
+ end
57
+
58
+ #
59
+ # Generate additional attributes and values.
60
+ #
61
+ def update(hash)
62
+ @__table__ ||= {}
63
+ if hash
64
+ for k,v in hash
65
+ @__table__[k.to_sym] = v
66
+ new_ostruct_member(k)
67
+ end
68
+ end
69
+ end
70
+
71
+ def method_missing(mid, *args) # :nodoc:
72
+ mname = mid.id2name
73
+ len = args.length
74
+ if mname =~ /=$/
75
+ if len != 1
76
+ raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
77
+ end
78
+ if self.frozen?
79
+ raise TypeError, "can't modify frozen #{self.class}", caller(1)
80
+ end
81
+ mname.chop!
82
+ @__table__ ||= {}
83
+ @__table__[mname.intern] = args[0]
84
+ self.new_ostruct_member(mname)
85
+ elsif len == 0
86
+ @__table__ ||= {}
87
+ @__table__[mid]
88
+ else
89
+ raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1)
90
+ end
91
+ end
92
+
93
+ #
94
+ # Remove the named field from the object.
95
+ #
96
+ def delete_field(name)
97
+ @__table__ ||= {}
98
+ @__table__.delete name.to_sym
99
+ end
100
+
101
+ #
102
+ # Returns a string containing a detailed summary of the keys and values.
103
+ #
104
+ def inspect
105
+ str = "<#{self.class}"
106
+ for k,v in (@__table__ ||= {})
107
+ str << " #{k}=#{v.inspect}"
108
+ end
109
+ str << ">"
110
+ end
111
+
112
+ def __table__ # :nodoc:
113
+ @__table__ ||= {}
114
+ end
115
+ protected :__table__
116
+
117
+ #
118
+ # Compare this object and +other+ for equality.
119
+ #
120
+ def ==(other)
121
+ return false unless(other.kind_of?(OpenStruct))
122
+ return @__table__ == other.table
123
+ end
124
+
125
+ end
126
+
127
+ =begin
128
+ #
129
+ # It is possibe to implement OpenStruct itself with
130
+ # this OpenStructable module as follows:
131
+ #
132
+ class OpenStruct
133
+ include OpenStructable
134
+ def initialize(hash=nil)
135
+ update(hash)
136
+ end
137
+ end
138
+ =end
@@ -0,0 +1,350 @@
1
+ =begin rdoc
2
+
3
+ = Parser
4
+
5
+ Gerenal purpose stack-based parser. Define custom tokens
6
+ and the parser will build a parse tree from them.
7
+
8
+ == Synopsis
9
+
10
+ To use the parser you must define your token classes. There
11
+ are three types of tokens: normal, raw and unit. Normal
12
+ tokens are the default, requiring the definition of #start
13
+ and a #stop class methods. These must take a MatchData object
14
+ as a parameter (although it need not be used) and return a regular
15
+ expression to match against. Raw tokens are just like normal
16
+ tokens except the parser will not tokenize what lies between the raw
17
+ token's start and stop markers, instead reading it as raw text.
18
+ Finally a unit token has no content, so a #stop method is not required,
19
+ simply define the start #method to be used for matching.
20
+
21
+ require 'carat/parser'
22
+ require 'yaml'
23
+
24
+ s = "[p]THIS IS A [t][b]BOLD[b.]TEST[t.]&tm;[p.]"
25
+
26
+ class XmlTagToken < Parser::Token
27
+ def self.start( match ) ; %r{ \[ (.*?) \] }mx ; end
28
+ def self.stop( match ) ; %r{ \[ [ ]* (#{esc(match[1])}) (.*?) \. \] }mx ; end
29
+ end
30
+
31
+ class XmlRawTagToken < Parser::RawToken
32
+ def self.start( match ) ; %r{ \[ (t.*?) \] }mx ; end
33
+ def self.stop( match ) ; %r{ \[ [ ]* (#{esc(match[1])}) (.*?) \. \] }mx ; end
34
+ end
35
+
36
+ class XmlEntityToken < Parser::UnitToken
37
+ def self.start( match ) ; %r{ \& (.*?) \; }x ; end
38
+ end
39
+
40
+ markers = []
41
+ markers << XmlRawTagToken
42
+ markers << XmlTagToken
43
+ markers << XmlEntityToken
44
+
45
+ cp = Parser.new( *markers )
46
+ d = cp.parse( s )
47
+ y d
48
+
49
+ _produces_
50
+
51
+ --- &id003 !ruby/array:Parser::Main
52
+ - &id002 !ruby/object:#<Class:0x403084a0>
53
+ body:
54
+ - "THIS IS A "
55
+ - &id001 !ruby/object:#<Class:0x403084a0>
56
+ body:
57
+ - !ruby/object:#<Class:0x403084a0>
58
+ body:
59
+ - BOLD
60
+ match: !ruby/object:MatchData {}
61
+ parent: *id001
62
+ - TEST
63
+ match: !ruby/object:MatchData {}
64
+ parent: *id002
65
+ - !ruby/object:#<Class:0x40308450>
66
+ body: []
67
+ match: !ruby/object:MatchData {}
68
+ parent: *id002
69
+ match: !ruby/object:MatchData {}
70
+ parent: *id003
71
+
72
+ The order in which tokens are passed into the parser is significant, in that it decides
73
+ token precedence on a first-is-highest basis.
74
+
75
+ [Note: There are a few other subtilties to go over that I haven't yet
76
+ documented, primarily related to creating more elaborate custom tokens. TODO!]
77
+
78
+ == History
79
+
80
+ 2005-01-27:
81
+ - Removed priority. Order of tokens when parser is initilized
82
+ now determines precedence.
83
+ - If first argument to Parser.new is not a kind of AbstractToken
84
+ it is assumed to be the reentrant parser, otherwise the parser
85
+ itself is considered the reentrant parser. Having this allows raw
86
+ tokens to parse embedded content (among other things).
87
+
88
+ == Author
89
+
90
+ Thomas Sawyer, (c)Copyright 2005 Ruby License
91
+
92
+ =end
93
+
94
+ require 'carat/attr'
95
+
96
+ #
97
+ # Parser
98
+ #
99
+ class Parser
100
+
101
+ def initialize( *markers )
102
+ unless markers.first.kind_of?( Parser::Token )
103
+ rp = markers.shift
104
+ else
105
+ rp = self
106
+ end
107
+ markers = markers.collect{ |m| c = m.dup ; c.parser = rp ; c }
108
+ @registry = Registry.new( *markers )
109
+ end
110
+
111
+ def parse( text )
112
+ stack = reparse( text )
113
+ return stack
114
+ end
115
+
116
+ private
117
+
118
+ class Main < Array
119
+ def match ; nil ; end
120
+ end
121
+
122
+ def reparse( text )
123
+ stack = Main.new
124
+ token_stack = []
125
+ current = stack
126
+
127
+ offset = 0
128
+ tokenize = 0
129
+ finished = false
130
+
131
+ until finished
132
+ tag = nil
133
+ mode = nil
134
+ match = nil
135
+ token = nil
136
+ index = text.length
137
+
138
+ unless token_stack.empty?
139
+ t = token_stack.last
140
+ m = stack.last
141
+ i = text.index( t.stop( m.match ), offset )
142
+ if i and i < index
143
+ mode = :END
144
+ token = t
145
+ match = $~
146
+ index = i
147
+ end
148
+ end
149
+
150
+ @registry.each do |t|
151
+ i = text.index( t.start( current.match ), offset )
152
+ if i and i < index # what comes first?
153
+ m = $~ # store match
154
+ # if t.unit?
155
+ # mode = :UNIT
156
+ # token = t
157
+ # match = m
158
+ # index = i
159
+ # elsif text.index( t.stop( m ), m.end(0) ) # ensure a matching end tag
160
+ # mode = :START
161
+ # token = t
162
+ # match = m
163
+ # index = i
164
+ # end
165
+ mode = t.unit? ? :UNIT : :START
166
+ token = t
167
+ match = m
168
+ index = i
169
+ if mode == :START
170
+ unless text.index( t.stop( m ), m.end(0) ) # ensure a matching end tag
171
+ raise "no end tag for #{t}"
172
+ end
173
+ end
174
+ end
175
+ end
176
+
177
+ case mode
178
+ when :START
179
+ buffer_text = text[offset...index]
180
+ current << buffer_text unless buffer_text.empty?
181
+ new_marker = Marker.new( token.key, match, current ) #token.new( match, current )
182
+ #p "START", match[0], new_marker if $DEBUG
183
+ if tokenize == 0
184
+ current << new_marker
185
+ current = new_marker
186
+ else
187
+ current << match[0]
188
+ end
189
+ token_stack << token
190
+ stack << new_marker
191
+ tokenize += 1 if token.raw? # increment tokenizer raw tag count
192
+ offset = match.end(0) # increment the offset
193
+ when :END
194
+ buffer_text = text[offset...index].chomp("\n")
195
+ current << buffer_text unless buffer_text.empty?
196
+ completed_token = token_stack.pop # pop off the token
197
+ completed_marker = stack.pop # pop off the marker
198
+ #p "END", match[0], completed_marker if $DEBUG
199
+ tokenize -= 1 if token.raw? # decrement tokenizer raw tag count
200
+ if tokenize == 0
201
+ current = completed_marker.parent
202
+ else
203
+ current << match[0]
204
+ end
205
+ offset = match.end(0) # increment the offset
206
+ when :UNIT
207
+ buffer_text = text[offset...index] #.chomp("\n")
208
+ current << buffer_text unless buffer_text.empty?
209
+ current << Marker.new( token.key, match, current ) #token.new( match, current )
210
+ #p "UNIT", match[0], current.last if $DEBUG
211
+ offset = match.end(0) # increment the offset
212
+ else
213
+ buffer_text = text[offset..-1].chomp("\n")
214
+ current << buffer_text unless buffer_text.empty?
215
+ finished = true # finished
216
+ end #case
217
+ end #until
218
+
219
+ return stack
220
+ end
221
+
222
+ end #class Parser
223
+
224
+ #
225
+ # Registry
226
+ #
227
+ class Parser::Registry
228
+
229
+ attr_reader :registry
230
+
231
+ def initialize( *tokens )
232
+ @registry = []
233
+ register( *tokens )
234
+ end
235
+
236
+ def register( *tokens )
237
+ tokens.each { |tkn|
238
+ raise( ArgumentError, "#{tkn.inspect} is not a Parser::Token" ) unless Parser::Token === tkn
239
+ }
240
+ @registry.concat( tokens )
241
+ #@sorted = false
242
+ end
243
+
244
+ def empty? ; @registry.empty? ; end
245
+
246
+ def each( &yld )
247
+ registry.each( &yld )
248
+ end
249
+
250
+ #def registry_by_class( klass )
251
+ # @registry_by_class[ klass ].sort!
252
+ # @registry_by_class[ klass ]
253
+ #end
254
+
255
+ #def []( klass )
256
+ # registry_by_class[ klass ]
257
+ #end
258
+
259
+ end #class Parser::Registry
260
+
261
+ def self.resc(str) ; Regexp.escape(str) ; end
262
+
263
+ #
264
+ # Token Definition Class
265
+ #
266
+ class Parser::Token
267
+
268
+ attr :key, :type, :start=, :stop=, :parser=
269
+
270
+ def initialize( key, type=nil, start=nil, stop=nil )
271
+ @key = key
272
+ @type = type || :regular
273
+ @start = start
274
+ @stop = stop
275
+ end
276
+
277
+ def unit? ; @type == :unit ; end
278
+ def raw? ; @type == :raw ; end
279
+ def normal? ; @type != :raw && @type != :unit ; end
280
+
281
+ def start( match=nil )
282
+ raise "start undefined for #{name}" unless @start
283
+ @start.call( match )
284
+ end
285
+
286
+ def stop( match=nil )
287
+ raise "stop undefined for #{name}" unless @stop
288
+ @stop.call( match )
289
+ end
290
+
291
+ end
292
+
293
+ #
294
+ # Token Marker
295
+ #
296
+ # This is the superclas of Token, UnitToken and RawToken
297
+ #
298
+ class Parser::Marker
299
+ attr_reader :key, :parent, :match, :body
300
+ def initialize( key, match, parent )
301
+ @key = key
302
+ @parent = parent
303
+ @match = match
304
+ @body = []
305
+ end
306
+ # array-like methods
307
+ def <<( content ) ; @body << content ; end
308
+ def last ; @body.empty? ? @body : @body.last ; end
309
+ def empty? ; @body.empty? ; end
310
+ def pop ; @body.pop ; end
311
+ def each(&blk) ; @body.each(&blk) ; end
312
+ end
313
+
314
+
315
+ # --- development testing ---
316
+
317
+ if $0 == __FILE__
318
+
319
+ require 'yaml'
320
+
321
+ s = %Q{[p]
322
+ THIS IS A
323
+ [t]
324
+ [b]BOLD[b.]TEST
325
+ [t.]
326
+ &tm;
327
+ [p.]
328
+ }
329
+
330
+ tokens = []
331
+
332
+ t = Parser::Token.new
333
+ t.start = lambda { |match| %r{ \[ (.*?) \] }mx }
334
+ t.stop = lambda { |match| %r{ \[ [ ]* (#{resc(match[1])}) (.*?) \. \] }mx }
335
+ tokens << t
336
+
337
+ t = Parser::Token.new(:raw)
338
+ t.start = lambda { |match| %r{ \[ (t.*?) \] }mx }
339
+ t.stop = lambda { |match| %r{ \[ [ ]* (#{resc(match[1])}) (.*?) \. \] }mx }
340
+ tokens << t
341
+
342
+ t = Parser::Token.new(:unit)
343
+ t.start = lambda { |match| ; %r{ \& (.*?) \; }x }
344
+ tokens << t
345
+
346
+ cp = Parser.new( *tokens )
347
+ d = cp.parse( s )
348
+ y d
349
+
350
+ end