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,352 @@
1
+ =begin rdoc
2
+
3
+ = BBCode
4
+
5
+ This module helps easening the separation of core and frontend with the
6
+ core (or submodules) being still able to say, what colors shall be used
7
+ in it's responses. This is achieved by encoding formatting information
8
+ using the BBCode tokens. This enables you to "pipe" layout information
9
+ such as colors, style, fonttype, size and alignment through the core to
10
+ the frontend.
11
+
12
+ Additionally it converts markups/codes between ANSI, HTML and BBCode
13
+ almost freely ;)
14
+
15
+ == Example
16
+
17
+ # Converting a string to ANSI and XHTML
18
+
19
+ require 'raspberry/new/bbcode'
20
+
21
+ str = "this is [COLOR=red]red[/COLOR], this is [B]bold[/B]"
22
+ print( BBCode.bbcode_to_ansi(str) )
23
+ print( BBCode.bbcode_to_html(str) )
24
+
25
+ = Author
26
+
27
+ * Thomas-Ivo Heinen
28
+
29
+ == Legal
30
+
31
+ Copyright (c) 2002 Thomas-Ivo Heinen
32
+
33
+ == History
34
+
35
+ 02-07-16 Bugfix BBCODE=>ANSI, bbcode_to_html, ansi_to_html,
36
+ html_to_bbcode, html_to_ansi
37
+
38
+ 02-11-11 Comment fixes, more case insensitive matching,
39
+ convert deprecated HTML styles (<b>, <i>), more
40
+ space-tolerant matching, img-tags in html_to_bbcode
41
+ works now, some error-preventing stripping and downcasing.
42
+
43
+ == Stamp
44
+
45
+ $Id: bbcode.rb, v2.2 2002/07/16 transami Exp $
46
+
47
+ =end
48
+
49
+ class BBCode
50
+
51
+ VERSION = 2.2
52
+
53
+ ## ANSIname => ANSIcode LUT
54
+ ANSINAME2CODE= { "reset" => "\e[0m", "bold" => "\e[1m",
55
+ "underline" => "\e[4m", "blink" => "\e[5m",
56
+ "reverse" => "\e[7m", "invisible" => "\e[8m",
57
+ "black" => "\e[0;30m", "darkgrey" => "\e[1;30m",
58
+ "red" => "\e[0;31m", "lightred" => "\e[1;31m",
59
+ "green" => "\e[0;32m", "lightgreen" => "\e[1;32m",
60
+ "brown" => "\e[0;33m", "yellow" => "\e[1;33m",
61
+ "blue" => "\e[0;34m", "lightblue" => "\e[1;34m",
62
+ "purple" => "\e[0;35m", "magenta" => "\e[1;35m",
63
+ "cyan" => "\e[1;36m", "lightcyan" => "\e[1;36m",
64
+ "grey" => "\e[0;37m", "white" => "\e[1;37m",
65
+ "bgblack" => "\e[40m", "bgred" => "\e[41m",
66
+ "bggreen" => "\e[42m", "bgyellow" => "\e[43m",
67
+ "bgblue" => "\e[44m", "bgmagenta" => "\e[45m",
68
+ "bgcyan" => "\e[46m", "bgwhite" => "\e[47m"
69
+ }
70
+
71
+ ## BBColor => ANSIname LUT
72
+ BBCOLOR2ANSI = { "skyblue" => "blue", "royalblue" => "blue",
73
+ "blue" => "blue", "darkblue" => "blue",
74
+ "orange" => "red", "orangered" => "red",
75
+ "crimson" => "red", "red" => "lightred",
76
+ "firebrick" => "red", "darkred" => "red",
77
+ "green" => "green", "limegreen" => "green",
78
+ "seagreen" => "green", "darkgreen" => "green",
79
+ "deeppink" => "magenta", "tomato" => "red",
80
+ "coral" => "cyan", "purple" => "purple",
81
+ "indigo" => "blue", "burlywood" => "red",
82
+ "sandybrown"=> "red", "sierra" => "sierra",
83
+ "chocolate" => "brown", "teal" => "teal",
84
+ "silver" => "white",
85
+ "black" => "black", "yellow" => "yellow",
86
+ "magenta" => "magenta", "cyan" => "cyan",
87
+ "white" => "white"
88
+ }
89
+
90
+ ## ANSInames => BBCode LUT
91
+ ANSINAME2BBCODE = { "bold" => "B", "underline" => "U", "reverse" => "I",
92
+
93
+ "red" => "COLOR=red", "blue" => "COLOR=blue",
94
+ "green" => "COLOR=green", "cyan" => "COLOR=cyan",
95
+ "magenta"=> "COLOR=deeppink", "purple" => "COLOR=purple",
96
+ "black" => "COLOR=black", "white" => "COLOR=white",
97
+ "yellow" => "COLOR=yellow", "brown" => "COLOR=chocolate"
98
+ }
99
+
100
+ ## Needed for alignments
101
+ @@width = 80
102
+
103
+
104
+ # ---------------------------
105
+
106
+ # Returns the ANSI sequence for given color, if existant
107
+ def BBCode.ansi(colorname)
108
+ colorname.strip!
109
+ return ANSINAME2CODE[ colorname.downcase ]
110
+ end
111
+
112
+ # --- strip_bbcode( string )
113
+ # Will strip any BBCode tags from the given string.
114
+ def BBCode.strip_bbcode(string)
115
+ string.strip!
116
+ return string.gsub(/\[[A-Za-z0-9\/=]+\]/, "")
117
+ end
118
+
119
+ # Returns the string with all ansi escape sequences converted to BBCodes
120
+ def BBCode.ansi_to_bbcode(string)
121
+ return "" if string.nil? || string.to_s.strip.empty?
122
+ result = ""
123
+ tagstack = []
124
+
125
+ ## Iterate over input lines
126
+ string.split("\n").each do |line|
127
+ ansi = line.scan(/\e\[[0-9;]+m/)
128
+ continue if ansi.nil? || ansi.empty?
129
+
130
+ ## Iterate over found ansi sequences
131
+ ansi.each do |seq|
132
+ ansiname = ANSINAME2CODE.invert["#{seq}"]
133
+
134
+ ## Pop last tag and form closing tag
135
+ if ansiname == "reset"
136
+ lasttag = tagstack.pop
137
+ bbname = "/" + String.new( lasttag.split("=")[0] )
138
+
139
+ ## Get corresponding BBCode tag + Push to stack
140
+ else
141
+ bbname = ANSINAME2BBCODE[ansiname]
142
+ tagstack.push(bbname)
143
+ end
144
+
145
+ ## Replace ansi sequence by BBCode tag
146
+ replace = sprintf("[%s]", bbname)
147
+ line.sub!("#{Regexp.quote(seq)}", replace)
148
+ end
149
+
150
+ ## Append converted line
151
+ result << sprintf("%s\n", line)
152
+ end
153
+
154
+
155
+ ## Some tags are unclosed
156
+ while !tagstack.empty?
157
+ result << sprintf("[/%s]", String.new(tagstack.pop.split("=")[0]) )
158
+ end
159
+
160
+ return result
161
+ end
162
+
163
+ # Converts a BBCode string to one with ANSI sequences.
164
+ # Returns the string with all formatting instructions in BBCodes converted
165
+ # to ANSI code sequences / aligned with spaces to specified width.
166
+ def BBCode.bbcode_to_ansi(string, usecolors = true)
167
+ return "" if string.nil? || string.to_s.strip.empty?
168
+ result = ""
169
+
170
+ return BBCode.strip_bbcode(string) if !usecolors
171
+
172
+ ## Iterate over lines
173
+ string.split("\n").each do |line|
174
+
175
+ ## TODO: stacking? other styles!
176
+ ANSINAME2BBCODE.each do |key,val|
177
+ line.gsub!(/\[#{val}\]/, ANSINAME2CODE[key])
178
+ line.gsub!(/\[\/#{val}\]/, ANSINAME2CODE["reset"])
179
+ end
180
+
181
+ ## Fonttypes and sizes not available
182
+ line.gsub!(/\[SIZE=\d\]/, "")
183
+ line.gsub!(/\[\/SIZE\]/, "")
184
+ line.gsub!(/\[FONT=[^\]]*\]/, "")
185
+ line.gsub!(/\[\/FONT\]/, "")
186
+
187
+ ## Color-mapping
188
+ colors = line.scan(/\[COLOR=(.*?)\]/i)
189
+ colors = colors.collect{|s| s[0].to_s} if !colors.nil?
190
+ colors.each do |col|
191
+ name = BBCOLOR2ANSI[col.downcase]
192
+ name = BBCOLOR2ANSI["white"] if name.nil?
193
+ code = ANSINAME2CODE[name]
194
+
195
+ line.gsub!(/\[COLOR=#{col}\]/i, code)
196
+ end
197
+ line.gsub!(/\[\/COLOR\]/, ANSINAME2CODE["reset"])
198
+
199
+ ## TODO: Alignment
200
+ ## TODO: IMGs
201
+ ## TODO: EMAILs
202
+ ## TODO: URLs
203
+ ## TODO: QUOTEs
204
+ ## TODO: LISTs
205
+
206
+ result << sprintf("%s\n", line)
207
+ end
208
+
209
+ return result
210
+ end
211
+
212
+
213
+ # Converts a HTML string into one with BBCode markup (TODO)
214
+ # Returns the (X)HTML markup string as BBCode
215
+ def BBCode.html_to_bbcode(string)
216
+ return "" if string.nil? || string.to_s.strip.empty?
217
+ result = ""
218
+
219
+ ## Iterate over lines
220
+ string.split(/<br *\/?>/i).each do |line|
221
+ styles = { "strong" => "b", "b" => "b",
222
+ "em" => "i", "i" => "i",
223
+ "u" => "u" }
224
+
225
+ ## preserve B, I, U
226
+ styles.each do |html,code|
227
+ line.gsub!(/<#{html}>/i, "[#{code.upcase}]")
228
+ line.gsub!(/<\/#{html}>/i, "[/#{code.upcase}]")
229
+ end
230
+
231
+ ## TODO: COLORs
232
+ ## TODO: SIZEs
233
+ ## TODO: FONTs
234
+
235
+ ## EMAIL
236
+ line.gsub!(/<a +href *= *\"mailto:(.*?)\".*?>.*?<\/a>/i, "[EMAIL]\\1[/EMAIL]")
237
+
238
+ ## URL
239
+ line.gsub!(/<a +href *= *\"((?:https?|ftp):\/\/.*?)\".*?>(.*?)<\/a>/i, "[URL=\\1]\\2[/URL]")
240
+
241
+ ## Other refs + closing tags => throw away
242
+ line.gsub!(/<a +href *= *\".*?\".*?>/i, "")
243
+ line.gsub!(/<\/a>/i, "")
244
+
245
+ ## IMG
246
+ line.gsub!(/<img +src *= *\"(.*?)\".*?\/?>/i, "[IMG=\\1]")
247
+
248
+ ## CENTER (right/left??)
249
+ line.gsub!(/<center>/i, "[ALIGN=center]")
250
+ line.gsub!(/<\/center>/i, "[/ALIGN]")
251
+
252
+ ## QUOTE
253
+ line.gsub!(/<(?:xmp|pre)>/i, "[QUOTE]")
254
+ line.gsub!(/<\/(?:xmp|pre)>/i, "[/QUOTE]")
255
+
256
+ ## LIST
257
+ line.gsub!(/<ul>/i, "\n[LIST]\n")
258
+ line.gsub!(/<\/ul>/i, "\n[/LIST]\n")
259
+ line.gsub!(/<li *\/?> */i, "\n[*] ")
260
+
261
+ ## Unkown tags => throw away
262
+ line.gsub!(/<.*? *\/?>/, "")
263
+
264
+ result << sprintf("%s<br />\n", line)
265
+ end
266
+
267
+ return result.gsub!(/<br *\/?>/i, "\n")
268
+ end
269
+
270
+ # Converts a BBCode string to one with HTML markup.
271
+ # Returns the string with all formatting instructions in
272
+ # BBCodes converted to XHTML markups.
273
+ def BBCode.bbcode_to_html(string)
274
+ return "" if string.nil? || string.to_s.strip.empty?
275
+ result = ""
276
+ quote = 0
277
+
278
+ ## Iterate over lines
279
+ string.split("\n").each do |line|
280
+ styles = { "b" => "strong", "i" => "em", "u" => "u" }
281
+
282
+ ## preserve B, I, U
283
+ styles.each do |code,html|
284
+ line.gsub!(/\[#{code}\]/i, "<#{html}>")
285
+ line.gsub!(/\[\/#{code}\]/i, "</#{html}>")
286
+ end
287
+
288
+ ## COLOR => font color=... (TODO: should be numeric!)
289
+ line.gsub!(/\[COLOR=(.*?)\]/i, "<font color=\"\\1\">")
290
+ line.gsub!(/\[\/COLOR\]/i, "</font>")
291
+
292
+ ## SIZE => font size=...
293
+ line.gsub!(/\[SIZE=(.*?)\]/i, "<font size=\"\\1\">")
294
+ line.gsub!(/\[\/SIZE\]/i, "</font>")
295
+
296
+ ## URL
297
+ line.gsub!(/\[URL\]([^\[]+?)\[\/URL\]/i, "<a href=\"\\1\">\\1</a>")
298
+ line.gsub!(/\[URL=(.*?)\](.+?)\[\/URL\]/i, "<a href=\"\\1\">\\2</a>")
299
+
300
+ ## IMG
301
+ line.gsub!(/\[IMG=(.*?)\]/i, "<img src=\"\\1\" />")
302
+
303
+ ## ALIGN=center (TODO: right, left)
304
+ line.gsub!(/\[ALIGN=center\]/i, "<center>")
305
+ line.gsub!(/\[ALIGN=right\]/i, "<center>")
306
+ line.gsub!(/\[ALIGN=left\]/i, "<center>")
307
+ line.gsub!(/\[\/ALIGN\]/i, "</center>")
308
+
309
+ ## QUOTE
310
+ quote+=1 if line =~ /\[QUOTE\]/i
311
+ quote-=1 if (line =~ /\[\/QUOTE\]/i) && (quote > -1)
312
+ line.gsub!(/\[QUOTE\]/i, "<pre>\n")
313
+ line.gsub!(/\[\/QUOTE\]/i, "</pre>\n")
314
+ line.gsub!(/^/, "&#62;"*quote) if quote > 0
315
+
316
+ ## EMAIL
317
+ line.gsub!(/\[EMAIL\](.*?)\[\/EMAIL\]/i, "<a href=\"mailto:\\1\">\\1</a>")
318
+
319
+ ## LIST (TODO: LIST=1, LIST=A)
320
+ line.gsub!(/\[LIST(?:=(.*?))?\]/i, "\n<ul>\n")
321
+ line.gsub!(/\[\/LIST\]/i, "\n</ul>\n")
322
+ line.gsub!(/\[\*\]/i, "\n<li />")
323
+
324
+ ## FONT => font ??????
325
+ ## ?BLUR?, FADE?
326
+
327
+ result << sprintf("%s<br />\n", line)
328
+ end
329
+
330
+ return result
331
+ end
332
+
333
+
334
+ # -- Transitive methods ---------------
335
+
336
+ # Converts a ANSI string to one with HTML markup.
337
+ # Returns the string with ANSI code sequences converted to XHTML markup.
338
+ def BBCode.ansi_to_html(string)
339
+ bbcoded = BBCode.ansi_to_bbcode(string )
340
+ htmled = BBCode.bbcode_to_html(bbcoded)
341
+
342
+ return htmled
343
+ end
344
+
345
+ # Returns the (X)HTML markup code as ANSI sequences
346
+ def BBCode.html_to_ansi(string)
347
+ bbcoded = BBCode.html_to_bbcode(string )
348
+ ansied = BBCode.bbcode_to_ansi(bbcoded)
349
+
350
+ return ansied
351
+ end
352
+ end
@@ -0,0 +1,170 @@
1
+ # $Id: binaryreader.rb,v 0.9 2004/11/30 transami Exp $
2
+
3
+ =begin rdoc
4
+
5
+ = BinaryReader
6
+
7
+ This mixin solely depends on method read(n), which must be
8
+ defined in the class/module where you mixin this module.
9
+
10
+ == Synopsis
11
+
12
+ # [To be done]
13
+
14
+ == Author
15
+
16
+ * Michael Neumann
17
+
18
+ =end
19
+
20
+ require 'carat/byteorder'
21
+
22
+
23
+ module BinaryReader
24
+
25
+ # default is native byte-order
26
+ def byte_order
27
+ @byte_order || ByteOrder::Native
28
+ end
29
+
30
+ def byte_order=(new_byteorder)
31
+ @byte_order = new_byteorder
32
+ end
33
+
34
+ alias byteorder byte_order
35
+ alias byteorder= byte_order=
36
+
37
+ # == 8 bit
38
+
39
+ # no byteorder for 8 bit!
40
+
41
+ def read_word8
42
+ ru(1, 'C')
43
+ end
44
+
45
+ def read_int8
46
+ ru(1, 'c')
47
+ end
48
+
49
+ # == 16 bit
50
+
51
+ # === Unsigned
52
+
53
+ def read_word16_native
54
+ ru(2, 'S')
55
+ end
56
+
57
+ def read_word16_little
58
+ ru(2, 'v')
59
+ end
60
+
61
+ def read_word16_big
62
+ ru(2, 'n')
63
+ end
64
+
65
+ # === Signed
66
+
67
+ def read_int16_native
68
+ ru(2, 's')
69
+ end
70
+
71
+ def read_int16_little
72
+ # swap bytes if native=big (but we want little)
73
+ ru_swap(2, 's', ByteOrder::Big)
74
+ end
75
+
76
+ def read_int16_big
77
+ # swap bytes if native=little (but we want big)
78
+ ru_swap(2, 's', ByteOrder::Little)
79
+ end
80
+
81
+ # == 32 bit
82
+
83
+ # === Unsigned
84
+
85
+ def read_word32_native
86
+ ru(4, 'L')
87
+ end
88
+
89
+ def read_word32_little
90
+ ru(4, 'V')
91
+ end
92
+
93
+ def read_word32_big
94
+ ru(4, 'N')
95
+ end
96
+
97
+ # === Signed
98
+
99
+ def read_int32_native
100
+ ru(4, 'l')
101
+ end
102
+
103
+ def read_int32_little
104
+ # swap bytes if native=big (but we want little)
105
+ ru_swap(4, 'l', ByteOrder::Big)
106
+ end
107
+
108
+ def read_int32_big
109
+ # swap bytes if native=little (but we want big)
110
+ ru_swap(4, 'l', ByteOrder::Little)
111
+ end
112
+
113
+ # == Aliases
114
+
115
+ alias read_uint8 read_word8
116
+
117
+ # add some short-cut functions
118
+ %w(word16 int16 word32 int32).each do |typ|
119
+ eval %{
120
+ alias read_#{typ}_network read_#{typ}_big
121
+ def read_#{typ}(byte_order = nil)
122
+ case byte_order || @byte_order
123
+ when ByteOrder::Native then read_#{typ}_native
124
+ when ByteOrder::Little then read_#{typ}_little
125
+ when ByteOrder::Network then read_#{typ}_network
126
+ else raise ArgumentError
127
+ end
128
+ end
129
+ }
130
+ end
131
+
132
+ {:word16 => :uint16, :word32 => :uint32}.each do |old, new|
133
+ ['', '_native', '_little', '_big', '_network'].each do |bo|
134
+ eval %{
135
+ alias read_#{new}#{bo} read_#{old}#{bo}
136
+ }
137
+ end
138
+ end
139
+
140
+ def read_cstring
141
+ str = ""
142
+ while (c=readn(1)) != "\0"
143
+ str << c
144
+ end
145
+ str
146
+ end
147
+
148
+ # read exactly n characters, otherwise raise an exception.
149
+ def readn(n)
150
+ str = read(n)
151
+ raise "couldn't read #{n} characters" if str.nil? or str.size != n
152
+ str
153
+ end
154
+
155
+ private
156
+
157
+ # shortcut method for readn+unpack
158
+ def ru(size, template)
159
+ readn(size).unpack(template).first
160
+ end
161
+
162
+ # same as method +ru+, but swap bytes if native byteorder == _byteorder_
163
+ def ru_swap(size, template, byteorder)
164
+ str = readn(size)
165
+ str.reverse! if ByteOrder.byteorder == byteorder
166
+ str.unpack(template).first
167
+ end
168
+
169
+ end
170
+