facets 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1318) hide show
  1. data/AUTHORS +1 -0
  2. data/CHANGELOG +266 -0
  3. data/ProjectInfo +31 -29
  4. data/README +55 -31
  5. data/Rakefile +175 -0
  6. data/{packages/core/TODO → TODO} +0 -0
  7. data/{packages/core/conf → conf}/facets/noauto +0 -0
  8. data/data/facets/index.yml +464 -0
  9. data/{packages/core/data/facets/index.yml → data/facets/methods.yaml} +0 -0
  10. data/lib/facet/array.rb +34 -0
  11. data/{packages/core/lib → lib}/facet/array/at_rand.rb +0 -0
  12. data/{packages/core/lib → lib}/facet/array/body.rb +0 -0
  13. data/{packages/core/lib → lib}/facet/array/delete_unless.rb +0 -0
  14. data/{packages/core/lib → lib}/facet/array/delete_values.rb +0 -0
  15. data/{packages/core/lib → lib}/facet/array/delete_values_at.rb +0 -0
  16. data/{packages/core/lib → lib}/facet/array/each_with_key.rb +0 -0
  17. data/{packages/core/lib → lib}/facet/array/first.rb +0 -0
  18. data/{packages/core/lib → lib}/facet/array/foot.rb +0 -0
  19. data/{packages/core/lib → lib}/facet/array/head.rb +0 -0
  20. data/{packages/core/lib → lib}/facet/array/last.rb +0 -0
  21. data/{packages/core/lib → lib}/facet/array/last_index.rb +0 -0
  22. data/{packages/core/lib → lib}/facet/array/merge.rb +0 -0
  23. data/{packages/core/lib → lib}/facet/array/mid.rb +0 -0
  24. data/{packages/core/lib → lib}/facet/array/middle.rb +0 -0
  25. data/{packages/core/lib → lib}/facet/array/op_fetch.rb +0 -0
  26. data/{packages/core/lib → lib}/facet/array/op_mod.rb +0 -0
  27. data/{packages/core/lib → lib}/facet/array/op_store.rb +0 -0
  28. data/{packages/core/lib → lib}/facet/array/pick.rb +0 -0
  29. data/{packages/core/lib → lib}/facet/array/pos.rb +0 -0
  30. data/{packages/core/lib → lib}/facet/array/pull.rb +0 -0
  31. data/{packages/core/lib → lib}/facet/array/rand_index.rb +0 -0
  32. data/{packages/core/lib → lib}/facet/array/rand_subset.rb +0 -0
  33. data/{packages/core/lib → lib}/facet/array/range.rb +0 -0
  34. data/{packages/core/lib → lib}/facet/array/rotate.rb +0 -0
  35. data/{packages/core/lib → lib}/facet/array/select.rb +0 -0
  36. data/{packages/core/lib → lib}/facet/array/shuffle.rb +0 -0
  37. data/{packages/core/lib → lib}/facet/array/slap.rb +0 -0
  38. data/{packages/core/lib → lib}/facet/array/store.rb +0 -0
  39. data/{packages/core/lib → lib}/facet/array/tail.rb +0 -0
  40. data/{packages/core/lib → lib}/facet/array/thru.rb +0 -0
  41. data/{packages/core/lib → lib}/facet/array/to_b.rb +0 -0
  42. data/{packages/core/lib → lib}/facet/array/to_h.rb +0 -0
  43. data/{packages/core/lib → lib}/facet/array/to_hash.rb +0 -0
  44. data/{packages/core/lib → lib}/facet/array/unzip.rb +0 -0
  45. data/{packages/core/lib → lib}/facet/binding.rb +0 -0
  46. data/{packages/core/lib → lib}/facet/binding/__DIR__.rb +0 -0
  47. data/{packages/core/lib → lib}/facet/binding/__FILE__.rb +0 -0
  48. data/{packages/core/lib → lib}/facet/binding/__LINE__.rb +0 -0
  49. data/{packages/core/lib → lib}/facet/binding/call_stack.rb +0 -0
  50. data/{packages/core/lib → lib}/facet/binding/called.rb +0 -0
  51. data/{packages/core/lib → lib}/facet/binding/caller.rb +0 -0
  52. data/{packages/core/lib → lib}/facet/binding/defined.rb +0 -0
  53. data/{packages/core/lib → lib}/facet/binding/eval.rb +0 -0
  54. data/{packages/core/lib → lib}/facet/binding/local_variables.rb +0 -0
  55. data/{packages/core/lib → lib}/facet/binding/method_name.rb +0 -0
  56. data/{packages/core/lib → lib}/facet/binding/op_fetch.rb +0 -0
  57. data/{packages/core/lib → lib}/facet/binding/op_store.rb +0 -0
  58. data/{packages/core/lib → lib}/facet/binding/self.rb +0 -0
  59. data/{packages/core/lib → lib}/facet/binding/self/of_caller.rb +0 -0
  60. data/lib/facet/class.rb +7 -0
  61. data/{packages/core/lib → lib}/facet/class/by_name.rb +0 -0
  62. data/{packages/core/lib → lib}/facet/class/descendents.rb +0 -0
  63. data/{packages/core/lib → lib}/facet/class/method_name.rb +0 -0
  64. data/{packages/core/lib → lib}/facet/class/remove_descendents.rb +0 -0
  65. data/{packages/core/lib → lib}/facet/class/remove_subclasses.rb +0 -0
  66. data/{packages/core/lib → lib}/facet/class/subclasses.rb +0 -0
  67. data/lib/facet/class/unix_path.rb +34 -0
  68. data/{packages/core/lib → lib}/facet/comparable.rb +0 -0
  69. data/{packages/core/lib → lib}/facet/comparable/at_least.rb +0 -0
  70. data/{packages/core/lib → lib}/facet/comparable/at_most.rb +0 -0
  71. data/{packages/core/lib → lib}/facet/comparable/cap.rb +0 -0
  72. data/{packages/core/lib → lib}/facet/comparable/clip.rb +0 -0
  73. data/{packages/core/lib → lib}/facet/comparable/cmp.rb +0 -0
  74. data/{packages/core/lib → lib}/facet/continuation.rb +0 -0
  75. data/{packages/core/lib → lib}/facet/continuation/self/create.rb +0 -0
  76. data/{packages/core/lib → lib}/facet/date.rb +0 -0
  77. data/{packages/core/lib → lib}/facet/date/days_in_month.rb +0 -0
  78. data/{packages/core/lib → lib}/facet/date/days_of_month.rb +0 -0
  79. data/{packages/core/lib → lib}/facet/date/stamp.rb +0 -0
  80. data/{packages/core/lib → lib}/facet/date/to_date.rb +0 -0
  81. data/{packages/core/lib → lib}/facet/date/to_s.rb +0 -0
  82. data/{packages/core/lib → lib}/facet/date/to_time.rb +0 -0
  83. data/{packages/core/lib → lib}/facet/dir.rb +0 -0
  84. data/{packages/core/lib → lib}/facet/dir/self/ancestor.rb +0 -0
  85. data/{packages/core/lib → lib}/facet/dir/self/ascend.rb +0 -0
  86. data/{packages/core/lib → lib}/facet/dir/self/ls_r.rb +0 -0
  87. data/{packages/core/lib → lib}/facet/dir/self/recurse.rb +0 -0
  88. data/lib/facet/enumerable.rb +39 -0
  89. data/{packages/core/lib → lib}/facet/enumerable/collect_with_counter.rb +0 -0
  90. data/{packages/core/lib → lib}/facet/enumerable/collect_with_index.rb +0 -0
  91. data/{packages/core/lib → lib}/facet/enumerable/commonality.rb +0 -0
  92. data/{packages/core/lib → lib}/facet/enumerable/compact_collect.rb +0 -0
  93. data/{packages/core/lib → lib}/facet/enumerable/compact_map.rb +0 -0
  94. data/{packages/core/lib → lib}/facet/enumerable/cross.rb +0 -0
  95. data/{packages/core/lib → lib}/facet/enumerable/each_by.rb +0 -0
  96. data/{packages/core/lib → lib}/facet/enumerable/each_combination.rb +0 -0
  97. data/{packages/core/lib → lib}/facet/enumerable/each_pair.rb +0 -0
  98. data/{packages/core/lib → lib}/facet/enumerable/each_permutation.rb +0 -0
  99. data/{packages/core/lib → lib}/facet/enumerable/each_slice.rb +0 -0
  100. data/{packages/core/lib → lib}/facet/enumerable/each_unique_pair.rb +0 -0
  101. data/{packages/core/lib → lib}/facet/enumerable/each_with_counter.rb +0 -0
  102. data/{packages/core/lib → lib}/facet/enumerable/elementwise.rb +0 -0
  103. data/{packages/core/lib → lib}/facet/enumerable/entropy.rb +0 -0
  104. data/{packages/core/lib → lib}/facet/enumerable/every.rb +0 -0
  105. data/{packages/core/lib → lib}/facet/enumerable/ew.rb +0 -0
  106. data/{packages/core/lib → lib}/facet/enumerable/filter_collect.rb +0 -0
  107. data/{packages/core/lib → lib}/facet/enumerable/filter_map.rb +0 -0
  108. data/{packages/core/lib → lib}/facet/enumerable/find_collisions.rb +0 -0
  109. data/{packages/core/lib → lib}/facet/enumerable/frequency.rb +0 -0
  110. data/{packages/core/lib → lib}/facet/enumerable/graph.rb +0 -0
  111. data/{packages/core/lib → lib}/facet/enumerable/ideal_entropy.rb +0 -0
  112. data/{packages/core/lib → lib}/facet/enumerable/map_with_counter.rb +0 -0
  113. data/{packages/core/lib → lib}/facet/enumerable/map_with_index.rb +0 -0
  114. data/{packages/core/lib → lib}/facet/enumerable/none.rb +0 -0
  115. data/{packages/core/lib → lib}/facet/enumerable/nonuniq.rb +0 -0
  116. data/{packages/core/lib → lib}/facet/enumerable/occur.rb +0 -0
  117. data/{packages/core/lib → lib}/facet/enumerable/one.rb +0 -0
  118. data/{packages/core/lib → lib}/facet/enumerable/op_pow.rb +0 -0
  119. data/{packages/core/lib → lib}/facet/enumerable/partition_by.rb +0 -0
  120. data/{packages/core/lib → lib}/facet/enumerable/permute.rb +0 -0
  121. data/{packages/core/lib → lib}/facet/enumerable/probability.rb +0 -0
  122. data/lib/facet/enumerable/project.rb +11 -0
  123. data/{packages/core/lib → lib}/facet/enumerable/self/combinations.rb +0 -0
  124. data/{packages/core/lib → lib}/facet/enumerable/self/cross.rb +0 -0
  125. data/{packages/core/lib → lib}/facet/enumerable/to_h.rb +0 -0
  126. data/{packages/core/lib → lib}/facet/enumerable/uniq_by.rb +0 -0
  127. data/lib/facet/enumerable/where.rb +12 -0
  128. data/{packages/core/lib → lib}/facet/file.rb +0 -0
  129. data/{packages/core/lib → lib}/facet/file/self/create.rb +0 -0
  130. data/{packages/core/lib → lib}/facet/file/self/open_as_string.rb +0 -0
  131. data/{packages/core/lib → lib}/facet/file/self/read_list.rb +0 -0
  132. data/{packages/core/lib → lib}/facet/file/self/sanitize.rb +0 -0
  133. data/{packages/core/lib → lib}/facet/file/self/split_all.rb +0 -0
  134. data/{packages/core/lib → lib}/facet/fileutils.rb +0 -0
  135. data/{packages/core/lib → lib}/facet/fileutils/head.rb +0 -0
  136. data/{packages/core/lib → lib}/facet/fileutils/safe_ln.rb +0 -0
  137. data/{packages/core/lib → lib}/facet/fileutils/slice.rb +0 -0
  138. data/{packages/core/lib → lib}/facet/fileutils/split_all.rb +0 -0
  139. data/{packages/core/lib → lib}/facet/fileutils/tail.rb +0 -0
  140. data/{packages/core/lib → lib}/facet/fileutils/wc.rb +0 -0
  141. data/{packages/core/lib → lib}/facet/fileutils/whereis.rb +0 -0
  142. data/{packages/core/lib → lib}/facet/fileutils/which.rb +0 -0
  143. data/{packages/core/lib → lib}/facet/float.rb +0 -0
  144. data/{packages/core/lib → lib}/facet/float/approx.rb +0 -0
  145. data/{packages/core/lib → lib}/facet/float/round_at.rb +0 -0
  146. data/{packages/core/lib → lib}/facet/float/round_to.rb +0 -0
  147. data/{packages/core/lib → lib}/facet/functor.rb +0 -0
  148. data/lib/facet/gem.rb +3 -0
  149. data/lib/facet/gem/self/active.rb +9 -0
  150. data/lib/facet/gem/self/gempath.rb +10 -0
  151. data/lib/facet/gem/self/gemspec.rb +10 -0
  152. data/{packages/core/lib → lib}/facet/hash.rb +0 -0
  153. data/{packages/core/lib → lib}/facet/hash/alias.rb +0 -0
  154. data/{packages/core/lib → lib}/facet/hash/assert_has_keys.rb +0 -0
  155. data/{packages/core/lib → lib}/facet/hash/assert_has_only_keys.rb +0 -0
  156. data/{packages/core/lib → lib}/facet/hash/at.rb +0 -0
  157. data/{packages/core/lib → lib}/facet/hash/collate.rb +0 -0
  158. data/{packages/core/lib → lib}/facet/hash/delete_unless.rb +0 -0
  159. data/{packages/core/lib → lib}/facet/hash/each.rb +0 -0
  160. data/{packages/core/lib → lib}/facet/hash/each_with_index.rb +0 -0
  161. data/{packages/core/lib → lib}/facet/hash/each_with_key.rb +0 -0
  162. data/{packages/core/lib → lib}/facet/hash/graph.rb +0 -0
  163. data/{packages/core/lib → lib}/facet/hash/has_keys.rb +0 -0
  164. data/{packages/core/lib → lib}/facet/hash/has_only_keys.rb +0 -0
  165. data/{packages/core/lib → lib}/facet/hash/inverse.rb +0 -0
  166. data/{packages/core/lib → lib}/facet/hash/join.rb +0 -0
  167. data/{packages/core/lib → lib}/facet/hash/keys_to_iv.rb +0 -0
  168. data/{packages/core/lib → lib}/facet/hash/keys_to_s.rb +0 -0
  169. data/{packages/core/lib → lib}/facet/hash/keys_to_sym.rb +0 -0
  170. data/{packages/core/lib → lib}/facet/hash/op_fetch.rb +0 -0
  171. data/{packages/core/lib → lib}/facet/hash/op_lshift.rb +0 -0
  172. data/{packages/core/lib → lib}/facet/hash/op_store.rb +0 -0
  173. data/{packages/core/lib → lib}/facet/hash/rand_key.rb +0 -0
  174. data/{packages/core/lib → lib}/facet/hash/rand_pair.rb +0 -0
  175. data/{packages/core/lib → lib}/facet/hash/rand_value.rb +0 -0
  176. data/{packages/core/lib → lib}/facet/hash/replace_each.rb +0 -0
  177. data/{packages/core/lib → lib}/facet/hash/self/zipnew.rb +0 -0
  178. data/{packages/core/lib → lib}/facet/hash/shuffle.rb +0 -0
  179. data/{packages/core/lib → lib}/facet/hash/slice.rb +0 -0
  180. data/{packages/core/lib → lib}/facet/hash/stringify_keys.rb +0 -0
  181. data/{packages/core/lib → lib}/facet/hash/swap.rb +0 -0
  182. data/{packages/core/lib → lib}/facet/hash/swapkey.rb +0 -0
  183. data/{packages/core/lib → lib}/facet/hash/symoblize_keys.rb +0 -0
  184. data/{packages/core/lib → lib}/facet/hash/to_h.rb +0 -0
  185. data/{packages/core/lib → lib}/facet/hash/to_ostruct.rb +0 -0
  186. data/{packages/core/lib → lib}/facet/hash/to_ostruct_recurse.rb +0 -0
  187. data/{packages/core/lib → lib}/facet/hash/traverse.rb +0 -0
  188. data/{packages/core/lib → lib}/facet/hash/update_each.rb +0 -0
  189. data/{packages/core/lib → lib}/facet/hash/update_keys.rb +0 -0
  190. data/{packages/core/lib → lib}/facet/hash/update_values.rb +0 -0
  191. data/{packages/core/lib → lib}/facet/hash/variablize_keys.rb +0 -0
  192. data/{packages/core/lib → lib}/facet/hash/weave.rb +0 -0
  193. data/{packages/core/lib → lib}/facet/inflect.rb +0 -0
  194. data/lib/facet/integer.rb +9 -0
  195. data/{packages/core/lib → lib}/facet/integer/even.rb +0 -0
  196. data/{packages/core/lib → lib}/facet/integer/fac.rb +0 -0
  197. data/{packages/core/lib → lib}/facet/integer/fact.rb +0 -0
  198. data/{packages/core/lib → lib}/facet/integer/factorial.rb +0 -0
  199. data/{packages/core/lib → lib}/facet/integer/multiple.rb +0 -0
  200. data/{packages/core/lib → lib}/facet/integer/odd.rb +0 -0
  201. data/{packages/core/lib → lib}/facet/integer/ordinal.rb +0 -0
  202. data/{packages/core/lib → lib}/facet/integer/times_collect.rb +0 -0
  203. data/{packages/core/lib → lib}/facet/integer/times_map.rb +0 -0
  204. data/lib/facet/kernel.rb +68 -0
  205. data/{packages/core/lib → lib}/facet/kernel/__DIR__.rb +0 -0
  206. data/{packages/core/lib → lib}/facet/kernel/__class__.rb +0 -0
  207. data/{packages/core/lib → lib}/facet/kernel/__meta__.rb +0 -0
  208. data/{packages/core/lib → lib}/facet/kernel/adhoc.rb +0 -0
  209. data/{packages/core/lib → lib}/facet/kernel/as.rb +0 -0
  210. data/{packages/core/lib → lib}/facet/kernel/assign_from.rb +0 -0
  211. data/{packages/core/lib → lib}/facet/kernel/assign_with.rb +0 -0
  212. data/{packages/core/lib → lib}/facet/kernel/autoreload.rb +0 -0
  213. data/{packages/core/lib → lib}/facet/kernel/autoreload_files.rb +0 -0
  214. data/{packages/core/lib → lib}/facet/kernel/autoreload_glob.rb +0 -0
  215. data/{packages/core/lib → lib}/facet/kernel/bool.rb +0 -0
  216. data/{packages/core/lib → lib}/facet/kernel/bug.rb +0 -0
  217. data/{packages/core/lib → lib}/facet/kernel/call_stack.rb +0 -0
  218. data/{packages/core/lib → lib}/facet/kernel/called.rb +0 -0
  219. data/{packages/core/lib → lib}/facet/kernel/complete.rb +0 -0
  220. data/{packages/core/lib → lib}/facet/kernel/constant.rb +0 -0
  221. data/{packages/core/lib → lib}/facet/kernel/copy.rb +0 -0
  222. data/{packages/core/lib → lib}/facet/kernel/deep_copy.rb +0 -0
  223. data/{packages/core/lib → lib}/facet/kernel/demo.rb +0 -0
  224. data/{packages/core/lib → lib}/facet/kernel/eigenclass.rb +0 -0
  225. data/{packages/core/lib → lib}/facet/kernel/false.rb +0 -0
  226. data/{packages/core/lib → lib}/facet/kernel/fn.rb +0 -0
  227. data/lib/facet/kernel/generate_method_name.rb +39 -0
  228. data/{packages/core/lib → lib}/facet/kernel/get_by_id.rb +0 -0
  229. data/{packages/core/lib → lib}/facet/kernel/here.rb +0 -0
  230. data/{packages/core/lib → lib}/facet/kernel/in.rb +0 -0
  231. data/{packages/core/lib → lib}/facet/kernel/instance_assign.rb +0 -0
  232. data/{packages/core/lib → lib}/facet/kernel/instvar.rb +0 -0
  233. data/{packages/core/lib → lib}/facet/kernel/is.rb +0 -0
  234. data/{packages/core/lib → lib}/facet/kernel/maybe.rb +0 -0
  235. data/{packages/core/lib → lib}/facet/kernel/me.rb +0 -0
  236. data/{packages/core/lib → lib}/facet/kernel/meta.rb +0 -0
  237. data/{packages/core/lib → lib}/facet/kernel/metaclass.rb +0 -0
  238. data/{packages/core/lib → lib}/facet/kernel/method.rb +0 -0
  239. data/{packages/core/lib → lib}/facet/kernel/method_name.rb +0 -0
  240. data/{packages/core/lib → lib}/facet/kernel/methods.rb +0 -0
  241. data/{packages/core/lib → lib}/facet/kernel/nack.rb +0 -0
  242. data/{packages/core/lib → lib}/facet/kernel/new.rb +0 -0
  243. data/{packages/core/lib → lib}/facet/kernel/object_class.rb +0 -0
  244. data/{packages/core/lib → lib}/facet/kernel/object_hexid.rb +0 -0
  245. data/{packages/core/lib → lib}/facet/kernel/op_esc.rb +0 -0
  246. data/{packages/core/lib → lib}/facet/kernel/own.rb +0 -0
  247. data/{packages/core/lib → lib}/facet/kernel/p.rb +0 -0
  248. data/{packages/core/lib → lib}/facet/kernel/require_all.rb +0 -0
  249. data/{packages/core/lib → lib}/facet/kernel/require_esc.rb +0 -0
  250. data/{packages/core/lib → lib}/facet/kernel/require_facet.rb +0 -0
  251. data/{packages/core/lib → lib}/facet/kernel/require_local.rb +0 -0
  252. data/{packages/core/lib → lib}/facet/kernel/resc.rb +0 -0
  253. data/{packages/core/lib → lib}/facet/kernel/returning.rb +0 -0
  254. data/{packages/core/lib → lib}/facet/kernel/send_as.rb +0 -0
  255. data/{packages/core/lib → lib}/facet/kernel/set_from.rb +0 -0
  256. data/{packages/core/lib → lib}/facet/kernel/set_with.rb +0 -0
  257. data/{packages/core/lib → lib}/facet/kernel/silence_warnings.rb +0 -0
  258. data/{packages/core/lib → lib}/facet/kernel/silently.rb +0 -0
  259. data/{packages/core/lib → lib}/facet/kernel/singleton.rb +0 -0
  260. data/{packages/core/lib → lib}/facet/kernel/superior.rb +0 -0
  261. data/{packages/core/lib → lib}/facet/kernel/supermethod.rb +0 -0
  262. data/{packages/core/lib → lib}/facet/kernel/this.rb +0 -0
  263. data/{packages/core/lib → lib}/facet/kernel/to_b.rb +0 -0
  264. data/{packages/core/lib → lib}/facet/kernel/to_bool.rb +0 -0
  265. data/{packages/core/lib → lib}/facet/kernel/true.rb +0 -0
  266. data/{packages/core/lib → lib}/facet/kernel/unuri.rb +0 -0
  267. data/{packages/core/lib → lib}/facet/kernel/uri.rb +0 -0
  268. data/{packages/core/lib → lib}/facet/kernel/val.rb +0 -0
  269. data/{packages/core/lib → lib}/facet/kernel/warn_with_line.rb +0 -0
  270. data/{packages/core/lib → lib}/facet/kernel/with_accessor.rb +0 -0
  271. data/{packages/core/lib → lib}/facet/kernel/with_reader.rb +0 -0
  272. data/{packages/core/lib → lib}/facet/kernel/with_writer.rb +0 -0
  273. data/{packages/core/lib → lib}/facet/logger.rb +0 -0
  274. data/{packages/core/lib → lib}/facet/logger/format.rb +0 -0
  275. data/{packages/core/lib → lib}/facet/logger/format_message.rb +0 -0
  276. data/{packages/core/lib → lib}/facet/matchdata.rb +0 -0
  277. data/{packages/core/lib → lib}/facet/matchdata/match.rb +0 -0
  278. data/{packages/core/lib → lib}/facet/matchdata/matchset.rb +0 -0
  279. data/{packages/core/lib → lib}/facet/matchdata/matchtree.rb +0 -0
  280. data/{packages/core/lib → lib}/facet/module.rb +0 -0
  281. data/{packages/core/lib → lib}/facet/module/abstract.rb +0 -0
  282. data/{packages/core/lib → lib}/facet/module/alias_module_function.rb +0 -0
  283. data/{packages/core/lib → lib}/facet/module/ancestor.rb +0 -0
  284. data/lib/facet/module/attr.rb +23 -0
  285. data/lib/facet/module/attr_setter.rb +48 -0
  286. data/lib/facet/module/attr_tester.rb +56 -0
  287. data/{packages/core/lib → lib}/facet/module/basename.rb +0 -0
  288. data/{packages/core/lib → lib}/facet/module/by_name.rb +0 -0
  289. data/{packages/core/lib → lib}/facet/module/cattr_accessor.rb +0 -0
  290. data/{packages/core/lib → lib}/facet/module/cattr_reader.rb +0 -0
  291. data/{packages/core/lib → lib}/facet/module/cattr_writer.rb +0 -0
  292. data/{packages/core/lib → lib}/facet/module/clone_removing.rb +0 -0
  293. data/{packages/core/lib → lib}/facet/module/clone_renaming.rb +0 -0
  294. data/{packages/core/lib → lib}/facet/module/clone_using.rb +0 -0
  295. data/{packages/core/lib → lib}/facet/module/dirname.rb +0 -0
  296. data/{packages/core/lib → lib}/facet/module/equate_on.rb +0 -0
  297. data/lib/facet/module/generate_instance_method_name.rb +47 -0
  298. data/{packages/core/lib → lib}/facet/module/include_as.rb +0 -0
  299. data/lib/facet/module/initializer.rb +65 -0
  300. data/{packages/core/lib → lib}/facet/module/instance_methods.rb +0 -0
  301. data/{packages/core/lib → lib}/facet/module/integrate.rb +0 -0
  302. data/{packages/core/lib → lib}/facet/module/is.rb +0 -0
  303. data/{packages/core/lib → lib}/facet/module/memoize.rb +0 -0
  304. data/{packages/core/lib → lib}/facet/module/modspace.rb +0 -0
  305. data/{packages/core/lib → lib}/facet/module/namespace.rb +0 -0
  306. data/{packages/core/lib → lib}/facet/module/nesting.rb +0 -0
  307. data/{packages/core/lib → lib}/facet/module/redef.rb +0 -0
  308. data/{packages/core/lib → lib}/facet/module/redefine_method.rb +0 -0
  309. data/{packages/core/lib → lib}/facet/module/redirect.rb +0 -0
  310. data/{packages/core/lib → lib}/facet/module/redirect_method.rb +0 -0
  311. data/{packages/core/lib → lib}/facet/module/remove.rb +0 -0
  312. data/{packages/core/lib → lib}/facet/module/rename.rb +0 -0
  313. data/{packages/core/lib → lib}/facet/module/rename_method.rb +0 -0
  314. data/{packages/core/lib → lib}/facet/module/revisal.rb +0 -0
  315. data/{packages/core/lib → lib}/facet/module/shadow_all.rb +0 -0
  316. data/{packages/core/lib → lib}/facet/module/shadow_method.rb +0 -0
  317. data/{packages/core/lib → lib}/facet/module/sort_on.rb +0 -0
  318. data/{packages/core/lib → lib}/facet/module/undef.rb +0 -0
  319. data/{packages/core/lib → lib}/facet/module/wrap.rb +0 -0
  320. data/{packages/core/lib → lib}/facet/module/wrap_method.rb +0 -0
  321. data/{packages/core/lib → lib}/facet/nil_as_emptiness.rb +0 -0
  322. data/{packages/core/lib → lib}/facet/nilclass.rb +0 -0
  323. data/{packages/core/lib → lib}/facet/nilclass/empty.rb +0 -0
  324. data/{packages/core/lib → lib}/facet/nilclass/include.rb +0 -0
  325. data/{packages/core/lib → lib}/facet/nilclass/length.rb +0 -0
  326. data/{packages/core/lib → lib}/facet/nilclass/op_fetch.rb +0 -0
  327. data/{packages/core/lib → lib}/facet/nilclass/size.rb +0 -0
  328. data/{packages/core/lib → lib}/facet/nilclass/to_f.rb +0 -0
  329. data/{packages/core/lib → lib}/facet/nilclass/to_h.rb +0 -0
  330. data/{packages/core/lib → lib}/facet/numeric.rb +0 -0
  331. data/{packages/core/lib → lib}/facet/numeric/ceil_multiple.rb +0 -0
  332. data/{packages/core/lib → lib}/facet/numeric/pred.rb +0 -0
  333. data/{packages/core/lib → lib}/facet/numeric/succ.rb +0 -0
  334. data/{packages/core/lib → lib}/facet/numeric/to_b.rb +0 -0
  335. data/{packages/core/lib → lib}/facet/ostruct.rb +0 -0
  336. data/{packages/core/lib → lib}/facet/ostruct/__merge__.rb +0 -0
  337. data/{packages/core/lib → lib}/facet/ostruct/__table__.rb +0 -0
  338. data/{packages/core/lib → lib}/facet/ostruct/__update__.rb +0 -0
  339. data/{packages/core/lib → lib}/facet/ostruct/op_fetch.rb +0 -0
  340. data/{packages/core/lib → lib}/facet/ostruct/op_store.rb +0 -0
  341. data/{packages/core/lib → lib}/facet/ostruct/to_h.rb +0 -0
  342. data/{packages/core/lib → lib}/facet/pathname.rb +0 -0
  343. data/{packages/core/lib → lib}/facet/pathname/ascend.rb +0 -0
  344. data/{packages/core/lib → lib}/facet/pathname/descend.rb +0 -0
  345. data/{packages/core/lib → lib}/facet/proc.rb +0 -0
  346. data/{packages/core/lib → lib}/facet/proc/compose.rb +0 -0
  347. data/{packages/core/lib → lib}/facet/proc/op_mul.rb +0 -0
  348. data/{packages/core/lib → lib}/facet/proc/to_method.rb +0 -0
  349. data/{packages/core/lib → lib}/facet/random.rb +0 -0
  350. data/{packages/core/lib → lib}/facet/range.rb +0 -0
  351. data/{packages/core/lib → lib}/facet/range/to_r.rb +0 -0
  352. data/{packages/core/lib → lib}/facet/range/to_range.rb +0 -0
  353. data/{packages/core/lib → lib}/facet/range/umbrella.rb +0 -0
  354. data/{packages/core/lib → lib}/facet/range/within.rb +0 -0
  355. data/{packages/core/lib → lib}/facet/regexp.rb +0 -0
  356. data/{packages/core/lib → lib}/facet/regexp/arity.rb +0 -0
  357. data/{packages/core/lib → lib}/facet/regexp/to_re.rb +0 -0
  358. data/{packages/core/lib → lib}/facet/regexp/to_regexp.rb +0 -0
  359. data/lib/facet/string.rb +91 -0
  360. data/{packages/core/lib → lib}/facet/string/align_center.rb +0 -0
  361. data/{packages/core/lib → lib}/facet/string/align_left.rb +0 -0
  362. data/{packages/core/lib → lib}/facet/string/align_right.rb +0 -0
  363. data/{packages/core/lib → lib}/facet/string/at.rb +0 -0
  364. data/{packages/core/lib → lib}/facet/string/at_rand.rb +0 -0
  365. data/{packages/core/lib → lib}/facet/string/basename.rb +0 -0
  366. data/{packages/core/lib → lib}/facet/string/blank.rb +0 -0
  367. data/{packages/core/lib → lib}/facet/string/bracket.rb +0 -0
  368. data/{packages/core/lib → lib}/facet/string/brief.rb +0 -0
  369. data/{packages/core/lib → lib}/facet/string/bytes.rb +0 -0
  370. data/{packages/core/lib → lib}/facet/string/camelcase.rb +0 -0
  371. data/{packages/core/lib → lib}/facet/string/camelize.rb +0 -0
  372. data/{packages/core/lib → lib}/facet/string/capitalized.rb +0 -0
  373. data/{packages/core/lib → lib}/facet/string/chars.rb +0 -0
  374. data/{packages/core/lib → lib}/facet/string/cmp.rb +0 -0
  375. data/{packages/core/lib → lib}/facet/string/demodulize.rb +0 -0
  376. data/{packages/core/lib → lib}/facet/string/dequote.rb +0 -0
  377. data/{packages/core/lib → lib}/facet/string/downcase.rb +0 -0
  378. data/{packages/core/lib → lib}/facet/string/dresner.rb +0 -0
  379. data/{packages/core/lib → lib}/facet/string/each_char.rb +0 -0
  380. data/{packages/core/lib → lib}/facet/string/each_word.rb +0 -0
  381. data/{packages/core/lib → lib}/facet/string/ends_with.rb +0 -0
  382. data/{packages/core/lib → lib}/facet/string/first.rb +0 -0
  383. data/{packages/core/lib → lib}/facet/string/first_char.rb +0 -0
  384. data/{packages/core/lib → lib}/facet/string/fold.rb +0 -0
  385. data/{packages/core/lib → lib}/facet/string/format.rb +0 -0
  386. data/{packages/core/lib → lib}/facet/string/frequency.rb +0 -0
  387. data/{packages/core/lib → lib}/facet/string/humanize.rb +0 -0
  388. data/{packages/core/lib → lib}/facet/string/indent.rb +0 -0
  389. data/{packages/core/lib → lib}/facet/string/index_all.rb +0 -0
  390. data/{packages/core/lib → lib}/facet/string/last.rb +0 -0
  391. data/{packages/core/lib → lib}/facet/string/last_char.rb +0 -0
  392. data/{packages/core/lib → lib}/facet/string/line_wrap.rb +0 -0
  393. data/{packages/core/lib → lib}/facet/string/lines.rb +0 -0
  394. data/{packages/core/lib → lib}/facet/string/lowercase.rb +0 -0
  395. data/{packages/core/lib → lib}/facet/string/margin.rb +0 -0
  396. data/lib/facet/string/methodize.rb +44 -0
  397. data/lib/facet/string/modulize.rb +44 -0
  398. data/{packages/core/lib → lib}/facet/string/mscan.rb +0 -0
  399. data/{packages/core/lib → lib}/facet/string/natcmp.rb +0 -0
  400. data/{packages/core/lib → lib}/facet/string/nchar.rb +0 -0
  401. data/{packages/core/lib → lib}/facet/string/ordinal.rb +0 -0
  402. data/lib/facet/string/pathize.rb +46 -0
  403. data/{packages/core/lib → lib}/facet/string/plural.rb +0 -0
  404. data/{packages/core/lib → lib}/facet/string/pop.rb +0 -0
  405. data/{packages/core/lib → lib}/facet/string/probability.rb +0 -0
  406. data/{packages/core/lib → lib}/facet/string/pull.rb +0 -0
  407. data/{packages/core/lib → lib}/facet/string/push.rb +0 -0
  408. data/{packages/core/lib → lib}/facet/string/quote.rb +0 -0
  409. data/{packages/core/lib → lib}/facet/string/rand_byte.rb +0 -0
  410. data/{packages/core/lib → lib}/facet/string/rand_index.rb +0 -0
  411. data/{packages/core/lib → lib}/facet/string/range.rb +0 -0
  412. data/{packages/core/lib → lib}/facet/string/range_all.rb +0 -0
  413. data/{packages/core/lib → lib}/facet/string/range_of_line.rb +0 -0
  414. data/{packages/core/lib → lib}/facet/string/regesc.rb +0 -0
  415. data/{packages/core/lib → lib}/facet/string/self/format.rb +0 -0
  416. data/{packages/core/lib → lib}/facet/string/self/interpolate.rb +0 -0
  417. data/{packages/core/lib → lib}/facet/string/self/patterns.rb +0 -0
  418. data/{packages/core/lib → lib}/facet/string/self/rand_letter.rb +0 -0
  419. data/lib/facet/string/self/random.rb +37 -0
  420. data/{packages/core/lib → lib}/facet/string/shatter.rb +0 -0
  421. data/{packages/core/lib → lib}/facet/string/shift.rb +0 -0
  422. data/{packages/core/lib → lib}/facet/string/shuffle.rb +0 -0
  423. data/{packages/core/lib → lib}/facet/string/similarity.rb +0 -0
  424. data/{packages/core/lib → lib}/facet/string/singular.rb +0 -0
  425. data/{packages/core/lib → lib}/facet/string/slap.rb +0 -0
  426. data/{packages/core/lib → lib}/facet/string/soundex.rb +0 -0
  427. data/{packages/core/lib → lib}/facet/string/starts_with.rb +0 -0
  428. data/{packages/core/lib → lib}/facet/string/succ.rb +0 -0
  429. data/{packages/core/lib → lib}/facet/string/tab.rb +0 -0
  430. data/{packages/core/lib → lib}/facet/string/tabto.rb +0 -0
  431. data/{packages/core/lib → lib}/facet/string/to_a.rb +0 -0
  432. data/{packages/core/lib → lib}/facet/string/to_arr.rb +0 -0
  433. data/{packages/core/lib → lib}/facet/string/to_b.rb +0 -0
  434. data/{packages/core/lib → lib}/facet/string/to_const.rb +0 -0
  435. data/{packages/core/lib → lib}/facet/string/to_date.rb +0 -0
  436. data/{packages/core/lib → lib}/facet/string/to_proc.rb +0 -0
  437. data/{packages/core/lib → lib}/facet/string/to_re.rb +0 -0
  438. data/{packages/core/lib → lib}/facet/string/to_rx.rb +0 -0
  439. data/{packages/core/lib → lib}/facet/string/to_time.rb +0 -0
  440. data/lib/facet/string/unbracket.rb +46 -0
  441. data/{packages/core/lib → lib}/facet/string/underscore.rb +0 -0
  442. data/{packages/core/lib → lib}/facet/string/unix_crypt.rb +0 -0
  443. data/{packages/core/lib → lib}/facet/string/unpack.rb +0 -0
  444. data/{packages/core/lib → lib}/facet/string/unshift.rb +0 -0
  445. data/{packages/core/lib → lib}/facet/string/upcase.rb +0 -0
  446. data/{packages/core/lib → lib}/facet/string/uppercase.rb +0 -0
  447. data/{packages/core/lib → lib}/facet/string/whitespace.rb +0 -0
  448. data/{packages/core/lib → lib}/facet/string/word_filter.rb +0 -0
  449. data/{packages/core/lib → lib}/facet/string/word_wrap.rb +0 -0
  450. data/{packages/core/lib → lib}/facet/string/words.rb +0 -0
  451. data/{packages/core/lib → lib}/facet/string_as_array.rb +0 -0
  452. data/{packages/core/lib → lib}/facet/symbol.rb +0 -0
  453. data/{packages/core/lib → lib}/facet/symbol/camelcase.rb +0 -0
  454. data/{packages/core/lib → lib}/facet/symbol/camelize.rb +0 -0
  455. data/{packages/core/lib → lib}/facet/symbol/capitalize.rb +0 -0
  456. data/{packages/core/lib → lib}/facet/symbol/capitalized.rb +0 -0
  457. data/{packages/core/lib → lib}/facet/symbol/downcase.rb +0 -0
  458. data/lib/facet/symbol/not.rb +40 -0
  459. data/{packages/core/lib → lib}/facet/symbol/pad.rb +0 -0
  460. data/{packages/core/lib → lib}/facet/symbol/succ.rb +0 -0
  461. data/{packages/core/lib → lib}/facet/symbol/to_const.rb +0 -0
  462. data/{packages/core/lib → lib}/facet/symbol/to_proc.rb +0 -0
  463. data/{packages/core/lib → lib}/facet/symbol/to_str.rb +0 -0
  464. data/{packages/core/lib → lib}/facet/symbol/underscore.rb +0 -0
  465. data/{packages/core/lib → lib}/facet/symbol/upcase.rb +0 -0
  466. data/lib/facet/time.rb +8 -0
  467. data/{packages/core/lib → lib}/facet/time/change.rb +0 -0
  468. data/{packages/core/lib → lib}/facet/time/elapse.rb +0 -0
  469. data/{packages/core/lib → lib}/facet/time/self/days_extrema.rb +0 -0
  470. data/{packages/core/lib → lib}/facet/time/self/stamp.rb +0 -0
  471. data/{packages/core/lib → lib}/facet/time/stamp.rb +0 -0
  472. data/{packages/core/lib → lib}/facet/time/to_date.rb +0 -0
  473. data/{packages/core/lib → lib}/facet/time/to_s.rb +0 -0
  474. data/{packages/core/lib → lib}/facet/time/to_time.rb +0 -0
  475. data/{packages/core/lib → lib}/facet/unboundmethod.rb +0 -0
  476. data/{packages/core/lib → lib}/facet/unboundmethod/name.rb +0 -0
  477. data/{packages/core/lib → lib}/facets.rb +0 -0
  478. data/setup.rb +1 -0
  479. data/{packages/core/test → test}/FIXTURE/create_file +0 -0
  480. data/{packages/core/test → test}/FIXTURE/ls_r/A.txt +0 -0
  481. data/{packages/core/test → test}/FIXTURE/ls_r/A/B.txt +0 -0
  482. data/{packages/core/test → test}/FIXTURE/ls_r/A/B/C.txt +0 -0
  483. data/{packages/core/test → test}/FIXTURE/open_as_string_file +0 -0
  484. data/{packages/core/test → test}/FIXTURE/read_list_file +0 -0
  485. data/{packages/core/test → test}/FIXTURE/test_file.txt +0 -0
  486. data/{packages/core/test → test}/FIXTURE/test_file2.txt +0 -0
  487. data/test/lib/facet/array/test_at_rand.rb +34 -0
  488. data/test/lib/facet/array/test_delete_unless.rb +28 -0
  489. data/test/lib/facet/array/test_delete_values.rb +28 -0
  490. data/test/lib/facet/array/test_delete_values_at.rb +31 -0
  491. data/test/lib/facet/array/test_first.rb +46 -0
  492. data/test/lib/facet/array/test_head.rb +42 -0
  493. data/test/lib/facet/array/test_last_index.rb +26 -0
  494. data/test/lib/facet/array/test_merge.rb +35 -0
  495. data/test/lib/facet/array/test_mid.rb +33 -0
  496. data/test/lib/facet/array/test_middle.rb +29 -0
  497. data/test/lib/facet/array/test_op_fetch.rb +27 -0
  498. data/test/lib/facet/array/test_op_store.rb +30 -0
  499. data/test/lib/facet/array/test_pick.rb +40 -0
  500. data/test/lib/facet/array/test_pos.rb +28 -0
  501. data/test/lib/facet/array/test_pull.rb +28 -0
  502. data/test/lib/facet/array/test_rand_index.rb +29 -0
  503. data/test/lib/facet/array/test_rand_subset.rb +29 -0
  504. data/test/lib/facet/array/test_range.rb +32 -0
  505. data/test/lib/facet/array/test_rotate.rb +36 -0
  506. data/test/lib/facet/array/test_select.rb +28 -0
  507. data/test/lib/facet/array/test_shuffle.rb +35 -0
  508. data/test/lib/facet/array/test_slap.rb +28 -0
  509. data/test/lib/facet/array/test_thru.rb +27 -0
  510. data/test/lib/facet/array/test_to_b.rb +27 -0
  511. data/test/lib/facet/array/test_to_h.rb +33 -0
  512. data/test/lib/facet/array/test_to_hash.rb +27 -0
  513. data/test/lib/facet/binding/self/test_of_caller.rb +35 -0
  514. data/test/lib/facet/binding/test___LINE__.rb +43 -0
  515. data/test/lib/facet/binding/test_call_stack.rb +34 -0
  516. data/test/lib/facet/binding/test_called.rb +30 -0
  517. data/test/lib/facet/binding/test_caller.rb +35 -0
  518. data/test/lib/facet/binding/test_defined.rb +34 -0
  519. data/test/lib/facet/binding/test_eval.rb +34 -0
  520. data/test/lib/facet/binding/test_local_variables.rb +34 -0
  521. data/test/lib/facet/binding/test_method_name.rb +34 -0
  522. data/test/lib/facet/binding/test_op_fetch.rb +34 -0
  523. data/test/lib/facet/binding/test_op_store.rb +35 -0
  524. data/test/lib/facet/binding/test_self.rb +34 -0
  525. data/test/lib/facet/class/test_descendents.rb +30 -0
  526. data/test/lib/facet/class/test_method_name.rb +26 -0
  527. data/test/lib/facet/class/test_remove_descendents.rb +32 -0
  528. data/test/lib/facet/class/test_unix_path.rb +26 -0
  529. data/test/lib/facet/comparable/test_at_least.rb +34 -0
  530. data/test/lib/facet/comparable/test_clip.rb +44 -0
  531. data/test/lib/facet/comparable/test_cmp.rb +28 -0
  532. data/test/lib/facet/continuation/self/test_create.rb +26 -0
  533. data/test/lib/facet/date/test_days_in_month.rb +30 -0
  534. data/test/lib/facet/date/test_days_of_month.rb +30 -0
  535. data/test/lib/facet/date/test_stamp.rb +38 -0
  536. data/test/lib/facet/date/test_to_date.rb +30 -0
  537. data/test/lib/facet/date/test_to_s.rb +30 -0
  538. data/test/lib/facet/date/test_to_time.rb +30 -0
  539. data/test/lib/facet/dir/self/test_ancestor.rb +26 -0
  540. data/test/lib/facet/dir/self/test_ascend.rb +41 -0
  541. data/test/lib/facet/dir/self/test_ls_r.rb +52 -0
  542. data/test/lib/facet/enumerable/self/test_combinations.rb +43 -0
  543. data/test/lib/facet/enumerable/self/test_cross.rb +31 -0
  544. data/test/lib/facet/enumerable/test_collect_with_index.rb +27 -0
  545. data/test/lib/facet/enumerable/test_commonality.rb +31 -0
  546. data/test/lib/facet/enumerable/test_compact_collect.rb +27 -0
  547. data/test/lib/facet/enumerable/test_cross.rb +30 -0
  548. data/test/lib/facet/enumerable/test_each_combination.rb +29 -0
  549. data/test/lib/facet/enumerable/test_each_pair.rb +29 -0
  550. data/test/lib/facet/enumerable/test_each_slice.rb +74 -0
  551. data/test/lib/facet/enumerable/test_each_unique_pair.rb +29 -0
  552. data/test/lib/facet/enumerable/test_entropy.rb +26 -0
  553. data/test/lib/facet/enumerable/test_every.rb +35 -0
  554. data/test/lib/facet/enumerable/test_ew.rb +31 -0
  555. data/test/lib/facet/enumerable/test_filter_collect.rb +31 -0
  556. data/test/lib/facet/enumerable/test_find_collisions.rb +30 -0
  557. data/test/lib/facet/enumerable/test_frequency.rb +27 -0
  558. data/test/lib/facet/enumerable/test_graph.rb +30 -0
  559. data/test/lib/facet/enumerable/test_ideal_entropy.rb +27 -0
  560. data/test/lib/facet/enumerable/test_none.rb +33 -0
  561. data/test/lib/facet/enumerable/test_occur.rb +30 -0
  562. data/test/lib/facet/enumerable/test_one.rb +35 -0
  563. data/test/lib/facet/enumerable/test_op_pow.rb +27 -0
  564. data/test/lib/facet/enumerable/test_partition_by.rb +31 -0
  565. data/test/lib/facet/enumerable/test_permute.rb +29 -0
  566. data/test/lib/facet/enumerable/test_probability.rb +27 -0
  567. data/test/lib/facet/enumerable/test_to_h.rb +27 -0
  568. data/test/lib/facet/enumerable/test_uniq_by.rb +28 -0
  569. data/test/lib/facet/file/self/test_create.rb +39 -0
  570. data/test/lib/facet/file/self/test_open_as_string.rb +40 -0
  571. data/test/lib/facet/file/self/test_read_list.rb +37 -0
  572. data/test/lib/facet/file/self/test_sanitize.rb +46 -0
  573. data/test/lib/facet/file/self/test_split_all.rb +27 -0
  574. data/{packages/core/test → test}/lib/facet/fileutils/test_slice.rb +0 -0
  575. data/test/lib/facet/fileutils/test_wc.rb +68 -0
  576. data/test/lib/facet/fileutils/test_which.rb +61 -0
  577. data/test/lib/facet/float/test_approx.rb +28 -0
  578. data/test/lib/facet/float/test_round_at.rb +46 -0
  579. data/test/lib/facet/float/test_round_to.rb +46 -0
  580. data/test/lib/facet/hash/self/test_zipnew.rb +28 -0
  581. data/test/lib/facet/hash/test_alias.rb +31 -0
  582. data/test/lib/facet/hash/test_assert_has_keys.rb +27 -0
  583. data/test/lib/facet/hash/test_assert_has_only_keys.rb +27 -0
  584. data/test/lib/facet/hash/test_at.rb +28 -0
  585. data/test/lib/facet/hash/test_collate.rb +35 -0
  586. data/test/lib/facet/hash/test_each.rb +36 -0
  587. data/test/lib/facet/hash/test_each_with_index.rb +29 -0
  588. data/test/lib/facet/hash/test_each_with_key.rb +29 -0
  589. data/test/lib/facet/hash/test_graph.rb +28 -0
  590. data/test/lib/facet/hash/test_has_keys.rb +27 -0
  591. data/test/lib/facet/hash/test_has_only_keys.rb +27 -0
  592. data/test/lib/facet/hash/test_inverse.rb +28 -0
  593. data/test/lib/facet/hash/test_keys_to_s.rb +34 -0
  594. data/test/lib/facet/hash/test_keys_to_sym.rb +34 -0
  595. data/test/lib/facet/hash/test_op_fetch.rb +111 -0
  596. data/test/lib/facet/hash/test_op_lshift.rb +29 -0
  597. data/test/lib/facet/hash/test_rand_key.rb +27 -0
  598. data/test/lib/facet/hash/test_rand_pair.rb +27 -0
  599. data/test/lib/facet/hash/test_rand_value.rb +27 -0
  600. data/test/lib/facet/hash/test_replace_each.rb +29 -0
  601. data/test/lib/facet/hash/test_shuffle.rb +32 -0
  602. data/test/lib/facet/hash/test_slice.rb +27 -0
  603. data/test/lib/facet/hash/test_swap.rb +27 -0
  604. data/test/lib/facet/hash/test_swapkey.rb +29 -0
  605. data/test/lib/facet/hash/test_to_h.rb +27 -0
  606. data/test/lib/facet/hash/test_to_ostruct.rb +30 -0
  607. data/test/lib/facet/hash/test_to_ostruct_recurse.rb +30 -0
  608. data/test/lib/facet/hash/test_traverse.rb +37 -0
  609. data/test/lib/facet/hash/test_update_each.rb +29 -0
  610. data/test/lib/facet/hash/test_update_keys.rb +28 -0
  611. data/test/lib/facet/hash/test_update_values.rb +28 -0
  612. data/test/lib/facet/hash/test_weave.rb +29 -0
  613. data/test/lib/facet/integer/test_factorial.rb +30 -0
  614. data/test/lib/facet/integer/test_multiple.rb +43 -0
  615. data/test/lib/facet/integer/test_ordinal.rb +29 -0
  616. data/test/lib/facet/integer/test_times_collect.rb +28 -0
  617. data/test/lib/facet/kernel/test___class__.rb +26 -0
  618. data/test/lib/facet/kernel/test_as.rb +42 -0
  619. data/test/lib/facet/kernel/test_assign_from.rb +31 -0
  620. data/test/lib/facet/kernel/test_assign_with.rb +31 -0
  621. data/test/lib/facet/kernel/test_bool.rb +41 -0
  622. data/test/lib/facet/kernel/test_bug.rb +26 -0
  623. data/test/lib/facet/kernel/test_call_stack.rb +26 -0
  624. data/test/lib/facet/kernel/test_called.rb +26 -0
  625. data/test/lib/facet/kernel/test_constant.rb +33 -0
  626. data/test/lib/facet/kernel/test_copy.rb +40 -0
  627. data/test/lib/facet/kernel/test_deep_copy.rb +40 -0
  628. data/test/lib/facet/kernel/test_demo.rb +28 -0
  629. data/test/lib/facet/kernel/test_fn.rb +26 -0
  630. data/test/lib/facet/kernel/test_generate_method_name.rb +26 -0
  631. data/test/lib/facet/kernel/test_get_by_id.rb +28 -0
  632. data/test/lib/facet/kernel/test_here.rb +26 -0
  633. data/test/lib/facet/kernel/test_in.rb +27 -0
  634. data/test/lib/facet/kernel/test_maybe.rb +26 -0
  635. data/test/lib/facet/kernel/test_metaclass.rb +34 -0
  636. data/test/lib/facet/kernel/test_method.rb +32 -0
  637. data/test/lib/facet/kernel/test_method_name.rb +31 -0
  638. data/test/lib/facet/kernel/test_methods.rb +50 -0
  639. data/test/lib/facet/kernel/test_new.rb +30 -0
  640. data/test/lib/facet/kernel/test_object_class.rb +26 -0
  641. data/test/lib/facet/kernel/test_object_hexid.rb +27 -0
  642. data/test/lib/facet/kernel/test_require_all.rb +26 -0
  643. data/test/lib/facet/kernel/test_require_esc.rb +27 -0
  644. data/test/lib/facet/kernel/test_require_facet.rb +27 -0
  645. data/test/lib/facet/kernel/test_resc.rb +27 -0
  646. data/test/lib/facet/kernel/test_returning.rb +30 -0
  647. data/test/lib/facet/kernel/test_send_as.rb +26 -0
  648. data/test/lib/facet/kernel/test_set_from.rb +33 -0
  649. data/test/lib/facet/kernel/test_set_with.rb +33 -0
  650. data/test/lib/facet/kernel/test_silently.rb +28 -0
  651. data/test/lib/facet/kernel/test_singleton.rb +40 -0
  652. data/test/lib/facet/kernel/test_superior.rb +30 -0
  653. data/test/lib/facet/kernel/test_supermethod.rb +33 -0
  654. data/test/lib/facet/kernel/test_this.rb +26 -0
  655. data/test/lib/facet/kernel/test_to_b.rb +28 -0
  656. data/test/lib/facet/kernel/test_to_bool.rb +28 -0
  657. data/test/lib/facet/kernel/test_uri.rb +30 -0
  658. data/test/lib/facet/kernel/test_val.rb +43 -0
  659. data/test/lib/facet/kernel/test_with_accessor.rb +51 -0
  660. data/test/lib/facet/matchdata/test_match.rb +29 -0
  661. data/test/lib/facet/matchdata/test_matchtree.rb +32 -0
  662. data/test/lib/facet/module/test_abstract.rb +36 -0
  663. data/test/lib/facet/module/test_alias_module_function.rb +34 -0
  664. data/test/lib/facet/module/test_ancestor.rb +26 -0
  665. data/test/lib/facet/module/test_basename.rb +26 -0
  666. data/test/lib/facet/module/test_by_name.rb +29 -0
  667. data/test/lib/facet/module/test_cattr_accessor.rb +55 -0
  668. data/test/lib/facet/module/test_clone_using.rb +55 -0
  669. data/test/lib/facet/module/test_dirname.rb +26 -0
  670. data/test/lib/facet/module/test_equate_on.rb +37 -0
  671. data/test/lib/facet/module/test_generate_instance_method_name.rb +33 -0
  672. data/test/lib/facet/module/test_include_as.rb +35 -0
  673. data/test/lib/facet/module/test_initializer.rb +32 -0
  674. data/test/lib/facet/module/test_instance_methods.rb +59 -0
  675. data/test/lib/facet/module/test_integrate.rb +35 -0
  676. data/test/lib/facet/module/test_memoize.rb +50 -0
  677. data/test/lib/facet/module/test_modspace.rb +27 -0
  678. data/test/lib/facet/module/test_namespace.rb +33 -0
  679. data/test/lib/facet/module/test_nesting.rb +36 -0
  680. data/test/lib/facet/module/test_redef.rb +30 -0
  681. data/test/lib/facet/module/test_redefine_method.rb +30 -0
  682. data/test/lib/facet/module/test_redirect.rb +30 -0
  683. data/test/lib/facet/module/test_redirect_method.rb +30 -0
  684. data/test/lib/facet/module/test_remove.rb +30 -0
  685. data/test/lib/facet/module/test_rename.rb +31 -0
  686. data/test/lib/facet/module/test_rename_method.rb +31 -0
  687. data/test/lib/facet/module/test_revisal.rb +35 -0
  688. data/test/lib/facet/module/test_shadow_method.rb +30 -0
  689. data/test/lib/facet/module/test_sort_on.rb +42 -0
  690. data/test/lib/facet/module/test_undef.rb +30 -0
  691. data/test/lib/facet/module/test_wrap.rb +30 -0
  692. data/test/lib/facet/module/test_wrap_method.rb +30 -0
  693. data/test/lib/facet/nilclass/test_empty.rb +26 -0
  694. data/test/lib/facet/nilclass/test_include.rb +26 -0
  695. data/test/lib/facet/nilclass/test_op_fetch.rb +28 -0
  696. data/test/lib/facet/nilclass/test_size.rb +30 -0
  697. data/test/lib/facet/nilclass/test_to_f.rb +26 -0
  698. data/test/lib/facet/nilclass/test_to_h.rb +26 -0
  699. data/test/lib/facet/numeric/test_ceil_multiple.rb +31 -0
  700. data/test/lib/facet/numeric/test_succ.rb +40 -0
  701. data/test/lib/facet/numeric/test_to_b.rb +27 -0
  702. data/test/lib/facet/ostruct/test___merge__.rb +38 -0
  703. data/test/lib/facet/ostruct/test___update__.rb +29 -0
  704. data/test/lib/facet/ostruct/test_op_fetch.rb +27 -0
  705. data/test/lib/facet/ostruct/test_op_store.rb +28 -0
  706. data/test/lib/facet/proc/test_compose.rb +36 -0
  707. data/test/lib/facet/proc/test_to_method.rb +31 -0
  708. data/test/lib/facet/range/test_to_r.rb +27 -0
  709. data/test/lib/facet/range/test_to_range.rb +27 -0
  710. data/test/lib/facet/range/test_umbrella.rb +34 -0
  711. data/test/lib/facet/range/test_within.rb +29 -0
  712. data/test/lib/facet/regexp/test_arity.rb +33 -0
  713. data/test/lib/facet/regexp/test_to_re.rb +27 -0
  714. data/test/lib/facet/regexp/test_to_regexp.rb +27 -0
  715. data/test/lib/facet/string/self/test_interpolate.rb +27 -0
  716. data/test/lib/facet/string/self/test_patterns.rb +28 -0
  717. data/test/lib/facet/string/self/test_rand_letter.rb +26 -0
  718. data/test/lib/facet/string/test_align_center.rb +34 -0
  719. data/test/lib/facet/string/test_at_rand.rb +35 -0
  720. data/test/lib/facet/string/test_basename.rb +41 -0
  721. data/test/lib/facet/string/test_blank.rb +27 -0
  722. data/test/lib/facet/string/test_bracket.rb +49 -0
  723. data/test/lib/facet/string/test_camelcase.rb +39 -0
  724. data/test/lib/facet/string/test_camelize.rb +26 -0
  725. data/test/lib/facet/string/test_capitalized.rb +26 -0
  726. data/test/lib/facet/string/test_chars.rb +27 -0
  727. data/test/lib/facet/string/test_cmp.rb +30 -0
  728. data/test/lib/facet/string/test_demodulize.rb +38 -0
  729. data/test/lib/facet/string/test_downcase.rb +26 -0
  730. data/test/lib/facet/string/test_dresner.rb +32 -0
  731. data/test/lib/facet/string/test_each_char.rb +29 -0
  732. data/test/lib/facet/string/test_each_word.rb +29 -0
  733. data/test/lib/facet/string/test_first.rb +43 -0
  734. data/test/lib/facet/string/test_fold.rb +34 -0
  735. data/test/lib/facet/string/test_frequency.rb +28 -0
  736. data/test/lib/facet/string/test_humanize.rb +26 -0
  737. data/test/lib/facet/string/test_indent.rb +40 -0
  738. data/test/lib/facet/string/test_index_all.rb +26 -0
  739. data/test/lib/facet/string/test_last.rb +46 -0
  740. data/test/lib/facet/string/test_line_wrap.rb +27 -0
  741. data/test/lib/facet/string/test_lines.rb +26 -0
  742. data/test/lib/facet/string/test_lowercase.rb +26 -0
  743. data/test/lib/facet/string/test_margin.rb +117 -0
  744. data/test/lib/facet/string/test_methodize.rb +27 -0
  745. data/test/lib/facet/string/test_modulize.rb +29 -0
  746. data/test/lib/facet/string/test_mscan.rb +30 -0
  747. data/test/lib/facet/string/test_natcmp.rb +30 -0
  748. data/test/lib/facet/string/test_nchar.rb +29 -0
  749. data/test/lib/facet/string/test_pathize.rb +29 -0
  750. data/test/lib/facet/string/test_pop.rb +47 -0
  751. data/test/lib/facet/string/test_probability.rb +28 -0
  752. data/test/lib/facet/string/test_push.rb +40 -0
  753. data/test/lib/facet/string/test_quote.rb +49 -0
  754. data/test/lib/facet/string/test_rand_byte.rb +35 -0
  755. data/test/lib/facet/string/test_rand_index.rb +26 -0
  756. data/test/lib/facet/string/test_range.rb +27 -0
  757. data/test/lib/facet/string/test_range_all.rb +27 -0
  758. data/test/lib/facet/string/test_range_of_line.rb +28 -0
  759. data/test/lib/facet/string/test_regesc.rb +28 -0
  760. data/test/lib/facet/string/test_shatter.rb +29 -0
  761. data/test/lib/facet/string/test_shift.rb +40 -0
  762. data/test/lib/facet/string/test_shuffle.rb +27 -0
  763. data/test/lib/facet/string/test_similarity.rb +26 -0
  764. data/test/lib/facet/string/test_singular.rb +32 -0
  765. data/test/lib/facet/string/test_slap.rb +40 -0
  766. data/test/lib/facet/string/test_soundex.rb +41 -0
  767. data/test/lib/facet/string/test_succ.rb +29 -0
  768. data/test/lib/facet/string/test_to_a.rb +27 -0
  769. data/test/lib/facet/string/test_to_arr.rb +26 -0
  770. data/test/lib/facet/string/test_to_b.rb +41 -0
  771. data/test/lib/facet/string/test_to_const.rb +28 -0
  772. data/test/lib/facet/string/test_to_date.rb +30 -0
  773. data/test/lib/facet/string/test_to_proc.rb +33 -0
  774. data/test/lib/facet/string/test_to_re.rb +28 -0
  775. data/test/lib/facet/string/test_to_time.rb +30 -0
  776. data/test/lib/facet/string/test_unix_crypt.rb +30 -0
  777. data/test/lib/facet/string/test_unpack.rb +34 -0
  778. data/test/lib/facet/string/test_unshift.rb +39 -0
  779. data/test/lib/facet/string/test_upcase.rb +30 -0
  780. data/test/lib/facet/string/test_whitespace.rb +27 -0
  781. data/test/lib/facet/string/test_word_filter.rb +34 -0
  782. data/test/lib/facet/string/test_word_wrap.rb +51 -0
  783. data/test/lib/facet/string/test_words.rb +37 -0
  784. data/test/lib/facet/symbol/test_camelcase.rb +26 -0
  785. data/test/lib/facet/symbol/test_camelize.rb +27 -0
  786. data/test/lib/facet/symbol/test_capitalize.rb +26 -0
  787. data/test/lib/facet/symbol/test_capitalized.rb +27 -0
  788. data/test/lib/facet/symbol/test_downcase.rb +27 -0
  789. data/test/lib/facet/symbol/test_not.rb +29 -0
  790. data/test/lib/facet/symbol/test_pad.rb +27 -0
  791. data/test/lib/facet/symbol/test_succ.rb +28 -0
  792. data/test/lib/facet/symbol/test_to_const.rb +28 -0
  793. data/test/lib/facet/symbol/test_to_proc.rb +27 -0
  794. data/test/lib/facet/symbol/test_to_str.rb +28 -0
  795. data/test/lib/facet/symbol/test_underscore.rb +26 -0
  796. data/test/lib/facet/symbol/test_upcase.rb +27 -0
  797. data/test/lib/facet/time/test_change.rb +33 -0
  798. data/test/lib/facet/time/test_elapse.rb +27 -0
  799. data/test/lib/facet/time/test_stamp.rb +31 -0
  800. data/test/lib/facet/time/test_to_date.rb +31 -0
  801. data/test/lib/facet/time/test_to_s.rb +31 -0
  802. data/test/lib/facet/time/test_to_time.rb +31 -0
  803. data/{packages/core/test → test}/testdir.rb +0 -0
  804. metadata +891 -1084
  805. data/packages/core/AUTHORS +0 -33
  806. data/packages/core/CHANGELOG +0 -257
  807. data/packages/core/COPYING +0 -403
  808. data/packages/core/ProjectInfo +0 -39
  809. data/packages/core/README +0 -252
  810. data/packages/core/Rakefile +0 -175
  811. data/packages/core/lib/facet/array.rb +0 -33
  812. data/packages/core/lib/facet/class.rb +0 -5
  813. data/packages/core/lib/facet/class/unix_path.rb +0 -32
  814. data/packages/core/lib/facet/enumerable.rb +0 -38
  815. data/packages/core/lib/facet/enumerable/project.rb +0 -11
  816. data/packages/core/lib/facet/enumerable/where.rb +0 -12
  817. data/packages/core/lib/facet/integer.rb +0 -8
  818. data/packages/core/lib/facet/kernel.rb +0 -65
  819. data/packages/core/lib/facet/kernel/generate_method_name.rb +0 -39
  820. data/packages/core/lib/facet/module/attr.rb +0 -23
  821. data/packages/core/lib/facet/module/attr_setter.rb +0 -48
  822. data/packages/core/lib/facet/module/attr_tester.rb +0 -56
  823. data/packages/core/lib/facet/module/generate_instance_method_name.rb +0 -47
  824. data/packages/core/lib/facet/module/initializer.rb +0 -65
  825. data/packages/core/lib/facet/string.rb +0 -86
  826. data/packages/core/lib/facet/string/self/random.rb +0 -36
  827. data/packages/core/lib/facet/string/unbracket.rb +0 -46
  828. data/packages/core/lib/facet/symbol/not.rb +0 -40
  829. data/packages/core/lib/facet/time.rb +0 -7
  830. data/packages/core/test/FIXTURE/filelist/testfile.txt +0 -0
  831. data/packages/core/test/FIXTURE/filelist/testfile2.txt +0 -0
  832. data/packages/core/test/lib/facet/array/test_at_rand.rb +0 -34
  833. data/packages/core/test/lib/facet/array/test_delete_unless.rb +0 -28
  834. data/packages/core/test/lib/facet/array/test_delete_values.rb +0 -28
  835. data/packages/core/test/lib/facet/array/test_delete_values_at.rb +0 -31
  836. data/packages/core/test/lib/facet/array/test_first.rb +0 -46
  837. data/packages/core/test/lib/facet/array/test_head.rb +0 -42
  838. data/packages/core/test/lib/facet/array/test_last_index.rb +0 -26
  839. data/packages/core/test/lib/facet/array/test_merge.rb +0 -35
  840. data/packages/core/test/lib/facet/array/test_mid.rb +0 -33
  841. data/packages/core/test/lib/facet/array/test_middle.rb +0 -29
  842. data/packages/core/test/lib/facet/array/test_op_fetch.rb +0 -27
  843. data/packages/core/test/lib/facet/array/test_op_store.rb +0 -30
  844. data/packages/core/test/lib/facet/array/test_pick.rb +0 -40
  845. data/packages/core/test/lib/facet/array/test_pos.rb +0 -28
  846. data/packages/core/test/lib/facet/array/test_pull.rb +0 -28
  847. data/packages/core/test/lib/facet/array/test_rand_index.rb +0 -29
  848. data/packages/core/test/lib/facet/array/test_rand_subset.rb +0 -29
  849. data/packages/core/test/lib/facet/array/test_range.rb +0 -32
  850. data/packages/core/test/lib/facet/array/test_rotate.rb +0 -36
  851. data/packages/core/test/lib/facet/array/test_select.rb +0 -28
  852. data/packages/core/test/lib/facet/array/test_shuffle.rb +0 -35
  853. data/packages/core/test/lib/facet/array/test_slap.rb +0 -28
  854. data/packages/core/test/lib/facet/array/test_thru.rb +0 -27
  855. data/packages/core/test/lib/facet/array/test_to_b.rb +0 -27
  856. data/packages/core/test/lib/facet/array/test_to_h.rb +0 -33
  857. data/packages/core/test/lib/facet/array/test_to_hash.rb +0 -27
  858. data/packages/core/test/lib/facet/binding/self/test_of_caller.rb +0 -35
  859. data/packages/core/test/lib/facet/binding/test___LINE__.rb +0 -43
  860. data/packages/core/test/lib/facet/binding/test_call_stack.rb +0 -34
  861. data/packages/core/test/lib/facet/binding/test_called.rb +0 -30
  862. data/packages/core/test/lib/facet/binding/test_caller.rb +0 -35
  863. data/packages/core/test/lib/facet/binding/test_defined.rb +0 -34
  864. data/packages/core/test/lib/facet/binding/test_eval.rb +0 -34
  865. data/packages/core/test/lib/facet/binding/test_local_variables.rb +0 -34
  866. data/packages/core/test/lib/facet/binding/test_method_name.rb +0 -34
  867. data/packages/core/test/lib/facet/binding/test_op_fetch.rb +0 -34
  868. data/packages/core/test/lib/facet/binding/test_op_store.rb +0 -35
  869. data/packages/core/test/lib/facet/binding/test_self.rb +0 -34
  870. data/packages/core/test/lib/facet/class/test_descendents.rb +0 -30
  871. data/packages/core/test/lib/facet/class/test_remove_descendents.rb +0 -32
  872. data/packages/core/test/lib/facet/comparable/test_at_least.rb +0 -34
  873. data/packages/core/test/lib/facet/comparable/test_clip.rb +0 -44
  874. data/packages/core/test/lib/facet/comparable/test_cmp.rb +0 -28
  875. data/packages/core/test/lib/facet/continuation/self/test_create.rb +0 -26
  876. data/packages/core/test/lib/facet/date/test_days_in_month.rb +0 -30
  877. data/packages/core/test/lib/facet/date/test_days_of_month.rb +0 -30
  878. data/packages/core/test/lib/facet/date/test_stamp.rb +0 -38
  879. data/packages/core/test/lib/facet/date/test_to_date.rb +0 -30
  880. data/packages/core/test/lib/facet/date/test_to_s.rb +0 -30
  881. data/packages/core/test/lib/facet/date/test_to_time.rb +0 -30
  882. data/packages/core/test/lib/facet/dir/self/test_ancestor.rb +0 -26
  883. data/packages/core/test/lib/facet/dir/self/test_ascend.rb +0 -41
  884. data/packages/core/test/lib/facet/dir/self/test_ls_r.rb +0 -52
  885. data/packages/core/test/lib/facet/enumerable/self/test_combinations.rb +0 -43
  886. data/packages/core/test/lib/facet/enumerable/self/test_cross.rb +0 -31
  887. data/packages/core/test/lib/facet/enumerable/test_collect_with_index.rb +0 -27
  888. data/packages/core/test/lib/facet/enumerable/test_commonality.rb +0 -31
  889. data/packages/core/test/lib/facet/enumerable/test_compact_collect.rb +0 -27
  890. data/packages/core/test/lib/facet/enumerable/test_cross.rb +0 -30
  891. data/packages/core/test/lib/facet/enumerable/test_each_combination.rb +0 -29
  892. data/packages/core/test/lib/facet/enumerable/test_each_pair.rb +0 -29
  893. data/packages/core/test/lib/facet/enumerable/test_each_slice.rb +0 -74
  894. data/packages/core/test/lib/facet/enumerable/test_each_unique_pair.rb +0 -29
  895. data/packages/core/test/lib/facet/enumerable/test_entropy.rb +0 -26
  896. data/packages/core/test/lib/facet/enumerable/test_every.rb +0 -35
  897. data/packages/core/test/lib/facet/enumerable/test_ew.rb +0 -31
  898. data/packages/core/test/lib/facet/enumerable/test_filter_collect.rb +0 -31
  899. data/packages/core/test/lib/facet/enumerable/test_find_collisions.rb +0 -30
  900. data/packages/core/test/lib/facet/enumerable/test_frequency.rb +0 -27
  901. data/packages/core/test/lib/facet/enumerable/test_graph.rb +0 -30
  902. data/packages/core/test/lib/facet/enumerable/test_ideal_entropy.rb +0 -27
  903. data/packages/core/test/lib/facet/enumerable/test_none.rb +0 -33
  904. data/packages/core/test/lib/facet/enumerable/test_occur.rb +0 -30
  905. data/packages/core/test/lib/facet/enumerable/test_one.rb +0 -35
  906. data/packages/core/test/lib/facet/enumerable/test_op_pow.rb +0 -27
  907. data/packages/core/test/lib/facet/enumerable/test_partition_by.rb +0 -31
  908. data/packages/core/test/lib/facet/enumerable/test_permute.rb +0 -29
  909. data/packages/core/test/lib/facet/enumerable/test_probability.rb +0 -27
  910. data/packages/core/test/lib/facet/enumerable/test_to_h.rb +0 -27
  911. data/packages/core/test/lib/facet/enumerable/test_uniq_by.rb +0 -28
  912. data/packages/core/test/lib/facet/file/self/test_create.rb +0 -39
  913. data/packages/core/test/lib/facet/file/self/test_open_as_string.rb +0 -40
  914. data/packages/core/test/lib/facet/file/self/test_read_list.rb +0 -37
  915. data/packages/core/test/lib/facet/file/self/test_sanitize.rb +0 -46
  916. data/packages/core/test/lib/facet/file/self/test_split_all.rb +0 -27
  917. data/packages/core/test/lib/facet/fileutils/test_wc.rb +0 -68
  918. data/packages/core/test/lib/facet/fileutils/test_which.rb +0 -61
  919. data/packages/core/test/lib/facet/float/test_approx.rb +0 -28
  920. data/packages/core/test/lib/facet/float/test_round_at.rb +0 -46
  921. data/packages/core/test/lib/facet/float/test_round_to.rb +0 -46
  922. data/packages/core/test/lib/facet/hash/self/test_zipnew.rb +0 -28
  923. data/packages/core/test/lib/facet/hash/test_alias.rb +0 -31
  924. data/packages/core/test/lib/facet/hash/test_assert_has_keys.rb +0 -27
  925. data/packages/core/test/lib/facet/hash/test_assert_has_only_keys.rb +0 -27
  926. data/packages/core/test/lib/facet/hash/test_at.rb +0 -28
  927. data/packages/core/test/lib/facet/hash/test_collate.rb +0 -35
  928. data/packages/core/test/lib/facet/hash/test_each.rb +0 -36
  929. data/packages/core/test/lib/facet/hash/test_each_with_index.rb +0 -29
  930. data/packages/core/test/lib/facet/hash/test_each_with_key.rb +0 -29
  931. data/packages/core/test/lib/facet/hash/test_graph.rb +0 -28
  932. data/packages/core/test/lib/facet/hash/test_has_keys.rb +0 -27
  933. data/packages/core/test/lib/facet/hash/test_has_only_keys.rb +0 -27
  934. data/packages/core/test/lib/facet/hash/test_inverse.rb +0 -28
  935. data/packages/core/test/lib/facet/hash/test_keys_to_s.rb +0 -34
  936. data/packages/core/test/lib/facet/hash/test_keys_to_sym.rb +0 -34
  937. data/packages/core/test/lib/facet/hash/test_op_fetch.rb +0 -111
  938. data/packages/core/test/lib/facet/hash/test_op_lshift.rb +0 -29
  939. data/packages/core/test/lib/facet/hash/test_rand_key.rb +0 -27
  940. data/packages/core/test/lib/facet/hash/test_rand_pair.rb +0 -27
  941. data/packages/core/test/lib/facet/hash/test_rand_value.rb +0 -27
  942. data/packages/core/test/lib/facet/hash/test_replace_each.rb +0 -29
  943. data/packages/core/test/lib/facet/hash/test_shuffle.rb +0 -32
  944. data/packages/core/test/lib/facet/hash/test_slice.rb +0 -27
  945. data/packages/core/test/lib/facet/hash/test_swap.rb +0 -27
  946. data/packages/core/test/lib/facet/hash/test_swapkey.rb +0 -29
  947. data/packages/core/test/lib/facet/hash/test_to_h.rb +0 -27
  948. data/packages/core/test/lib/facet/hash/test_to_ostruct.rb +0 -30
  949. data/packages/core/test/lib/facet/hash/test_to_ostruct_recurse.rb +0 -30
  950. data/packages/core/test/lib/facet/hash/test_traverse.rb +0 -37
  951. data/packages/core/test/lib/facet/hash/test_update_each.rb +0 -29
  952. data/packages/core/test/lib/facet/hash/test_update_keys.rb +0 -28
  953. data/packages/core/test/lib/facet/hash/test_update_values.rb +0 -28
  954. data/packages/core/test/lib/facet/hash/test_weave.rb +0 -29
  955. data/packages/core/test/lib/facet/integer/test_factorial.rb +0 -30
  956. data/packages/core/test/lib/facet/integer/test_multiple.rb +0 -43
  957. data/packages/core/test/lib/facet/integer/test_ordinal.rb +0 -29
  958. data/packages/core/test/lib/facet/integer/test_times_collect.rb +0 -28
  959. data/packages/core/test/lib/facet/kernel/test___class__.rb +0 -26
  960. data/packages/core/test/lib/facet/kernel/test_as.rb +0 -42
  961. data/packages/core/test/lib/facet/kernel/test_assign_from.rb +0 -31
  962. data/packages/core/test/lib/facet/kernel/test_assign_with.rb +0 -31
  963. data/packages/core/test/lib/facet/kernel/test_bool.rb +0 -41
  964. data/packages/core/test/lib/facet/kernel/test_bug.rb +0 -26
  965. data/packages/core/test/lib/facet/kernel/test_call_stack.rb +0 -26
  966. data/packages/core/test/lib/facet/kernel/test_called.rb +0 -26
  967. data/packages/core/test/lib/facet/kernel/test_constant.rb +0 -33
  968. data/packages/core/test/lib/facet/kernel/test_copy.rb +0 -40
  969. data/packages/core/test/lib/facet/kernel/test_deep_copy.rb +0 -40
  970. data/packages/core/test/lib/facet/kernel/test_demo.rb +0 -28
  971. data/packages/core/test/lib/facet/kernel/test_fn.rb +0 -26
  972. data/packages/core/test/lib/facet/kernel/test_generate_method_name.rb +0 -26
  973. data/packages/core/test/lib/facet/kernel/test_get_by_id.rb +0 -28
  974. data/packages/core/test/lib/facet/kernel/test_here.rb +0 -26
  975. data/packages/core/test/lib/facet/kernel/test_in.rb +0 -27
  976. data/packages/core/test/lib/facet/kernel/test_maybe.rb +0 -26
  977. data/packages/core/test/lib/facet/kernel/test_metaclass.rb +0 -34
  978. data/packages/core/test/lib/facet/kernel/test_method.rb +0 -32
  979. data/packages/core/test/lib/facet/kernel/test_method_name.rb +0 -31
  980. data/packages/core/test/lib/facet/kernel/test_methods.rb +0 -50
  981. data/packages/core/test/lib/facet/kernel/test_new.rb +0 -30
  982. data/packages/core/test/lib/facet/kernel/test_object_class.rb +0 -26
  983. data/packages/core/test/lib/facet/kernel/test_object_hexid.rb +0 -27
  984. data/packages/core/test/lib/facet/kernel/test_require_all.rb +0 -26
  985. data/packages/core/test/lib/facet/kernel/test_require_esc.rb +0 -27
  986. data/packages/core/test/lib/facet/kernel/test_require_facet.rb +0 -27
  987. data/packages/core/test/lib/facet/kernel/test_resc.rb +0 -27
  988. data/packages/core/test/lib/facet/kernel/test_returning.rb +0 -30
  989. data/packages/core/test/lib/facet/kernel/test_send_as.rb +0 -26
  990. data/packages/core/test/lib/facet/kernel/test_set_from.rb +0 -33
  991. data/packages/core/test/lib/facet/kernel/test_set_with.rb +0 -33
  992. data/packages/core/test/lib/facet/kernel/test_silently.rb +0 -28
  993. data/packages/core/test/lib/facet/kernel/test_singleton.rb +0 -40
  994. data/packages/core/test/lib/facet/kernel/test_superior.rb +0 -30
  995. data/packages/core/test/lib/facet/kernel/test_supermethod.rb +0 -33
  996. data/packages/core/test/lib/facet/kernel/test_this.rb +0 -26
  997. data/packages/core/test/lib/facet/kernel/test_to_b.rb +0 -28
  998. data/packages/core/test/lib/facet/kernel/test_to_bool.rb +0 -28
  999. data/packages/core/test/lib/facet/kernel/test_uri.rb +0 -30
  1000. data/packages/core/test/lib/facet/kernel/test_val.rb +0 -43
  1001. data/packages/core/test/lib/facet/kernel/test_with_accessor.rb +0 -51
  1002. data/packages/core/test/lib/facet/matchdata/test_match.rb +0 -29
  1003. data/packages/core/test/lib/facet/matchdata/test_matchtree.rb +0 -32
  1004. data/packages/core/test/lib/facet/module/test_abstract.rb +0 -36
  1005. data/packages/core/test/lib/facet/module/test_alias_module_function.rb +0 -34
  1006. data/packages/core/test/lib/facet/module/test_ancestor.rb +0 -26
  1007. data/packages/core/test/lib/facet/module/test_basename.rb +0 -26
  1008. data/packages/core/test/lib/facet/module/test_by_name.rb +0 -29
  1009. data/packages/core/test/lib/facet/module/test_cattr_accessor.rb +0 -55
  1010. data/packages/core/test/lib/facet/module/test_clone_using.rb +0 -55
  1011. data/packages/core/test/lib/facet/module/test_dirname.rb +0 -26
  1012. data/packages/core/test/lib/facet/module/test_equate_on.rb +0 -37
  1013. data/packages/core/test/lib/facet/module/test_generate_instance_method_name.rb +0 -33
  1014. data/packages/core/test/lib/facet/module/test_include_as.rb +0 -35
  1015. data/packages/core/test/lib/facet/module/test_initializer.rb +0 -32
  1016. data/packages/core/test/lib/facet/module/test_instance_methods.rb +0 -59
  1017. data/packages/core/test/lib/facet/module/test_integrate.rb +0 -35
  1018. data/packages/core/test/lib/facet/module/test_memoize.rb +0 -50
  1019. data/packages/core/test/lib/facet/module/test_modspace.rb +0 -27
  1020. data/packages/core/test/lib/facet/module/test_namespace.rb +0 -33
  1021. data/packages/core/test/lib/facet/module/test_nesting.rb +0 -36
  1022. data/packages/core/test/lib/facet/module/test_redef.rb +0 -30
  1023. data/packages/core/test/lib/facet/module/test_redefine_method.rb +0 -30
  1024. data/packages/core/test/lib/facet/module/test_redirect.rb +0 -30
  1025. data/packages/core/test/lib/facet/module/test_redirect_method.rb +0 -30
  1026. data/packages/core/test/lib/facet/module/test_remove.rb +0 -30
  1027. data/packages/core/test/lib/facet/module/test_rename.rb +0 -31
  1028. data/packages/core/test/lib/facet/module/test_rename_method.rb +0 -31
  1029. data/packages/core/test/lib/facet/module/test_revisal.rb +0 -35
  1030. data/packages/core/test/lib/facet/module/test_shadow_method.rb +0 -30
  1031. data/packages/core/test/lib/facet/module/test_sort_on.rb +0 -42
  1032. data/packages/core/test/lib/facet/module/test_undef.rb +0 -30
  1033. data/packages/core/test/lib/facet/module/test_wrap.rb +0 -30
  1034. data/packages/core/test/lib/facet/module/test_wrap_method.rb +0 -30
  1035. data/packages/core/test/lib/facet/nilclass/test_empty.rb +0 -26
  1036. data/packages/core/test/lib/facet/nilclass/test_include.rb +0 -26
  1037. data/packages/core/test/lib/facet/nilclass/test_op_fetch.rb +0 -28
  1038. data/packages/core/test/lib/facet/nilclass/test_size.rb +0 -30
  1039. data/packages/core/test/lib/facet/nilclass/test_to_f.rb +0 -26
  1040. data/packages/core/test/lib/facet/nilclass/test_to_h.rb +0 -26
  1041. data/packages/core/test/lib/facet/numeric/test_ceil_multiple.rb +0 -31
  1042. data/packages/core/test/lib/facet/numeric/test_succ.rb +0 -40
  1043. data/packages/core/test/lib/facet/numeric/test_to_b.rb +0 -27
  1044. data/packages/core/test/lib/facet/ostruct/test___merge__.rb +0 -38
  1045. data/packages/core/test/lib/facet/ostruct/test___update__.rb +0 -29
  1046. data/packages/core/test/lib/facet/ostruct/test_op_fetch.rb +0 -27
  1047. data/packages/core/test/lib/facet/ostruct/test_op_store.rb +0 -28
  1048. data/packages/core/test/lib/facet/proc/test_compose.rb +0 -36
  1049. data/packages/core/test/lib/facet/proc/test_to_method.rb +0 -31
  1050. data/packages/core/test/lib/facet/range/test_to_r.rb +0 -27
  1051. data/packages/core/test/lib/facet/range/test_to_range.rb +0 -27
  1052. data/packages/core/test/lib/facet/range/test_umbrella.rb +0 -34
  1053. data/packages/core/test/lib/facet/range/test_within.rb +0 -29
  1054. data/packages/core/test/lib/facet/regexp/test_arity.rb +0 -33
  1055. data/packages/core/test/lib/facet/regexp/test_to_re.rb +0 -27
  1056. data/packages/core/test/lib/facet/regexp/test_to_regexp.rb +0 -27
  1057. data/packages/core/test/lib/facet/string/self/test_interpolate.rb +0 -27
  1058. data/packages/core/test/lib/facet/string/self/test_patterns.rb +0 -28
  1059. data/packages/core/test/lib/facet/string/self/test_rand_letter.rb +0 -26
  1060. data/packages/core/test/lib/facet/string/test_align_center.rb +0 -34
  1061. data/packages/core/test/lib/facet/string/test_at_rand.rb +0 -35
  1062. data/packages/core/test/lib/facet/string/test_basename.rb +0 -41
  1063. data/packages/core/test/lib/facet/string/test_blank.rb +0 -27
  1064. data/packages/core/test/lib/facet/string/test_bracket.rb +0 -49
  1065. data/packages/core/test/lib/facet/string/test_camelcase.rb +0 -39
  1066. data/packages/core/test/lib/facet/string/test_camelize.rb +0 -26
  1067. data/packages/core/test/lib/facet/string/test_capitalized.rb +0 -26
  1068. data/packages/core/test/lib/facet/string/test_chars.rb +0 -27
  1069. data/packages/core/test/lib/facet/string/test_cmp.rb +0 -30
  1070. data/packages/core/test/lib/facet/string/test_demodulize.rb +0 -38
  1071. data/packages/core/test/lib/facet/string/test_downcase.rb +0 -26
  1072. data/packages/core/test/lib/facet/string/test_dresner.rb +0 -32
  1073. data/packages/core/test/lib/facet/string/test_each_char.rb +0 -29
  1074. data/packages/core/test/lib/facet/string/test_each_word.rb +0 -29
  1075. data/packages/core/test/lib/facet/string/test_first.rb +0 -43
  1076. data/packages/core/test/lib/facet/string/test_fold.rb +0 -34
  1077. data/packages/core/test/lib/facet/string/test_frequency.rb +0 -28
  1078. data/packages/core/test/lib/facet/string/test_humanize.rb +0 -26
  1079. data/packages/core/test/lib/facet/string/test_indent.rb +0 -40
  1080. data/packages/core/test/lib/facet/string/test_index_all.rb +0 -26
  1081. data/packages/core/test/lib/facet/string/test_last.rb +0 -46
  1082. data/packages/core/test/lib/facet/string/test_line_wrap.rb +0 -27
  1083. data/packages/core/test/lib/facet/string/test_lines.rb +0 -26
  1084. data/packages/core/test/lib/facet/string/test_lowercase.rb +0 -26
  1085. data/packages/core/test/lib/facet/string/test_margin.rb +0 -117
  1086. data/packages/core/test/lib/facet/string/test_mscan.rb +0 -30
  1087. data/packages/core/test/lib/facet/string/test_natcmp.rb +0 -30
  1088. data/packages/core/test/lib/facet/string/test_nchar.rb +0 -29
  1089. data/packages/core/test/lib/facet/string/test_pop.rb +0 -47
  1090. data/packages/core/test/lib/facet/string/test_probability.rb +0 -28
  1091. data/packages/core/test/lib/facet/string/test_push.rb +0 -40
  1092. data/packages/core/test/lib/facet/string/test_quote.rb +0 -49
  1093. data/packages/core/test/lib/facet/string/test_rand_byte.rb +0 -35
  1094. data/packages/core/test/lib/facet/string/test_rand_index.rb +0 -26
  1095. data/packages/core/test/lib/facet/string/test_range.rb +0 -27
  1096. data/packages/core/test/lib/facet/string/test_range_all.rb +0 -27
  1097. data/packages/core/test/lib/facet/string/test_range_of_line.rb +0 -28
  1098. data/packages/core/test/lib/facet/string/test_regesc.rb +0 -28
  1099. data/packages/core/test/lib/facet/string/test_shatter.rb +0 -29
  1100. data/packages/core/test/lib/facet/string/test_shift.rb +0 -40
  1101. data/packages/core/test/lib/facet/string/test_shuffle.rb +0 -27
  1102. data/packages/core/test/lib/facet/string/test_similarity.rb +0 -26
  1103. data/packages/core/test/lib/facet/string/test_singular.rb +0 -32
  1104. data/packages/core/test/lib/facet/string/test_slap.rb +0 -40
  1105. data/packages/core/test/lib/facet/string/test_soundex.rb +0 -41
  1106. data/packages/core/test/lib/facet/string/test_succ.rb +0 -29
  1107. data/packages/core/test/lib/facet/string/test_to_a.rb +0 -27
  1108. data/packages/core/test/lib/facet/string/test_to_arr.rb +0 -26
  1109. data/packages/core/test/lib/facet/string/test_to_b.rb +0 -41
  1110. data/packages/core/test/lib/facet/string/test_to_const.rb +0 -28
  1111. data/packages/core/test/lib/facet/string/test_to_date.rb +0 -30
  1112. data/packages/core/test/lib/facet/string/test_to_proc.rb +0 -33
  1113. data/packages/core/test/lib/facet/string/test_to_re.rb +0 -28
  1114. data/packages/core/test/lib/facet/string/test_to_time.rb +0 -30
  1115. data/packages/core/test/lib/facet/string/test_unix_crypt.rb +0 -30
  1116. data/packages/core/test/lib/facet/string/test_unpack.rb +0 -34
  1117. data/packages/core/test/lib/facet/string/test_unshift.rb +0 -39
  1118. data/packages/core/test/lib/facet/string/test_upcase.rb +0 -30
  1119. data/packages/core/test/lib/facet/string/test_whitespace.rb +0 -27
  1120. data/packages/core/test/lib/facet/string/test_word_filter.rb +0 -34
  1121. data/packages/core/test/lib/facet/string/test_word_wrap.rb +0 -51
  1122. data/packages/core/test/lib/facet/string/test_words.rb +0 -37
  1123. data/packages/core/test/lib/facet/symbol/test_camelcase.rb +0 -26
  1124. data/packages/core/test/lib/facet/symbol/test_camelize.rb +0 -27
  1125. data/packages/core/test/lib/facet/symbol/test_capitalize.rb +0 -26
  1126. data/packages/core/test/lib/facet/symbol/test_capitalized.rb +0 -27
  1127. data/packages/core/test/lib/facet/symbol/test_downcase.rb +0 -27
  1128. data/packages/core/test/lib/facet/symbol/test_not.rb +0 -29
  1129. data/packages/core/test/lib/facet/symbol/test_pad.rb +0 -27
  1130. data/packages/core/test/lib/facet/symbol/test_succ.rb +0 -28
  1131. data/packages/core/test/lib/facet/symbol/test_to_const.rb +0 -28
  1132. data/packages/core/test/lib/facet/symbol/test_to_proc.rb +0 -27
  1133. data/packages/core/test/lib/facet/symbol/test_to_str.rb +0 -28
  1134. data/packages/core/test/lib/facet/symbol/test_underscore.rb +0 -26
  1135. data/packages/core/test/lib/facet/symbol/test_upcase.rb +0 -27
  1136. data/packages/core/test/lib/facet/time/test_change.rb +0 -33
  1137. data/packages/core/test/lib/facet/time/test_elapse.rb +0 -27
  1138. data/packages/core/test/lib/facet/time/test_stamp.rb +0 -31
  1139. data/packages/core/test/lib/facet/time/test_to_date.rb +0 -31
  1140. data/packages/core/test/lib/facet/time/test_to_s.rb +0 -31
  1141. data/packages/core/test/lib/facet/time/test_to_time.rb +0 -31
  1142. data/packages/more/ProjectInfo +0 -42
  1143. data/packages/more/README +0 -131
  1144. data/packages/more/TODO +0 -30
  1145. data/packages/more/bench/b_calls.rb +0 -74
  1146. data/packages/more/bench/b_harray.rb +0 -49
  1147. data/packages/more/bench/b_pathname.rb +0 -24
  1148. data/packages/more/bench/b_range.rb +0 -64
  1149. data/packages/more/bench/return-bench.rb +0 -56
  1150. data/packages/more/data/facets/units/binary/base.yaml +0 -12
  1151. data/packages/more/data/facets/units/binary/extra.yaml +0 -8
  1152. data/packages/more/data/facets/units/cex.yaml +0 -7
  1153. data/packages/more/data/facets/units/currency/base.yaml +0 -268
  1154. data/packages/more/data/facets/units/default.yaml +0 -22
  1155. data/packages/more/data/facets/units/dump_yaml.rb +0 -309
  1156. data/packages/more/data/facets/units/si/base.yaml +0 -36
  1157. data/packages/more/data/facets/units/si/derived.yaml +0 -133
  1158. data/packages/more/data/facets/units/si/extra.yaml +0 -107
  1159. data/packages/more/data/facets/units/standard.yaml +0 -5
  1160. data/packages/more/data/facets/units/uk.yaml +0 -16
  1161. data/packages/more/data/facets/units/uk/base.yaml +0 -107
  1162. data/packages/more/data/facets/units/us.yaml +0 -16
  1163. data/packages/more/data/facets/units/us/base.yaml +0 -112
  1164. data/packages/more/data/facets/units/xmethods/cached.yaml +0 -83
  1165. data/packages/more/data/facets/units/xmethods/mapping.yaml +0 -85
  1166. data/packages/more/demo/ansicolor/cdiff.rb +0 -20
  1167. data/packages/more/demo/ansicolor/example.rb +0 -82
  1168. data/packages/more/demo/demo_annotation.rb +0 -22
  1169. data/packages/more/demo/io-reactor/chatserver.rb +0 -347
  1170. data/packages/more/demo/lisp/game.rb +0 -47
  1171. data/packages/more/doc/tagiter.html +0 -145
  1172. data/packages/more/info/ProjectInfo.annotation +0 -46
  1173. data/packages/more/info/ProjectInfo.ansicode +0 -38
  1174. data/packages/more/info/ProjectInfo.asociation +0 -34
  1175. data/packages/more/info/ProjectInfo.basicobject +0 -36
  1176. data/packages/more/info/ProjectInfo.bbcode +0 -34
  1177. data/packages/more/info/ProjectInfo.binaryreader +0 -35
  1178. data/packages/more/info/ProjectInfo.bitmask +0 -33
  1179. data/packages/more/info/ProjectInfo.classinherit +0 -36
  1180. data/packages/more/info/ProjectInfo.classmethods +0 -36
  1181. data/packages/more/info/ProjectInfo.cloneable +0 -33
  1182. data/packages/more/info/ProjectInfo.consoleapp +0 -35
  1183. data/packages/more/info/ProjectInfo.coroutine +0 -37
  1184. data/packages/more/info/ProjectInfo.crypt +0 -33
  1185. data/packages/more/info/ProjectInfo.dictionary +0 -40
  1186. data/packages/more/info/ProjectInfo.downloader +0 -37
  1187. data/packages/more/info/ProjectInfo.enumerablepass +0 -35
  1188. data/packages/more/info/ProjectInfo.expirable +0 -37
  1189. data/packages/more/info/ProjectInfo.floatstring +0 -35
  1190. data/packages/more/info/ProjectInfo.functor +0 -40
  1191. data/packages/more/info/ProjectInfo.heap +0 -33
  1192. data/packages/more/info/ProjectInfo.inheritor +0 -36
  1193. data/packages/more/info/ProjectInfo.interval +0 -36
  1194. data/packages/more/info/ProjectInfo.lisp +0 -38
  1195. data/packages/more/info/ProjectInfo.lrucache +0 -34
  1196. data/packages/more/info/ProjectInfo.mathconstants +0 -41
  1197. data/packages/more/info/ProjectInfo.methodprobe +0 -38
  1198. data/packages/more/info/ProjectInfo.mock +0 -34
  1199. data/packages/more/info/ProjectInfo.multiton +0 -36
  1200. data/packages/more/info/ProjectInfo.nackclass +0 -33
  1201. data/packages/more/info/ProjectInfo.nilcomparable +0 -35
  1202. data/packages/more/info/ProjectInfo.nullclass +0 -35
  1203. data/packages/more/info/ProjectInfo.oone +0 -37
  1204. data/packages/more/info/ProjectInfo.openobject +0 -39
  1205. data/packages/more/info/ProjectInfo.paramix +0 -38
  1206. data/packages/more/info/ProjectInfo.pool +0 -33
  1207. data/packages/more/info/ProjectInfo.progressbar +0 -37
  1208. data/packages/more/info/ProjectInfo.reference +0 -36
  1209. data/packages/more/info/ProjectInfo.semaphore +0 -36
  1210. data/packages/more/info/ProjectInfo.stateparser +0 -39
  1211. data/packages/more/info/ProjectInfo.statichash +0 -33
  1212. data/packages/more/info/ProjectInfo.system +0 -34
  1213. data/packages/more/info/ProjectInfo.tagiterator +0 -36
  1214. data/packages/more/info/ProjectInfo.timer +0 -35
  1215. data/packages/more/info/ProjectInfo.tracepoint +0 -37
  1216. data/packages/more/info/ProjectInfo.tuple +0 -36
  1217. data/packages/more/info/ProjectInfo.uniheritable +0 -34
  1218. data/packages/more/info/ProjectInfo.units +0 -34
  1219. data/packages/more/info/ProjectInfo.yamlstruct +0 -34
  1220. data/packages/more/lib/facet/annotation.rb +0 -580
  1221. data/packages/more/lib/facet/ansicode.rb +0 -313
  1222. data/packages/more/lib/facet/association.rb +0 -156
  1223. data/packages/more/lib/facet/basicobject.rb +0 -135
  1224. data/packages/more/lib/facet/bbcode.rb +0 -390
  1225. data/packages/more/lib/facet/binaryreader.rb +0 -246
  1226. data/packages/more/lib/facet/bitmask.rb +0 -112
  1227. data/packages/more/lib/facet/bytes.rb +0 -212
  1228. data/packages/more/lib/facet/classinherit.rb +0 -216
  1229. data/packages/more/lib/facet/classmethods.rb +0 -219
  1230. data/packages/more/lib/facet/cloneable.rb +0 -55
  1231. data/packages/more/lib/facet/consoleapp.rb +0 -123
  1232. data/packages/more/lib/facet/coroutine.rb +0 -172
  1233. data/packages/more/lib/facet/crypt.rb +0 -180
  1234. data/packages/more/lib/facet/dictionary.rb +0 -436
  1235. data/packages/more/lib/facet/downloader.rb +0 -273
  1236. data/packages/more/lib/facet/enumerablepass.rb +0 -285
  1237. data/packages/more/lib/facet/expirable.rb +0 -87
  1238. data/packages/more/lib/facet/floatstring.rb +0 -179
  1239. data/packages/more/lib/facet/functor.rb +0 -98
  1240. data/packages/more/lib/facet/heap.rb +0 -226
  1241. data/packages/more/lib/facet/inheritor.rb +0 -239
  1242. data/packages/more/lib/facet/interval.rb +0 -426
  1243. data/packages/more/lib/facet/ioredirect.rb +0 -130
  1244. data/packages/more/lib/facet/lisp.rb +0 -387
  1245. data/packages/more/lib/facet/lisp_format.rb +0 -1843
  1246. data/packages/more/lib/facet/lrucache.rb +0 -183
  1247. data/packages/more/lib/facet/mathconstants.rb +0 -320
  1248. data/packages/more/lib/facet/methodprobe.rb +0 -215
  1249. data/packages/more/lib/facet/mock.rb +0 -233
  1250. data/packages/more/lib/facet/multipliers.rb +0 -192
  1251. data/packages/more/lib/facet/multiton.rb +0 -359
  1252. data/packages/more/lib/facet/nackclass.rb +0 -162
  1253. data/packages/more/lib/facet/nilcomparable.rb +0 -133
  1254. data/packages/more/lib/facet/nullclass.rb +0 -68
  1255. data/packages/more/lib/facet/one.rb +0 -109
  1256. data/packages/more/lib/facet/openobject.rb +0 -220
  1257. data/packages/more/lib/facet/ormsupport.rb +0 -233
  1258. data/packages/more/lib/facet/paramix.rb +0 -243
  1259. data/packages/more/lib/facet/pool.rb +0 -98
  1260. data/packages/more/lib/facet/preinitialize.rb +0 -152
  1261. data/packages/more/lib/facet/progressbar.rb +0 -227
  1262. data/packages/more/lib/facet/quaternion.rb +0 -527
  1263. data/packages/more/lib/facet/reference.rb +0 -83
  1264. data/packages/more/lib/facet/semaphore.rb +0 -103
  1265. data/packages/more/lib/facet/snapshot.rb +0 -190
  1266. data/packages/more/lib/facet/stateparser.rb +0 -579
  1267. data/packages/more/lib/facet/statichash.rb +0 -87
  1268. data/packages/more/lib/facet/syncarray.rb +0 -144
  1269. data/packages/more/lib/facet/synchash.rb +0 -173
  1270. data/packages/more/lib/facet/system.rb +0 -169
  1271. data/packages/more/lib/facet/tagiterator.rb +0 -387
  1272. data/packages/more/lib/facet/timer.rb +0 -307
  1273. data/packages/more/lib/facet/times.rb +0 -327
  1274. data/packages/more/lib/facet/tracepoint.rb +0 -185
  1275. data/packages/more/lib/facet/tuple.rb +0 -170
  1276. data/packages/more/lib/facet/typecast.rb +0 -259
  1277. data/packages/more/lib/facet/uninheritable.rb +0 -92
  1278. data/packages/more/lib/facet/units.rb +0 -926
  1279. data/packages/more/lib/facet/yamlstruct.rb +0 -90
  1280. data/packages/more/setup.rb +0 -1551
  1281. data/packages/more/test/lib/facet/test_annotation.rb +0 -217
  1282. data/packages/more/test/lib/facet/test_ansicode.rb +0 -36
  1283. data/packages/more/test/lib/facet/test_association.rb +0 -46
  1284. data/packages/more/test/lib/facet/test_bbcode.rb +0 -34
  1285. data/packages/more/test/lib/facet/test_bitmask.rb +0 -47
  1286. data/packages/more/test/lib/facet/test_bytes.rb +0 -84
  1287. data/packages/more/test/lib/facet/test_classinherit.rb +0 -65
  1288. data/packages/more/test/lib/facet/test_coroutine.rb +0 -60
  1289. data/packages/more/test/lib/facet/test_crypt.rb +0 -46
  1290. data/packages/more/test/lib/facet/test_dictionary.rb +0 -97
  1291. data/packages/more/test/lib/facet/test_enumerablepass.rb +0 -86
  1292. data/packages/more/test/lib/facet/test_floatstring.rb +0 -36
  1293. data/packages/more/test/lib/facet/test_functor.rb +0 -39
  1294. data/packages/more/test/lib/facet/test_inheritor.rb +0 -155
  1295. data/packages/more/test/lib/facet/test_interval.rb +0 -119
  1296. data/packages/more/test/lib/facet/test_lisp-format.rb +0 -37
  1297. data/packages/more/test/lib/facet/test_lisp.rb +0 -47
  1298. data/packages/more/test/lib/facet/test_lrucache.rb +0 -25
  1299. data/packages/more/test/lib/facet/test_mathconstants.rb +0 -18
  1300. data/packages/more/test/lib/facet/test_methodprobe.rb +0 -53
  1301. data/packages/more/test/lib/facet/test_multipliers.rb +0 -114
  1302. data/packages/more/test/lib/facet/test_multiton.rb +0 -200
  1303. data/packages/more/test/lib/facet/test_nackclass.rb +0 -45
  1304. data/packages/more/test/lib/facet/test_nilcomparable.rb +0 -43
  1305. data/packages/more/test/lib/facet/test_openobject.rb +0 -66
  1306. data/packages/more/test/lib/facet/test_paramix.rb +0 -86
  1307. data/packages/more/test/lib/facet/test_preinitialize.rb +0 -49
  1308. data/packages/more/test/lib/facet/test_snapshot.rb +0 -34
  1309. data/packages/more/test/lib/facet/test_statichash.rb +0 -31
  1310. data/packages/more/test/lib/facet/test_syncarray.rb +0 -28
  1311. data/packages/more/test/lib/facet/test_synchash.rb +0 -28
  1312. data/packages/more/test/lib/facet/test_tagiterator.rb +0 -93
  1313. data/packages/more/test/lib/facet/test_time.rb +0 -73
  1314. data/packages/more/test/lib/facet/test_timer.rb +0 -66
  1315. data/packages/more/test/lib/facet/test_tuple.rb +0 -32
  1316. data/packages/more/test/lib/facet/test_uninheritable.rb +0 -42
  1317. data/packages/more/test/lib/facet/test_units.rb +0 -104
  1318. data/packages/more/test/lib/facet/test_yamlstruct.rb +0 -37
@@ -1,387 +0,0 @@
1
- #--
2
- # Lisp Mixin
3
- #
4
- # Copyright (C) 2003,2004 Florian Frank
5
- #
6
- # Ruby License
7
- #
8
- # This module is free software. You may use, modify, and/or redistribute this
9
- # software under the same terms as Ruby.
10
- #
11
- # This program is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE.
14
- #
15
- #
16
- # ==========================================================================
17
- # Revision History ::
18
- # --------------------------------------------------------------------------
19
- # 2005.04.12 1.1 TO * Changed the name of Pair class to DottedPair.
20
- # * Added a new method #pair! which converts an array
21
- # to a DottedPair. This is then used in #car and
22
- # #cdr to automatically convert arrays passed to 'em.
23
- # * Note: There may be other places that #pair!
24
- # conversion is needed.
25
- # ==========================================================================
26
- #++
27
-
28
- #:title: Lisp Mixin
29
- #
30
- # This module provides Lisp-like functional notation.
31
- # With this module it almost possible to write real
32
- # Lisp code in Ruby.
33
- #
34
- # == Usage
35
- #
36
- # It's hardly believable, but the following IS valid ruby code:
37
- #
38
- # (def accumulate (fun, x, list)
39
- # (if (null? list)
40
- # x
41
- # else
42
- # (accumulate fun, (fun.call x, (car list)), (cdr list))
43
- # end)
44
- # end)
45
- #
46
- # A real programmer can write LISP in any language ;)
47
- #
48
- # == Author(s)
49
- #
50
- # * Florian Frank
51
- #
52
-
53
- module Lisp
54
-
55
- # DottedPair
56
-
57
- class DottedPair
58
-
59
- include Lisp
60
- include Enumerable
61
-
62
- def initialize(first = nil, second = nil)
63
- @first, @second = first, second
64
- end
65
-
66
- attr_accessor :first, :second
67
-
68
- def DottedPair.[](*array)
69
- if array.empty?
70
- nil
71
- else
72
- DottedPair.new(array.shift, DottedPair[*array])
73
- end
74
- end
75
-
76
- def each(&block)
77
- if @first
78
- if @first.is_a? DottedPair
79
- @first.each(&block)
80
- else
81
- block.call(@first)
82
- end
83
- end
84
- if @second
85
- if @second.is_a? DottedPair
86
- @second.each(&block)
87
- else
88
- block.call(@second)
89
- end
90
- end
91
- end
92
-
93
- def to_s
94
- '(' + repr + ')'
95
- end
96
-
97
- def inspect
98
- '(' + repr + ')'
99
- end
100
-
101
- def to_a
102
- a = []
103
- each { |e| a << e }
104
- a
105
- end
106
-
107
- def ==(other)
108
- if pair?(self) and pair?(other)
109
- car(self) == car(other) and cdr(self) == cdr(other)
110
- else
111
- if pair?(self) then false else self == other end
112
- end
113
- end
114
-
115
- protected
116
-
117
- def repr
118
- case @second
119
- when DottedPair then @first.to_s + ' ' + @second.repr
120
- when nil then @first.to_s
121
- else @first.to_s + ' . ' + @second.to_s
122
- end
123
- end
124
-
125
- end # DottedPair
126
-
127
- # Functional API
128
-
129
- def cons(car, cdr)
130
- DottedPair.new(car, cdr)
131
- end
132
-
133
- def consonto(cdr, car)
134
- DottedPair.new(car, cdr)
135
- end
136
-
137
- def car(pair)
138
- pair = pair!(pair)
139
- pair.first
140
- end
141
-
142
- def cdr(pair)
143
- pair = pair!(pair)
144
- pair.second
145
- end
146
-
147
- def set(var, val, binding)
148
- eval "var = #{val}", binding
149
- end
150
-
151
- def set_car!(pair, val)
152
- pair.first = val
153
- end
154
-
155
- def set_cdr!(pair, val)
156
- pair.second = val
157
- end
158
-
159
- def null?(x)
160
- x == nil
161
- end
162
-
163
- def pair?(x)
164
- x.is_a?(DottedPair)
165
- end
166
-
167
- def pair!(x)
168
- return x if pair?(x)
169
- return DottedPair[*x]
170
- end
171
-
172
- def atom?(x)
173
- not pair?(x) || null?(x)
174
- end
175
-
176
- def equal?(l, m)
177
- l == m
178
- end
179
-
180
- def list(*elms)
181
- if elms.empty?
182
- nil
183
- else
184
- cons(elms.shift, list(*elms))
185
- end
186
- end
187
-
188
- def append(l, m)
189
- if null?(l)
190
- if null?(m)
191
- nil
192
- else
193
- cons(car(m), append(l, cdr(m)))
194
- end
195
- else
196
- cons(car(l), append(cdr(l), m))
197
- end
198
- end
199
-
200
- def length(list)
201
- if null?(list)
202
- 0
203
- else
204
- 1 + length(cdr(list))
205
- end
206
- end
207
-
208
- def map(fun, list)
209
- if null?(list)
210
- nil
211
- else
212
- cons(fun.call(car(list)), map(fun, cdr(list)))
213
- end
214
- end
215
-
216
- def zip(fun, l, m)
217
- if null?(l) and null?(m)
218
- nil
219
- elsif null?(l) or null?(m)
220
- raise ArgumentError.new("zip with unequal length lists")
221
- else
222
- cons(fun.call(car(l), car(m)), zip(fun, cdr(l), cdr(m)))
223
- end
224
- end
225
-
226
- def pairlis(l, m)
227
- zip(lambda { |x, y| cons(x, y) }, l, m)
228
- end
229
-
230
- def member?(x, list)
231
- if null?(list)
232
- false
233
- else
234
- if x == car(list)
235
- true
236
- else
237
- member?(x, cdr(list))
238
- end
239
- end
240
- end
241
-
242
- def filter(pred, list)
243
- if null?(list)
244
- nil
245
- else
246
- if pred.call(car(list))
247
- cons(car(list), filter(pred, cdr(list)))
248
- else
249
- filter(pred, cdr(list))
250
- end
251
- end
252
- end
253
-
254
- def assoc(x, list)
255
- f = filter(lambda { |y| x == car(y)}, list)
256
- if null?(f) then nil else car(f) end
257
- end
258
-
259
- def exists?(pred, list)
260
- if null?(list)
261
- false
262
- else
263
- if pred.call(car(list))
264
- true
265
- else
266
- exists?(pred, cdr(list))
267
- end
268
- end
269
- end
270
-
271
- def all?(pred, list)
272
- if null?(list)
273
- true
274
- else
275
- if pred.call(car(list))
276
- all?(pred, cdr(list))
277
- else
278
- false
279
- end
280
- end
281
- end
282
-
283
- def accumulate(fun, x, list)
284
- if null?(list)
285
- x
286
- else
287
- accumulate(fun, fun.call(x, car(list)), cdr(list))
288
- end
289
- end
290
-
291
- alias foldleft accumulate
292
-
293
- def reduce(fun, x, list)
294
- if null?(list)
295
- x
296
- else
297
- fun.call(car(list), reduce(fun, x, cdr(list)))
298
- end
299
- end
300
-
301
- alias foldright reduce
302
-
303
- def link(lists)
304
- accumulate(lambda { |x, y| append(x, y) }, nil, lists)
305
- end
306
-
307
- def explode(string)
308
- list(*(string.split(//)))
309
- end
310
-
311
- def implode(list)
312
- accumulate(lambda { |x, y| x + y }, '', list)
313
- end
314
-
315
- def sum(list)
316
- accumulate(lambda { |x, y| x + y }, 0, list)
317
- end
318
-
319
- def prod(list)
320
- accumulate(lambda { |x, y| x * y }, 1, list)
321
- end
322
-
323
- def reverse(lists)
324
- accumulate(lambda { |x, y| consonto(x, y) }, nil, lists)
325
- end
326
-
327
- def take(l, n)
328
- if n > 0 and not null?(l)
329
- cons(car(l), take(cdr(l), n - 1))
330
- else
331
- nil
332
- end
333
- end
334
-
335
- def drop(l, n)
336
- if n > 0 and not null?(l)
337
- drop(cdr(l), n - 1)
338
- else
339
- l
340
- end
341
- end
342
-
343
- end
344
-
345
-
346
-
347
- # _____ _
348
- # |_ _|__ ___| |_
349
- # | |/ _ \/ __| __|
350
- # | | __/\__ \ |_
351
- # |_|\___||___/\__|
352
- #
353
-
354
- =begin test
355
-
356
- require 'test/unit'
357
-
358
- # fixture
359
-
360
- class T
361
-
362
- include Lisp
363
-
364
- (def accumulate (fun, x, list)
365
- (if (null? list)
366
- x
367
- else
368
- (accumulate fun, (fun.call x, (car list)), (cdr list))
369
- end)
370
- end)
371
-
372
- end
373
-
374
- # test
375
-
376
- class TC_Lisp < Test::Unit::TestCase
377
-
378
- include Lisp
379
-
380
- def test_accumulate
381
- t = T.new
382
- t.accumulate( proc{ |x,y| x+y }, 0, [1,2,3] )
383
- end
384
-
385
- end
386
-
387
- =end
@@ -1,1843 +0,0 @@
1
- #:title: Lisp Format
2
- #--
3
- # Lisp Format
4
- # v 0.3
5
- #
6
- # Copyright (C) 2003 Nikolai Weibull <source@pcppopper.org>.
7
- #
8
- # This library is free software; you can redistribute it and/or
9
- # modify it under the terms of the GNU Lesser General Public
10
- # License as published by the Free Software Foundation; either
11
- # version 2.1 of the License, or (at your option) any later version.
12
- #
13
- # This library is distributed in the hope that it will be useful,
14
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
- # Lesser General Public License for more details.
17
- #
18
- # You should have received a copy of the GNU Lesser General Public
19
- # License along with this library; if not, write to the Free Software
20
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
- #
22
- # ==========================================================================
23
- # Revision History ::
24
- # --------------------------------------------------------------------------
25
- # 2004-11-16 0.3 TO * Ported en-masse as a "sub-space" of Lisp.
26
- # 2003-12-08 0.2 NW * Releasing version 0.2.
27
- # ==========================================================================
28
- # To Do ::
29
- # * the floating point functions are rather horendous
30
- # ==========================================================================
31
- #++
32
-
33
- # = Description
34
- #
35
- # "So what is *ruby-lisp*?", you ask. Well, it is a module for implementing nice
36
- # Lisp features for use in Ruby. Currently the only sub-module that exists is
37
- # Lisp::Format, which implements Lisp's (format) function and its formatting
38
- # language. For people not familiar with this language, it is a very expressive
39
- # string formatting language, much like sprintf()'s, but much more powerful. It
40
- # allows for iteration, case conversion, conditionals, and much more. If you
41
- # have ever felt stupid while creating a string iteratively, to print an array or
42
- # some such, this is definitely for you!
43
- #
44
- # This module contains various Lisp facilities that are of general usefulness.
45
- # Lisp's rich string formatting language is implemented in the Format module.
46
- # More modules may be added later.
47
- #
48
- # This has been (very simply) integrated into the namespace of Lsip from lisp.rb.
49
- #
50
- # == Author(s)
51
- #
52
- # * Nikolai Weibull <source@pcppopper.org>
53
- #
54
- # == More Information
55
- #
56
- # The project website for ruby-lisp is currently located at
57
- # http://ned.rubyforge.org/.
58
- #
59
-
60
- #--
61
- # This module contains various Lisp facilities that are of general usefulness.
62
- # Lisp's rich string formatting language is implemented in the Format module.
63
- # More modules may be added later.
64
- #
65
- # TODO: the floating point functions are rather horendous.
66
- #++
67
-
68
- module Lisp
69
-
70
- # This module implements the Common Lisp (format) function and it's language.
71
- module Format
72
-
73
- # An error, positioned somewhere in the input format. This is used to be
74
- # able to show the user exactly where something failed in the input format
75
- # string.
76
- module Positioned
77
- # Create at a given position.
78
- def initialize(pos = -1)
79
- @pos = pos
80
- end
81
-
82
- # The position at which the error occured.
83
- attr :pos, true
84
- end
85
-
86
- # An argument was of the wrong type, or there aren't enough arguments.
87
- class ArgumentError < ArgumentError; include Positioned; end
88
-
89
- # An index was not valid. Used for argument jumping errors.
90
- class IndexError < IndexError; include Positioned; end
91
-
92
- # A parameter was wrong in some sense.
93
- class ParameterError < ArgumentError; include Positioned; end
94
-
95
- # The format string contained a syntax error.
96
- class SyntaxError < SyntaxError; include Positioned; end
97
-
98
- # The format string was ended before a parameter could be read.
99
- class MissingParameterError < SyntaxError; end
100
-
101
- # The format string was ended before a parameter could be completed.
102
- class IncompleteParameterError < SyntaxError; end
103
-
104
- # The format string was malformed somehow.
105
- class MalformedError < SyntaxError; end
106
-
107
- # A modifier was wrongly given, or there were too many of the same.
108
- class ModifierError < SyntaxError; end
109
-
110
- # Represents output for a State object.
111
- class Output
112
- # Create a new Output object.
113
- def initialize(str = '', col = 0)
114
- @output, @col = str, col
115
- end
116
-
117
- # Add +str+ to the output.
118
- def <<(str)
119
- if str.is_a? Fixnum
120
- @output << str.chr
121
- # How should tabs be handled here? They should perhaps be
122
- # interpreted as eight (8) characters wide? This of course depends
123
- # on where @col is already at (8 - @col % 8).
124
- @col = str == ?\n ? 0 : @col + 1
125
- else
126
- @output << str
127
- @col += str.length - (str.rindex(?\n) or 0)
128
- end
129
- end
130
-
131
- # Convert this object to its string representation, which is the output
132
- # gathered so far.
133
- # TODO: this is rather silly
134
- def to_s
135
- @output
136
- end
137
-
138
- # The current output column.
139
- attr :col, true
140
- end
141
-
142
- # This class represents the state of a given Formatter. It keeps track of
143
- # output gathered and arguments left to be processed.
144
- class State
145
- # Create a state from arguments and a destination output
146
- def initialize(args, output)
147
- @args = args
148
- @arg_pos = 0
149
- @outputs = [output]
150
- @case_conv = nil
151
- end
152
-
153
- # Push a new Output buffer to collect output in.
154
- def push_output
155
- @outputs << Output.new('', @outputs.last.col)
156
- end
157
-
158
- # Pop and return the latest output buffer.
159
- def pop_output
160
- @outputs.pop
161
- end
162
-
163
- # Delegates output to the top-most output buffer.
164
- def output(str)
165
- @outputs.last << str
166
- end
167
-
168
- # Retrieve the current output column.
169
- def col
170
- @outputs.last.col
171
- end
172
-
173
- # Retrieve the latest output buffer.
174
- def latest_output
175
- @outputs.last
176
- end
177
-
178
- # Move +n+ steps forward or backward depending on sign amongst the
179
- # arguments. Movement is relative or absolute depending on the boolean
180
- # value of +relative+.
181
- def args_move(n = 1, relative = true)
182
- @arg_pos = relative ? @arg_pos + n : n
183
- raise IndexError.new,
184
- 'too few arguments' if @arg_pos > @args.size
185
- raise IndexError.new,
186
- 'cannot move past first argument' if @arg_pos < 0
187
- end
188
-
189
- # Get the current argument and move forward one argument.
190
- def next_arg
191
- args_move(1, true)
192
- @args[@arg_pos - 1]
193
- end
194
-
195
- # Get the previously returned argument, without moving.
196
- def previous_arg
197
- args_move(-1, relative)
198
- next_arg
199
- end
200
-
201
- # Push back the previously returned argument.
202
- def push_back_arg
203
- args_move(-1, true)
204
- end
205
-
206
- # Get the number of arguments left to process
207
- def args_left
208
- @args.size - @arg_pos
209
- end
210
-
211
- attr :case_conv, true
212
- end
213
-
214
- # Given a format string, this class lexes it and returns directives it
215
- # finds. This includes gathering parameters and modifiers for the coming
216
- # directives. The necessary information to create a directive is gathered
217
- # and then passed to Directives::Factory#build. Error checking
218
- # is performed, so that incomplete parameters are caught and malformed
219
- # modifiers are supressed.
220
- class Lexer
221
- @@errorstates = {
222
- :START => [MissingParameterError,
223
- 'format string ended before parameter was found'],
224
- :CHAR => [IncompleteParameterError,
225
- 'format string ended before character parameter could be read'],
226
- :INTEGER => [IncompleteParameterError,
227
- 'format string ended before integer parameter could be read'],
228
- }
229
-
230
- # Create a new Lexer using the given format string +format+.
231
- def initialize(format)
232
- @format = format
233
- @pos = 0
234
- end
235
-
236
- # Read the next token, given the previous one in +previous+, and return
237
- # it. This may either be a 'real' directive created by
238
- # Directives::Factory#build, or a Literal created in-line. If no more
239
- # tokens remain, +nil+ is returned.
240
- def next_token(previous)
241
- if have_more_input
242
- ch = next_char
243
- if ch == ?~
244
- return Directives::Factory.build(params, modifiers, directive,
245
- previous, @pos)
246
- else
247
- literal = Directives::Literal.new(ch.chr)
248
- while have_more_input and (ch = peek_char) != ?~
249
- literal << next_char.chr
250
- end
251
- literal << ch.chr if not have_more_input and ch == ?~
252
- return [literal, 0]
253
- end
254
- else
255
- return nil
256
- end
257
- end
258
-
259
- private
260
-
261
- # Returns +true+ if more input exists.
262
- def have_more_input
263
- @pos < @format.length
264
- end
265
-
266
- # Reads next character in input.
267
- def next_char
268
- @pos += 1
269
- @format[@pos - 1]
270
- end
271
-
272
- # View the next character in input.
273
- def peek_char
274
- @format[@pos]
275
- end
276
-
277
- # Unread previously read character in input.
278
- def unget_char
279
- @pos -= 1
280
- end
281
-
282
- # Read parameters to the coming directive. Raises various errors
283
- # sub-classed from PositionedError when given incomplete
284
- # parameters, e.g. when it runs out of input.
285
- def params
286
- params = []
287
- sign = 1
288
- value = 0
289
- state = :START
290
- while have_more_input
291
- ch = next_char
292
- case state
293
- when :START
294
- case ch
295
- when ?'
296
- state = :CHAR
297
- when ?V, ?v
298
- params << Parameters::Argument.new(@pos)
299
- state = :DONE
300
- when ?#
301
- params << Parameters::ArgumentCount.new(@pos)
302
- state = :DONE
303
- when ?,
304
- params << Parameters::Default.new(@pos)
305
- state = :START
306
- when ?+, ?-, ?0, ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9
307
- sign = (ch == ?-) ? -1 : 1
308
- value = (ch == ?+ or ch == ?-) ? 0 : (ch - ?0)
309
- state = :INTEGER
310
- else
311
- unget_char
312
- state = :DONE
313
- end
314
- when :INTEGER
315
- if (?0..?9).to_a.include? ch
316
- value = value * 10 + (ch - ?0)
317
- else
318
- unget_char
319
- value *= sign
320
- params << Parameters::Integer.new(@pos, value)
321
- state = :DONE
322
- end
323
- when :CHAR
324
- params << Parameters::Character.new(@pos, ch)
325
- state = :DONE
326
- when :DONE
327
- if ch == ?,
328
- state = :START
329
- else
330
- unget_char
331
- break
332
- end
333
- end
334
- end
335
- unless state == :DONE
336
- raise @@errorstates[state][0].new(@pos), @@errorstates[state][1]
337
- end
338
- return params
339
- end
340
-
341
- # Read modifiers to the coming directive. Raises ModifierError if
342
- # a specific modifier is given more than once.
343
- def modifiers
344
- modifiers = []
345
- while have_more_input
346
- ch = next_char
347
- if ch == ?: or ch == ?@
348
- unless modifiers.include? ch
349
- modifiers << ch
350
- else
351
- raise ModifierError.new(@pos), "duplicate #{ch.chr} modifier"
352
- end
353
- else
354
- unget_char
355
- break
356
- end
357
- end
358
- return modifiers
359
- end
360
-
361
- # Reads the directive. Raises MalformedFormatError if no input
362
- # remains to read the directive from.
363
- def directive
364
- unless have_more_input
365
- raise MalformedFormatError.new(@pos),
366
- 'format string ended before directive was found'
367
- end
368
- next_char
369
- end
370
- end
371
-
372
- # Given a lexer, parses the tokens it constructs.
373
- # It works, quite simply, by maintaining a stack of nesting levels and
374
- # directives/tokens are added to the current stack level. When a directive
375
- # removes a level of nesting the previous level's last directive gets
376
- # connected, using Directive#connect.
377
- class Parser
378
- # Create a Parser, given a Lexer, +lexer+.
379
- def initialize(lexer)
380
- @lexer = lexer
381
- end
382
-
383
- # Do the actual parsing of the tokens. Returns a list of the
384
- # top-level tokens to run.
385
- def parse
386
- stacks = [[]]
387
- level = 0
388
- until (token = @lexer.next_token(stacks[level>0?level-1:0].last)).nil?
389
- directive = token[0]
390
- nesting = token[1]
391
- ntop = stacks[level].last.nil? ?
392
- directive : stacks[level].last.join(directive)
393
- stacks[level] << directive
394
- if nesting > 0
395
- stacks.push []
396
- level += 1
397
- elsif nesting < 0
398
- directives = stacks.pop
399
- level -= 1
400
- stacks[level].last.connect directives
401
- end
402
- end
403
- if stacks.size > 1
404
- raise SyntaxError.new(stacks[-2].last.pos), 'unterminated directive'
405
- end
406
- return stacks[0]
407
- end
408
- end
409
-
410
- # Engine for the format Lexer and Parser. Given an input format string and
411
- # an initial State, it lets the Parser create the directives and then
412
- # simply iterates over them, Directive#execute:ing them each.
413
- class Formatter
414
- # Create a Formatter from a String +format+ and a State +state+.
415
- def initialize(format, state)
416
- @parser, @state = Parser.new(Lexer.new(format)), state
417
- end
418
-
419
- # Parse and run the result.
420
- def run
421
- Format.execute_directives(@state, @parser.parse)
422
- return @state.latest_output.to_s
423
- end
424
- end
425
-
426
- # This module includes format parameter representation classes. These are
427
- # passed to directives when they are created.
428
- module Parameters
429
- # Base class from which the sub-classes get their behavior. Every
430
- # parameter should sub-class from this class.
431
- class Parameter
432
- # Create a parameter, found at +pos+ in the input format, and with
433
- # +value+ as its value - if it has one.
434
- def initialize(pos, value = nil)
435
- @pos, @value = pos, value
436
- end
437
-
438
- # Retrieve this parameters value in the given State, using +default+ if
439
- # it is not defined.
440
- def value(state, default)
441
- @value or default
442
- end
443
-
444
- # Position in the input format that this parameter was found.
445
- attr :pos
446
- end
447
-
448
- # Represents the +V+ and +v+ parameters, which retrieve their value from
449
- # the current argument.
450
- class Argument < Parameter
451
- # Retrieve this parameters value by getting the value of the current
452
- # arguments integral value.
453
- def value(state, default)
454
- begin
455
- arg = state.next_arg
456
- rescue => e
457
- e.pos = @pos if e.respond_to?(:pos) and e.pos == -1
458
- raise
459
- end
460
- if arg.nil?
461
- default
462
- elsif arg.respond_to? :to_i
463
- arg.to_i
464
- else
465
- raise ArgumentError.new(@pos),
466
- 'argument not a number or a number string'
467
- end
468
- end
469
- end
470
-
471
- # Represents the <tt>#</tt> parameter, which retrieves the number of
472
- # arguments left to process.
473
- class ArgumentCount < Parameter
474
- # Retrieve this parameters value by getting the number of arguments
475
- # left to process.
476
- def value(state, default)
477
- state.args_left
478
- end
479
- end
480
-
481
- # Parameter used when the parameter was not specified, so use its default
482
- # value.
483
- class Default < Parameter; end
484
-
485
- # Represents integral parameters, specified directly in the input format.
486
- class Integer < Parameter; end
487
-
488
- # Represents character parameters, specified directly in the input
489
- # format.
490
- class Character < Parameter; end
491
- end
492
-
493
- # This module contains all the formatting directives that are defined in
494
- # the Lisp formatting embedded language. The base class for all directives
495
- # is aptly named Directive, and all directive classes should sub-class from
496
- # it.
497
- module Directives
498
- # An unknown directive was found in the format string.
499
- class UnknownDirectiveError < SyntaxError; end
500
-
501
- # Represents a string literal in the input format. This is used for
502
- # combining running lengths of characters with a single pseudo-directive.
503
- class Literal < String
504
- # Outputs the string literal this instance represents to the output
505
- # stream.
506
- def execute(state)
507
- state.output self
508
- end
509
-
510
- # If the following directive is also a Literal, its contents is simply
511
- # added to this ones, and returns self. Otherwise the other directive
512
- # is returned.
513
- def join(other)
514
- other.is_a?(Literal) ? self << other : other
515
- end
516
- end
517
-
518
- # Base class for formatting directives. This class makes it easy for
519
- # sub-classes to access the parameters and modifiers that were given to
520
- # it when created.
521
- class Directive
522
- # Given a set of parameters, modifiers, an owning directive if
523
- # available, and a position in the output string, create a new
524
- # Directive.
525
- def initialize(params, modifiers, top, pos)
526
- @params, @modifiers, @pos = params, modifiers, pos
527
- end
528
-
529
- # This method should be overridden in sub-classes. It gets called when
530
- # the directive is to be executed. It does nothing by default.
531
- def execute(state); end
532
-
533
- # Join this directive with the following one, given in +other+. The
534
- # default is to simply return +other+. The only known use for this is
535
- # in SkipWhitespace, where some processing of other is done if it is a
536
- # Literal.
537
- def join(other)
538
- other
539
- end
540
-
541
- # The position at which this directive occurs in the input string.
542
- attr :pos
543
-
544
- protected
545
-
546
- # Read the +param+:th parameter in the Lisp::Format::State +state+,
547
- # using +default+ as a default value if the parameter was not given.
548
- def param(param, state, default)
549
- param < @params.size ? @params[param].value(state, default) : default
550
- end
551
-
552
- # Check if the colon (<tt>:</tt>) modifier was given.
553
- def colon_mod?
554
- modifier? ?:
555
- end
556
-
557
- # Check if the at (<tt>@</tt>) modifier was given.
558
- def at_mod?
559
- modifier? ?@
560
- end
561
-
562
- # Check if the given +modifier+ was given. This method should not
563
- # generally be called, as #colon_mod? and #at_mod? are easier and
564
- # better to use.
565
- def modifier?(modifier)
566
- @modifiers.include? modifier
567
- end
568
-
569
- def arg_error(message)
570
- raise ArgumentError.new(@pos), message
571
- end
572
-
573
- def param_error(pnum, message)
574
- raise ParameterError.new(@params[pnum].pos), message
575
- end
576
- end
577
-
578
- # Super-class for 'printing' directives, namely ~A (Ascii) and ~S
579
- # (SExpression). These directives print, in some sense, their argument
580
- # in a Ruby friendly manner. This means that their argument is either
581
- # converted to a string using Object#to_s or Object#inspect.
582
- class Print < Directive
583
- # All parameters except +inspect+ are simply passed on to
584
- # Directive#initialize. If +inspect+ is true, string arguments are
585
- # inspected as well as all other objects.
586
- def initialize(params, modifiers, top, pos, inspect = false)
587
- super params, modifiers, top, pos
588
- @inspect = inspect
589
- end
590
-
591
- # Output the given argument as it generally prints in Ruby. The full
592
- # form is:
593
- # ~mincol,colinc,minpad,padchar:@[AS]
594
- # with the following interpretations
595
- # [+mincol+ (0)]
596
- # minimum number of columns to output,
597
- # [+colinc+ (1)]
598
- # number of columns to increase by, until +mincol+ is reached,
599
- # [+minpad+ (0)]
600
- # minimum amount of padding to add (added before +mincol+ is
601
- # checked),
602
- # [+padchar+ (?\s)]
603
- # character to pad with,
604
- # [:]
605
- # +nil+ is output as +nil+ (In Lisp, this outputs +nil+ as
606
- # <tt>()</tt>, which isn't generally useful in Ruby. TODO: come up
607
- # with better use for this modifier),
608
- # [@]
609
- # padding is done on the right.
610
- def execute(state)
611
- padmethod = at_mod? ? :rjust : :ljust
612
- mincol = param(0, state, 0)
613
- colinc = param(1, state, 1)
614
- minpad = param(2, state, 0)
615
- padchar = param(3, state, ?\s).chr
616
- arg = state.next_arg
617
- # XXX: this needs checking use .to_s here?
618
- str = (arg.is_a? String and not @inspect) ? arg.to_s : arg.inspect
619
- str = str.send(padmethod, str.length + minpad, padchar)
620
- k = ((mincol - str.length) / colinc.to_f).ceil
621
- if k > 0
622
- str = str.send(padmethod, str.length + colinc * k, padchar)
623
- end
624
- state.output str
625
- end
626
- end
627
-
628
- # Represents the ~A (Ascii) directive.
629
- class Ascii < Print; end
630
-
631
- # Represents the ~S (S-Expression) directive.
632
- class SExpression < Print
633
- # Sets +inspect+ to +true+ in the argument list.
634
- def initialize(*args)
635
- super(*args << true)
636
- end
637
- end
638
-
639
- # Super-class for number printing directives, namely ~D (Decimal, ~B
640
- # (Binary), ~O (Octal), and ~X (Hexadecimal). The only difference
641
- # between these directives is the output radix, which defaults to ten
642
- # (10), which is decimal.
643
- class Number < Directive
644
- # Create a Number directive, using the given output radix +radix+.
645
- def initialize(params, modifiers, top, pos, radix = 10)
646
- super params, modifiers, top, pos
647
- @radix = radix
648
- end
649
-
650
- # Output the given argument using its integral representation. The
651
- # argument must respond to the :to_int message, or else it isn't
652
- # considered an integer. This is the normal way in which Ruby
653
- # operates. The full form is
654
- # ~mincol,padchar,commachar,commainterval:@[DBOX]
655
- # with the following interpretations
656
- # [+mincol+ (0)]
657
- # minimum number of columns to output,
658
- # [+padchar+ (?\s)]
659
- # character to pad with,
660
- # [+commachar+ (,)]
661
- # character to use for number grouping (see : below),
662
- # [+commainterval+ (3)]
663
- # how often to output +commachar+ above,
664
- # [:]
665
- # the number is output, with numbers grouped into +commainterval+
666
- # sized groups of numbers, using +commachar+ as separator,
667
- # [@]
668
- # numbers are always output with sign prepended.
669
- #
670
- # An ArgumentError is raised if the argument does not respond to the
671
- # #to_int message.
672
- def execute(state)
673
- mincol = param(0, state, 0)
674
- padchar = param(1, state, ?\s).chr
675
- commachar = param(2, state, ?,).chr
676
- interval = param(3, state, 3)
677
- arg = state.next_arg
678
- if arg.respond_to? :to_int
679
- num = arg.to_int
680
- str = num.to_s(@radix)
681
- if colon_mod?
682
- str.gsub!(/(\d)(?=(\d{#{interval}})+(?!\d))/, "\\1#{commachar}")
683
- end
684
- str = '+' + str if at_mod? and num >= 0
685
- # puts(str.rjust(mincol, '-'))
686
- state.output str.rjust(mincol, padchar)
687
- else
688
- arg_error 'argument is not an integer'
689
- end
690
- end
691
- end
692
-
693
- # Represents the ~D (Decimal) directive.
694
- class Decimal < Number; end
695
-
696
- # Represents the ~B (Binary) directive.
697
- class Binary < Number
698
- # Set +radix+ to 2.
699
- def initialize(args)
700
- super(*args << 2)
701
- end
702
- end
703
-
704
- # Represents the ~O (Octal) directive.
705
- class Octal < Number
706
- # Set +radix+ to 8.
707
- def initialize(args)
708
- super(*args << 8)
709
- end
710
- end
711
-
712
- # Represents the ~X (Hexadecimal) directive.
713
- class Hexadecimal < Number
714
- # Set +radix+ to 16.
715
- def initialize(args)
716
- super(*args << 16)
717
- end
718
- end
719
-
720
- # Represents the ~R (Radix) directive. This outputs numbers in a given
721
- # radix, or using alternative forms, such as Roman numerals or
722
- # cardinal/ordinal English numbers.
723
- class Radix < Directive
724
- @@names = {
725
- 1 => 'one', 2 => 'two', 3 => 'three',
726
- 4 => 'four', 5 => 'five', 6 => 'six',
727
- 7 => 'seven', 8 => 'eight', 9 => 'nine',
728
- 10 => 'ten', 11 => 'eleven', 12 => 'twelve',
729
- 13 => 'thirteen', 14 => 'fourteen', 15 => 'fifteen',
730
- 16 => 'sixteen', 17 => 'seventeen', 18 => 'eighteen',
731
- 19 => 'nineteen', 20 => 'twenty', 30 => 'thirty',
732
- 40 => 'forty', 50 => 'fifty', 60 => 'sixty',
733
- 70 => 'seventy', 80 => 'eighty', 90 => 'ninety'
734
- }
735
- @@illions = %w[ \
736
- thousand million billion trillion
737
- quadrillion quintillion sextillion septillion
738
- octillion nonillion decillion undecillion
739
- duodecillion tredecillion quattuordecillion quindecillion
740
- sexdecillion septendecillion octodecillion novemdecillion
741
- vigintillion
742
- ]
743
- @@ordinal_ones = %w[
744
- \ first second third fourth
745
- fifth sixth seventh eight ninth
746
- tenth eleventh twelfth thirteenth fourteenth
747
- fifteenth sixteenth seventeenth eighteenth nineteenth
748
- ]
749
- @@ordinal_tens = %w[
750
- \ \ twentieth thirtieth fortieth
751
- fiftieth sixtieth seventieth eightieth ninetieth
752
- ]
753
- @@romans = [
754
- [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'],
755
- [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'],
756
- [5, 'V'], [4, 'IV'], [1, 'I']
757
- ]
758
- @@old_romans = [
759
- [1000, 'M'], [900, 'DCCCC'], [500, 'D'], [400, 'CCCC'],
760
- [100, 'C'], [90, 'LXXXX'], [50, 'L'], [40, 'XXXX'],
761
- [10, 'X'], [9, 'VIIII'], [5, 'V'], [4, 'IIII'],
762
- [1, 'I']
763
- ]
764
-
765
- # Output the given argument using one of a variety of methods. Either
766
- # the argument is output using a specific radix, using cardinal or
767
- # ordinal English numbers, or Roman numerals. The full form is
768
- # ~radix,mincol,padchar,commachar,commainterval:@R
769
- # with the same interpretation as for ~D (Decimal / Number), but using
770
- # the given +radix+ instead. An ArgumentError is raised if the
771
- # argument is not an integer, or, in the case of Roman numerals, if the
772
- # argument is not a Fixnum value.
773
- #
774
- # If none of the parameters are given the output instead depends on the
775
- # combination of modifiers:
776
- # [<em>no modifiers</em>]
777
- # the number is output as a cardinal English number,
778
- # [:]
779
- # the number is output as an ordinal English number,
780
- # [@]
781
- # the number is output as a Roman numeral,
782
- # [:@]
783
- # the number is output as an old Roman numeral.
784
- #
785
- # An ArgumentError is raised if the argument is not an integer.
786
- def execute(state)
787
- if @params.size > 0
788
- # XXX: may be ugly to modify these
789
- n = @params.shift.value
790
- Factory.build(@params, @modifiers, nil, @pos, n).execute(state)
791
- else
792
- arg = state.next_arg
793
- if arg.respond_to? :to_int
794
- conversion = :cardinal
795
- conversion = :ordinal if colon_mod?
796
- conversion = :roman if at_mod?
797
- conversion = :old_roman if colon_mod? and at_mod?
798
- state.output self.send(conversion, arg.to_int)
799
- else
800
- arg_error 'argument is not an integer'
801
- end
802
- end
803
- end
804
-
805
- private
806
-
807
- # Convert the given number to a cardinal English number string.
808
- def cardinal(n)
809
- return 'zero' if n.zero?
810
- out = []
811
- negative = n < 0
812
- n = n.abs
813
- power = 0
814
- while n > 0
815
- before, after = n.divmod(1000)
816
- if after > 0
817
- block = cardinal_100s(after) + (power.zero? ? '' : ' ')
818
- if power < @@illions.size
819
- block << @@illions[power]
820
- else
821
- block << 'times ten to the ' + (power * 3).to_s + ' power'
822
- end
823
- out << block
824
- end
825
- n = before
826
- power += 1
827
- end
828
- negative and out << 'minus'
829
- out.reverse.join(', ')
830
- end
831
-
832
- # Deal with hundreds for cardinals.
833
- def cardinal_100s(n)
834
- out = []
835
- q, r = n.divmod(100)
836
- out << @@names[q] + ' hundred' if q > 0
837
- if r >= 20
838
- out << @@names[r / 10 * 10] + (r%10>0 ? '-' + @@names[r % 10] : '')
839
- elsif r > 0
840
- out << @@names[r]
841
- end
842
- out.join(' ')
843
- end
844
-
845
- # Convert the given number to an ordinal English number string.
846
- def ordinal(n)
847
- return 'zeroth' if n.zero?
848
- out = []
849
- if n < 0
850
- out << 'minus'
851
- n = n.abs
852
- end
853
- hundreds, tens_ones = n.divmod(100)
854
- if hundreds > 0
855
- out << cardinal(hundreds * 100) + (tens_ones.zero? ? 'th' : '')
856
- end
857
- if tens_ones >= 20
858
- tens, ones = tens_ones.divmod(10)
859
- if ones.zero?
860
- out << @@ordinal_tens[tens]
861
- else
862
- out << @@names[tens * 10] + '-' + @@ordinal_ones[ones]
863
- end
864
- elsif tens_ones > 0
865
- out << @@ordinal_ones[tens_ones]
866
- end
867
- out.join(' ')
868
- end
869
-
870
- # Helper method for roman numerals.
871
- def roman_helper(n, table)
872
- unless n.is_a? Fixnum
873
- arg_error 'only Fixnum values can be converted to roman numerals'
874
- end
875
- out = []
876
- table.each do |decimal, roman|
877
- q, r = n.divmod(decimal)
878
- if q > 0
879
- out << roman * q
880
- n = r
881
- end
882
- end
883
- out.join('')
884
- end
885
-
886
- # Convert the given number to a Roman numeral.
887
- def roman(n)
888
- roman_helper(n, @@romans)
889
- end
890
-
891
- # Convert the given number to an old Roman numeral.
892
- def old_roman(n)
893
- roman_helper(n, @@old_romans)
894
- end
895
- end
896
-
897
- # Represents the ~R (Plural) directive. It outputs English plural
898
- # suffixes depending on the given argument.
899
- class Plural < Directive
900
- # Outputs the given argument as an English plural suffix depending on
901
- # the arguments value. If arg is not #eql? to 1, a lowercase +s+ is
902
- # output, else nothing is output. The meaning of modifiers are:
903
- # [:]
904
- # backs up one argument before checking,
905
- # [@]
906
- # outputs +y+ or +ies+ instead of +s+ and _nothing_,
907
- # [:@]
908
- # a combination of the two above.
909
- def execute(state)
910
- arg = colon_mod? ? state.previous_arg : state.next_arg
911
- if at_mod?
912
- state.output((arg.eql? 1) ? 'y' : 'ies')
913
- else
914
- state.output(?s) unless arg.eql? 1
915
- end
916
- end
917
- end
918
-
919
- # Represents the ~C (Character) directive. It outputs a character
920
- # argument in one of several different representations depending on given
921
- # modifiers.
922
- # TODO: UNICODE this shit.
923
- class Character < Directive
924
- # Outputs the given argument in one of the ways described in the table
925
- # below depending on given modifiers:
926
- # [<tt>no modifiers</tt>]
927
- # simply output the character as a normal character,
928
- # [:]
929
- # spells out control-bits on the input character, such as
930
- # Control-Meta-X,
931
- # [@]
932
- # outputs the character in such as way that it can be read in by the
933
- # Ruby interpreter again as input, using the ?_char_ syntax,
934
- # [:@]
935
- # has the same effect as : only. The CLTL2 suggests that this
936
- # outputs unusual shift keys in a manner to make it easy to locate
937
- # them on a keyboard, but since no such standard has arisen, this is
938
- # not done.
939
- def execute(state)
940
- arg = state.next_arg
941
- arg_error 'argument not a Fixnum' unless arg.is_a? Fixnum
942
- ch = arg & 0xff
943
- if colon_mod?
944
- state.output('Control-') if (ch & 0x7f) < 0x1f
945
- state.output('Meta-') if ch >= 0x7f
946
- state.output(ch & 0x7f | 0x60)
947
- elsif at_mod?
948
- state.output('?' + convert_char(ch))
949
- else
950
- state.output ch
951
- end
952
- end
953
-
954
- private
955
-
956
- # Convert a character to a escaped character string if possible.
957
- # XXX: This should perhaps only use \x or \NNN syntax
958
- def convert_char(ch)
959
- if [?\\, ?\n, ?\t, ?\r, ?\f, ?\v, ?\a, ?\e, ?\b, ?\s].include? ch
960
- ch.chr.inspect[1..-2]
961
- else
962
- if (ch & 0x7f) < 0x1f
963
- "\\C-" + convert_char(ch | 0x60)
964
- elsif ch >= 0x7f
965
- "\\M-" + convert_char(ch & 0x7f | 0x60)
966
- else
967
- ch
968
- end
969
- end
970
- end
971
- end
972
-
973
- # Represents the ~F (Fixed-format floating-point) directive. This
974
- # outputs floating point values with various kinds of padding and such.
975
- class FFFP < Directive
976
- # Outputs the given argument using a floating-point representation.
977
- # The full form is
978
- # ~w,d,k,overflowchar,padchar@F
979
- # with the following interpretations
980
- # [+w+ (+nil+)]
981
- # if non-+nil+, the output will be exactly +w+ characters long,
982
- # [+d+ (+nil+)]
983
- # if non-+nil+, this is the number of digits output after the decimal
984
- # point (<tt>.</tt>),
985
- # [+k+ (0)]
986
- # scaling factor - the number is first scaled using this value,
987
- # [+overflowchar+ (+nil+)]
988
- # if non-+nil+, this character is used when this directive would
989
- # produce output longer than that specified with the +w+ directive,
990
- # [+padchar+ (?\s)]
991
- # character to pad with if +w+ is non-nil and output isn't wide
992
- # enough yet,
993
- # [@]
994
- # numbers are always output with sign prepended.
995
- #
996
- # An ArgumentError is raised if the argument is not a number or a
997
- # string that can be converted to a number.
998
- def execute(state)
999
- width = param(0, state, nil)
1000
- digits = param(1, state, nil)
1001
- scale = param(2, state, 0)
1002
- overflowchar = param(3, state, nil)
1003
- padchar = param(4, state, ?\s)
1004
- arg = state.next_arg
1005
- if arg.respond_to? :to_f
1006
- num = arg.to_f * (10 ** scale)
1007
- str = (at_mod? and num >= 0) ? '+' : ''
1008
- str = sign + (digits.nil? ? num.to_s : sprintf("%.#{digits}f",num))
1009
- str = sign + sprintf("%.#{$1}f", num) if str =~ /e-([0-9]+)$/
1010
- unless width.nil?
1011
- if not digits.nil? and width == digits + 1
1012
- str.sub!(/^([+-]?)0\./, '\1.')
1013
- end
1014
- str = str.rjust(width, padchar.chr) if str.length < width
1015
- if str.length > width and digits.nil?
1016
- prec = width - (str.index(/\./) + 1)
1017
- str = sign + sprintf("%#.#{prec}f", num)
1018
- end
1019
- str.sub!(/\.$/, '') if str.length > width and digits.nil?
1020
- if str.length > width and not overflowchar.nil?
1021
- str = overflowchar.chr * width
1022
- end
1023
- end
1024
- state.output str
1025
- elsif arg.respond_to? :to_int
1026
- state.push_back_arg
1027
- parameters = @params[0].nil? ? [] : [@params[0]]
1028
- Factory.build(parameters, [], ?D, nil, @pos).execute(state)
1029
- else
1030
- arg_error 'argument is not a number or a number string'
1031
- end
1032
- end
1033
- end
1034
-
1035
- # Represents the ~E (Exponential floating-point) directive. This outputs
1036
- # floating point values in what is known as exponential or scientific
1037
- # floating point format, such as 1.0e+3 for 1000.
1038
- class ExpFP < Directive
1039
-
1040
- # Outputs the argument using exponential floating-point format. The
1041
- # full form is
1042
- # ~w,d,e,k,overflowchar,padchar,exponentchar@E
1043
- # with the following interpretations
1044
- # [+w+ (+nil+)]
1045
- # if non-+nil+, the output will be exactly +w+ characters long,
1046
- # [+d+ (+nil+)]
1047
- # if non-+nil+, this is the number of digits output after the decimal
1048
- # point (<tt>.</tt>),
1049
- # [+e+ (+nil+)]
1050
- # if non-+nil+, the exponent part of the output will be exactly +e+
1051
- # characters long,
1052
- # [+k+ (1)]
1053
- # scaling factor - the number is first scaled using this value,
1054
- # [+overflowchar+ (+nil+)]
1055
- # if non-+nil+, this character is used when this directive would
1056
- # produce output longer than that specified with the +w+ directive,
1057
- # [+padchar+ (?\s)]
1058
- # character to pad with if +w+ is non-nil and output isn't wide
1059
- # enough yet,
1060
- # [+exponentchar+ (?e)]
1061
- # character to use for exponent divider,
1062
- # [@]
1063
- # numbers are always output with sign prepended.
1064
- #
1065
- # An ArgumentError is raised if the argument is not a number or a
1066
- # string that can be converted to a number.
1067
- def execute(state)
1068
- width = param(0, state, nil)
1069
- digits = param(1, state, nil)
1070
- edigits = param(2, state, nil)
1071
- scale = param(3, state, 1)
1072
- overflowchar = param(4, state, nil)
1073
- padchar = param(5, state, ?\s).chr
1074
- exponentchar = param(6, state, ?e).chr
1075
- arg = state.next_arg
1076
- if arg.respond_to? :to_f
1077
- num = arg.to_f
1078
- sign = (num >= 0 and at_mod?) ? '+' : ''
1079
- exp = Math.log10(num.abs).floor - (scale - 1)
1080
- exp_str = exponentchar + (exp >= 0 ? '+' : '-') +
1081
- (edigits.nil? ? exp.abs.to_s : exp.abs.to_s.rjust(edigits, '0'))
1082
- if digits.nil? and width.nil? and edigits.nil?
1083
- str = sign + (num * (10 ** -exp)).to_s + exp_str
1084
- else
1085
- if digits.nil?
1086
- prec = width - sign.length -
1087
- ((num * (10 ** -exp)).to_s.index(/\./) + 1) - exp_str.length
1088
- str = sign + sprintf("%#.#{prec}f", num) + exp_str
1089
- else
1090
- if scale > 0
1091
- if scale < digits + 2
1092
- prec = digits - scale + 1
1093
- else
1094
- param_error 3, 'scale must be < digits + 2'
1095
- end
1096
- else
1097
- prec = -scale + (digits + scale)
1098
- end
1099
- str = sign + sprintf("%#.#{prec}f", num * (10**-exp)) + exp_str
1100
- end
1101
- unless width.nil?
1102
- if scale <= 0 and str.length > width
1103
- str.sub!(/^([+-]?)0\./, '\1.')
1104
- end
1105
- str = str.rjust(width, padchar) if str.length < width
1106
- end
1107
- unless width.nil? and overflowchar.nil?
1108
- if not edigits.nil? and (exp_str.length - 2) > edigits
1109
- str = overflowchar.chr * width
1110
- end
1111
- end
1112
- end
1113
- state.output str
1114
- elsif arg.respond_to? :to_int
1115
- state.push_back_arg
1116
- parameters = @params[0].nil? ? [] : [@params[0]]
1117
- Factory.build(parameters, [], ?D, nil, @pos).execute(state)
1118
- else
1119
- arg_error 'argument is not a number or a number string'
1120
- end
1121
- end
1122
- end
1123
-
1124
- # Represents the ~G (General floating-point) directive. This outputs its
1125
- # argument using either a format like ~F or ~E depending upon given
1126
- # parameters and the magnitude of the argument.
1127
- class GeneralFP < Directive
1128
- # Outputs the argument using exponential floating-point format. The
1129
- # algorithm to decide what format to use looks something like
1130
- # let
1131
- # 10^n-1 <= arg < 10^n, or n = 0 if arg = 0,
1132
- # ee = e + 2, or ee = 4 if e undefined,
1133
- # ww = w - ee, or ww = nil if w undefined,
1134
- # dd = d - n, or dd = max(q, min(n, 7)) where q = number of
1135
- # characters necessary to print arg without loss of information
1136
- # in
1137
- # 0 <= dd <= d, and print using
1138
- # ~ww,dd,,overflowchar,padcharF~ee@T
1139
- # or print using
1140
- # ~w,d,e,k,overflowchar,padchar,exponentcharG
1141
- # Use of the @ modifier in the directives above depends on if it was
1142
- # passed to ~G in the first place.
1143
- #
1144
- # The full form is
1145
- # ~w,d,e,k,overflowchar,padchar,exponentchar@G
1146
- # with the following interpretations
1147
- # [+w+ (+nil+)]
1148
- # if non-+nil+, the output will be exactly +w+ characters long,
1149
- # [+d+ (+nil+)]
1150
- # if non-+nil+, this is the number of digits output after the decimal
1151
- # point (<tt>.</tt>),
1152
- # [+e+ (+nil+)]
1153
- # if non-+nil+, the exponent part of the output will be exactly +e+
1154
- # characters long,
1155
- # [+k+ (1)]
1156
- # scaling factor - the number is first scaled using this value,
1157
- # [+overflowchar+ (+nil+)]
1158
- # if non-+nil+, this character is used when this directive would
1159
- # produce output longer than that specified with the +w+ directive,
1160
- # [+padchar+ (?\s)]
1161
- # character to pad with if +w+ is non-nil and output isn't wide
1162
- # enough yet,
1163
- # [+exponentchar+ (?e)]
1164
- # character to use for exponent divider,
1165
- # [@]
1166
- # numbers are always output with sign prepended.
1167
- #
1168
- # An ArgumentError is raised if the argument is not a number or a
1169
- # string that can be converted to a number.
1170
- def execute(state)
1171
- width = param(0, state, nil)
1172
- digits = param(1, state, nil)
1173
- edigits = param(2, state, nil)
1174
- scale = param(3, state, 1)
1175
- overflowchar = param(4, state, nil)
1176
- padchar = param(5, state, ?\s)
1177
- exponentchar = param(6, state, nil)
1178
- arg = state.next_arg
1179
- if arg.respond_to? :to_f
1180
- num = arg.to_f
1181
- n = num == 0.0 ? 0 : Math.log10(num.abs).floor + 1
1182
- ee = edigits.nil? ? 4 : edigits + 2
1183
- ww = w.nil? ? nil : w - ee
1184
- if d.nil?
1185
- q = num.to_s.length
1186
- d = Math.max(q, Math.min(n, 7))
1187
- end
1188
- dd = d - n
1189
- if 0 <= dd and dd <= d
1190
- state.push_back_arg
1191
- parameters = [
1192
- Parameters::Integer.new(@pos, ww),
1193
- Parameters::Integer.new(@pos, dd),
1194
- Parameters::Default.new(@pos),
1195
- overflowchar.nil? ?
1196
- Parameters::Default.new(@pos) :
1197
- Parameters::Character.new(@pos, overflowchar),
1198
- padchar.nil? ?
1199
- Parameters::Default.new(@pos) :
1200
- Parameters::Character.new(@pos, padchar),
1201
- ]
1202
- Factory.build(parameters, @modifiers, ?F, nil,
1203
- @pos).execute(state)
1204
- Factory.build([Parameters::Integere.new(@pos, ee)], @modifiers,
1205
- ?T, nil, @pos).execute(state)
1206
- else
1207
- state.push_back_arg
1208
- Factory.build(@params, @modifiers, ?E, nil, @pos).execute(state)
1209
- end
1210
- elsif arg.respond_to? :to_int
1211
- state.push_back_arg
1212
- parameters = @params[0].nil? ? [] : [@params[0]]
1213
- Factory.build(parameters, [], ?D, nil, @pos).execute(state)
1214
- else
1215
- arg_error 'argument is not a number or a number string'
1216
- end
1217
- end
1218
- end
1219
-
1220
- # Represents the ~$ (Dollars floating-point) directive. This directive
1221
- # outputs a floating point argument
1222
- class DollarFP < Directive
1223
- # Outputs the argument using a floating point format that suits dollar
1224
- # values. The full form is
1225
- # ~d,n,w,padchar:@$
1226
- # with the following interpretations
1227
- # [+d+ (2)]
1228
- # number of digits to print after the decimal point (<tt>.</tt>),
1229
- # [+n+ (1)]
1230
- # number of digits to print before the decimal point (<tt>.</tt>),
1231
- # [+w+ (0)]
1232
- # minimum width of the field,
1233
- # [+padchar+ (?\s)]
1234
- # character used to produce right-adjusting padding with,
1235
- # [:]
1236
- # the sign of the value is output before any padding,
1237
- # [@]
1238
- # numbers are always output with sign prepended.
1239
- def execute(state)
1240
- digits = param(0, state, 2)
1241
- idigits = param(1, state, 1)
1242
- width = param(2, state, 0)
1243
- padchar = param(3, state, ?\s)
1244
- arg = state.next_arg
1245
- if arg.respond_to :to_int
1246
- sign = (arg >= 0 ? (at_mod? ? '+' : '') : '-')
1247
- str = sprintf("%0#{idigits + digits + 1}.#{digits}f", arg.abs)
1248
- if colon_mod?
1249
- str = sign + str.rjust(width, padchar.chr)
1250
- else
1251
- str = (sign + str).rjust(width, padchar.chr)
1252
- end
1253
- state.output str
1254
- elsif arg.respond_to? :to_i
1255
- state.push_back_arg
1256
- parameters = @params[2].nil? ? [] : [@params[2]]
1257
- Factory.build(?D, parameters, [], nil, @pos).execute(state)
1258
- else
1259
- arg_error 'argument is not a number or a number string'
1260
- end
1261
- end
1262
- end
1263
-
1264
- # Parent class for character outputting directives, such as ~% (NewLine),
1265
- # ~| (NewPage), and ~~ (Tilde), which output the same character a given
1266
- # number of times.
1267
- class CharacterDirective < Directive
1268
- # Create and set the character to use to +ch+.
1269
- def initialize(params, modifiers, top, pos, ch)
1270
- super params, modifiers, top, pos
1271
- @ch = ch
1272
- end
1273
-
1274
- # Outputs the specific character (depending on the
1275
- # sub-classing directive) a given number of times. The full form is
1276
- # ~n[%|~]
1277
- # with the following interpretations
1278
- # [+n+ (1)]
1279
- # number of times to output the specific character.
1280
- def execute(state)
1281
- n = param(0, state, 1)
1282
- state.output(@ch.chr * n)
1283
- end
1284
- end
1285
-
1286
- # Represents the ~% (Newline) directive. This outputs a new-line (?\n)
1287
- # character a given number of times.
1288
- class NewLine < CharacterDirective
1289
- # Set the output character to a new-line (?\n).
1290
- def initialize(*args)
1291
- super(*args << ?\n)
1292
- end
1293
- end
1294
-
1295
- # Represents the ~% (Freshline) directive. This outputs a new-line (?\n)
1296
- # character a given number of times, depending on if it is already at the
1297
- # first output column or not.
1298
- class FreshLine < Directive
1299
- # Outputs a new-line character a given number of times depending on if
1300
- # it is already at the first output column or not. If it is it outputs
1301
- # it the given number minus one (1). The full form is
1302
- # ~n&
1303
- # with the following interpretations
1304
- # [+n+ (1)]
1305
- # number of times to output the specific character (maybe minus one).
1306
- def execute(state)
1307
- n = param(0, state, 1)
1308
- return if n.zero?
1309
- state.output(?\n) if state._col > 0
1310
- (n - 1).times do state.output(?\n) end
1311
- end
1312
- end
1313
-
1314
- # Represents the ~| (Newpage) directive. This outputs a new-page (?\f)
1315
- # character a given number of times.
1316
- class NewPage < CharacterDirective
1317
- # Set the output character to a new-page (?\f).
1318
- def initialize(*args)
1319
- super(*args << ?\f)
1320
- end
1321
- end
1322
-
1323
- # Represents the ~~ (Tilde) directive. This outputs a tilde (~)
1324
- # character a given number of times.
1325
- class Tilde < CharacterDirective
1326
- # Set the output character to a tilde (~).
1327
- def initialize(*args)
1328
- super(*args << ?~)
1329
- end
1330
- end
1331
-
1332
- # Represents the ~?\n (Real new-line) directive. This is used to skip
1333
- # the new-line and any following white-space characters in the input
1334
- # format. This is useful in long format strings, where the string has to
1335
- # be split into multiple lines without ruining indentation.
1336
- class SkipWhitespace < Directive
1337
- # Join this directive with the following. This removes any new-line
1338
- # and/or following white-space from the directive that follows, if it
1339
- # is a string Literal.
1340
- def join(other)
1341
- return other if not other.is_a?(FormatLiteral) or colon_mod?
1342
- other.sub!(/^[\s\t]+/, '')
1343
- other[0,0] = '\n' if at_mod?
1344
- other
1345
- end
1346
- end
1347
-
1348
- # Represents the ~T (Tabulate) directive. This tabulates to a given
1349
- # position in the output using white-space.
1350
- class Tabulate < Directive
1351
- # The output is spaced over to a given position, depending on where it
1352
- # already is and parameters given to this directive.
1353
- # ~colnum,colinc:@T
1354
- # with the following interpretations
1355
- # [+colnum+ (1)]
1356
- # column to move to,
1357
- # [+colinc+ (1)]
1358
- # number of columns to space over by if already at or beyond
1359
- # +colnum+,
1360
- # [@]
1361
- # performs relative tabulation. +colnum+ is treated as the column to
1362
- # begin from (spacing over to it if necessary), and then moves over
1363
- # to a column that is the smallest multiple of +colinc+.
1364
- #
1365
- # If output is already at or beyond +colnum+, then output is spaced
1366
- # over to column <em>colnum + k * colinc</em>, for the smallest _k_
1367
- # possible. An example of the @ modifiers effect is for the instance
1368
- # of the ~T directive ~3,8@T, which moves over three columns, and then
1369
- # to the first eight-sized tab-stop.
1370
- def execute(state)
1371
- colnum = param(0, state, 1)
1372
- colinc = param(1, state, 1)
1373
- padchar = ?\s.chr
1374
- if at_mod?
1375
- state.output(padchar * colnum)
1376
- state.output(padchar * (colinc - state.col % colinc))
1377
- else
1378
- if state.col < colnum
1379
- state.output(padchar * (colnum - state.col))
1380
- elsif colinc > 0
1381
- k = 1 + (state.col - colnum) / colinc
1382
- state.output(padchar * ((colnum + k * colinc) - state.col))
1383
- end
1384
- end
1385
- end
1386
- end
1387
-
1388
- # Represents the ~* (Argument jumping) directive. This moves arbitrarily
1389
- # amongst the arguments passed to the formatting engine.
1390
- class ArgJump < Directive
1391
- # Moves backwards or forwards, relative or absolute, among the
1392
- # formatting arguments. The full form is
1393
- # ~n:@*
1394
- # with the following interpretations
1395
- # [+n+ (1)]
1396
- # the amount of arguments to move or the argument to move to if
1397
- # moving to an absolute position, indexed from zero (0),
1398
- # [:]
1399
- # move backwards +n+ arguments
1400
- # [@]
1401
- # move to the +n+:th argument, using zero-based indexing (absolute).
1402
- def execute(state)
1403
- n = param(0, state, 1)
1404
- state.args_move(colon_mod? ? -n : n, !at_mod?)
1405
- end
1406
- end
1407
-
1408
- # Represents the ~? (Indirection) directive. This takes the two
1409
- # following arguments and formats them, using the first as the formatting
1410
- # string, and the second as its arguments and inserts it into the output.
1411
- class Indirection < Directive
1412
- # Uses the next argument as a formatting string and then, depending on
1413
- # modifiers specified, uses one of a set of different arguments as
1414
- # input to this formatting. The full form is
1415
- # ~@?
1416
- # with the following interpretations
1417
- # [@]
1418
- # the formatting string is, much like a macro, inserted into the
1419
- # formatting stream, so to speak, and consumes arguments and so on
1420
- # from the current state, instead, as per default, consuming a second
1421
- # argument and reading arguments from it.
1422
- def execute(state)
1423
- if at_mod?
1424
- formatter = Formatter.new(state.next_arg, state)
1425
- else
1426
- format = state.next_arg
1427
- state = State.new(state.next_arg, state.latest_output)
1428
- formatter = Formatter.new(format, state)
1429
- end
1430
- formatter.run
1431
- end
1432
- end
1433
-
1434
- # Represents the ~( (Begin case-conversion) directive. Everything
1435
- # contained within it and its matching pair ~) (End case-conversion)
1436
- # directive is subject to case conversion, such as upcasing or
1437
- # capitalization.
1438
- class BeginCaseConversion < Directive
1439
- # Outputs the contained output case converted using some method that
1440
- # depends on the combination of modifiers given to this directive. The
1441
- # full form is
1442
- # ~:@(
1443
- # with the following interpretations
1444
- # [<em>no modifiers</em>]
1445
- # output is downcased,
1446
- # [:]
1447
- # every word is capitalized in the output,
1448
- # [@]
1449
- # the first word is capitalized in the output,
1450
- # [:@]
1451
- # output is upcased.
1452
- def execute(state)
1453
- conv = :DOWN
1454
- conv = :CAP if colon_mod?
1455
- conv = :CAP_FIRST if at_mod?
1456
- conv = :UP if colon_mod? and at_mod?
1457
- state.case_conv = conv
1458
- state.push_output
1459
- end
1460
- end
1461
-
1462
- # Represents the ~) (End case-conversion) directive. Everything
1463
- # contained within it and its matching pair ~( (Begin case-conversion)
1464
- # directive is subject to case conversion, such as upcasing or
1465
- # capitalization.
1466
- class EndCaseConversion < Directive
1467
- # This does the actual work for the ~( directive, in that it collects
1468
- # all the output between its matching directive (~() and outputs it
1469
- # using one of the conversions set up by the ~( (BeginCaseConversion)
1470
- # directive.
1471
- def execute(state)
1472
- output = state.pop_output.to_s
1473
- state.output(
1474
- case state.case_conv
1475
- when :DOWN
1476
- output.downcase
1477
- when :CAP
1478
- output.gsub(/\w+/) do |w| w.capitalize end
1479
- when :CAP_FIRST
1480
- output.capitalize
1481
- when :UP
1482
- output.upcase
1483
- end
1484
- )
1485
- end
1486
- end
1487
-
1488
- # Represents the ~[ (Begin conditional expression) directive. This is
1489
- # useful to choose among a set of directives depending on arguments and
1490
- # numbers.
1491
- class BeginConditional < Directive
1492
- # Set up some variables and basically pass on to super.
1493
- def initialize(*args)
1494
- super(*args)
1495
- if (colon_mod? or at_mod?) and @params.size > 0
1496
- param_error 0, 'no parameters allowed together with' +
1497
- ': and/or @ modifiers'
1498
- end
1499
- @clauses = []
1500
- @default = -1
1501
- end
1502
-
1503
- # Process one of the given clauses, depending on the numeric value of
1504
- # the given argument, or a specified parameter. The full form is
1505
- # ~n[clause0~;clause1~:;clause2~]
1506
- # or
1507
- # ~:[clause0~;clause1~]
1508
- # or
1509
- # ~@[clause0~]
1510
- # with the following interpretations
1511
- # [+n+ (nil)]
1512
- # if given, this value will be used to choose a clause instead of
1513
- # reading an arguments value. This is only useful if +n+ is in fact
1514
- # the arguments left parameter (<tt>#</tt>). An error is raised if
1515
- # this argument does not #respond_to? :to_int,
1516
- # [:]
1517
- # instead of choosing a clause by number, the argument is tested as a
1518
- # boolean value, and if false, then first clause is executed, else
1519
- # the second one is,
1520
- # [@]
1521
- # instead of choosing a clause by number, the argument is tested as a
1522
- # boolean value, and if true, the single clause is executed.
1523
- def execute(state)
1524
- test = state.next_arg if colon_mod? or at_mod?
1525
- if colon_mod?
1526
- c = test ? 1 : 0
1527
- elsif at_mod?
1528
- if test
1529
- state.push_back_arg
1530
- c = 0
1531
- end
1532
- else
1533
- n = param(0, state, nil)
1534
- if n.nil?
1535
- arg = state.next_arg
1536
- if arg.respond_to? :to_int
1537
- n = arg.to_int
1538
- else
1539
- arg_error 'argument is not an integral value'
1540
- end
1541
- end
1542
- if n < @clauses.size
1543
- c = n
1544
- elsif @default != -1
1545
- c = @default
1546
- end
1547
- end
1548
- Format.execute_directives(state, @clauses[c]) unless c.nil?
1549
- end
1550
-
1551
- # Connect a set of directives to this conditional directive.
1552
- # A SyntaxError is raised if multiple clauses have been marked as
1553
- # 'default', or if too many clauses have been specified for a given
1554
- # set of modifiers.
1555
- def connect(directives)
1556
- @clauses = []
1557
- clause = []
1558
- directives.each do |d|
1559
- if d.is_a? ClauseSeparator
1560
- @clauses << clause
1561
- clause = []
1562
- if d.colon_mod?
1563
- if @default == -1
1564
- @default = @clauses.size
1565
- else
1566
- raise SyntaxError.new(d.pos),
1567
- 'default clause has already been set'
1568
- end
1569
- end
1570
- elsif d.is_a? EndConditional
1571
- @clauses << clause
1572
- break
1573
- else
1574
- clause << d
1575
- end
1576
- end
1577
- must = 'two' if colon_mod? and @clauses.size != 2
1578
- must = 'one' if at_mod? and @clauses.size != 1
1579
- unless must.nil?
1580
- raise SyntaxError.new(@pos), "must specify exactly #{must} clauses"
1581
- end
1582
- end
1583
- end
1584
-
1585
- # Represents the ~; (Clause separator) directive. It separates clauses
1586
- # inside conditional and justifying directives (~[...~] and ~<...~>). It
1587
- # may not appear anywhere else.
1588
- class ClauseSeparator < Directive
1589
- # Check that +top+ is either a BeginConditional or a
1590
- # BeginJustification. If not, a SyntaxError is raised.
1591
- def initialize(params, modifiers, top, pos)
1592
- super params, modifiers, top, pos
1593
- unless top.is_a? BeginConditional
1594
- raise SyntaxError.new(@pos),
1595
- '~; directive must be contained within a conditional (~[...~])' +
1596
- ' or a justification (~<...~>)'
1597
- end
1598
- end
1599
- end
1600
-
1601
- # Represents the ~] (End conditional expression) directive. It ends a
1602
- # conditional expression, and is an error if it appears without a
1603
- # matching opening conditional expression.
1604
- class EndConditional < Directive
1605
- def initialize(params, modifiers, top, pos)
1606
- super params, modifiers, top, pos
1607
- unless top.is_a? BeginConditional
1608
- raise SyntaxError.new(@pos), '~) without matching ~('
1609
- end
1610
- end
1611
- end
1612
-
1613
- # Represents the ~{ (Begin iteration) directive. A given set of
1614
- # directives is used iteratively over a set of arguments (depends on the
1615
- # modifiers specified) a given number of times, or until it runs out of
1616
- # arguments.
1617
- class BeginIteration < Directive
1618
- # Create and set up some private variables
1619
- def initialize(params, modifiers, top, pos)
1620
- super params, modifiers, top, pos
1621
- @directives = []
1622
- end
1623
-
1624
- # Iteratively run the contained directives using sets of arguments
1625
- # depending upon what modifiers where given. The full form is
1626
- # ~n:@{...~}
1627
- # with the following interpretations
1628
- # [n]
1629
- # maximum number of times the iteration should be performed,
1630
- # [<em>no modifiers</em>]
1631
- # the iteration reads an argument, which must be an Array, and uses
1632
- # it as the arguments to the contained directives,
1633
- # [:]
1634
- # the iteration reads an argument, which must be an Array
1635
- # containing sub-arrays, and uses the sub-arrays as the arguments to
1636
- # the contained directives, moving to the next one on each iteration,
1637
- # [@]
1638
- # the iteration uses the rest of the arguments as arguments to the
1639
- # contained directives,
1640
- # [:@]
1641
- # the iteration uses the rest of the arguments, which must be Arrays,
1642
- # using each Array as the set of arguments to the contained
1643
- # directives.
1644
- def execute(state)
1645
- n = param(0, state, nil)
1646
- return if not n.nil? and n == 0
1647
- if colon_mod? and at_mod?
1648
- execute_sets(n, state, false)
1649
- elsif at_mod?
1650
- execute_args(n, nil, state, false)
1651
- elsif colon_mod?
1652
- execute_sets(n, state, true)
1653
- else
1654
- execute_args(n, state.next_arg, state, true)
1655
- end
1656
- end
1657
-
1658
- # Connect a set of directives to this iteration directive.
1659
- def connect(directives)
1660
- directives.pop
1661
- @directives = directives
1662
- end
1663
-
1664
- private
1665
-
1666
- # Execute the iteration using sub-lists either from the following
1667
- # argument or from the remaining arguments.
1668
- def execute_sets(n, state, use_next_arg)
1669
- if use_next_arg
1670
- sets = state.next_arg
1671
- arg_error 'argument not an array' unless sets.is_a? Array
1672
- sets = sets[0...n] unless n.nil?
1673
- else
1674
- m = n
1675
- sets = []
1676
- while state.args_left > 0 and (m.nil? or m > 0)
1677
- sets << state.next_arg
1678
- m -= 1 unless m.nil?
1679
- end
1680
- end
1681
- sets.each do |set|
1682
- execute_args(nil, set, state, true)
1683
- end
1684
- end
1685
-
1686
- # Execute the iteration while there are arguments left and we haven't
1687
- # reached our limit of iterations.
1688
- def execute_args(n, args, state, use_new_state)
1689
- if use_new_state
1690
- arg_error 'argument not an array' unless args.is_a? Array
1691
- state = State.new(args, state.latest_output)
1692
- end
1693
- while state.args_left > 0 and (n.nil? or n > 0)
1694
- Format.execute_directives(state, @directives)
1695
- n -= 1 unless n.nil?
1696
- end
1697
- end
1698
- end
1699
-
1700
- # Represents the ~} (End iteration) directive. See BeginIteration for an
1701
- # explanation of how these directives work together.
1702
- class EndIteration < Directive
1703
- # Raise a SyntaxError if +top+ is not a BeginIteration.
1704
- def initialize(params, modifiers, top, pos)
1705
- super params, modifiers, top, pos
1706
- unless top.is_a? BeginIteration
1707
- raise SynaxError, '~} without matching ~{'
1708
- end
1709
- end
1710
- end
1711
-
1712
- # Factory for directives. Formatting directives should be created using
1713
- # singleton methods in this class.
1714
- class Factory
1715
- @@directives = {
1716
- ?A => [Ascii, 4, [], 0],
1717
- ?S => [SExpression, 4, [], 0],
1718
- ?D => [Decimal, 4, [], 0],
1719
- ?B => [Binary, 4, [], 0],
1720
- ?O => [Octal, 4, [], 0],
1721
- ?X => [Hexadecimal, 4, [], 0],
1722
- ?R => [Radix, 5, [], 0],
1723
- ?P => [Plural, 0, [], 0],
1724
- ?C => [Character, 0, [], 0],
1725
- ?F => [FFFP, 5, [?:], 0],
1726
- ?E => [ExpFP, 7, [?:], 0],
1727
- ?G => [GeneralFP, 7, [?:], 0],
1728
- ?$ => [DollarFP, 4, [], 0],
1729
- ?% => [NewLine, 1, [?:, ?@], 0],
1730
- ?& => [FreshLine, 1, [?:, ?@], 0],
1731
- ?| => [NewPage, 1, [?:, ?@], 0],
1732
- ?~ => [Tilde, 0, [?:, ?@], 0],
1733
- ?\n => [SkipWhitespace, 0, [[?:, ?@]], 0],
1734
- ?T => [Tabulate, 2, [], 0],
1735
- ?* => [ArgJump, 1, [[?:, ?@]], 0],
1736
- ?? => [Indirection, 0, [?:], 0],
1737
- ?( => [BeginCaseConversion, 0, [], 0],
1738
- ?) => [EndCaseConversion, 0, [?:, ?@], 0],
1739
- ?[ => [BeginConditional, 1, [[?:, ?@]], 1],
1740
- ?; => [ClauseSeparator, 0, [?@], 0],
1741
- ?] => [EndConditional, 0, [?@], -1],
1742
- ?{ => [BeginIteration, 1, [], 1],
1743
- ?} => [EndIteration, 0, [?:, ?@], -1],
1744
- }
1745
-
1746
- # Create a directive given a set of paramaters, modifiers, the
1747
- # character representing the directive, possible owning directive, and
1748
- # position in the format string.
1749
- def self.build(params, modifiers, directive, top, pos)
1750
- @@directives.include? directive or
1751
- raise UnknownDirectiveError.new(pos), 'unknown format directive'
1752
- idx = directive.chr.upcase[0]
1753
- params.size <= @@directives[idx][1] or
1754
- raise ParameterError.new(pos),
1755
- 'too many parameters given, expected no more than ' +
1756
- @@directives[idx][1].to_s
1757
- @@directives[idx][2].each do |illegal|
1758
- if illegal.is_a? Array and (modifiers == illegal or
1759
- modifiers.reverse == illegal)
1760
- raise ModifierError.new(pos),
1761
- 'cannot specify both : and @ modifiers'
1762
- elsif modifiers.include? illegal
1763
- raise ModifierError.new(pos),
1764
- 'cannot specify the ' + mod.chr + 'modifier'
1765
- end
1766
- end
1767
- return [
1768
- @@directives[idx][0].new(params, modifiers, top, pos),
1769
- @@directives[idx][3]
1770
- ]
1771
- end
1772
- end #class Factory
1773
-
1774
- end #module Directives
1775
-
1776
- private
1777
-
1778
- # Execute a set of directives in a given state.
1779
- def self.execute_directives(state, directives)
1780
- directives.each do |directive|
1781
- begin
1782
- directive.execute state
1783
- rescue => e
1784
- e.pos = d.pos if e.respond_to?(:pos) and e.pos == -1
1785
- raise
1786
- end
1787
- end
1788
- end
1789
-
1790
- end #module Format
1791
-
1792
- def Lisp.format(format, *args)
1793
- begin
1794
- state = Format::State.new(args, Format::Output.new)
1795
- formatter = Format::Formatter.new(format, state)
1796
- formatter.run
1797
- rescue => e
1798
- puts 'Format error: ' + e.message
1799
- puts format
1800
- puts ' ' * (e.pos - 1) + '^' if e.respond_to? :pos
1801
- raise
1802
- end
1803
- end
1804
-
1805
- def format(format, *args)
1806
- Lisp.format(format, *args)
1807
- end
1808
-
1809
- end #module Lisp
1810
-
1811
-
1812
-
1813
- # _____ _
1814
- # |_ _|__ ___| |_
1815
- # | |/ _ \/ __| __|
1816
- # | | __/\__ \ |_
1817
- # |_|\___||___/\__|
1818
- #
1819
-
1820
- =begin test
1821
-
1822
- require 'test/unit'
1823
-
1824
- class FormatTest < Test::Unit::TestCase
1825
-
1826
- def test_decimal
1827
- assert( Lisp.format("~D", 1) == "1" )
1828
- end
1829
-
1830
- def test_decimal_params
1831
- assert( Lisp.format("~5,'-D~6D", 1, 2) == "----1 2" )
1832
- end
1833
-
1834
- def test_decimal_modifiers
1835
- assert( Lisp.format("~5,'-,'.:@D~@D", 1013, 2) == "+1.013+2" )
1836
- assert( Lisp.format("~7,,,2:@D~@D", 1013, 2) == " +10,13+2" )
1837
- end
1838
-
1839
- # Tests for ~v, ~V, ~#
1840
-
1841
- end
1842
-
1843
- =end