cairo 1.6.1-x86-mswin32 → 1.7.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of cairo might be problematic. Click here for more details.

Files changed (410) hide show
  1. data/ChangeLog +285 -0
  2. data/NEWS +33 -0
  3. data/README +15 -4
  4. data/Rakefile +3 -0
  5. data/cairo/bin/libcairo-2.dll +0 -0
  6. data/cairo/bin/libpng12-0.dll +0 -0
  7. data/cairo/include/{libpng13/png.h → png.h} +285 -135
  8. data/cairo/include/{libpng13/pngconf.h → pngconf.h} +116 -72
  9. data/cairo/lib/cairo.lib +0 -0
  10. data/cairo/lib/libcairo.dll.a +0 -0
  11. data/cairo/lib/libpng.def +361 -371
  12. data/cairo/lib/libpng.lib +0 -0
  13. data/cairo/lib/libpng12.dll.a +0 -0
  14. data/cairo/lib/pkgconfig/cairo-pdf.pc +1 -1
  15. data/cairo/lib/pkgconfig/cairo-png.pc +2 -2
  16. data/cairo/lib/pkgconfig/cairo-ps.pc +1 -1
  17. data/cairo/lib/pkgconfig/cairo-svg.pc +1 -1
  18. data/cairo/lib/pkgconfig/cairo-win32-font.pc +1 -1
  19. data/cairo/lib/pkgconfig/cairo-win32.pc +1 -1
  20. data/cairo/lib/pkgconfig/cairo.pc +2 -2
  21. data/cairo/lib/pkgconfig/libpng.pc +10 -14
  22. data/cairo/lib/pkgconfig/libpng12.pc +10 -0
  23. data/cairo/make/{cairo-1.6.4-1.sh → cairo-1.6.4-2.sh} +3 -3
  24. data/cairo/make/libpng-1.2.29.sh +35 -0
  25. data/cairo/manifest/cairo-1.6.4-2.mft +6 -0
  26. data/cairo/manifest/{cairo-dev-1.6.4-1.mft → cairo-dev-1.6.4-2.mft} +2 -2
  27. data/cairo/manifest/libpng-1.2.29.mft +2 -0
  28. data/cairo/manifest/libpng-dev-1.2.29.mft +12 -0
  29. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING +0 -0
  30. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING-LGPL-2.1 +0 -0
  31. data/cairo/share/doc/{cairo-1.6.4-1 → cairo-1.6.4-2}/COPYING-MPL-1.1 +0 -0
  32. data/cairo/share/man/man3/libpng.3 +3680 -0
  33. data/cairo/share/man/man3/libpngpf.3 +274 -0
  34. data/cairo/share/man/man5/png.5 +74 -0
  35. data/doc/en/cairo-antialias.html +0 -3
  36. data/doc/en/cairo-clip-not-representable-error.html +0 -3
  37. data/doc/en/cairo-color-base.html +0 -3
  38. data/doc/en/cairo-color-cmyk.html +0 -3
  39. data/doc/en/cairo-color-hsv.html +0 -3
  40. data/doc/en/cairo-color-rgb.html +0 -3
  41. data/doc/en/cairo-color-x11.html +0 -3
  42. data/doc/en/cairo-color.html +0 -3
  43. data/doc/en/cairo-content.html +0 -3
  44. data/doc/en/cairo-context-blur.html +0 -3
  45. data/doc/en/cairo-context-circle.html +0 -3
  46. data/doc/en/cairo-context-color.html +0 -3
  47. data/doc/en/cairo-context-path.html +0 -3
  48. data/doc/en/cairo-context-rectangle.html +0 -3
  49. data/doc/en/cairo-context-triangle.html +0 -3
  50. data/doc/en/cairo-context.html +119 -102
  51. data/doc/en/cairo-error.html +0 -3
  52. data/doc/en/cairo-extend.html +0 -3
  53. data/doc/en/cairo-file-not-found.html +0 -3
  54. data/doc/en/cairo-fill-rule.html +0 -3
  55. data/doc/en/cairo-filter.html +0 -3
  56. data/doc/en/cairo-font-extents.html +67 -12
  57. data/doc/en/cairo-font-face.html +0 -3
  58. data/doc/en/cairo-font-options.html +26 -14
  59. data/doc/en/cairo-font-slant.html +0 -3
  60. data/doc/en/cairo-font-type-mismatch.html +47 -0
  61. data/doc/en/cairo-font-weight.html +0 -3
  62. data/doc/en/cairo-format.html +0 -3
  63. data/doc/en/cairo-glyph.html +0 -3
  64. data/doc/en/cairo-gradient-pattern.html +0 -3
  65. data/doc/en/cairo-hint-metrics.html +0 -3
  66. data/doc/en/cairo-hint-style.html +0 -3
  67. data/doc/en/cairo-image-surface.html +0 -3
  68. data/doc/en/cairo-invalid-clusters.html +47 -0
  69. data/doc/en/cairo-invalid-content-error.html +0 -3
  70. data/doc/en/cairo-invalid-dash-error.html +0 -3
  71. data/doc/en/cairo-invalid-dsc-comment-error.html +0 -3
  72. data/doc/en/cairo-invalid-format-error.html +0 -3
  73. data/doc/en/cairo-invalid-index-error.html +0 -3
  74. data/doc/en/cairo-invalid-matrix-error.html +0 -3
  75. data/doc/en/cairo-invalid-path-data-error.html +0 -3
  76. data/doc/en/cairo-invalid-pop-group-error.html +0 -3
  77. data/doc/en/cairo-invalid-restore-error.html +0 -3
  78. data/doc/en/cairo-invalid-slant.html +47 -0
  79. data/doc/en/cairo-invalid-status-error.html +0 -3
  80. data/doc/en/cairo-invalid-stride-error.html +0 -3
  81. data/doc/en/cairo-invalid-string-error.html +0 -3
  82. data/doc/en/cairo-invalid-visual-error.html +0 -3
  83. data/doc/en/cairo-invalid-weight.html +47 -0
  84. data/doc/en/cairo-lcd-filter.html +39 -0
  85. data/doc/en/cairo-line-cap.html +0 -3
  86. data/doc/en/cairo-line-join.html +0 -3
  87. data/doc/en/cairo-linear-pattern.html +0 -3
  88. data/doc/en/cairo-matrix.html +43 -41
  89. data/doc/en/cairo-negative-count.html +47 -0
  90. data/doc/en/cairo-no-current-point-error.html +0 -3
  91. data/doc/en/cairo-null-pointer-error.html +0 -3
  92. data/doc/en/cairo-operator.html +0 -3
  93. data/doc/en/cairo-paper-parse-error.html +0 -3
  94. data/doc/en/cairo-paper-unknown-paper-name.html +0 -3
  95. data/doc/en/cairo-paper-unknown-unit.html +0 -3
  96. data/doc/en/cairo-paper-unrecognized-paper-description.html +0 -3
  97. data/doc/en/cairo-paper.html +0 -3
  98. data/doc/en/cairo-path-close-path.html +0 -3
  99. data/doc/en/cairo-path-curve-to.html +0 -3
  100. data/doc/en/cairo-path-data-type.html +0 -3
  101. data/doc/en/cairo-path-data.html +0 -3
  102. data/doc/en/cairo-path-line-to.html +0 -3
  103. data/doc/en/cairo-path-move-to.html +0 -3
  104. data/doc/en/cairo-path.html +0 -3
  105. data/doc/en/cairo-pattern-type-mismatch-error.html +0 -3
  106. data/doc/en/cairo-pattern.html +0 -3
  107. data/doc/en/cairo-pdf-surface.html +0 -3
  108. data/doc/en/cairo-point.html +0 -3
  109. data/doc/en/cairo-ps-level.html +0 -3
  110. data/doc/en/cairo-ps-surface.html +0 -3
  111. data/doc/en/cairo-quartz-image-surface.html +0 -3
  112. data/doc/en/cairo-quartz-surface.html +0 -3
  113. data/doc/en/cairo-radial-pattern.html +0 -3
  114. data/doc/en/cairo-read-error.html +0 -3
  115. data/doc/en/cairo-rectangle.html +0 -3
  116. data/doc/en/cairo-scaled-font.html +13 -6
  117. data/doc/en/cairo-solid-pattern.html +0 -3
  118. data/doc/en/cairo-subpixel-order.html +0 -3
  119. data/doc/en/cairo-surface-finished-error.html +0 -3
  120. data/doc/en/cairo-surface-pattern.html +0 -3
  121. data/doc/en/cairo-surface-type-mismatch-error.html +0 -3
  122. data/doc/en/cairo-surface.html +22 -15
  123. data/doc/en/cairo-svg-surface.html +0 -3
  124. data/doc/en/cairo-svg-version.html +0 -3
  125. data/doc/en/cairo-temp-file-error.html +0 -3
  126. data/doc/en/cairo-text-cluster.html +84 -0
  127. data/doc/en/cairo-text-extents.html +78 -13
  128. data/doc/en/cairo-toy-font-face.html +67 -0
  129. data/doc/en/cairo-user-font-error.html +47 -0
  130. data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +94 -0
  131. data/doc/en/cairo-user-font-face.html +72 -0
  132. data/doc/en/cairo-user-font-immutable.html +47 -0
  133. data/doc/en/cairo-win32-printing-surface.html +0 -3
  134. data/doc/en/cairo-win32-surface.html +0 -3
  135. data/doc/en/cairo-write-error.html +0 -3
  136. data/doc/en/cairo.html +92 -80
  137. data/doc/en/index.html +327 -240
  138. data/doc/ja/cairo-clip-not-representable-error.html +1 -1
  139. data/doc/ja/cairo-color-base.html +1 -1
  140. data/doc/ja/cairo-color-cmyk.html +9 -9
  141. data/doc/ja/cairo-color-hsv.html +8 -8
  142. data/doc/ja/cairo-color-rgb.html +9 -9
  143. data/doc/ja/cairo-color.html +8 -8
  144. data/doc/ja/cairo-context-circle.html +1 -1
  145. data/doc/ja/cairo-context-color.html +1 -1
  146. data/doc/ja/cairo-context-path.html +2 -2
  147. data/doc/ja/cairo-context.html +435 -342
  148. data/doc/ja/cairo-font-extents.html +69 -15
  149. data/doc/ja/cairo-font-face.html +3 -3
  150. data/doc/ja/cairo-font-options.html +37 -12
  151. data/doc/ja/cairo-font-slant.html +1 -1
  152. data/doc/ja/cairo-font-type-mismatch.html +52 -0
  153. data/doc/ja/cairo-glyph.html +5 -5
  154. data/doc/ja/cairo-gradient-pattern.html +6 -6
  155. data/doc/ja/cairo-image-surface.html +8 -8
  156. data/doc/ja/cairo-invalid-clusters.html +55 -0
  157. data/doc/ja/cairo-invalid-restore-error.html +1 -1
  158. data/doc/ja/cairo-invalid-slant.html +57 -0
  159. data/doc/ja/cairo-invalid-weight.html +57 -0
  160. data/doc/ja/cairo-lcd-filter.html +63 -0
  161. data/doc/ja/cairo-line-join.html +1 -1
  162. data/doc/ja/cairo-linear-pattern.html +2 -2
  163. data/doc/ja/cairo-matrix.html +35 -24
  164. data/doc/ja/cairo-negative-count.html +52 -0
  165. data/doc/ja/cairo-paper-unknown-paper-name.html +2 -2
  166. data/doc/ja/cairo-paper-unknown-unit.html +2 -2
  167. data/doc/ja/cairo-paper-unrecognized-paper-description.html +1 -1
  168. data/doc/ja/cairo-paper.html +12 -12
  169. data/doc/ja/cairo-path-close-path.html +1 -1
  170. data/doc/ja/cairo-path-curve-to.html +1 -1
  171. data/doc/ja/cairo-path-data.html +8 -8
  172. data/doc/ja/cairo-path-line-to.html +1 -1
  173. data/doc/ja/cairo-path-move-to.html +1 -1
  174. data/doc/ja/cairo-path.html +21 -21
  175. data/doc/ja/cairo-pattern.html +4 -4
  176. data/doc/ja/cairo-pdf-surface.html +2 -2
  177. data/doc/ja/cairo-point.html +5 -5
  178. data/doc/ja/cairo-ps-level.html +2 -2
  179. data/doc/ja/cairo-ps-surface.html +6 -6
  180. data/doc/ja/cairo-quartz-image-surface.html +2 -2
  181. data/doc/ja/cairo-quartz-surface.html +3 -3
  182. data/doc/ja/cairo-radial-pattern.html +2 -2
  183. data/doc/ja/cairo-rectangle.html +5 -5
  184. data/doc/ja/cairo-scaled-font.html +53 -17
  185. data/doc/ja/cairo-solid-pattern.html +3 -3
  186. data/doc/ja/cairo-surface-pattern.html +2 -2
  187. data/doc/ja/cairo-surface.html +58 -36
  188. data/doc/ja/cairo-svg-surface.html +4 -4
  189. data/doc/ja/cairo-svg-version.html +2 -2
  190. data/doc/ja/cairo-text-cluster.html +102 -0
  191. data/doc/ja/cairo-text-extents.html +84 -22
  192. data/doc/ja/cairo-toy-font-face.html +107 -0
  193. data/doc/ja/cairo-user-font-error.html +55 -0
  194. data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +155 -0
  195. data/doc/ja/cairo-user-font-face.html +268 -0
  196. data/doc/ja/cairo-user-font-immutable.html +54 -0
  197. data/doc/ja/cairo-win32-printing-surface.html +3 -3
  198. data/doc/ja/cairo-win32-surface.html +4 -4
  199. data/doc/ja/cairo.html +110 -77
  200. data/doc/ja/index.html +292 -205
  201. data/extconf.rb +3 -1
  202. data/misc/update-colors.rb +0 -0
  203. data/pkg-config.rb +54 -28
  204. data/samples/agg/aa_test.rb +0 -0
  205. data/samples/blur.rb +0 -0
  206. data/samples/png.rb +0 -0
  207. data/samples/scalable.rb +0 -0
  208. data/samples/text-on-path.rb +0 -0
  209. data/samples/text2.rb +0 -0
  210. data/src/cairo.def +8 -0
  211. data/src/cairo.so +0 -0
  212. data/src/lib/cairo.rb +12 -7
  213. data/src/lib/cairo/constants.rb +1 -0
  214. data/src/libruby-cairo.a +0 -0
  215. data/src/rb_cairo.c +25 -3
  216. data/src/rb_cairo.h +29 -18
  217. data/src/rb_cairo_constants.c +39 -10
  218. data/src/rb_cairo_context.c +156 -15
  219. data/src/rb_cairo_exception.c +143 -3
  220. data/src/rb_cairo_font_extents.c +81 -6
  221. data/src/rb_cairo_font_face.c +646 -4
  222. data/src/rb_cairo_font_options.c +24 -2
  223. data/src/rb_cairo_glyph.c +5 -3
  224. data/src/rb_cairo_matrix.c +17 -1
  225. data/src/rb_cairo_pattern.c +4 -4
  226. data/src/rb_cairo_private.c +169 -5
  227. data/src/rb_cairo_private.h +45 -3
  228. data/src/rb_cairo_scaled_font.c +61 -3
  229. data/src/rb_cairo_surface.c +174 -59
  230. data/src/rb_cairo_text_cluster.c +151 -0
  231. data/src/rb_cairo_text_extents.c +85 -2
  232. data/test-unit/Rakefile +30 -0
  233. data/test-unit/bin/testrb +5 -0
  234. data/test-unit/lib/test/unit.rb +280 -0
  235. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  236. data/test-unit/lib/test/unit/assertions.rb +722 -0
  237. data/test-unit/lib/test/unit/attribute.rb +125 -0
  238. data/test-unit/lib/test/unit/autorunner.rb +254 -0
  239. data/test-unit/lib/test/unit/collector.rb +43 -0
  240. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  241. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  242. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  243. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  244. data/test-unit/lib/test/unit/color.rb +61 -0
  245. data/test-unit/lib/test/unit/diff.rb +524 -0
  246. data/test-unit/lib/test/unit/error.rb +124 -0
  247. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  248. data/test-unit/lib/test/unit/failure.rb +110 -0
  249. data/test-unit/lib/test/unit/fixture.rb +185 -0
  250. data/test-unit/lib/test/unit/notification.rb +125 -0
  251. data/test-unit/lib/test/unit/omission.rb +143 -0
  252. data/test-unit/lib/test/unit/pending.rb +146 -0
  253. data/test-unit/lib/test/unit/priority.rb +146 -0
  254. data/test-unit/lib/test/unit/runner/console.rb +46 -0
  255. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  256. data/test-unit/lib/test/unit/testcase.rb +281 -0
  257. data/test-unit/lib/test/unit/testresult.rb +89 -0
  258. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  259. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  260. data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
  261. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  262. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  263. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  264. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  265. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  266. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  267. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  268. data/test-unit/lib/test/unit/version.rb +7 -0
  269. data/test-unit/sample/adder.rb +13 -0
  270. data/test-unit/sample/subtracter.rb +12 -0
  271. data/test-unit/sample/tc_adder.rb +18 -0
  272. data/test-unit/sample/tc_subtracter.rb +18 -0
  273. data/test-unit/sample/ts_examples.rb +7 -0
  274. data/test-unit/test/collector/test_descendant.rb +135 -0
  275. data/test-unit/test/collector/test_dir.rb +406 -0
  276. data/test-unit/test/collector/test_load.rb +333 -0
  277. data/test-unit/test/collector/test_objectspace.rb +98 -0
  278. data/test-unit/test/run-test.rb +13 -0
  279. data/test-unit/test/test_assertions.rb +693 -0
  280. data/test-unit/test/test_attribute.rb +86 -0
  281. data/test-unit/test/test_color.rb +37 -0
  282. data/test-unit/test/test_diff.rb +477 -0
  283. data/test-unit/test/test_emacs_runner.rb +60 -0
  284. data/test-unit/test/test_error.rb +26 -0
  285. data/test-unit/test/test_failure.rb +33 -0
  286. data/test-unit/test/test_fixture.rb +252 -0
  287. data/test-unit/test/test_notification.rb +33 -0
  288. data/test-unit/test/test_omission.rb +81 -0
  289. data/test-unit/test/test_pending.rb +70 -0
  290. data/test-unit/test/test_priority.rb +89 -0
  291. data/test-unit/test/test_testcase.rb +430 -0
  292. data/test-unit/test/test_testresult.rb +113 -0
  293. data/test-unit/test/test_testsuite.rb +129 -0
  294. data/test-unit/test/testunit_test_util.rb +14 -0
  295. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  296. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  297. data/test-unit/test/util/test_observable.rb +102 -0
  298. data/test-unit/test/util/test_procwrapper.rb +36 -0
  299. data/test/cairo-test-utils.rb +18 -0
  300. data/test/run-test.rb +14 -1
  301. data/test/test_constants.rb +19 -0
  302. data/test/test_context.rb +117 -0
  303. data/test/test_exception.rb +27 -0
  304. data/test/test_font_extents.rb +36 -0
  305. data/test/test_font_face.rb +244 -0
  306. data/test/test_font_options.rb +32 -0
  307. data/test/test_pkg_config.rb +3 -2
  308. data/test/test_scaled_font.rb +34 -0
  309. data/test/test_surface.rb +41 -0
  310. data/test/test_text_cluster.rb +32 -0
  311. data/test/test_text_extents.rb +40 -0
  312. data/test/test_text_to_glyphs_data.rb +47 -0
  313. metadata +129 -109
  314. data/cairo/bin/libpng13.dll +0 -0
  315. data/cairo/lib/libpng13.dll.a +0 -0
  316. data/cairo/lib/pkgconfig/libpng13.pc +0 -14
  317. data/cairo/manifest/cairo-1.6.4-1.mft +0 -6
  318. data/cairo/manifest/libpng-dev-1.2.8.mft +0 -7
  319. data/doc/en/cairo-antialias.rd +0 -16
  320. data/doc/en/cairo-clip-not-representable-error.rd +0 -17
  321. data/doc/en/cairo-color-base.rd +0 -38
  322. data/doc/en/cairo-color-cmyk.rd +0 -107
  323. data/doc/en/cairo-color-hsv.rd +0 -91
  324. data/doc/en/cairo-color-rgb.rd +0 -95
  325. data/doc/en/cairo-color-x11.rd +0 -151
  326. data/doc/en/cairo-color.rd +0 -213
  327. data/doc/en/cairo-content.rd +0 -15
  328. data/doc/en/cairo-context-blur.rd +0 -15
  329. data/doc/en/cairo-context-circle.rd +0 -15
  330. data/doc/en/cairo-context-color.rd +0 -15
  331. data/doc/en/cairo-context-path.rd +0 -19
  332. data/doc/en/cairo-context-rectangle.rd +0 -15
  333. data/doc/en/cairo-context-triangle.rd +0 -15
  334. data/doc/en/cairo-context.rd +0 -491
  335. data/doc/en/cairo-error.rd +0 -16
  336. data/doc/en/cairo-extend.rd +0 -16
  337. data/doc/en/cairo-file-not-found.rd +0 -17
  338. data/doc/en/cairo-fill-rule.rd +0 -14
  339. data/doc/en/cairo-filter.rd +0 -18
  340. data/doc/en/cairo-font-extents.rd +0 -40
  341. data/doc/en/cairo-font-face.rd +0 -14
  342. data/doc/en/cairo-font-options.rd +0 -94
  343. data/doc/en/cairo-font-slant.rd +0 -15
  344. data/doc/en/cairo-font-weight.rd +0 -14
  345. data/doc/en/cairo-format.rd +0 -22
  346. data/doc/en/cairo-glyph.rd +0 -62
  347. data/doc/en/cairo-gradient-pattern.rd +0 -41
  348. data/doc/en/cairo-hint-metrics.rd +0 -15
  349. data/doc/en/cairo-hint-style.rd +0 -17
  350. data/doc/en/cairo-image-surface.rd +0 -47
  351. data/doc/en/cairo-invalid-content-error.rd +0 -17
  352. data/doc/en/cairo-invalid-dash-error.rd +0 -17
  353. data/doc/en/cairo-invalid-dsc-comment-error.rd +0 -17
  354. data/doc/en/cairo-invalid-format-error.rd +0 -17
  355. data/doc/en/cairo-invalid-index-error.rd +0 -17
  356. data/doc/en/cairo-invalid-matrix-error.rd +0 -17
  357. data/doc/en/cairo-invalid-path-data-error.rd +0 -17
  358. data/doc/en/cairo-invalid-pop-group-error.rd +0 -17
  359. data/doc/en/cairo-invalid-restore-error.rd +0 -17
  360. data/doc/en/cairo-invalid-status-error.rd +0 -17
  361. data/doc/en/cairo-invalid-stride-error.rd +0 -17
  362. data/doc/en/cairo-invalid-string-error.rd +0 -17
  363. data/doc/en/cairo-invalid-visual-error.rd +0 -17
  364. data/doc/en/cairo-line-cap.rd +0 -15
  365. data/doc/en/cairo-line-join.rd +0 -15
  366. data/doc/en/cairo-linear-pattern.rd +0 -28
  367. data/doc/en/cairo-matrix.rd +0 -186
  368. data/doc/en/cairo-no-current-point-error.rd +0 -17
  369. data/doc/en/cairo-null-pointer-error.rd +0 -17
  370. data/doc/en/cairo-operator.rd +0 -26
  371. data/doc/en/cairo-paper-parse-error.rd +0 -17
  372. data/doc/en/cairo-paper-unknown-paper-name.rd +0 -30
  373. data/doc/en/cairo-paper-unknown-unit.rd +0 -30
  374. data/doc/en/cairo-paper-unrecognized-paper-description.rd +0 -30
  375. data/doc/en/cairo-paper.rd +0 -141
  376. data/doc/en/cairo-path-close-path.rd +0 -21
  377. data/doc/en/cairo-path-curve-to.rd +0 -21
  378. data/doc/en/cairo-path-data-type.rd +0 -16
  379. data/doc/en/cairo-path-data.rd +0 -62
  380. data/doc/en/cairo-path-line-to.rd +0 -21
  381. data/doc/en/cairo-path-move-to.rd +0 -21
  382. data/doc/en/cairo-path.rd +0 -109
  383. data/doc/en/cairo-pattern-type-mismatch-error.rd +0 -17
  384. data/doc/en/cairo-pattern.rd +0 -62
  385. data/doc/en/cairo-pdf-surface.rd +0 -27
  386. data/doc/en/cairo-point.rd +0 -42
  387. data/doc/en/cairo-ps-level.rd +0 -24
  388. data/doc/en/cairo-ps-surface.rd +0 -55
  389. data/doc/en/cairo-quartz-image-surface.rd +0 -27
  390. data/doc/en/cairo-quartz-surface.rd +0 -27
  391. data/doc/en/cairo-radial-pattern.rd +0 -28
  392. data/doc/en/cairo-read-error.rd +0 -17
  393. data/doc/en/cairo-rectangle.rd +0 -54
  394. data/doc/en/cairo-scaled-font.rd +0 -50
  395. data/doc/en/cairo-solid-pattern.rd +0 -31
  396. data/doc/en/cairo-subpixel-order.rd +0 -17
  397. data/doc/en/cairo-surface-finished-error.rd +0 -17
  398. data/doc/en/cairo-surface-pattern.rd +0 -27
  399. data/doc/en/cairo-surface-type-mismatch-error.rd +0 -17
  400. data/doc/en/cairo-surface.rd +0 -72
  401. data/doc/en/cairo-svg-surface.rd +0 -44
  402. data/doc/en/cairo-svg-version.rd +0 -24
  403. data/doc/en/cairo-temp-file-error.rd +0 -17
  404. data/doc/en/cairo-text-extents.rd +0 -44
  405. data/doc/en/cairo-win32-printing-surface.rd +0 -27
  406. data/doc/en/cairo-win32-surface.rd +0 -31
  407. data/doc/en/cairo-write-error.rd +0 -17
  408. data/doc/en/cairo.rd +0 -95
  409. data/doc/en/index.rd +0 -1051
  410. data/samples/agg/aa_demo.rb +0 -47
@@ -0,0 +1,14 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+
10
+ # Thrown by Test::Unit::Assertions when an assertion fails.
11
+ class AssertionFailedError < StandardError
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,722 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit/assertionfailederror'
6
+ require 'test/unit/util/backtracefilter'
7
+ require 'test/unit/diff'
8
+
9
+ module Test
10
+ module Unit
11
+
12
+ ##
13
+ # Test::Unit::Assertions contains the standard Test::Unit assertions.
14
+ # Assertions is included in Test::Unit::TestCase.
15
+ #
16
+ # To include it in your own code and use its functionality, you simply
17
+ # need to rescue Test::Unit::AssertionFailedError. Additionally you may
18
+ # override add_assertion to get notified whenever an assertion is made.
19
+ #
20
+ # Notes:
21
+ # * The message to each assertion, if given, will be propagated with the
22
+ # failure.
23
+ # * It is easy to add your own assertions based on assert_block().
24
+ #
25
+ # = Example Custom Assertion
26
+ #
27
+ # def deny(boolean, message = nil)
28
+ # message = build_message message, '<?> is not false or nil.', boolean
29
+ # assert_block message do
30
+ # not boolean
31
+ # end
32
+ # end
33
+
34
+ module Assertions
35
+
36
+ ##
37
+ # The assertion upon which all other assertions are based. Passes if the
38
+ # block yields true.
39
+ #
40
+ # Example:
41
+ # assert_block "Couldn't do the thing" do
42
+ # do_the_thing
43
+ # end
44
+
45
+ public
46
+ def assert_block(message="assert_block failed.") # :yields:
47
+ _wrap_assertion do
48
+ if (! yield)
49
+ raise AssertionFailedError.new(message.to_s)
50
+ end
51
+ end
52
+ end
53
+
54
+ ##
55
+ # Asserts that +boolean+ is not false or nil.
56
+ #
57
+ # Example:
58
+ # assert [1, 2].include?(5)
59
+
60
+ public
61
+ def assert(boolean, message=nil)
62
+ _wrap_assertion do
63
+ assert_block("assert should not be called with a block.") { !block_given? }
64
+ assert_block(build_message(message, "<?> is not true.", boolean)) { boolean }
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Passes if +expected+ == +actual.
70
+ #
71
+ # Note that the ordering of arguments is important, since a helpful
72
+ # error message is generated when this one fails that tells you the
73
+ # values of expected and actual.
74
+ #
75
+ # Example:
76
+ # assert_equal 'MY STRING', 'my string'.upcase
77
+
78
+ public
79
+ def assert_equal(expected, actual, message=nil)
80
+ diff = AssertionMessage.delayed_literal do
81
+ if !expected.is_a?(String) or !actual.is_a?(String)
82
+ expected = AssertionMessage.convert(expected)
83
+ actual = AssertionMessage.convert(actual)
84
+ end
85
+ diff = Diff.readable(expected, actual)
86
+ if /^[-+]/ !~ diff
87
+ diff = ""
88
+ elsif /^[ ?]/ =~ diff or /(?:.*\n){2,}/ =~ diff
89
+ diff = "\n\ndiff:\n#{diff}"
90
+ else
91
+ diff = ""
92
+ end
93
+ diff
94
+ end
95
+ full_message = build_message(message, <<EOT, expected, actual, diff)
96
+ <?> expected but was
97
+ <?>.?
98
+ EOT
99
+ assert_block(full_message) { expected == actual }
100
+ end
101
+
102
+ private
103
+ def _check_exception_class(args) # :nodoc:
104
+ args.partition do |klass|
105
+ next if klass.instance_of?(Module)
106
+ assert(Exception >= klass, "Should expect a class of exception, #{klass}")
107
+ true
108
+ end
109
+ end
110
+
111
+ private
112
+ def _expected_exception?(actual_exception, exceptions, modules) # :nodoc:
113
+ exceptions.include?(actual_exception.class) or
114
+ modules.any? {|mod| actual_exception.is_a?(mod)}
115
+ end
116
+
117
+ ##
118
+ # Passes if the block raises one of the given exceptions.
119
+ #
120
+ # Example:
121
+ # assert_raise RuntimeError, LoadError do
122
+ # raise 'Boom!!!'
123
+ # end
124
+
125
+ public
126
+ def assert_raise(*args)
127
+ _wrap_assertion do
128
+ if Module === args.last
129
+ message = ""
130
+ else
131
+ message = args.pop
132
+ end
133
+ exceptions, modules = _check_exception_class(args)
134
+ expected = args.size == 1 ? args.first : args
135
+ actual_exception = nil
136
+ full_message = build_message(message, "<?> exception expected but none was thrown.", expected)
137
+ assert_block(full_message) do
138
+ begin
139
+ yield
140
+ rescue Exception => actual_exception
141
+ break
142
+ end
143
+ false
144
+ end
145
+ full_message = build_message(message, "<?> exception expected but was\n?", expected, actual_exception)
146
+ assert_block(full_message) {_expected_exception?(actual_exception, exceptions, modules)}
147
+ actual_exception
148
+ end
149
+ end
150
+
151
+ ##
152
+ # Alias of assert_raise.
153
+ #
154
+ # Will be deprecated in 1.9, and removed in 2.0.
155
+
156
+ public
157
+ def assert_raises(*args, &block)
158
+ assert_raise(*args, &block)
159
+ end
160
+
161
+ ##
162
+ # Passes if +object+ .instance_of? +klass+
163
+ #
164
+ # Example:
165
+ # assert_instance_of String, 'foo'
166
+
167
+ public
168
+ def assert_instance_of(klass, object, message="")
169
+ _wrap_assertion do
170
+ assert_equal(Class, klass.class, "assert_instance_of takes a Class as its first argument")
171
+ full_message = build_message(message, <<EOT, object, klass, object.class)
172
+ <?> expected to be an instance of
173
+ <?> but was
174
+ <?>.
175
+ EOT
176
+ assert_block(full_message){object.instance_of?(klass)}
177
+ end
178
+ end
179
+
180
+ ##
181
+ # Passes if +object+ is nil.
182
+ #
183
+ # Example:
184
+ # assert_nil [1, 2].uniq!
185
+
186
+ public
187
+ def assert_nil(object, message="")
188
+ full_message = build_message(message, <<EOT, object)
189
+ <?> expected to be nil.
190
+ EOT
191
+ assert_block(full_message) { object.nil? }
192
+ end
193
+
194
+ ##
195
+ # Passes if +object+ .kind_of? +klass+
196
+ #
197
+ # Example:
198
+ # assert_kind_of Object, 'foo'
199
+
200
+ public
201
+ def assert_kind_of(klass, object, message="")
202
+ _wrap_assertion do
203
+ assert(klass.kind_of?(Module), "The first parameter to assert_kind_of should be a kind_of Module.")
204
+ full_message = build_message(message, "<?>\nexpected to be kind_of\\?\n<?> but was\n<?>.", object, klass, object.class)
205
+ assert_block(full_message){object.kind_of?(klass)}
206
+ end
207
+ end
208
+
209
+ ##
210
+ # Passes if +object+ .respond_to? +method+
211
+ #
212
+ # Example:
213
+ # assert_respond_to 'bugbear', :slice
214
+
215
+ public
216
+ def assert_respond_to(object, method, message="")
217
+ _wrap_assertion do
218
+ full_message = build_message(nil, "<?>\ngiven as the method name argument to #assert_respond_to must be a Symbol or #respond_to\\?(:to_str).", method)
219
+
220
+ assert_block(full_message) do
221
+ method.kind_of?(Symbol) || method.respond_to?(:to_str)
222
+ end
223
+ full_message = build_message(message, <<EOT, object, object.class, method)
224
+ <?>
225
+ of type <?>
226
+ expected to respond_to\\?<?>.
227
+ EOT
228
+ assert_block(full_message) { object.respond_to?(method) }
229
+ end
230
+ end
231
+
232
+ ##
233
+ # Passes if +string+ =~ +pattern+.
234
+ #
235
+ # Example:
236
+ # assert_match(/\d+/, 'five, 6, seven')
237
+
238
+ public
239
+ def assert_match(pattern, string, message="")
240
+ _wrap_assertion do
241
+ pattern = case(pattern)
242
+ when String
243
+ Regexp.new(Regexp.escape(pattern))
244
+ else
245
+ pattern
246
+ end
247
+ full_message = build_message(message, "<?> expected to be =~\n<?>.", string, pattern)
248
+ assert_block(full_message) { string =~ pattern }
249
+ end
250
+ end
251
+
252
+ ##
253
+ # Passes if +actual+ .equal? +expected+ (i.e. they are the same
254
+ # instance).
255
+ #
256
+ # Example:
257
+ # o = Object.new
258
+ # assert_same o, o
259
+
260
+ public
261
+ def assert_same(expected, actual, message="")
262
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
263
+ <?>
264
+ with id <?> expected to be equal\\? to
265
+ <?>
266
+ with id <?>.
267
+ EOT
268
+ assert_block(full_message) { actual.equal?(expected) }
269
+ end
270
+
271
+ ##
272
+ # Compares the +object1+ with +object2+ using +operator+.
273
+ #
274
+ # Passes if object1.__send__(operator, object2) is true.
275
+ #
276
+ # Example:
277
+ # assert_operator 5, :>=, 4
278
+
279
+ public
280
+ def assert_operator(object1, operator, object2, message="")
281
+ _wrap_assertion do
282
+ full_message = build_message(nil, "<?>\ngiven as the operator for #assert_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
283
+ assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
284
+ full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
285
+ <?> expected to be
286
+ ?
287
+ <?>.
288
+ EOT
289
+ assert_block(full_message) { object1.__send__(operator, object2) }
290
+ end
291
+ end
292
+
293
+ ##
294
+ # Passes if block does not raise an exception.
295
+ #
296
+ # Example:
297
+ # assert_nothing_raised do
298
+ # [1, 2].uniq
299
+ # end
300
+
301
+ public
302
+ def assert_nothing_raised(*args)
303
+ _wrap_assertion do
304
+ if Module === args.last
305
+ message = ""
306
+ else
307
+ message = args.pop
308
+ end
309
+ exceptions, modules = _check_exception_class(args)
310
+ begin
311
+ yield
312
+ rescue Exception => e
313
+ if ((args.empty? && !e.instance_of?(AssertionFailedError)) ||
314
+ _expected_exception?(e, exceptions, modules))
315
+ assert_block(build_message(message, "Exception raised:\n?", e)){false}
316
+ else
317
+ raise
318
+ end
319
+ end
320
+ nil
321
+ end
322
+ end
323
+
324
+ ##
325
+ # Flunk always fails.
326
+ #
327
+ # Example:
328
+ # flunk 'Not done testing yet.'
329
+
330
+ public
331
+ def flunk(message="Flunked")
332
+ assert_block(build_message(message)){false}
333
+ end
334
+
335
+ ##
336
+ # Passes if ! +actual+ .equal? +expected+
337
+ #
338
+ # Example:
339
+ # assert_not_same Object.new, Object.new
340
+
341
+ public
342
+ def assert_not_same(expected, actual, message="")
343
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
344
+ <?>
345
+ with id <?> expected to not be equal\\? to
346
+ <?>
347
+ with id <?>.
348
+ EOT
349
+ assert_block(full_message) { !actual.equal?(expected) }
350
+ end
351
+
352
+ ##
353
+ # Passes if +expected+ != +actual+
354
+ #
355
+ # Example:
356
+ # assert_not_equal 'some string', 5
357
+
358
+ public
359
+ def assert_not_equal(expected, actual, message="")
360
+ full_message = build_message(message, "<?> expected to be != to\n<?>.", expected, actual)
361
+ assert_block(full_message) { expected != actual }
362
+ end
363
+
364
+ ##
365
+ # Passes if ! +object+ .nil?
366
+ #
367
+ # Example:
368
+ # assert_not_nil '1 two 3'.sub!(/two/, '2')
369
+
370
+ public
371
+ def assert_not_nil(object, message="")
372
+ full_message = build_message(message, "<?> expected to not be nil.", object)
373
+ assert_block(full_message){!object.nil?}
374
+ end
375
+
376
+ ##
377
+ # Passes if +regexp+ !~ +string+
378
+ #
379
+ # Example:
380
+ # assert_no_match(/two/, 'one 2 three')
381
+
382
+ public
383
+ def assert_no_match(regexp, string, message="")
384
+ _wrap_assertion do
385
+ assert_instance_of(Regexp, regexp, "The first argument to assert_no_match should be a Regexp.")
386
+ full_message = build_message(message, "<?> expected to not match\n<?>.", regexp, string)
387
+ assert_block(full_message) { regexp !~ string }
388
+ end
389
+ end
390
+
391
+ UncaughtThrow = {
392
+ NameError => /^uncaught throw \`(.+)\'$/,
393
+ ArgumentError => /^uncaught throw (.+)$/,
394
+ ThreadError => /^uncaught throw \`(.+)\' in thread /
395
+ } #`
396
+
397
+ ##
398
+ # Passes if the block throws +expected_object+
399
+ #
400
+ # Example:
401
+ # assert_throws :done do
402
+ # throw :done
403
+ # end
404
+
405
+ public
406
+ def assert_throws(expected_object, message="", &proc)
407
+ _wrap_assertion do
408
+ begin
409
+ catch([]) {}
410
+ rescue TypeError
411
+ assert_instance_of(Symbol, expected_object,
412
+ "assert_throws expects the symbol that should be thrown for its first argument")
413
+ end
414
+ assert_block("Should have passed a block to assert_throws.") do
415
+ block_given?
416
+ end
417
+ caught = true
418
+ begin
419
+ catch(expected_object) do
420
+ proc.call
421
+ caught = false
422
+ end
423
+ full_message = build_message(message,
424
+ "<?> should have been thrown.",
425
+ expected_object)
426
+ assert_block(full_message) {caught}
427
+ rescue NameError, ArgumentError, ThreadError => error
428
+ raise unless UncaughtThrow[error.class] =~ error.message
429
+ tag = $1
430
+ tag = tag[1..-1].intern if tag[0, 1] == ":"
431
+ full_message = build_message(message,
432
+ "<?> expected to be thrown but\n" +
433
+ "<?> was thrown.",
434
+ expected_object, tag)
435
+ flunk(full_message)
436
+ end
437
+ end
438
+ end
439
+
440
+ ##
441
+ # Passes if block does not throw anything.
442
+ #
443
+ # Example:
444
+ # assert_nothing_thrown do
445
+ # [1, 2].uniq
446
+ # end
447
+
448
+ public
449
+ def assert_nothing_thrown(message="", &proc)
450
+ _wrap_assertion do
451
+ assert(block_given?, "Should have passed a block to assert_nothing_thrown")
452
+ begin
453
+ proc.call
454
+ rescue NameError, ArgumentError, ThreadError => error
455
+ raise unless UncaughtThrow[error.class] =~ error.message
456
+ tag = $1
457
+ tag = tag[1..-1].intern if tag[0, 1] == ":"
458
+ full_message = build_message(message,
459
+ "<?> was thrown when nothing was expected",
460
+ tag)
461
+ flunk(full_message)
462
+ end
463
+ assert(true, "Expected nothing to be thrown")
464
+ end
465
+ end
466
+
467
+ ##
468
+ # Passes if +expected_float+ and +actual_float+ are equal
469
+ # within +delta+ tolerance.
470
+ #
471
+ # Example:
472
+ # assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
473
+
474
+ public
475
+ def assert_in_delta(expected_float, actual_float, delta, message="")
476
+ _wrap_assertion do
477
+ {expected_float => "first float", actual_float => "second float", delta => "delta"}.each do |float, name|
478
+ assert_respond_to(float, :to_f, "The arguments must respond to to_f; the #{name} did not")
479
+ end
480
+ assert_operator(delta, :>=, 0.0, "The delta should not be negative")
481
+ full_message = build_message(message, <<EOT, expected_float, actual_float, delta)
482
+ <?> and
483
+ <?> expected to be within
484
+ <?> of each other.
485
+ EOT
486
+ assert_block(full_message) { (expected_float.to_f - actual_float.to_f).abs <= delta.to_f }
487
+ end
488
+ end
489
+
490
+ ##
491
+ # Passes if the method send returns a true value.
492
+ #
493
+ # +send_array+ is composed of:
494
+ # * A receiver
495
+ # * A method
496
+ # * Arguments to the method
497
+ #
498
+ # Example:
499
+ # assert_send [[1, 2], :include?, 4]
500
+
501
+ public
502
+ def assert_send(send_array, message="")
503
+ _wrap_assertion do
504
+ assert_instance_of(Array, send_array, "assert_send requires an array of send information")
505
+ assert(send_array.size >= 2, "assert_send requires at least a receiver and a message name")
506
+ full_message = build_message(message, <<EOT, send_array[0], AssertionMessage.literal(send_array[1].to_s), send_array[2..-1])
507
+ <?> expected to respond to
508
+ <?(?)> with a true value.
509
+ EOT
510
+ assert_block(full_message) { send_array[0].__send__(send_array[1], *send_array[2..-1]) }
511
+ end
512
+ end
513
+
514
+ ##
515
+ # Passes if +actual+ is a boolean value.
516
+ #
517
+ # Example:
518
+ # assert_boolean(true) # -> pass
519
+ # assert_boolean(nil) # -> fail
520
+ def assert_boolean(actual, message=nil)
521
+ _wrap_assertion do
522
+ assert_block(build_message(message,
523
+ "<true> or <false> expected but was\n<?>",
524
+ actual)) do
525
+ [true, false].include?(actual)
526
+ end
527
+ end
528
+ end
529
+
530
+ ##
531
+ # Passes if +actual+ is true.
532
+ #
533
+ # Example:
534
+ # assert_true(true) # -> pass
535
+ # assert_true(:true) # -> fail
536
+ def assert_true(actual, message=nil)
537
+ _wrap_assertion do
538
+ assert_block(build_message(message,
539
+ "<true> expected but was\n<?>",
540
+ actual)) do
541
+ actual == true
542
+ end
543
+ end
544
+ end
545
+
546
+ ##
547
+ # Passes if +actual+ is false.
548
+ #
549
+ # Example:
550
+ # assert_false(false) # -> pass
551
+ # assert_false(nil) # -> fail
552
+ def assert_false(actual, message=nil)
553
+ _wrap_assertion do
554
+ assert_block(build_message(message,
555
+ "<false> expected but was\n<?>",
556
+ actual)) do
557
+ actual == false
558
+ end
559
+ end
560
+ end
561
+
562
+ ##
563
+ # Builds a failure message. +head+ is added before the +template+ and
564
+ # +arguments+ replaces the '?'s positionally in the template.
565
+
566
+ public
567
+ def build_message(head, template=nil, *arguments)
568
+ template &&= template.chomp
569
+ return AssertionMessage.new(head, template, arguments)
570
+ end
571
+
572
+ private
573
+ def _wrap_assertion
574
+ @_assertion_wrapped ||= false
575
+ unless (@_assertion_wrapped)
576
+ @_assertion_wrapped = true
577
+ begin
578
+ add_assertion
579
+ return yield
580
+ ensure
581
+ @_assertion_wrapped = false
582
+ end
583
+ else
584
+ return yield
585
+ end
586
+ end
587
+
588
+ ##
589
+ # Called whenever an assertion is made. Define this in classes that
590
+ # include Test::Unit::Assertions to record assertion counts.
591
+
592
+ private
593
+ def add_assertion
594
+ end
595
+
596
+ ##
597
+ # Select whether or not to use the pretty-printer. If this option is set
598
+ # to false before any assertions are made, pp.rb will not be required.
599
+
600
+ public
601
+ def self.use_pp=(value)
602
+ AssertionMessage.use_pp = value
603
+ end
604
+
605
+ # :stopdoc:
606
+
607
+ class AssertionMessage
608
+ @use_pp = true
609
+ class << self
610
+ attr_accessor :use_pp
611
+
612
+ def literal(value)
613
+ Literal.new(value)
614
+ end
615
+
616
+ def delayed_literal(&block)
617
+ DelayedLiteral.new(block)
618
+ end
619
+
620
+ def convert(object)
621
+ case object
622
+ when Exception
623
+ <<EOM.chop
624
+ Class: <#{convert(object.class)}>
625
+ Message: <#{convert(object.message)}>
626
+ ---Backtrace---
627
+ #{Util::BacktraceFilter.filter_backtrace(object.backtrace).join("\n")}
628
+ ---------------
629
+ EOM
630
+ else
631
+ if use_pp
632
+ begin
633
+ require 'pp' unless defined?(PP)
634
+ return PP.pp(object, '').chomp
635
+ rescue LoadError
636
+ self.use_pp = false
637
+ end
638
+ end
639
+ object.inspect
640
+ end
641
+ end
642
+ end
643
+
644
+ class Literal
645
+ def initialize(value)
646
+ @value = value
647
+ end
648
+
649
+ def inspect
650
+ @value.to_s
651
+ end
652
+ end
653
+
654
+ class DelayedLiteral
655
+ def initialize(value)
656
+ @value = value
657
+ end
658
+
659
+ def inspect
660
+ @value.call.to_s
661
+ end
662
+ end
663
+
664
+ class Template
665
+ def self.create(string)
666
+ parts = (string ? string.scan(/(?=[^\\])\?|(?:\\\?|[^\?])+/m) : [])
667
+ self.new(parts)
668
+ end
669
+
670
+ attr_reader :count
671
+
672
+ def initialize(parts)
673
+ @parts = parts
674
+ @count = parts.find_all{|e| e == '?'}.size
675
+ end
676
+
677
+ def result(parameters)
678
+ raise "The number of parameters does not match the number of substitutions." if(parameters.size != count)
679
+ params = parameters.dup
680
+ @parts.collect{|e| e == '?' ? params.shift : e.gsub(/\\\?/m, '?')}.join('')
681
+ end
682
+ end
683
+
684
+ include Util::BacktraceFilter
685
+
686
+ def initialize(head, template_string, parameters)
687
+ @head = head
688
+ @template_string = template_string
689
+ @parameters = parameters
690
+ end
691
+
692
+ def convert(object)
693
+ self.class.convert(object)
694
+ end
695
+
696
+ def template
697
+ @template ||= Template.create(@template_string)
698
+ end
699
+
700
+ def add_period(string)
701
+ (string =~ /\.\Z/ ? string : string + '.')
702
+ end
703
+
704
+ def to_s
705
+ message_parts = []
706
+ if (@head)
707
+ head = @head.to_s
708
+ unless(head.empty?)
709
+ message_parts << add_period(head)
710
+ end
711
+ end
712
+ tail = template.result(@parameters.collect{|e| convert(e)})
713
+ message_parts << tail unless(tail.empty?)
714
+ message_parts.join("\n")
715
+ end
716
+ end
717
+
718
+ # :startdoc:
719
+
720
+ end
721
+ end
722
+ end