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,71 @@
1
+ =begin :rdoc:
2
+
3
+ = DynamicMixin
4
+
5
+ == Example
6
+
7
+ module Mixin
8
+ extend DynamicMixin
9
+ def self.default_options
10
+ { :name => "Buffalo" }
11
+ end
12
+ def hello
13
+ puts "Hello from #{dynamic_options[:name]}!"
14
+ end
15
+ end
16
+
17
+ class T
18
+ include Mixin[ :name => "Test" ]
19
+ end
20
+ t = T.new
21
+ t.hello
22
+
23
+ class S
24
+ include Mixin[ :name => "Sister" ]
25
+ end
26
+ s = S.new
27
+ s.hello
28
+
29
+ module Mixin2
30
+ extend DynamicMixin
31
+ include Mixin[ :name => "Flo"]
32
+ end
33
+
34
+ class R
35
+ include Mixin2[ :name => "Bruce"]
36
+ end
37
+ r = R.new
38
+ r.hello
39
+
40
+ =end
41
+
42
+ module DynamicMixin
43
+
44
+ def self.extended( mod )
45
+ mod.class_eval do
46
+ define_method(:dynamic_options) {
47
+ mod.respond_to?(:default_options) ? mod.default_options : {}
48
+ }
49
+ end
50
+ end
51
+
52
+ def [](options = {})
53
+ @cache ||= {} # Not really needed, but not much work either
54
+
55
+ defaults = self.respond_to?( :default_options ) ? self.default_options : {}
56
+ options = defaults.merge(options)
57
+
58
+ mod = self.name
59
+ opt_str = options.map { |pair| pair.join(" => ") }.join(", ")
60
+ name = "#{self.name}[#{opt_str}]"
61
+
62
+ @cache[options] ||= self.dup
63
+ @cache[options].class_eval {
64
+ meta = class << self; self; end
65
+ meta.send(:define_method, :name) { name }
66
+ define_method(:dynamic_options) { options }
67
+ }
68
+ return @cache[options]
69
+ end
70
+
71
+ end
@@ -0,0 +1,125 @@
1
+ =begin rdoc
2
+
3
+ = EnumerableWithArgs
4
+
5
+ This is a simple reimplementation of the core Enumerable module
6
+ to allow the methods to take and pass-on arbitrary arguments to the
7
+ underlying #each call.
8
+
9
+ == Synopsis
10
+
11
+ require 'carat/enumerable-args'
12
+
13
+ class T
14
+ include Enumerable
15
+ def initialize(arr)
16
+ @arr = arr
17
+ end
18
+ def each(n)
19
+ arr.each{ |e| yield(e+n) }
20
+ end
21
+ end
22
+
23
+ t = T.new([1,2,3])
24
+ t.collect(4)
25
+ #=> [5,6,7]
26
+
27
+ == Note
28
+
29
+ The #sort method still needs to be done.
30
+
31
+ == Legal
32
+
33
+ Copyright (c) 2004 Thomas Sawyer, Pancakes License
34
+
35
+ == History
36
+
37
+ $Id: enumerable.rb,v 1.0 2004/11/30 transami Exp $
38
+
39
+ =end
40
+
41
+ module EnumerableWithArgs
42
+
43
+ def collect(*args) # :yield:
44
+ a = []
45
+ each(*args){ |n| a << yield(n) }
46
+ a
47
+ end
48
+ alias_method( :map, :collect )
49
+
50
+ def detect(*args) # :yield:
51
+ each(*args){ |n| return n if yield(n) }
52
+ nil
53
+ end
54
+ alias_method( :find, :detect )
55
+
56
+ # problematic for multiple arity on block
57
+ #def each_with_index(*args)
58
+ # i=0
59
+ # each(*args){ |n,i| yield(n); i+=1 }
60
+ # self
61
+ #end
62
+
63
+ def to_a(*args)
64
+ a = []
65
+ each(*args){ |n| a << n }
66
+ a
67
+ end
68
+ alias_method( :entries, :to_a )
69
+
70
+ # An additional method not part of standard Enumerable.
71
+ # The regular version of this method can be found in Facets,
72
+ # but it is a bit more advanced then this one.
73
+ # At some point they need to be put into sync.
74
+ def each_slice(*args, &yld)
75
+ a = []; s = []
76
+ ar = yld.arity.abs
77
+ each(*args){ |n|
78
+ s << n
79
+ if s.length >= ar
80
+ yld.call(*s)
81
+ s = []
82
+ end
83
+ }
84
+ a
85
+ end
86
+ alias_method( :each_by, :each_slice )
87
+
88
+ def select(*args) # :yield:
89
+ a = []
90
+ each(*args){ |n| a << n if yield(n) }
91
+ a
92
+ end
93
+ alias_method( :find_all, :select )
94
+
95
+ def grep(pattern, *args)
96
+ a = []
97
+ each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
98
+ a
99
+ end
100
+
101
+ def include?(anObj, *args)
102
+ each(*args){ |n| return true if anObj == n }
103
+ false
104
+ end
105
+ alias_method( :member?, :include? )
106
+
107
+ def max(*args)
108
+ to_a(*args).max
109
+ end
110
+
111
+ def min(*args)
112
+ to_a(*args).min
113
+ end
114
+
115
+ def reject(*args)
116
+ a = []
117
+ each(*args){ |n| a << n if ! yield(n) }
118
+ a
119
+ end
120
+
121
+ def sort(*args)
122
+ # TODO
123
+ end
124
+
125
+ end
@@ -0,0 +1,192 @@
1
+ =begin rdoc
2
+
3
+ = Expect
4
+
5
+ Given an IO object, read data from that object and expect certain data.
6
+
7
+ All expected data is expected in 'chains'. When a message is received, it
8
+ is compared to the pattern at the top of each chain. If it matches one of
9
+ the patterns, then all is well, but an error message is printed otherwise.
10
+
11
+ A message can match patterns in more than one chain.
12
+
13
+ == Synopsis
14
+
15
+ require 'carat/expect'
16
+
17
+ # to do
18
+
19
+ == Legal
20
+
21
+ Adopted from Ruby Treasures 0.4
22
+ Copyright (C) 2002 Paul Brannan <paul@atdesk.com>
23
+
24
+ You may distribute this software under the same terms as Ruby (see the file
25
+ COPYING that was distributed with this library).
26
+
27
+ == History
28
+
29
+ $Id: expect.rb, v0.4 2004/11/30 transami Exp $
30
+
31
+ =end
32
+
33
+ class Expect
34
+ public
35
+
36
+ VERSION = "0.4"
37
+
38
+ class UnmatchedMessage < Exception
39
+ attr_reader :msg
40
+
41
+ def initialize(msg)
42
+ @msg = msg
43
+ super("Message not matched: `#{msg}'")
44
+ end
45
+ end
46
+
47
+ class Timeout < Exception
48
+ attr_reader :chain
49
+ attr_reader :pattern
50
+
51
+ def initialize(chain, pattern)
52
+ @chain = chain
53
+ @pattern = pattern
54
+
55
+ super("Timed out waiting for #{pattern.inspect} in chain #{chain.inspect}")
56
+ end
57
+ end
58
+
59
+ ##
60
+ # A special type of pattern that matches a list of patterns, separated
61
+ # by a given separator, in any order.
62
+ #
63
+ # Example:
64
+ # <pre>
65
+ # # matches 'foo,bar' and 'bar,foo'
66
+ # p = Expect::SeparatedPattern.new(['foo', 'bar'])
67
+ #
68
+ # e = Expect.new(nil, nil)
69
+ # e.expect(p)
70
+ # </pre>
71
+ #
72
+ class SeparatedPattern
73
+ attr_accessor :separator
74
+
75
+ def initialize(message, separator = ',')
76
+ @message = message
77
+ @separator = separator
78
+ end
79
+
80
+ def ===(line)
81
+ message = @message.dup
82
+
83
+ # Iterate through each field to make sure it matches. When
84
+ # we find a match, delete that field so we never check it
85
+ # again.
86
+ for field in fields do
87
+ message.each_index do |index|
88
+ if message[index] === field then
89
+ message.delete_at(index)
90
+ end
91
+ end
92
+ end
93
+
94
+ # If there are no more fields, then we deleted all of them,
95
+ # and we got a match
96
+ return message.length == 0
97
+ end
98
+ end
99
+
100
+ class DefaultChain
101
+ end
102
+
103
+ ##
104
+ # It is highly recommended that this be an immutable object.
105
+ #
106
+ attr_accessor :timeout
107
+
108
+ ##
109
+ # Create a new Expect_Test object.
110
+ #
111
+ # @param io_object an IO object to read from.
112
+ # @param reactor a reactor to use
113
+ #
114
+ def initialize(io_object, reactor)
115
+ @io_object = io_object
116
+ @reactor = reactor
117
+ @reactor.register_read(@io_object, method(:handle_event))
118
+ reset()
119
+ end
120
+
121
+ ##
122
+ # Reset the the ignore chain and all expect chains.
123
+ #
124
+ def reset()
125
+ @expect_chain = Hash.new
126
+ @ignore_chain = Array.new
127
+ @expects_left = 0
128
+ end
129
+
130
+ ##
131
+ # Expect a message matching pattern in a certain chain.
132
+ #
133
+ # @param pattern the pattern to expect.
134
+ # @param chain the chain in which to expect the message.
135
+ #
136
+ def expect(pattern, chain=DefaultChain)
137
+ @expect_chain[chain] ||= Array.new
138
+ @expect_chain[chain].push(pattern)
139
+ @expects_left += 1
140
+ end
141
+
142
+ ##
143
+ # Ignore a pattern in all chains.
144
+ #
145
+ # @param pattern the pattern to ignore.
146
+ #
147
+ def ignore(pattern)
148
+ @ignore_chain.push(pattern)
149
+ end
150
+
151
+ def run(timeout = nil)
152
+ return if @expects_left == 0
153
+ catch :expect_loop_done do
154
+ @reactor.run_event_loop(timeout)
155
+ for key, chain in @expect_chain do
156
+ next if chain.length == 0
157
+ raise Timeout.new(key, chain.first)
158
+ end
159
+ # TODO: What does it mean if we got here?
160
+ end
161
+ end
162
+
163
+ def handle_event(io_object)
164
+ handle_line(io_object.gets())
165
+ end
166
+
167
+ def handle_line(line)
168
+ line.chomp!()
169
+
170
+ # Check each element in the ignore chain
171
+ for pattern in @ignore_chain do
172
+ return if pattern === line
173
+ end
174
+
175
+ # Check the first element of each expect chain to see if
176
+ # the message matches
177
+ match = false
178
+ for key, chain in @expect_chain do
179
+ next if chain.length == 0
180
+ if chain.first() === line then
181
+ chain.shift()
182
+ @expects_left -= 1
183
+ match = true
184
+ end
185
+ end
186
+
187
+ throw :expect_loop_done if @expects_left == 0
188
+
189
+ raise UnmatchedMessage.new(line) if match == false
190
+ end
191
+ end
192
+
@@ -0,0 +1,277 @@
1
+ =begin rdoc
2
+
3
+ = FileList
4
+
5
+ A FileList is essentially an array with a few helper methods
6
+ defined to make file manipulation a bit easier. It works in
7
+ a fashion similar to Dir.glob.
8
+
9
+ == Synopsis
10
+
11
+ require 'trix/filelist'
12
+
13
+ fl = FileList.new
14
+ fl.include('./**/*')
15
+ fl.exclude('./*~')
16
+
17
+ == Legal
18
+
19
+ Ported from Rake
20
+ Copyright (C) 2002 Jim Welch
21
+
22
+ You may distribute this software under the same terms as Ruby (see the file
23
+ COPYING that was distributed with this library).
24
+
25
+ == History
26
+
27
+ $id: filelist.rb 2004/11/27 10:00:01 transami Exp $
28
+
29
+ =end
30
+
31
+ class FileList < Array
32
+
33
+ # Rewrite all array methods (and to_s) to resolve the list before
34
+ # running.
35
+ methods = Array.instance_methods - Object.instance_methods
36
+ methods << "to_a"
37
+ methods.each_with_index do |sym, i|
38
+ alias_method "array_#{i}", sym
39
+ class_eval %{
40
+ def #{sym}(*args, &block)
41
+ resolve if @pending
42
+ array_#{i}(*args, &block)
43
+ end
44
+ }
45
+ end
46
+
47
+ # Create a file list from the globbable patterns given. If you
48
+ # wish to perform multiple includes or excludes at object build
49
+ # time, use the "yield self" pattern.
50
+ #
51
+ # Example:
52
+ # file_list = FileList.new['lib/**/*.rb', 'test/test*.rb']
53
+ #
54
+ # pkg_files = FileList.new['lib/**/*'] do |fl|
55
+ # fl.exclude(/\bCVS\b/)
56
+ # end
57
+ #
58
+ def initialize(*patterns)
59
+ @pending_add = []
60
+ @pending = false
61
+ @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
62
+ @exclude_re = nil
63
+ # @extent_only = false
64
+ patterns.each { |pattern| include(pattern) }
65
+ yield self if block_given?
66
+ end
67
+
68
+ # Add file names defined by glob patterns to the file list. If an
69
+ # array is given, add each element of the array.
70
+ #
71
+ # Example:
72
+ # file_list.include("*.java", "*.cfg")
73
+ # file_list.include %w( math.c lib.h *.o )
74
+ #
75
+ def include(*filenames)
76
+ # TODO: check for pending
77
+ filenames.each do |fn| @pending_add << fn end
78
+ @pending = true
79
+ self
80
+ end
81
+ alias :add :include
82
+
83
+
84
+ # def extent_only?
85
+ # @extent_only
86
+ # end
87
+ #
88
+ # def extent_only=(x)
89
+ # @extent_only = x ? true : false
90
+ # end
91
+
92
+ # Register a list of file name patterns that should be excluded
93
+ # from the list. Patterns may be regular expressions, glob
94
+ # patterns or regular strings.
95
+ #
96
+ # Note that glob patterns are expanded against the file system.
97
+ # If a file is explicitly added to a file list, but does not exist
98
+ # in the file system, then an glob pattern in the exclude list
99
+ # will not exclude the file.
100
+ #
101
+ # Examples:
102
+ # FileList['a.c', 'b.c'].exclude("a.c") => ['b.c']
103
+ # FileList['a.c', 'b.c'].exclude(/^a/) => ['b.c']
104
+ #
105
+ # If "a.c" is a file, then ...
106
+ # FileList['a.c', 'b.c'].exclude("a.*") => ['b.c']
107
+ #
108
+ # If "a.c" is not a file, then ...
109
+ # FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c']
110
+ #
111
+ def exclude(*patterns)
112
+ # TODO: check for pending
113
+ patterns.each do |pat| @exclude_patterns << pat end
114
+ if ! @pending
115
+ calculate_exclude_regexp
116
+ reject! { |fn| fn =~ @exclude_re }
117
+ end
118
+ end
119
+
120
+
121
+ def clear_exclude
122
+ @exclude_patterns = []
123
+ calculate_exclude_regexp if ! @pending
124
+ end
125
+
126
+ # Resolve all the pending adds now.
127
+ def resolve
128
+ @pending = false
129
+ @pending_add.each do |fn| resolve_add(fn) end
130
+ @pending_add = []
131
+ resolve_exclude
132
+ self
133
+ end
134
+
135
+ def calculate_exclude_regexp
136
+ ignores = []
137
+ @exclude_patterns.each do |pat|
138
+ case pat
139
+ when Regexp
140
+ ignores << pat
141
+ when /[*.]/
142
+ Dir[pat].each do |p| ignores << p end
143
+ else
144
+ ignores << Regexp.quote(pat)
145
+ end
146
+ end
147
+ if ignores.empty?
148
+ @exclude_re = /^$/
149
+ else
150
+ re_str = ignores.collect { |p| "(" + p.to_s + ")" }.join("|")
151
+ @exclude_re = Regexp.new(re_str)
152
+ end
153
+ end
154
+
155
+ def resolve_add(fn)
156
+ case fn
157
+ when NilClass
158
+ # ignore
159
+ when Array
160
+ fn.each { |f| self.resolve_add(f) }
161
+ when %r{[*?]}
162
+ add_matching(fn)
163
+ else
164
+ self << fn if FileTest.exists?( fn )
165
+ end
166
+ end
167
+
168
+ def resolve_exclude
169
+ @exclude_patterns.each do |pat|
170
+ case pat
171
+ when Regexp
172
+ reject! { |fn| fn =~ pat }
173
+ when /[*.]/
174
+ reject_list = Dir[pat]
175
+ reject! { |fn| reject_list.include?(fn) }
176
+ else
177
+ reject! { |fn| fn == pat }
178
+ end
179
+ end
180
+ self
181
+ end
182
+
183
+ # Return a new FileList with the results of running +sub+ against
184
+ # each element of the oringal list.
185
+ #
186
+ # Example:
187
+ # FileList['a.c', 'b.c'].sub(/\.c$/, '.o') => ['a.o', 'b.o']
188
+ #
189
+ def sub(pat, rep)
190
+ inject(FileList.new) { |res, fn| res << fn.sub(pat,rep) }
191
+ end
192
+
193
+ # Return a new FileList with the results of running +gsub+ against
194
+ # each element of the original list.
195
+ #
196
+ # Example:
197
+ # FileList['lib/test/file', 'x/y'].gsub(/\//, "\\")
198
+ # => ['lib\\test\\file', 'x\\y']
199
+ #
200
+ def gsub(pat, rep)
201
+ inject(FileList.new) { |res, fn| res << fn.gsub(pat,rep) }
202
+ end
203
+
204
+ # Same as +sub+ except that the oringal file list is modified.
205
+ def sub!(pat, rep)
206
+ each_with_index { |fn, i| self[i] = fn.sub(pat,rep) }
207
+ self
208
+ end
209
+
210
+ # Same as +gsub+ except that the original file list is modified.
211
+ def gsub!(pat, rep)
212
+ each_with_index { |fn, i| self[i] = fn.gsub(pat,rep) }
213
+ self
214
+ end
215
+
216
+ # Convert a FileList to a string by joining all elements with a space.
217
+ def to_s
218
+ resolve
219
+ self.join(' ')
220
+ end
221
+
222
+ # Convert a FileList to a string prior to resolving.
223
+ def to_str
224
+ self.join(' ')
225
+ end
226
+
227
+ # Add matching glob patterns.
228
+ def add_matching(pattern)
229
+ Dir[pattern].each do |fn|
230
+ self << fn unless exclude?(fn)
231
+ end
232
+ end
233
+ private :add_matching
234
+
235
+ # Should the given file name be excluded?
236
+ def exclude?(fn)
237
+ calculate_exclude_regexp unless @exclude_re
238
+ fn =~ @exclude_re
239
+ end
240
+
241
+ DEFAULT_IGNORE_PATTERNS = [
242
+ /(^|[\/\\])CVS([\/\\]|$)/,
243
+ /\.bak$/,
244
+ /~$/,
245
+ /(^|[\/\\])core$/
246
+ ]
247
+ @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
248
+
249
+ class << self
250
+ # Create a new file list including the files listed. Similar to:
251
+ #
252
+ # FileList.new(*args)
253
+ def [](*args)
254
+ new(*args)
255
+ end
256
+
257
+ # Set the ignore patterns back to the default value. The
258
+ # default patterns will ignore files
259
+ # * containing "CVS" in the file path
260
+ # * ending with ".bak"
261
+ # * ending with "~"
262
+ # * named "core"
263
+ #
264
+ # Note that file names beginning with "." are automatically
265
+ # ignored by Ruby's glob patterns and are not specifically
266
+ # listed in the ignore patterns.
267
+ def select_default_ignore_patterns
268
+ @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
269
+ end
270
+
271
+ # Clear the ignore patterns.
272
+ def clear_ignore_patterns
273
+ @exclude_patterns = [ /^$/ ]
274
+ end
275
+ end
276
+
277
+ end # class FileList