cairo 1.8.5-x86-mingw32 → 1.10.0-x86-mingw32

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 (450) hide show
  1. data/NEWS +2 -2
  2. data/Rakefile +44 -7
  3. data/ext/cairo/cairo.def +28 -1
  4. data/ext/cairo/extconf.rb +14 -16
  5. data/ext/cairo/rb_cairo.c +4 -1
  6. data/ext/cairo/rb_cairo.h +65 -1
  7. data/ext/cairo/rb_cairo_constants.c +150 -3
  8. data/ext/cairo/rb_cairo_context.c +17 -0
  9. data/ext/cairo/rb_cairo_device.c +406 -0
  10. data/ext/cairo/rb_cairo_exception.c +83 -32
  11. data/ext/cairo/rb_cairo_io.c +166 -0
  12. data/ext/cairo/rb_cairo_io.h +44 -0
  13. data/ext/cairo/rb_cairo_matrix.c +1 -1
  14. data/ext/cairo/rb_cairo_private.h +3 -0
  15. data/ext/cairo/rb_cairo_region.c +385 -0
  16. data/ext/cairo/rb_cairo_surface.c +674 -199
  17. data/lib/1.8/cairo.so +0 -0
  18. data/lib/1.9/cairo.so +0 -0
  19. data/samples/blur.rb +2 -3
  20. data/samples/{pac2.rb → pac-nomralize.rb} +5 -6
  21. data/samples/pac-tee.rb +170 -0
  22. data/samples/pac.rb +2 -3
  23. data/samples/png.rb +2 -3
  24. data/samples/scalable.rb +2 -3
  25. data/samples/text-on-path.rb +2 -3
  26. data/samples/text2.rb +2 -3
  27. data/test/cairo-test-utils.rb +15 -0
  28. data/test/run-test.rb +5 -4
  29. data/test/test_context.rb +4 -4
  30. data/test/test_font_face.rb +34 -21
  31. data/test/test_recording_surface.rb +18 -0
  32. data/test/test_region.rb +102 -0
  33. data/test/test_script_device.rb +46 -0
  34. data/test/test_script_surface.rb +13 -0
  35. data/test/test_surface.rb +14 -4
  36. data/test/test_tee_surface.rb +32 -0
  37. data/test/test_xml_device.rb +22 -0
  38. data/test/test_xml_surface.rb +32 -0
  39. data/tmp/i386-mingw32/cairo/1.9.2/rbconfig.rb +1 -1
  40. data/vendor/local/bin/libcairo-2.dll +0 -0
  41. data/vendor/local/include/cairo/cairo-deprecated.h +1 -16
  42. data/vendor/local/include/cairo/cairo-features.h +7 -0
  43. data/vendor/local/include/cairo/cairo-ft.h +16 -9
  44. data/vendor/local/include/cairo/cairo-gobject.h +186 -0
  45. data/vendor/local/include/cairo/cairo-pdf.h +27 -1
  46. data/vendor/local/include/cairo/cairo-ps.h +1 -1
  47. data/vendor/local/include/cairo/cairo-script-interpreter.h +117 -0
  48. data/vendor/local/include/cairo/cairo-svg.h +1 -1
  49. data/vendor/local/include/cairo/cairo-version.h +2 -2
  50. data/vendor/local/include/cairo/cairo-win32.h +1 -1
  51. data/vendor/local/include/cairo/cairo.h +382 -26
  52. data/vendor/local/lib/cairo.def +44 -0
  53. data/vendor/local/lib/cairo.lib +0 -0
  54. data/vendor/local/lib/libcairo.dll.a +0 -0
  55. data/vendor/local/lib/pkgconfig/cairo-fc.pc +12 -0
  56. data/vendor/local/lib/pkgconfig/cairo-ft.pc +4 -4
  57. data/vendor/local/lib/pkgconfig/cairo-gobject.pc +12 -0
  58. data/vendor/local/lib/pkgconfig/cairo-pdf.pc +3 -3
  59. data/vendor/local/lib/pkgconfig/cairo-png.pc +3 -3
  60. data/vendor/local/lib/pkgconfig/cairo-ps.pc +3 -3
  61. data/vendor/local/lib/pkgconfig/cairo-svg.pc +3 -3
  62. data/vendor/local/lib/pkgconfig/cairo-win32-font.pc +3 -3
  63. data/vendor/local/lib/pkgconfig/cairo-win32.pc +3 -3
  64. data/vendor/local/lib/pkgconfig/cairo.pc +4 -4
  65. data/vendor/local/manifest/{cairo-dev_1.8.10-4_win32.mft → cairo-dev_1.10.0-1_win32.mft} +34 -27
  66. data/vendor/local/manifest/cairo_1.10.0-1_win32.mft +5 -0
  67. data/vendor/local/share/doc/{cairo_1.8.10-4_win32 → cairo_1.10.0-1_win32}/COPYING +9 -8
  68. data/vendor/local/share/doc/{cairo_1.8.10-4_win32 → cairo_1.10.0-1_win32}/COPYING-LGPL-2.1 +2 -2
  69. data/vendor/local/share/doc/{cairo_1.8.10-4_win32 → cairo_1.10.0-1_win32}/COPYING-MPL-1.1 +0 -0
  70. data/vendor/local/share/gtk-doc/html/cairo/bindings-errors.html +4 -14
  71. data/vendor/local/share/gtk-doc/html/cairo/bindings-fonts.html +5 -15
  72. data/vendor/local/share/gtk-doc/html/cairo/bindings-memory.html +7 -17
  73. data/vendor/local/share/gtk-doc/html/cairo/bindings-overloading.html +6 -16
  74. data/vendor/local/share/gtk-doc/html/cairo/bindings-path.html +6 -16
  75. data/vendor/local/share/gtk-doc/html/cairo/bindings-patterns.html +23 -28
  76. data/vendor/local/share/gtk-doc/html/cairo/bindings-return-values.html +3 -13
  77. data/vendor/local/share/gtk-doc/html/cairo/bindings-streams.html +3 -13
  78. data/vendor/local/share/gtk-doc/html/cairo/bindings-surfaces.html +7 -17
  79. data/vendor/local/share/gtk-doc/html/cairo/cairo-Error-handling.html +373 -0
  80. data/vendor/local/share/gtk-doc/html/cairo/cairo-FreeType-Fonts.html +330 -0
  81. data/vendor/local/share/gtk-doc/html/cairo/cairo-Image-Surfaces.html +478 -0
  82. data/vendor/local/share/gtk-doc/html/cairo/cairo-PDF-Surfaces.html +344 -0
  83. data/vendor/local/share/gtk-doc/html/cairo/cairo-PNG-Support.html +320 -0
  84. data/vendor/local/share/gtk-doc/html/cairo/cairo-Paths.html +1291 -0
  85. data/vendor/local/share/gtk-doc/html/cairo/cairo-PostScript-Surfaces.html +622 -0
  86. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-(CGFont)-Fonts.html +134 -0
  87. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-Surfaces.html +210 -0
  88. data/vendor/local/share/gtk-doc/html/cairo/cairo-Regions.html +834 -0
  89. data/vendor/local/share/gtk-doc/html/cairo/cairo-SVG-Surfaces.html +318 -0
  90. data/vendor/local/share/gtk-doc/html/cairo/cairo-Transformations.html +410 -0
  91. data/vendor/local/share/gtk-doc/html/cairo/cairo-Types.html +169 -0
  92. data/vendor/local/share/gtk-doc/html/cairo/cairo-User-Fonts.html +715 -0
  93. data/vendor/local/share/gtk-doc/html/cairo/cairo-Version-Information.html +410 -0
  94. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Fonts.html +335 -0
  95. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Surfaces.html +291 -0
  96. data/vendor/local/share/gtk-doc/html/cairo/cairo-XLib-Surfaces.html +470 -0
  97. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-device-t.html +595 -0
  98. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-face-t.html +384 -0
  99. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-options-t.html +644 -0
  100. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-matrix-t.html +574 -0
  101. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-pattern-t.html +1457 -0
  102. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-scaled-font-t.html +1076 -0
  103. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html +1396 -0
  104. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-t.html +2743 -0
  105. data/vendor/local/share/gtk-doc/html/cairo/cairo-drawing.html +13 -20
  106. data/vendor/local/share/gtk-doc/html/cairo/cairo-fonts.html +13 -23
  107. data/vendor/local/share/gtk-doc/html/cairo/cairo-support.html +11 -21
  108. data/vendor/local/share/gtk-doc/html/cairo/cairo-surfaces.html +19 -26
  109. data/vendor/local/share/gtk-doc/html/cairo/cairo-text.html +279 -326
  110. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp +411 -355
  111. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp2 +579 -480
  112. data/vendor/local/share/gtk-doc/html/cairo/index-1.10.html +147 -0
  113. data/vendor/local/share/gtk-doc/html/cairo/index-1.2.html +88 -65
  114. data/vendor/local/share/gtk-doc/html/cairo/index-1.4.html +72 -47
  115. data/vendor/local/share/gtk-doc/html/cairo/index-1.6.html +43 -32
  116. data/vendor/local/share/gtk-doc/html/cairo/index-1.8.html +42 -41
  117. data/vendor/local/share/gtk-doc/html/cairo/index-all.html +542 -345
  118. data/vendor/local/share/gtk-doc/html/cairo/index.html +36 -39
  119. data/vendor/local/share/gtk-doc/html/cairo/index.sgml +674 -444
  120. data/vendor/local/share/gtk-doc/html/cairo/language-bindings.html +6 -16
  121. data/vendor/local/share/gtk-doc/html/cairo/style.css +152 -54
  122. data/vendor/local/src/tml/packaging/cairo_1.10.0-1_win32.log +1262 -0
  123. data/vendor/local/src/tml/packaging/{cairo_1.8.10-4_win32.sh → cairo_1.10.0-1_win32.sh} +3 -3
  124. metadata +137 -389
  125. data/doc/doc.css +0 -91
  126. data/doc/en/cairo-antialias.html +0 -38
  127. data/doc/en/cairo-clip-not-representable-error.html +0 -47
  128. data/doc/en/cairo-color-base.html +0 -69
  129. data/doc/en/cairo-color-cmyk.html +0 -157
  130. data/doc/en/cairo-color-hsv.html +0 -137
  131. data/doc/en/cairo-color-rgb.html +0 -142
  132. data/doc/en/cairo-color-x11.html +0 -173
  133. data/doc/en/cairo-color.html +0 -238
  134. data/doc/en/cairo-content.html +0 -37
  135. data/doc/en/cairo-context-blur.html +0 -39
  136. data/doc/en/cairo-context-circle.html +0 -39
  137. data/doc/en/cairo-context-color.html +0 -39
  138. data/doc/en/cairo-context-path.html +0 -44
  139. data/doc/en/cairo-context-rectangle.html +0 -39
  140. data/doc/en/cairo-context-triangle.html +0 -39
  141. data/doc/en/cairo-context.html +0 -643
  142. data/doc/en/cairo-error.html +0 -44
  143. data/doc/en/cairo-extend.html +0 -38
  144. data/doc/en/cairo-file-not-found.html +0 -47
  145. data/doc/en/cairo-fill-rule.html +0 -36
  146. data/doc/en/cairo-filter.html +0 -40
  147. data/doc/en/cairo-font-extents.html +0 -129
  148. data/doc/en/cairo-font-face.html +0 -38
  149. data/doc/en/cairo-font-options.html +0 -139
  150. data/doc/en/cairo-font-slant.html +0 -37
  151. data/doc/en/cairo-font-type-mismatch.html +0 -47
  152. data/doc/en/cairo-font-weight.html +0 -36
  153. data/doc/en/cairo-format.html +0 -46
  154. data/doc/en/cairo-glyph.html +0 -99
  155. data/doc/en/cairo-gradient-pattern.html +0 -74
  156. data/doc/en/cairo-hint-metrics.html +0 -37
  157. data/doc/en/cairo-hint-style.html +0 -39
  158. data/doc/en/cairo-image-surface.html +0 -82
  159. data/doc/en/cairo-invalid-clusters.html +0 -47
  160. data/doc/en/cairo-invalid-content-error.html +0 -47
  161. data/doc/en/cairo-invalid-dash-error.html +0 -47
  162. data/doc/en/cairo-invalid-dsc-comment-error.html +0 -47
  163. data/doc/en/cairo-invalid-format-error.html +0 -47
  164. data/doc/en/cairo-invalid-index-error.html +0 -47
  165. data/doc/en/cairo-invalid-matrix-error.html +0 -47
  166. data/doc/en/cairo-invalid-path-data-error.html +0 -47
  167. data/doc/en/cairo-invalid-pop-group-error.html +0 -47
  168. data/doc/en/cairo-invalid-restore-error.html +0 -47
  169. data/doc/en/cairo-invalid-slant.html +0 -47
  170. data/doc/en/cairo-invalid-status-error.html +0 -47
  171. data/doc/en/cairo-invalid-stride-error.html +0 -47
  172. data/doc/en/cairo-invalid-string-error.html +0 -47
  173. data/doc/en/cairo-invalid-visual-error.html +0 -47
  174. data/doc/en/cairo-invalid-weight.html +0 -47
  175. data/doc/en/cairo-line-cap.html +0 -37
  176. data/doc/en/cairo-line-join.html +0 -37
  177. data/doc/en/cairo-linear-pattern.html +0 -60
  178. data/doc/en/cairo-matrix.html +0 -259
  179. data/doc/en/cairo-negative-count.html +0 -47
  180. data/doc/en/cairo-no-current-point-error.html +0 -47
  181. data/doc/en/cairo-null-pointer-error.html +0 -47
  182. data/doc/en/cairo-operator.html +0 -48
  183. data/doc/en/cairo-paper-parse-error.html +0 -47
  184. data/doc/en/cairo-paper-unknown-paper-name.html +0 -66
  185. data/doc/en/cairo-paper-unknown-unit.html +0 -66
  186. data/doc/en/cairo-paper-unrecognized-paper-description.html +0 -66
  187. data/doc/en/cairo-paper.html +0 -184
  188. data/doc/en/cairo-path-close-path.html +0 -49
  189. data/doc/en/cairo-path-curve-to.html +0 -49
  190. data/doc/en/cairo-path-data-type.html +0 -38
  191. data/doc/en/cairo-path-data.html +0 -98
  192. data/doc/en/cairo-path-line-to.html +0 -49
  193. data/doc/en/cairo-path-move-to.html +0 -49
  194. data/doc/en/cairo-path.html +0 -155
  195. data/doc/en/cairo-pattern-type-mismatch-error.html +0 -47
  196. data/doc/en/cairo-pattern.html +0 -99
  197. data/doc/en/cairo-pdf-surface.html +0 -57
  198. data/doc/en/cairo-point.html +0 -74
  199. data/doc/en/cairo-ps-level.html +0 -49
  200. data/doc/en/cairo-ps-surface.html +0 -92
  201. data/doc/en/cairo-quartz-image-surface.html +0 -57
  202. data/doc/en/cairo-quartz-surface.html +0 -57
  203. data/doc/en/cairo-radial-pattern.html +0 -60
  204. data/doc/en/cairo-read-error.html +0 -47
  205. data/doc/en/cairo-rectangle.html +0 -89
  206. data/doc/en/cairo-scaled-font.html +0 -94
  207. data/doc/en/cairo-solid-pattern.html +0 -62
  208. data/doc/en/cairo-subpixel-order.html +0 -39
  209. data/doc/en/cairo-surface-finished-error.html +0 -47
  210. data/doc/en/cairo-surface-pattern.html +0 -57
  211. data/doc/en/cairo-surface-type-mismatch-error.html +0 -47
  212. data/doc/en/cairo-surface.html +0 -121
  213. data/doc/en/cairo-svg-surface.html +0 -77
  214. data/doc/en/cairo-svg-version.html +0 -49
  215. data/doc/en/cairo-temp-file-error.html +0 -47
  216. data/doc/en/cairo-text-cluster-flag.html +0 -35
  217. data/doc/en/cairo-text-cluster.html +0 -84
  218. data/doc/en/cairo-text-extents.html +0 -144
  219. data/doc/en/cairo-toy-font-face.html +0 -67
  220. data/doc/en/cairo-user-font-error.html +0 -47
  221. data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +0 -94
  222. data/doc/en/cairo-user-font-face.html +0 -72
  223. data/doc/en/cairo-user-font-immutable.html +0 -47
  224. data/doc/en/cairo-win32-printing-surface.html +0 -57
  225. data/doc/en/cairo-win32-surface.html +0 -62
  226. data/doc/en/cairo-write-error.html +0 -47
  227. data/doc/en/cairo.html +0 -131
  228. data/doc/en/index.html +0 -1154
  229. data/doc/index.html +0 -18
  230. data/doc/ja/cairo-antialias.html +0 -57
  231. data/doc/ja/cairo-clip-not-representable-error.html +0 -56
  232. data/doc/ja/cairo-color-base.html +0 -75
  233. data/doc/ja/cairo-color-cmyk.html +0 -152
  234. data/doc/ja/cairo-color-hsv.html +0 -135
  235. data/doc/ja/cairo-color-rgb.html +0 -145
  236. data/doc/ja/cairo-color-x11.html +0 -183
  237. data/doc/ja/cairo-color.html +0 -317
  238. data/doc/ja/cairo-content.html +0 -51
  239. data/doc/ja/cairo-context-blur.html +0 -53
  240. data/doc/ja/cairo-context-circle.html +0 -54
  241. data/doc/ja/cairo-context-color.html +0 -52
  242. data/doc/ja/cairo-context-path.html +0 -77
  243. data/doc/ja/cairo-context-rectangle.html +0 -60
  244. data/doc/ja/cairo-context-triangle.html +0 -47
  245. data/doc/ja/cairo-context.html +0 -1542
  246. data/doc/ja/cairo-error.html +0 -56
  247. data/doc/ja/cairo-extend.html +0 -56
  248. data/doc/ja/cairo-file-not-found.html +0 -51
  249. data/doc/ja/cairo-fill-rule.html +0 -58
  250. data/doc/ja/cairo-filter.html +0 -43
  251. data/doc/ja/cairo-font-extents.html +0 -164
  252. data/doc/ja/cairo-font-face.html +0 -55
  253. data/doc/ja/cairo-font-options.html +0 -189
  254. data/doc/ja/cairo-font-slant.html +0 -50
  255. data/doc/ja/cairo-font-type-mismatch.html +0 -52
  256. data/doc/ja/cairo-font-weight.html +0 -47
  257. data/doc/ja/cairo-format.html +0 -81
  258. data/doc/ja/cairo-glyph.html +0 -115
  259. data/doc/ja/cairo-gradient-pattern.html +0 -119
  260. data/doc/ja/cairo-hint-metrics.html +0 -57
  261. data/doc/ja/cairo-hint-style.html +0 -64
  262. data/doc/ja/cairo-image-surface.html +0 -131
  263. data/doc/ja/cairo-invalid-clusters.html +0 -55
  264. data/doc/ja/cairo-invalid-content-error.html +0 -54
  265. data/doc/ja/cairo-invalid-dash-error.html +0 -54
  266. data/doc/ja/cairo-invalid-dsc-comment-error.html +0 -54
  267. data/doc/ja/cairo-invalid-format-error.html +0 -54
  268. data/doc/ja/cairo-invalid-index-error.html +0 -54
  269. data/doc/ja/cairo-invalid-matrix-error.html +0 -54
  270. data/doc/ja/cairo-invalid-path-data-error.html +0 -54
  271. data/doc/ja/cairo-invalid-pop-group-error.html +0 -54
  272. data/doc/ja/cairo-invalid-restore-error.html +0 -55
  273. data/doc/ja/cairo-invalid-slant.html +0 -57
  274. data/doc/ja/cairo-invalid-status-error.html +0 -55
  275. data/doc/ja/cairo-invalid-stride-error.html +0 -55
  276. data/doc/ja/cairo-invalid-string-error.html +0 -54
  277. data/doc/ja/cairo-invalid-visual-error.html +0 -57
  278. data/doc/ja/cairo-invalid-weight.html +0 -57
  279. data/doc/ja/cairo-line-cap.html +0 -50
  280. data/doc/ja/cairo-line-join.html +0 -53
  281. data/doc/ja/cairo-linear-pattern.html +0 -87
  282. data/doc/ja/cairo-matrix.html +0 -354
  283. data/doc/ja/cairo-negative-count.html +0 -52
  284. data/doc/ja/cairo-no-current-point-error.html +0 -54
  285. data/doc/ja/cairo-null-pointer-error.html +0 -54
  286. data/doc/ja/cairo-operator.html +0 -51
  287. data/doc/ja/cairo-paper-parse-error.html +0 -55
  288. data/doc/ja/cairo-paper-unknown-paper-name.html +0 -76
  289. data/doc/ja/cairo-paper-unknown-unit.html +0 -75
  290. data/doc/ja/cairo-paper-unrecognized-paper-description.html +0 -76
  291. data/doc/ja/cairo-paper.html +0 -357
  292. data/doc/ja/cairo-path-close-path.html +0 -57
  293. data/doc/ja/cairo-path-curve-to.html +0 -70
  294. data/doc/ja/cairo-path-data-type.html +0 -53
  295. data/doc/ja/cairo-path-data.html +0 -127
  296. data/doc/ja/cairo-path-line-to.html +0 -62
  297. data/doc/ja/cairo-path-move-to.html +0 -62
  298. data/doc/ja/cairo-path.html +0 -144
  299. data/doc/ja/cairo-pattern-type-mismatch-error.html +0 -56
  300. data/doc/ja/cairo-pattern.html +0 -128
  301. data/doc/ja/cairo-pdf-surface.html +0 -86
  302. data/doc/ja/cairo-point.html +0 -90
  303. data/doc/ja/cairo-ps-level.html +0 -62
  304. data/doc/ja/cairo-ps-surface.html +0 -214
  305. data/doc/ja/cairo-quartz-image-surface.html +0 -75
  306. data/doc/ja/cairo-quartz-surface.html +0 -93
  307. data/doc/ja/cairo-radial-pattern.html +0 -93
  308. data/doc/ja/cairo-read-error.html +0 -55
  309. data/doc/ja/cairo-rectangle.html +0 -109
  310. data/doc/ja/cairo-scaled-font.html +0 -180
  311. data/doc/ja/cairo-solid-pattern.html +0 -87
  312. data/doc/ja/cairo-subpixel-order.html +0 -57
  313. data/doc/ja/cairo-surface-finished-error.html +0 -54
  314. data/doc/ja/cairo-surface-pattern.html +0 -68
  315. data/doc/ja/cairo-surface-type-mismatch-error.html +0 -56
  316. data/doc/ja/cairo-surface.html +0 -213
  317. data/doc/ja/cairo-svg-surface.html +0 -114
  318. data/doc/ja/cairo-svg-version.html +0 -66
  319. data/doc/ja/cairo-temp-file-error.html +0 -50
  320. data/doc/ja/cairo-text-cluster-flag.html +0 -46
  321. data/doc/ja/cairo-text-cluster.html +0 -102
  322. data/doc/ja/cairo-text-extents.html +0 -163
  323. data/doc/ja/cairo-toy-font-face.html +0 -107
  324. data/doc/ja/cairo-user-font-error.html +0 -55
  325. data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +0 -156
  326. data/doc/ja/cairo-user-font-face.html +0 -268
  327. data/doc/ja/cairo-user-font-immutable.html +0 -54
  328. data/doc/ja/cairo-win32-printing-surface.html +0 -80
  329. data/doc/ja/cairo-win32-surface.html +0 -100
  330. data/doc/ja/cairo-write-error.html +0 -55
  331. data/doc/ja/cairo.html +0 -177
  332. data/doc/ja/index.html +0 -1156
  333. data/pkg-config.rb +0 -313
  334. data/test-unit/Rakefile +0 -30
  335. data/test-unit/bin/testrb +0 -5
  336. data/test-unit/lib/test/unit.rb +0 -280
  337. data/test-unit/lib/test/unit/assertionfailederror.rb +0 -14
  338. data/test-unit/lib/test/unit/assertions.rb +0 -722
  339. data/test-unit/lib/test/unit/attribute.rb +0 -125
  340. data/test-unit/lib/test/unit/autorunner.rb +0 -254
  341. data/test-unit/lib/test/unit/collector.rb +0 -43
  342. data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
  343. data/test-unit/lib/test/unit/collector/dir.rb +0 -108
  344. data/test-unit/lib/test/unit/collector/load.rb +0 -135
  345. data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
  346. data/test-unit/lib/test/unit/color.rb +0 -61
  347. data/test-unit/lib/test/unit/diff.rb +0 -524
  348. data/test-unit/lib/test/unit/error.rb +0 -124
  349. data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
  350. data/test-unit/lib/test/unit/failure.rb +0 -110
  351. data/test-unit/lib/test/unit/fixture.rb +0 -185
  352. data/test-unit/lib/test/unit/notification.rb +0 -125
  353. data/test-unit/lib/test/unit/omission.rb +0 -143
  354. data/test-unit/lib/test/unit/pending.rb +0 -146
  355. data/test-unit/lib/test/unit/priority.rb +0 -146
  356. data/test-unit/lib/test/unit/runner/console.rb +0 -46
  357. data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
  358. data/test-unit/lib/test/unit/testcase.rb +0 -281
  359. data/test-unit/lib/test/unit/testresult.rb +0 -89
  360. data/test-unit/lib/test/unit/testsuite.rb +0 -110
  361. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
  362. data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -195
  363. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -49
  364. data/test-unit/lib/test/unit/ui/testrunner.rb +0 -20
  365. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
  366. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
  367. data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -41
  368. data/test-unit/lib/test/unit/util/observable.rb +0 -90
  369. data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
  370. data/test-unit/lib/test/unit/version.rb +0 -7
  371. data/test-unit/sample/adder.rb +0 -13
  372. data/test-unit/sample/subtracter.rb +0 -12
  373. data/test-unit/sample/tc_adder.rb +0 -18
  374. data/test-unit/sample/tc_subtracter.rb +0 -18
  375. data/test-unit/sample/ts_examples.rb +0 -7
  376. data/test-unit/test/collector/test_descendant.rb +0 -135
  377. data/test-unit/test/collector/test_dir.rb +0 -406
  378. data/test-unit/test/collector/test_load.rb +0 -333
  379. data/test-unit/test/collector/test_objectspace.rb +0 -98
  380. data/test-unit/test/run-test.rb +0 -13
  381. data/test-unit/test/test_assertions.rb +0 -693
  382. data/test-unit/test/test_attribute.rb +0 -86
  383. data/test-unit/test/test_color.rb +0 -37
  384. data/test-unit/test/test_diff.rb +0 -477
  385. data/test-unit/test/test_emacs_runner.rb +0 -60
  386. data/test-unit/test/test_error.rb +0 -26
  387. data/test-unit/test/test_failure.rb +0 -33
  388. data/test-unit/test/test_fixture.rb +0 -252
  389. data/test-unit/test/test_notification.rb +0 -33
  390. data/test-unit/test/test_omission.rb +0 -81
  391. data/test-unit/test/test_pending.rb +0 -70
  392. data/test-unit/test/test_priority.rb +0 -89
  393. data/test-unit/test/test_testcase.rb +0 -430
  394. data/test-unit/test/test_testresult.rb +0 -113
  395. data/test-unit/test/test_testsuite.rb +0 -129
  396. data/test-unit/test/testunit_test_util.rb +0 -14
  397. data/test-unit/test/ui/test_testrunmediator.rb +0 -20
  398. data/test-unit/test/util/test_backtracefilter.rb +0 -41
  399. data/test-unit/test/util/test_observable.rb +0 -102
  400. data/test-unit/test/util/test_procwrapper.rb +0 -36
  401. data/test/test_pkg_config.rb +0 -123
  402. data/vendor/local/include/libpng14/png.h +0 -2701
  403. data/vendor/local/include/libpng14/pngconf.h +0 -1525
  404. data/vendor/local/include/png.h +0 -2701
  405. data/vendor/local/include/pngconf.h +0 -1525
  406. data/vendor/local/include/zconf.h +0 -461
  407. data/vendor/local/include/zlib.h +0 -1589
  408. data/vendor/local/lib/libpng.def +0 -192
  409. data/vendor/local/lib/libpng.lib +0 -0
  410. data/vendor/local/lib/libpng14.dll.a +0 -0
  411. data/vendor/local/lib/libz.dll.a +0 -0
  412. data/vendor/local/lib/pkgconfig/libpng.pc +0 -11
  413. data/vendor/local/lib/pkgconfig/libpng14.pc +0 -11
  414. data/vendor/local/lib/zdll.lib +0 -0
  415. data/vendor/local/lib/zlib.def +0 -67
  416. data/vendor/local/manifest/cairo_1.8.10-4_win32.mft +0 -5
  417. data/vendor/local/manifest/libpng-dev_1.4.3-1_win32.mft +0 -15
  418. data/vendor/local/manifest/zlib-dev_1.2.5-2_win32.mft +0 -8
  419. data/vendor/local/share/gtk-doc/html/cairo/cairo-context.html +0 -2643
  420. data/vendor/local/share/gtk-doc/html/cairo/cairo-error-status.html +0 -360
  421. data/vendor/local/share/gtk-doc/html/cairo/cairo-font-face.html +0 -408
  422. data/vendor/local/share/gtk-doc/html/cairo/cairo-font-options.html +0 -678
  423. data/vendor/local/share/gtk-doc/html/cairo/cairo-ft-font.html +0 -319
  424. data/vendor/local/share/gtk-doc/html/cairo/cairo-image-surface.html +0 -473
  425. data/vendor/local/share/gtk-doc/html/cairo/cairo-matrix.html +0 -596
  426. data/vendor/local/share/gtk-doc/html/cairo/cairo-paths.html +0 -1274
  427. data/vendor/local/share/gtk-doc/html/cairo/cairo-pattern.html +0 -1485
  428. data/vendor/local/share/gtk-doc/html/cairo/cairo-pdf-surface.html +0 -238
  429. data/vendor/local/share/gtk-doc/html/cairo/cairo-png-functions.html +0 -341
  430. data/vendor/local/share/gtk-doc/html/cairo/cairo-ps-surface.html +0 -622
  431. data/vendor/local/share/gtk-doc/html/cairo/cairo-quartz-font.html +0 -151
  432. data/vendor/local/share/gtk-doc/html/cairo/cairo-quartz-surface.html +0 -219
  433. data/vendor/local/share/gtk-doc/html/cairo/cairo-scaled-font.html +0 -1023
  434. data/vendor/local/share/gtk-doc/html/cairo/cairo-surface.html +0 -1026
  435. data/vendor/local/share/gtk-doc/html/cairo/cairo-svg-surface.html +0 -321
  436. data/vendor/local/share/gtk-doc/html/cairo/cairo-transformations.html +0 -436
  437. data/vendor/local/share/gtk-doc/html/cairo/cairo-types.html +0 -133
  438. data/vendor/local/share/gtk-doc/html/cairo/cairo-user-font.html +0 -735
  439. data/vendor/local/share/gtk-doc/html/cairo/cairo-version-info.html +0 -345
  440. data/vendor/local/share/gtk-doc/html/cairo/cairo-win32-font.html +0 -358
  441. data/vendor/local/share/gtk-doc/html/cairo/cairo-win32-surface.html +0 -312
  442. data/vendor/local/share/gtk-doc/html/cairo/cairo-xlib-surface.html +0 -492
  443. data/vendor/local/share/man/man3/libpng.3 +0 -4455
  444. data/vendor/local/share/man/man3/libpngpf.3 +0 -808
  445. data/vendor/local/share/man/man5/png.5 +0 -74
  446. data/vendor/local/src/tml/packaging/cairo_1.8.10-4_win32.log +0 -920
  447. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.log +0 -272
  448. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.sh +0 -71
  449. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.log +0 -42
  450. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.sh +0 -189
@@ -1,108 +0,0 @@
1
- require 'test/unit/testsuite'
2
- require 'test/unit/collector'
3
-
4
- module Test
5
- module Unit
6
- module Collector
7
- class Dir
8
- include Collector
9
-
10
- attr_reader :pattern, :exclude
11
- attr_accessor :base
12
-
13
- def initialize(dir=::Dir, file=::File, object_space=::ObjectSpace, req=nil)
14
- super()
15
- @dir = dir
16
- @file = file
17
- @object_space = object_space
18
- @req = req
19
- @pattern = [/\btest_.*\.rb\Z/m]
20
- @exclude = []
21
- @base = nil
22
- end
23
-
24
- def collect(*from)
25
- basedir = @base
26
- $:.push(basedir) if basedir
27
- if(from.empty?)
28
- recursive_collect('.', find_test_cases)
29
- elsif(from.size == 1)
30
- recursive_collect(from.first, find_test_cases)
31
- else
32
- suites = []
33
- from.each do |f|
34
- suite = recursive_collect(f, find_test_cases)
35
- suites << suite unless(suite.tests.empty?)
36
- end
37
- suite = TestSuite.new("[#{from.join(', ')}]")
38
- sort(suites).each{|s| suite << s}
39
- suite
40
- end
41
- ensure
42
- $:.delete_at($:.rindex(basedir)) if basedir
43
- end
44
-
45
- def find_test_cases(ignore=[])
46
- cases = []
47
- @object_space.each_object(Class) do |c|
48
- cases << c if(c < TestCase && !ignore.include?(c))
49
- end
50
- ignore.concat(cases)
51
- cases
52
- end
53
-
54
- def recursive_collect(name, already_gathered)
55
- sub_suites = []
56
- path = realdir(name)
57
- if @file.directory?(path)
58
- dir_name = name unless name == '.'
59
- @dir.entries(path).each do |e|
60
- next if(e == '.' || e == '..')
61
- e_name = dir_name ? @file.join(dir_name, e) : e
62
- if @file.directory?(realdir(e_name))
63
- next if /\A(?:CVS|\.svn)\z/ =~ e
64
- sub_suite = recursive_collect(e_name, already_gathered)
65
- sub_suites << sub_suite unless(sub_suite.empty?)
66
- else
67
- next if /~\z/ =~ e_name or /\A\.\#/ =~ e
68
- if @pattern and !@pattern.empty?
69
- next unless @pattern.any? {|pat| pat =~ e_name}
70
- end
71
- if @exclude and !@exclude.empty?
72
- next if @exclude.any? {|pat| pat =~ e_name}
73
- end
74
- collect_file(e_name, sub_suites, already_gathered)
75
- end
76
- end
77
- else
78
- collect_file(name, sub_suites, already_gathered)
79
- end
80
- suite = TestSuite.new(@file.basename(name))
81
- sort(sub_suites).each{|s| suite << s}
82
- suite
83
- end
84
-
85
- def collect_file(name, suites, already_gathered)
86
- dir = @file.dirname(@file.expand_path(name, @base))
87
- $:.unshift(dir)
88
- if(@req)
89
- @req.require(name)
90
- else
91
- require(name)
92
- end
93
- find_test_cases(already_gathered).each{|t| add_suite(suites, t.suite)}
94
- ensure
95
- $:.delete_at($:.rindex(dir)) if(dir)
96
- end
97
-
98
- def realdir(path)
99
- if @base
100
- @file.join(@base, path)
101
- else
102
- path
103
- end
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,135 +0,0 @@
1
- require 'pathname'
2
-
3
- require 'test/unit/testsuite'
4
- require 'test/unit/collector'
5
-
6
- module Test
7
- module Unit
8
- module Collector
9
- class Load
10
- include Collector
11
-
12
- attr_reader :patterns, :excludes, :base
13
-
14
- def initialize
15
- super
16
- @system_excludes = [/~\z/, /\A\.\#/]
17
- @system_directory_excludes = [/\A(?:CVS|\.svn)\z/]
18
- @patterns = [/\Atest_.+\.rb\z/m]
19
- @excludes = []
20
- @base = nil
21
- end
22
-
23
- def base=(base)
24
- base = Pathname(base) unless base.nil?
25
- @base = base
26
- end
27
-
28
- def collect(*froms)
29
- add_load_path(@base) do
30
- froms = ["."] if froms.empty?
31
- test_suites = froms.collect do |from|
32
- test_suite = collect_recursive(from, find_test_cases)
33
- test_suite = nil if test_suite.tests.empty?
34
- test_suite
35
- end.compact
36
-
37
- if test_suites.size > 1
38
- test_suite = TestSuite.new("[#{froms.join(', ')}]")
39
- sort(test_suites).each do |sub_test_suite|
40
- test_suite << sub_test_suite
41
- end
42
- test_suite
43
- else
44
- test_suites.first
45
- end
46
- end
47
- end
48
-
49
- def find_test_cases(ignore=[])
50
- test_cases = []
51
- TestCase::DESCENDANTS.each do |test_case|
52
- test_cases << test_case unless ignore.include?(test_case)
53
- end
54
- ignore.concat(test_cases)
55
- test_cases
56
- end
57
-
58
- private
59
- def collect_recursive(name, already_gathered)
60
- sub_test_suites = []
61
-
62
- path = resolve_path(name)
63
- if path.directory?
64
- directories, files = path.children.partition do |child|
65
- child.directory?
66
- end
67
-
68
- files.each do |child|
69
- next if excluded_file?(child.basename.to_s)
70
- collect_file(child, sub_test_suites, already_gathered)
71
- end
72
-
73
- directories.each do |child|
74
- next if excluded_directory?(child.basename.to_s)
75
- sub_test_suite = collect_recursive(child, already_gathered)
76
- sub_test_suites << sub_test_suite unless sub_test_suite.empty?
77
- end
78
- else
79
- collect_file(path, sub_test_suites, already_gathered)
80
- end
81
-
82
- test_suite = TestSuite.new(path.basename.to_s)
83
- sort(sub_test_suites).each do |sub_test_suite|
84
- test_suite << sub_test_suite
85
- end
86
- test_suite
87
- end
88
-
89
- def collect_file(path, test_suites, already_gathered)
90
- add_load_path(path.expand_path.dirname) do
91
- require(path.to_s)
92
- find_test_cases(already_gathered).each do |test_case|
93
- add_suite(test_suites, test_case.suite)
94
- end
95
- end
96
- end
97
-
98
- def resolve_path(path)
99
- if @base
100
- @base + path
101
- else
102
- Pathname(path)
103
- end
104
- end
105
-
106
- def add_load_path(path)
107
- $LOAD_PATH.push(path.to_s) if path
108
- yield
109
- ensure
110
- $LOAD_PATH.delete_at($LOAD_PATH.rindex(path.to_s)) if path
111
- end
112
-
113
- def excluded_directory?(base)
114
- @system_directory_excludes.any? {|pattern| pattern =~ base}
115
- end
116
-
117
- def excluded_file?(base)
118
- return true if @system_excludes.any? {|pattern| pattern =~ base}
119
-
120
- patterns = @patterns || []
121
- unless patterns.empty?
122
- return true unless patterns.any? {|pattern| pattern =~ base}
123
- end
124
-
125
- excludes = @excludes || []
126
- unless excludes.empty?
127
- return true if excludes.any? {|pattern| pattern =~ base}
128
- end
129
-
130
- false
131
- end
132
- end
133
- end
134
- end
135
- end
@@ -1,34 +0,0 @@
1
- # Author:: Nathaniel Talbott.
2
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
3
- # License:: Ruby license.
4
-
5
- require 'test/unit/collector'
6
-
7
- module Test
8
- module Unit
9
- module Collector
10
- class ObjectSpace
11
- include Collector
12
-
13
- NAME = 'collected from the ObjectSpace'
14
-
15
- def initialize(source=::ObjectSpace)
16
- super()
17
- @source = source
18
- end
19
-
20
- def collect(name=NAME)
21
- suite = TestSuite.new(name)
22
- sub_suites = []
23
- @source.each_object(Class) do |klass|
24
- if(Test::Unit::TestCase > klass)
25
- add_suite(sub_suites, klass.suite)
26
- end
27
- end
28
- sort(sub_suites).each{|s| suite << s}
29
- suite
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,61 +0,0 @@
1
- module Test
2
- module Unit
3
- class Color
4
- NAMES = ["black", "red", "green", "yellow",
5
- "blue", "magenta", "cyan", "white"]
6
- def initialize(name, options={})
7
- @name = name
8
- @foreground = options[:foreground]
9
- @foreground = true if @foreground.nil?
10
- @intensity = options[:intensity]
11
- @bold = options[:bold]
12
- @italic = options[:italic]
13
- @underline = options[:underline]
14
- end
15
-
16
- def sequence
17
- sequence = []
18
- if @name == "none"
19
- elsif @name == "reset"
20
- sequence << "0"
21
- else
22
- foreground_parameter = @foreground ? 3 : 4
23
- foreground_parameter += 6 if @intensity
24
- sequence << "#{foreground_parameter}#{NAMES.index(@name)}"
25
- end
26
- sequence << "1" if @bold
27
- sequence << "3" if @italic
28
- sequence << "4" if @underline
29
- sequence
30
- end
31
-
32
- def escape_sequence
33
- "\e[#{sequence.join(';')}m"
34
- end
35
-
36
- def +(other)
37
- MixColor.new([self, other])
38
- end
39
- end
40
-
41
- class MixColor
42
- def initialize(colors)
43
- @colors = colors
44
- end
45
-
46
- def sequence
47
- @colors.inject([]) do |result, color|
48
- result + color.sequence
49
- end
50
- end
51
-
52
- def escape_sequence
53
- "\e[#{sequence.join(';')}m"
54
- end
55
-
56
- def +(other)
57
- self.class.new([self, other])
58
- end
59
- end
60
- end
61
- end
@@ -1,524 +0,0 @@
1
- # port of Python's difflib.
2
-
3
- module Test
4
- module Unit
5
- module Diff
6
- class SequenceMatcher
7
- def initialize(from, to, &junk_predicate)
8
- @from = from
9
- @to = to
10
- @junk_predicate = junk_predicate
11
- update_to_indexes
12
- end
13
-
14
- def longest_match(from_start, from_end, to_start, to_end)
15
- best_info = find_best_match_position(from_start, from_end,
16
- to_start, to_end)
17
- unless @junks.empty?
18
- args = [from_start, from_end, to_start, to_end]
19
- best_info = adjust_best_info_with_junk_predicate(false, best_info,
20
- *args)
21
- best_info = adjust_best_info_with_junk_predicate(true, best_info,
22
- *args)
23
- end
24
-
25
- best_info
26
- end
27
-
28
- def blocks
29
- @blocks ||= compute_blocks
30
- end
31
-
32
- def operations
33
- @operations ||= compute_operations
34
- end
35
-
36
- def grouped_operations(context_size=nil)
37
- context_size ||= 3
38
- _operations = operations
39
- _operations = [[:equal, 0, 0, 0, 0]] if _operations.empty?
40
- expand_edge_equal_operations!(_operations, context_size)
41
-
42
- group_window = context_size * 2
43
- groups = []
44
- group = []
45
- _operations.each do |tag, from_start, from_end, to_start, to_end|
46
- if tag == :equal and from_end - from_start > group_window
47
- group << [tag,
48
- from_start,
49
- [from_end, from_start + context_size].min,
50
- to_start,
51
- [to_end, to_start + context_size].min]
52
- groups << group
53
- group = []
54
- from_start = [from_start, from_end - context_size].max
55
- to_start = [to_start, to_end - context_size].max
56
- end
57
- group << [tag, from_start, from_end, to_start, to_end]
58
- end
59
- groups << group unless group.empty?
60
- groups
61
- end
62
-
63
- def ratio
64
- @ratio ||= compute_ratio
65
- end
66
-
67
- private
68
- def update_to_indexes
69
- @to_indexes = {}
70
- @junks = {}
71
- if @to.is_a?(String)
72
- each = " "[0].is_a?(Integer) ? :each_byte : :each_char
73
- else
74
- each = :each
75
- end
76
- i = 0
77
- @to.send(each) do |item|
78
- @to_indexes[item] ||= []
79
- @to_indexes[item] << i
80
- i += 1
81
- end
82
-
83
- return if @junk_predicate.nil?
84
- @to_indexes = @to_indexes.reject do |key, value|
85
- junk = @junk_predicate.call(key)
86
- @junks[key] = true if junk
87
- junk
88
- end
89
- end
90
-
91
- def find_best_match_position(from_start, from_end, to_start, to_end)
92
- best_from, best_to, best_size = from_start, to_start, 0
93
- sizes = {}
94
- from_start.upto(from_end) do |from_index|
95
- _sizes = {}
96
- (@to_indexes[@from[from_index]] || []).each do |to_index|
97
- next if to_index < to_start
98
- break if to_index > to_end
99
- size = _sizes[to_index] = (sizes[to_index - 1] || 0) + 1
100
- if size > best_size
101
- best_from = from_index - size + 1
102
- best_to = to_index - size + 1
103
- best_size = size
104
- end
105
- end
106
- sizes = _sizes
107
- end
108
- [best_from, best_to, best_size]
109
- end
110
-
111
- def adjust_best_info_with_junk_predicate(should_junk, best_info,
112
- from_start, from_end,
113
- to_start, to_end)
114
- best_from, best_to, best_size = best_info
115
- while best_from > from_start and best_to > to_start and
116
- (should_junk ?
117
- @junks.has_key?(@to[best_to - 1]) :
118
- !@junks.has_key?(@to[best_to - 1])) and
119
- @from[best_from - 1] == @to[best_to - 1]
120
- best_from -= 1
121
- best_to -= 1
122
- best_size += 1
123
- end
124
-
125
- while best_from + best_size < from_end and
126
- best_to + best_size < to_end and
127
- (should_junk ?
128
- @junks.has_key?(@to[best_to + best_size]) :
129
- !@junks.has_key?(@to[best_to + best_size])) and
130
- @from[best_from + best_size] == @to[best_to + best_size]
131
- best_size += 1
132
- end
133
-
134
- [best_from, best_to, best_size]
135
- end
136
-
137
- def matches
138
- @matches ||= compute_matches
139
- end
140
-
141
- def compute_matches
142
- matches = []
143
- queue = [[0, @from.size, 0, @to.size]]
144
- until queue.empty?
145
- from_start, from_end, to_start, to_end = queue.pop
146
- match = longest_match(from_start, from_end - 1, to_start, to_end - 1)
147
- match_from_index, match_to_index, size = match
148
- unless size.zero?
149
- if from_start < match_from_index and
150
- to_start < match_to_index
151
- queue.push([from_start, match_from_index,
152
- to_start, match_to_index])
153
- end
154
- matches << match
155
- if match_from_index + size < from_end and
156
- match_to_index + size < to_end
157
- queue.push([match_from_index + size, from_end,
158
- match_to_index + size, to_end])
159
- end
160
- end
161
- end
162
- matches.sort_by do |(from_index, to_index, match_size)|
163
- from_index
164
- end
165
- end
166
-
167
- def compute_blocks
168
- blocks = []
169
- current_from_index = current_to_index = current_size = 0
170
- matches.each do |from_index, to_index, size|
171
- if current_from_index + current_size == from_index and
172
- current_to_index + current_size == to_index
173
- current_size += size
174
- else
175
- unless current_size.zero?
176
- blocks << [current_from_index, current_to_index, current_size]
177
- end
178
- current_from_index = from_index
179
- current_to_index = to_index
180
- current_size = size
181
- end
182
- end
183
- unless current_size.zero?
184
- blocks << [current_from_index, current_to_index, current_size]
185
- end
186
-
187
- blocks << [@from.size, @to.size, 0]
188
- blocks
189
- end
190
-
191
- def compute_operations
192
- from_index = to_index = 0
193
- operations = []
194
- blocks.each do |match_from_index, match_to_index, size|
195
- tag = determine_tag(from_index, to_index,
196
- match_from_index, match_to_index)
197
- if tag != :equal
198
- operations << [tag,
199
- from_index, match_from_index,
200
- to_index, match_to_index]
201
- end
202
-
203
- from_index, to_index = match_from_index + size, match_to_index + size
204
- if size > 0
205
- operations << [:equal,
206
- match_from_index, from_index,
207
- match_to_index, to_index]
208
- end
209
- end
210
- operations
211
- end
212
-
213
- def compute_ratio
214
- matches = blocks.inject(0) {|result, block| result + block[-1]}
215
- length = @from.length + @to.length
216
- if length.zero?
217
- 1.0
218
- else
219
- 2.0 * matches / length
220
- end
221
- end
222
-
223
- def determine_tag(from_index, to_index,
224
- match_from_index, match_to_index)
225
- if from_index < match_from_index and to_index < match_to_index
226
- :replace
227
- elsif from_index < match_from_index
228
- :delete
229
- elsif to_index < match_to_index
230
- :insert
231
- else
232
- :equal
233
- end
234
- end
235
-
236
- def expand_edge_equal_operations!(_operations, context_size)
237
- tag, from_start, from_end, to_start, to_end = _operations[0]
238
- if tag == :equal
239
- _operations[0] = [tag,
240
- [from_start, from_end - context_size].max,
241
- from_end,
242
- [to_start, to_end - context_size].max,
243
- to_end]
244
- end
245
-
246
- tag, from_start, from_end, to_start, to_end = _operations[-1]
247
- if tag == :equal
248
- _operations[-1] = [tag,
249
- from_start,
250
- [from_end, from_start + context_size].min,
251
- to_start,
252
- [to_end, to_start + context_size].min]
253
- end
254
- end
255
- end
256
-
257
- class Differ
258
- def initialize(from, to)
259
- @from = from
260
- @to = to
261
- end
262
-
263
- private
264
- def tag(mark, contents)
265
- contents.collect {|content| "#{mark}#{content}"}
266
- end
267
- end
268
-
269
- class ReadableDiffer < Differ
270
- def diff(options={})
271
- result = []
272
- matcher = SequenceMatcher.new(@from, @to)
273
- matcher.operations.each do |args|
274
- tag, from_start, from_end, to_start, to_end = args
275
- case tag
276
- when :replace
277
- result.concat(diff_lines(from_start, from_end, to_start, to_end))
278
- when :delete
279
- result.concat(tag_deleted(@from[from_start...from_end]))
280
- when :insert
281
- result.concat(tag_inserted(@to[to_start...to_end]))
282
- when :equal
283
- result.concat(tag_equal(@from[from_start...from_end]))
284
- else
285
- raise "unknown tag: #{tag}"
286
- end
287
- end
288
- result
289
- end
290
-
291
- private
292
- def tag_deleted(contents)
293
- tag("- ", contents)
294
- end
295
-
296
- def tag_inserted(contents)
297
- tag("+ ", contents)
298
- end
299
-
300
- def tag_equal(contents)
301
- tag(" ", contents)
302
- end
303
-
304
- def tag_difference(contents)
305
- tag("? ", contents)
306
- end
307
-
308
- def find_diff_line_info(from_start, from_end, to_start, to_end)
309
- best_ratio = 0.74
310
- from_equal_index = to_equal_index = nil
311
- from_best_index = to_best_index = nil
312
-
313
- to_start.upto(to_end - 1) do |to_index|
314
- from_start.upto(from_end - 1) do |from_index|
315
- if @from[from_index] == @to[to_index]
316
- from_equal_index ||= from_index
317
- to_equal_index ||= to_index
318
- next
319
- end
320
-
321
- matcher = SequenceMatcher.new(@from[from_index], @to[to_index],
322
- &method(:space_character?))
323
- if matcher.ratio > best_ratio
324
- best_ratio = matcher.ratio
325
- from_best_index = from_index
326
- to_best_index = to_index
327
- end
328
- end
329
- end
330
-
331
- [best_ratio,
332
- from_equal_index, to_equal_index,
333
- from_best_index, to_best_index]
334
- end
335
-
336
- def diff_lines(from_start, from_end, to_start, to_end)
337
- cut_off = 0.75
338
-
339
- info = find_diff_line_info(from_start, from_end, to_start, to_end)
340
- best_ratio, from_equal_index, to_equal_index, *info = info
341
- from_best_index, to_best_index = info
342
-
343
- if best_ratio < cut_off
344
- if from_equal_index.nil?
345
- tagged_from = tag_deleted(@from[from_start...from_end])
346
- tagged_to = tag_inserted(@to[to_start...to_end])
347
- if to_end - to_start < from_end - from_start
348
- return tagged_to + tagged_from
349
- else
350
- return tagged_from + tagged_to
351
- end
352
- end
353
- from_best_index = from_equal_index
354
- to_best_index = to_equal_index
355
- best_ratio = 1.0
356
- end
357
-
358
- _diff_lines(from_start, from_best_index, to_start, to_best_index) +
359
- diff_line(@from[from_best_index], @to[to_best_index]) +
360
- _diff_lines(from_best_index + 1, from_end, to_best_index + 1, to_end)
361
- end
362
-
363
- def _diff_lines(from_start, from_end, to_start, to_end)
364
- if from_start < from_end
365
- if to_start < to_end
366
- diff_lines(from_start, from_end, to_start, to_end)
367
- else
368
- tag_deleted(@from[from_start...from_end])
369
- end
370
- else
371
- tag_inserted(@to[to_start...to_end])
372
- end
373
- end
374
-
375
- def diff_line(from_line, to_line)
376
- from_tags = ""
377
- to_tags = ""
378
- matcher = SequenceMatcher.new(from_line, to_line,
379
- &method(:space_character?))
380
- operations = matcher.operations
381
- operations.each do |tag, from_start, from_end, to_start, to_end|
382
- from_length = from_end - from_start
383
- to_length = to_end - to_start
384
- case tag
385
- when :replace
386
- from_tags << "^" * from_length
387
- to_tags << "^" * to_length
388
- when :delete
389
- from_tags << "-" * from_length
390
- when :insert
391
- to_tags << "+" * to_length
392
- when :equal
393
- from_tags << " " * from_length
394
- to_tags << " " * to_length
395
- else
396
- raise "unknown tag: #{tag}"
397
- end
398
- end
399
- format_diff_point(from_line, to_line, from_tags, to_tags)
400
- end
401
-
402
- def format_diff_point(from_line, to_line, from_tags, to_tags)
403
- common = [n_leading_characters(from_line, ?\t),
404
- n_leading_characters(to_line, ?\t)].min
405
- common = [common,
406
- n_leading_characters(from_tags[0, common], " "[0])].min
407
- from_tags = from_tags[common..-1].rstrip
408
- to_tags = to_tags[common..-1].rstrip
409
-
410
- result = tag_deleted([from_line])
411
- unless from_tags.empty?
412
- result.concat(tag_difference(["#{"\t" * common}#{from_tags}"]))
413
- end
414
- result.concat(tag_inserted([to_line]))
415
- unless to_tags.empty?
416
- result.concat(tag_difference(["#{"\t" * common}#{to_tags}"]))
417
- end
418
- result
419
- end
420
-
421
- def n_leading_characters(string, character)
422
- n = 0
423
- while string[n] == character
424
- n += 1
425
- end
426
- n
427
- end
428
-
429
- def space_character?(character)
430
- [" "[0], "\t"[0]].include?(character)
431
- end
432
- end
433
-
434
- class UnifiedDiffer < Differ
435
- def diff(options={})
436
- groups = SequenceMatcher.new(@from, @to).grouped_operations
437
- return [] if groups.empty?
438
- return [] if same_content?(groups)
439
-
440
- show_context = options[:show_context]
441
- show_context = true if show_context.nil?
442
- result = ["--- #{options[:from_label]}".rstrip,
443
- "+++ #{options[:to_label]}".rstrip]
444
- groups.each do |operations|
445
- result << format_summary(operations, show_context)
446
- operations.each do |args|
447
- operation_tag, from_start, from_end, to_start, to_end = args
448
- case operation_tag
449
- when :replace
450
- result.concat(tag("-", @from[from_start...from_end]))
451
- result.concat(tag("+", @to[to_start...to_end]))
452
- when :delete
453
- result.concat(tag("-", @from[from_start...from_end]))
454
- when :insert
455
- result.concat(tag("+", @to[to_start...to_end]))
456
- when :equal
457
- result.concat(tag(" ", @from[from_start...from_end]))
458
- end
459
- end
460
- end
461
- result
462
- end
463
-
464
- private
465
- def same_content?(groups)
466
- return false if groups.size != 1
467
- group = groups[0]
468
- return false if group.size != 1
469
- tag, from_start, from_end, to_start, to_end = group[0]
470
-
471
- tag == :equal and [from_start, from_end] == [to_start, to_end]
472
- end
473
-
474
- def format_summary(operations, show_context)
475
- _, first_from_start, _, first_to_start, _ = operations[0]
476
- _, _, last_from_end, _, last_to_end = operations[-1]
477
- summary = "@@ -%d,%d +%d,%d @@" % [first_from_start + 1,
478
- last_from_end - first_from_start,
479
- first_to_start + 1,
480
- last_to_end - first_to_start,]
481
- if show_context
482
- interesting_line = find_interesting_line(first_from_start,
483
- first_to_start,
484
- :define_line?)
485
- summary << " #{interesting_line}" if interesting_line
486
- end
487
- summary
488
- end
489
-
490
- def find_interesting_line(from_start, to_start, predicate)
491
- from_index = from_start
492
- to_index = to_start
493
- while from_index >= 0 or to_index >= 0
494
- [@from[from_index], @to[to_index]].each do |line|
495
- return line if line and send(predicate, line)
496
- end
497
-
498
- from_index -= 1
499
- to_index -= 1
500
- end
501
- nil
502
- end
503
-
504
- def define_line?(line)
505
- /\A(?:[_a-zA-Z$]|\s*(?:class|module|def)\b)/ =~ line
506
- end
507
- end
508
-
509
- module_function
510
- def readable(from, to, options={})
511
- diff(ReadableDiffer, from, to, options)
512
- end
513
-
514
- def unified(from, to, options={})
515
- diff(UnifiedDiffer, from, to, options)
516
- end
517
-
518
- def diff(differ_class, from, to, options={})
519
- differ = differ_class.new(from.split(/\r?\n/), to.split(/\r?\n/))
520
- differ.diff(options).join("\n")
521
- end
522
- end
523
- end
524
- end