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,393 @@
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-02-06:
81
+ - Removed raw tokens. Raw text is now available to every regular token,
82
+ so the end application can decided how to treat it.
83
+
84
+ 2005-01-27:
85
+ - Removed priority. Order of tokens when parser is initilized
86
+ now determines precedence.
87
+ - If first argument to Parser.new is not a kind of AbstractToken
88
+ it is assumed to be the reentrant parser, otherwise the parser
89
+ itself is considered the reentrant parser. Having this allows raw
90
+ tokens to parse embedded content (among other things).
91
+
92
+ == Author
93
+
94
+ Thomas Sawyer, (c)Copyright 2005 Ruby License
95
+
96
+ =end
97
+
98
+ require 'carat/attr'
99
+ require 'ostruct'
100
+
101
+ #
102
+ # Parser
103
+ #
104
+ class Parser
105
+
106
+ def initialize( *markers )
107
+ unless markers.first.kind_of?( Parser::Token )
108
+ rp = markers.shift
109
+ else
110
+ rp = nil #self
111
+ end
112
+ markers = markers.collect{ |m| c = m.dup ; c.parser = rp ; c }
113
+ @registry = Registry.new( *markers )
114
+ end
115
+
116
+ def parse( text )
117
+ stack = reparse( text )
118
+ return stack
119
+ end
120
+
121
+ private
122
+
123
+ #
124
+ # Main to start stack
125
+ #
126
+ class Main < Array
127
+ def match ; nil ; end
128
+ end
129
+
130
+ #
131
+ # Token Marker
132
+ #
133
+ # This is the superclas of Token, UnitToken and RawToken
134
+ #
135
+ class Marker
136
+ attr_accessor :token, :match, :parent, :content
137
+ attr_accessor :outer_range, :inner_range
138
+ def initialize
139
+ @content = []
140
+ end
141
+ # array-like methods
142
+ def <<( content ) ; @content << content ; end
143
+ def last ; @content.empty? ? @content : @content.last ; end
144
+ def empty? ; @content.empty? ; end
145
+ def pop ; @content.pop ; end
146
+ def each(&blk) ; @content.each(&blk) ; end
147
+ end
148
+
149
+
150
+ def reparse( text )
151
+ stack = Main.new
152
+ #stack = []
153
+ #token_stack = []
154
+ current = stack
155
+
156
+ offset = 0
157
+ #tokenize = 0
158
+ finished = false
159
+
160
+ until finished
161
+ mode = nil
162
+ match = nil
163
+ token = nil
164
+ index = text.length
165
+
166
+ #unless token_stack.empty?
167
+ unless stack.empty?
168
+ raise "not a marker on end of stack?" unless Marker === stack.last
169
+ m = stack.last # get last marker
170
+ #t = token_stack.last
171
+ t = m.token # marker's token
172
+ i = text.index( t.stop( m.match ), offset )
173
+ if i #and i < index
174
+ mode = :END
175
+ token = t
176
+ match = $~
177
+ index = i
178
+ end
179
+ end
180
+
181
+ @registry.each do |t|
182
+ i = text.index( t.start( current.match ), offset )
183
+ if i and i < index # what comes first?
184
+ m = $~ # store match
185
+ # if t.unit?
186
+ # mode = :UNIT
187
+ # token = t
188
+ # match = m
189
+ # index = i
190
+ # elsif text.index( t.stop( m ), m.end(0) ) # ensure a matching end token
191
+ # mode = :START
192
+ # token = t
193
+ # match = m
194
+ # index = i
195
+ # end
196
+ mode = t.unit? ? :UNIT : :START
197
+ token = t
198
+ match = m
199
+ index = i
200
+
201
+ unless t.unit? #if mode == :START
202
+ unless text.index( t.stop( m ), m.end(0) ) # ensure a matching end token
203
+ raise "no end token matching #{t.stop( m )}"
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+ case mode
210
+ when :START
211
+ buffer_text = text[offset...index]
212
+ current << buffer_text unless buffer_text.empty?
213
+
214
+ mock = Marker.new
215
+ mock.token = token
216
+ mock.match = match
217
+ mock.parent = current
218
+
219
+ current << mock
220
+ current = mock
221
+ stack << mock
222
+
223
+ offset = match.end(0) # increment the offset
224
+
225
+ #tokenize += 1 if token.raw? # increment tokenizer raw token count
226
+
227
+ when :END
228
+ buffer_text = text[offset...index].chomp("\n")
229
+ current << buffer_text unless buffer_text.empty?
230
+
231
+ mock = stack.pop # pop off the marker
232
+
233
+ mock.outer_range = mock.match.begin(0)...match.end(0)
234
+ mock.inner_range = mock.match.end(0)...match.begin(0)
235
+
236
+ current = mock.parent
237
+
238
+ offset = match.end(0) # increment the offset
239
+
240
+ when :UNIT
241
+ buffer_text = text[offset...index] #.chomp("\n")
242
+ current << buffer_text unless buffer_text.empty?
243
+
244
+ mock = Marker.new
245
+ mock.token = token
246
+ mock.match = match
247
+ mock.parent = current
248
+
249
+ mock.outer_range = match.begin(0)...match.end(0)
250
+
251
+ current << mock
252
+
253
+ offset = match.end(0) # increment the offset
254
+
255
+ else
256
+ buffer_text = text[offset..-1].chomp("\n")
257
+ current << buffer_text unless buffer_text.empty?
258
+
259
+ finished = true # finished
260
+
261
+ end #case
262
+ end #until
263
+
264
+ return stack
265
+ end
266
+
267
+ end #class Parser
268
+
269
+ #
270
+ # Registry
271
+ #
272
+ class Parser::Registry
273
+
274
+ attr_reader :registry
275
+
276
+ def initialize( *tokens )
277
+ @registry = []
278
+ register( *tokens )
279
+ end
280
+
281
+ def register( *tokens )
282
+ tokens.each { |tkn|
283
+ unless Parser::Token === tkn or Parser::UnitToken === tkn
284
+ raise( ArgumentError, "#{tkn.inspect} is not a Parser::Token" )
285
+ end
286
+ }
287
+ @registry.concat( tokens )
288
+ #@sorted = false
289
+ end
290
+
291
+ def empty? ; @registry.empty? ; end
292
+
293
+ def each( &yld )
294
+ registry.each( &yld )
295
+ end
296
+
297
+ #def registry_by_class( klass )
298
+ # @registry_by_class[ klass ].sort!
299
+ # @registry_by_class[ klass ]
300
+ #end
301
+
302
+ #def []( klass )
303
+ # registry_by_class[ klass ]
304
+ #end
305
+
306
+ end #class Parser::Registry
307
+
308
+ def self.resc(str) ; Regexp.escape(str) ; end
309
+
310
+ #
311
+ # Token Definition Class
312
+ #
313
+ class Parser::Token
314
+
315
+ attr :key, :type, :start=, :stop=, :parser=
316
+
317
+ def initialize( key, start=nil, stop=nil )
318
+ @key = key
319
+ @start = start
320
+ @stop = stop
321
+ end
322
+
323
+ def unit? ; false ; end
324
+ #def raw? ; @type == :raw ; end
325
+ #def normal? ; @type != :raw && @type != :unit ; end
326
+
327
+ def start( match=nil )
328
+ raise "start undefined for #{key}" unless @start
329
+ @start.call( match )
330
+ end
331
+
332
+ def stop( match=nil )
333
+ raise "stop undefined for #{key}" unless @stop
334
+ @stop.call( match )
335
+ end
336
+
337
+ end
338
+
339
+ #
340
+ # Unit Token Definition Class
341
+ #
342
+ class Parser::UnitToken
343
+
344
+ attr :key, :type, :start=, :parser=
345
+
346
+ def initialize( key, start=nil )
347
+ @key = key
348
+ @start = start
349
+ end
350
+
351
+ def unit? ; true ; end
352
+ #def raw? ; @type == :raw ; end
353
+ #def normal? ; @type != :raw && @type != :unit ; end
354
+
355
+ def start( match=nil )
356
+ raise "start undefined for #{key}" unless @start
357
+ @start.call( match )
358
+ end
359
+
360
+ end
361
+
362
+
363
+
364
+
365
+ # --- development testing ---
366
+
367
+ if $0 == __FILE__
368
+
369
+ require 'yaml'
370
+
371
+ s = %Q{
372
+ [p]
373
+ This is plain paragraph.
374
+ [t][b]This bold.[b.]This tee'd off.[t.]&tm;
375
+ [p.]
376
+ }
377
+
378
+ tokens = []
379
+
380
+ t = Parser::Token.new( :ONE )
381
+ t.start = lambda { |match| %r{ \[ (.*?) \] }mx }
382
+ t.stop = lambda { |match| %r{ \[ [ ]* (#{resc(match[1])}) (.*?) \. \] }mx }
383
+ tokens << t
384
+
385
+ t = Parser::UnitToken.new( :TWO )
386
+ t.start = lambda { |match| ; %r{ \& (.*?) \; }x }
387
+ tokens << t
388
+
389
+ cp = Parser.new( *tokens )
390
+ d = cp.parse( s )
391
+ y d
392
+
393
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # Document please.
3
+ #
4
+ class Ref
5
+ instance_methods.each{|m| undef_method(m)}
6
+
7
+ def self.new(obj)
8
+ ref = allocate
9
+ ref.become obj
10
+ ref
11
+ end
12
+
13
+ def method_missing(*args, &block)
14
+ @ref.__send__(*args, &block)
15
+ end
16
+
17
+ def become(obj)
18
+ old = @ref
19
+ @ref = obj
20
+ old
21
+ end
22
+
23
+ def __value__() @ref end
24
+ end
25
+
26
+
27
+ module Kernel
28
+ def ref(x)
29
+ Ref.new(x)
30
+ end
31
+ end
@@ -0,0 +1,69 @@
1
+ =begin rdoc
2
+
3
+ = Semaphore (CountingSemaphore)
4
+
5
+ Technically a semaphore is simply an integer variable which
6
+ has an execution queue associated with it.
7
+
8
+ == Usage
9
+
10
+ s = Semaphore.new
11
+
12
+ # to do
13
+
14
+ == History
15
+
16
+ $Id: semaphore.rb,v 1.2 2003/03/15 20:10:10 fukumoto Exp $
17
+
18
+ =end
19
+
20
+ class CountingSemaphore
21
+
22
+ def initialize(initvalue = 0)
23
+ @counter = initvalue
24
+ @waiting_list = []
25
+ end
26
+
27
+ def wait
28
+ Thread.critical = true
29
+ if (@counter -= 1) < 0
30
+ @waiting_list.push(Thread.current)
31
+ Thread.stop
32
+ end
33
+ self
34
+ ensure
35
+ Thread.critical = false
36
+ end
37
+
38
+ def signal
39
+ Thread.critical = true
40
+ begin
41
+ if (@counter += 1) <= 0
42
+ t = @waiting_list.shift
43
+ t.wakeup if t
44
+ end
45
+ rescue ThreadError
46
+ retry
47
+ end
48
+ self
49
+ ensure
50
+ Thread.critical = false
51
+ end
52
+
53
+ alias_method( :down, :wait )
54
+ alias_method( :up, :signal )
55
+ alias_method( :p, :wait )
56
+ alias_method( :v, :signal )
57
+
58
+ def exclusive
59
+ wait
60
+ yield
61
+ ensure
62
+ signal
63
+ end
64
+
65
+ alias_method( :synchronize, :exclusive )
66
+
67
+ end
68
+
69
+ Semaphore = CountingSemaphore