rmagick 2.13.2 → 4.2.2

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

Potentially problematic release.


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

Files changed (380) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +17 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +107 -0
  6. data/.gitignore +25 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +37 -0
  9. data/.rubocop_todo.yml +449 -0
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +1277 -0
  12. data/CODE_OF_CONDUCT.md +128 -0
  13. data/CONTRIBUTING.md +81 -0
  14. data/Gemfile +4 -0
  15. data/LICENSE +20 -0
  16. data/README.md +324 -0
  17. data/Rakefile +190 -0
  18. data/before_install_linux.sh +69 -0
  19. data/before_install_osx.sh +57 -0
  20. data/deprecated/RMagick.rb +6 -0
  21. data/ext/RMagick/extconf.rb +334 -333
  22. data/ext/RMagick/rmagick.c +129 -127
  23. data/ext/RMagick/rmagick.h +221 -320
  24. data/ext/RMagick/rmdraw.c +458 -767
  25. data/ext/RMagick/rmenum.c +305 -752
  26. data/ext/RMagick/rmfill.c +231 -199
  27. data/ext/RMagick/rmilist.c +437 -478
  28. data/ext/RMagick/rmimage.c +6130 -5342
  29. data/ext/RMagick/rminfo.c +695 -833
  30. data/ext/RMagick/rmkinfo.c +198 -0
  31. data/ext/RMagick/rmmain.c +752 -506
  32. data/ext/RMagick/rmmontage.c +94 -152
  33. data/ext/RMagick/rmpixel.c +619 -425
  34. data/ext/RMagick/rmstruct.c +206 -309
  35. data/ext/RMagick/rmutil.c +514 -344
  36. data/lib/rmagick/version.rb +5 -0
  37. data/lib/rmagick.rb +1 -0
  38. data/lib/rmagick_internal.rb +1922 -0
  39. data/lib/rvg/clippath.rb +35 -39
  40. data/lib/rvg/container.rb +123 -124
  41. data/lib/rvg/deep_equal.rb +45 -49
  42. data/lib/rvg/describable.rb +41 -47
  43. data/lib/rvg/embellishable.rb +380 -411
  44. data/lib/rvg/misc.rb +691 -711
  45. data/lib/rvg/paint.rb +43 -47
  46. data/lib/rvg/pathdata.rb +119 -125
  47. data/lib/rvg/rvg.rb +214 -213
  48. data/lib/rvg/stretchable.rb +153 -162
  49. data/lib/rvg/stylable.rb +111 -117
  50. data/lib/rvg/text.rb +169 -180
  51. data/lib/rvg/transformable.rb +121 -127
  52. data/lib/rvg/units.rb +58 -61
  53. data/rmagick.gemspec +36 -16
  54. metadata +188 -365
  55. data/ChangeLog +0 -773
  56. data/Doxyfile +0 -1514
  57. data/README-Mac-OSX.txt +0 -1
  58. data/README.html +0 -10
  59. data/build_tarball.rake +0 -215
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3269
  66. data/doc/ex/InitialCoords.rb +0 -23
  67. data/doc/ex/NewCoordSys.rb +0 -32
  68. data/doc/ex/OrigCoordSys.rb +0 -18
  69. data/doc/ex/PreserveAspectRatio.rb +0 -205
  70. data/doc/ex/RotateScale.rb +0 -37
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -16
  73. data/doc/ex/Use02.rb +0 -21
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -33
  76. data/doc/ex/adaptive_threshold.rb +0 -10
  77. data/doc/ex/add_noise.rb +0 -17
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -33
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -61
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -18
  87. data/doc/ex/bilevel_channel.rb +0 -9
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -44
  91. data/doc/ex/cbezier1.rb +0 -42
  92. data/doc/ex/cbezier2.rb +0 -42
  93. data/doc/ex/cbezier3.rb +0 -42
  94. data/doc/ex/cbezier4.rb +0 -43
  95. data/doc/ex/cbezier5.rb +0 -43
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -26
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -17
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -60
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -48
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -23
  111. data/doc/ex/composite.rb +0 -135
  112. data/doc/ex/composite_layers.rb +0 -53
  113. data/doc/ex/composite_tiled.rb +0 -23
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -46
  117. data/doc/ex/cubic01.rb +0 -45
  118. data/doc/ex/cubic02.rb +0 -94
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -13
  121. data/doc/ex/drawcomp.rb +0 -42
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -22
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -43
  130. data/doc/ex/fill_pattern.rb +0 -26
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -34
  135. data/doc/ex/fonts.rb +0 -20
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -42
  139. data/doc/ex/get_pixels.rb +0 -48
  140. data/doc/ex/get_type_metrics.rb +0 -146
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -46
  143. data/doc/ex/gravity.rb +0 -79
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -46
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.wmf +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.wmf +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.wmf +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/logo400x83.gif +0 -0
  221. data/doc/ex/images/model.miff +0 -0
  222. data/doc/ex/images/notimplemented.gif +0 -0
  223. data/doc/ex/images/smile.miff +0 -0
  224. data/doc/ex/images/spin.gif +0 -0
  225. data/doc/ex/implode.rb +0 -34
  226. data/doc/ex/level.rb +0 -11
  227. data/doc/ex/level_colors.rb +0 -11
  228. data/doc/ex/line.rb +0 -42
  229. data/doc/ex/line01.rb +0 -23
  230. data/doc/ex/mask.rb +0 -36
  231. data/doc/ex/matte_fill_to_border.rb +0 -40
  232. data/doc/ex/matte_floodfill.rb +0 -33
  233. data/doc/ex/matte_replace.rb +0 -40
  234. data/doc/ex/median_filter.rb +0 -28
  235. data/doc/ex/modulate.rb +0 -11
  236. data/doc/ex/mono.rb +0 -23
  237. data/doc/ex/morph.rb +0 -26
  238. data/doc/ex/mosaic.rb +0 -35
  239. data/doc/ex/motion_blur.rb +0 -11
  240. data/doc/ex/negate.rb +0 -11
  241. data/doc/ex/negate_channel.rb +0 -9
  242. data/doc/ex/nested_rvg.rb +0 -21
  243. data/doc/ex/nonzero.rb +0 -43
  244. data/doc/ex/normalize.rb +0 -11
  245. data/doc/ex/oil_paint.rb +0 -11
  246. data/doc/ex/opacity.rb +0 -37
  247. data/doc/ex/ordered_dither.rb +0 -11
  248. data/doc/ex/path.rb +0 -64
  249. data/doc/ex/pattern1.rb +0 -25
  250. data/doc/ex/pattern2.rb +0 -26
  251. data/doc/ex/polaroid.rb +0 -28
  252. data/doc/ex/polygon.rb +0 -24
  253. data/doc/ex/polygon01.rb +0 -23
  254. data/doc/ex/polyline.rb +0 -23
  255. data/doc/ex/polyline01.rb +0 -23
  256. data/doc/ex/posterize.rb +0 -8
  257. data/doc/ex/preview.rb +0 -9
  258. data/doc/ex/qbezierpath.rb +0 -52
  259. data/doc/ex/quad01.rb +0 -36
  260. data/doc/ex/quantize-m.rb +0 -25
  261. data/doc/ex/radial_blur.rb +0 -9
  262. data/doc/ex/raise.rb +0 -8
  263. data/doc/ex/random_threshold_channel.rb +0 -13
  264. data/doc/ex/rect01.rb +0 -15
  265. data/doc/ex/rect02.rb +0 -22
  266. data/doc/ex/rectangle.rb +0 -35
  267. data/doc/ex/reduce_noise.rb +0 -28
  268. data/doc/ex/remap.rb +0 -12
  269. data/doc/ex/remap_images.rb +0 -21
  270. data/doc/ex/resize_to_fill.rb +0 -10
  271. data/doc/ex/resize_to_fit.rb +0 -10
  272. data/doc/ex/roll.rb +0 -9
  273. data/doc/ex/rotate.rb +0 -45
  274. data/doc/ex/rotate_f.rb +0 -14
  275. data/doc/ex/roundrect.rb +0 -34
  276. data/doc/ex/rubyname.rb +0 -30
  277. data/doc/ex/rvg_clippath.rb +0 -14
  278. data/doc/ex/rvg_linecap.rb +0 -43
  279. data/doc/ex/rvg_linejoin.rb +0 -41
  280. data/doc/ex/rvg_opacity.rb +0 -19
  281. data/doc/ex/rvg_pattern.rb +0 -26
  282. data/doc/ex/rvg_stroke_dasharray.rb +0 -12
  283. data/doc/ex/segment.rb +0 -11
  284. data/doc/ex/sepiatone.rb +0 -8
  285. data/doc/ex/shade.rb +0 -11
  286. data/doc/ex/shadow.rb +0 -31
  287. data/doc/ex/shave.rb +0 -15
  288. data/doc/ex/shear.rb +0 -10
  289. data/doc/ex/sketch.rb +0 -18
  290. data/doc/ex/skewx.rb +0 -52
  291. data/doc/ex/skewy.rb +0 -47
  292. data/doc/ex/smile.rb +0 -125
  293. data/doc/ex/solarize.rb +0 -11
  294. data/doc/ex/sparse_color.rb +0 -55
  295. data/doc/ex/splice.rb +0 -9
  296. data/doc/ex/spread.rb +0 -11
  297. data/doc/ex/stegano.rb +0 -55
  298. data/doc/ex/stroke_dasharray.rb +0 -43
  299. data/doc/ex/stroke_fill.rb +0 -11
  300. data/doc/ex/stroke_linecap.rb +0 -44
  301. data/doc/ex/stroke_linejoin.rb +0 -48
  302. data/doc/ex/stroke_width.rb +0 -49
  303. data/doc/ex/swirl.rb +0 -17
  304. data/doc/ex/text.rb +0 -37
  305. data/doc/ex/text01.rb +0 -17
  306. data/doc/ex/text_align.rb +0 -36
  307. data/doc/ex/text_antialias.rb +0 -38
  308. data/doc/ex/text_styles.rb +0 -21
  309. data/doc/ex/text_undercolor.rb +0 -28
  310. data/doc/ex/texture_fill_to_border.rb +0 -34
  311. data/doc/ex/texture_floodfill.rb +0 -32
  312. data/doc/ex/texturefill.rb +0 -25
  313. data/doc/ex/threshold.rb +0 -13
  314. data/doc/ex/to_blob.rb +0 -14
  315. data/doc/ex/translate.rb +0 -39
  316. data/doc/ex/transparent.rb +0 -38
  317. data/doc/ex/transpose.rb +0 -9
  318. data/doc/ex/transverse.rb +0 -9
  319. data/doc/ex/tref01.rb +0 -25
  320. data/doc/ex/triangle01.rb +0 -16
  321. data/doc/ex/trim.rb +0 -24
  322. data/doc/ex/tspan01.rb +0 -18
  323. data/doc/ex/tspan02.rb +0 -19
  324. data/doc/ex/tspan03.rb +0 -21
  325. data/doc/ex/unsharp_mask.rb +0 -28
  326. data/doc/ex/viewex.rb +0 -35
  327. data/doc/ex/vignette.rb +0 -12
  328. data/doc/ex/watermark.rb +0 -28
  329. data/doc/ex/wave.rb +0 -9
  330. data/doc/ex/wet_floor.rb +0 -59
  331. data/doc/ex/writing_mode01.rb +0 -27
  332. data/doc/ex/writing_mode02.rb +0 -26
  333. data/doc/ilist.html +0 -2056
  334. data/doc/image1.html +0 -4680
  335. data/doc/image2.html +0 -3665
  336. data/doc/image3.html +0 -4522
  337. data/doc/imageattrs.html +0 -1638
  338. data/doc/imusage.html +0 -514
  339. data/doc/index.html +0 -416
  340. data/doc/info.html +0 -1499
  341. data/doc/magick.html +0 -565
  342. data/doc/optequiv.html +0 -2435
  343. data/doc/rvg.html +0 -975
  344. data/doc/rvgclip.html +0 -248
  345. data/doc/rvggroup.html +0 -305
  346. data/doc/rvgimage.html +0 -289
  347. data/doc/rvgpattern.html +0 -475
  348. data/doc/rvgshape.html +0 -406
  349. data/doc/rvgstyle.html +0 -270
  350. data/doc/rvgtext.html +0 -465
  351. data/doc/rvgtspan.html +0 -238
  352. data/doc/rvgtut.html +0 -530
  353. data/doc/rvguse.html +0 -145
  354. data/doc/rvgxform.html +0 -294
  355. data/doc/scripts/doc.js +0 -22
  356. data/doc/scripts/stripeTables.js +0 -23
  357. data/doc/struct.html +0 -1339
  358. data/doc/usage.html +0 -1621
  359. data/examples/constitute.rb +0 -7
  360. data/examples/crop_with_gravity.rb +0 -46
  361. data/examples/demo.rb +0 -324
  362. data/examples/describe.rb +0 -44
  363. data/examples/find_similar_region.rb +0 -34
  364. data/examples/histogram.rb +0 -325
  365. data/examples/identify.rb +0 -187
  366. data/examples/image_opacity.rb +0 -29
  367. data/examples/import_export.rb +0 -31
  368. data/examples/pattern_fill.rb +0 -38
  369. data/examples/rotating_text.rb +0 -45
  370. data/examples/spinner.rb +0 -50
  371. data/examples/thumbnail.rb +0 -65
  372. data/examples/vignette.rb +0 -79
  373. data/ext/RMagick/MANIFEST +0 -358
  374. data/lib/RMagick.rb +0 -1962
  375. data/metaconfig +0 -7
  376. data/post-clean.rb +0 -12
  377. data/post-install.rb +0 -50
  378. data/post-setup.rb +0 -254
  379. data/setup.rb +0 -1585
  380. data/uninstall.rb +0 -76
@@ -14,41 +14,53 @@
14
14
 
15
15
 
16
16
 
17
+ static VALUE rm_yield_handle_exception(VALUE, VALUE) ATTRIBUTE_NORETURN;
18
+
19
+ static VALUE
20
+ rm_yield_body(VALUE object)
21
+ {
22
+ return rb_yield(object);
23
+ }
24
+
25
+ static VALUE
26
+ rm_yield_handle_exception(VALUE allocated_area, VALUE exc)
27
+ {
28
+ magick_free((void *)allocated_area);
29
+ rb_exc_raise(exc);
30
+ }
17
31
 
18
32
  /**
19
33
  * If called with the optional block, iterates over the colors, otherwise
20
- * returns an array of Magick::Color objects.
34
+ * returns an array of {Magick::Color} objects.
21
35
  *
22
- * Ruby usage:
23
- * - @verbatim Magick::colors @endverbatim
24
- * - @verbatim Magick::colors { |colorinfo| } @endverbatim
36
+ * @overload colors
37
+ * @return [Array<Magick::Color>] the array of {Magick::Color}
25
38
  *
26
- * Notes:
27
- * - There are 3 implementations.
39
+ * @overload colors
40
+ * @yield [colorinfo]
41
+ * @yieldparam colorinfo [Magick::Color] the color
28
42
  *
29
- * @param class the class on which the method is run.
30
- * @return either the input class (if a block was given) or the array of colors.
31
43
  */
32
44
  VALUE
33
45
  Magick_colors(VALUE class)
34
46
  {
35
47
  const ColorInfo **color_info_list;
36
- unsigned long number_colors, x;
37
- volatile VALUE ary;
38
- ExceptionInfo exception;
48
+ size_t number_colors, x;
49
+ VALUE ary;
50
+ ExceptionInfo *exception;
39
51
 
40
- GetExceptionInfo(&exception);
52
+ exception = AcquireExceptionInfo();
41
53
 
42
- color_info_list = GetColorInfoList("*", &number_colors, &exception);
43
- CHECK_EXCEPTION()
44
- (void) DestroyExceptionInfo(&exception);
54
+ color_info_list = GetColorInfoList("*", &number_colors, exception);
55
+ CHECK_EXCEPTION();
56
+ DestroyExceptionInfo(exception);
45
57
 
46
58
 
47
59
  if (rb_block_given_p())
48
60
  {
49
61
  for (x = 0; x < number_colors; x++)
50
62
  {
51
- (void) rb_yield(Import_ColorInfo(color_info_list[x]));
63
+ rb_rescue(rm_yield_body, Import_ColorInfo(color_info_list[x]), rm_yield_handle_exception, (VALUE)color_info_list);
52
64
  }
53
65
  magick_free((void *)color_info_list);
54
66
  return class;
@@ -58,10 +70,11 @@ Magick_colors(VALUE class)
58
70
  ary = rb_ary_new2((long) number_colors);
59
71
  for (x = 0; x < number_colors; x++)
60
72
  {
61
- (void) rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
73
+ rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
62
74
  }
63
75
 
64
76
  magick_free((void *)color_info_list);
77
+ RB_GC_GUARD(ary);
65
78
  return ary;
66
79
  }
67
80
  }
@@ -69,33 +82,34 @@ Magick_colors(VALUE class)
69
82
 
70
83
  /**
71
84
  * If called with the optional block, iterates over the fonts, otherwise returns
72
- * an array of Magick::Font objects.
85
+ * an array of {Magick::Font} objects.
73
86
  *
74
- * Ruby usage:
75
- * - @verbatim Magick::fonts @endverbatim
76
- * - @verbatim Magick::fonts { |fontinfo| } @endverbatim
87
+ * @overload fonts
88
+ * @return [Array<Magick::Font>] the array of {Magick::Font}
89
+ *
90
+ * @overload fonts
91
+ * @yield [fontinfo]
92
+ * @yieldparam fontinfo [Magick::Font] the font
77
93
  *
78
- * @param class the class on which the method is run.
79
- * @return either the input class (if a block was given) or the array of fonts.
80
94
  */
81
95
  VALUE
82
96
  Magick_fonts(VALUE class)
83
97
  {
84
98
  const TypeInfo **type_info;
85
- unsigned long number_types, x;
86
- volatile VALUE ary;
87
- ExceptionInfo exception;
99
+ size_t number_types, x;
100
+ VALUE ary;
101
+ ExceptionInfo *exception;
88
102
 
89
- GetExceptionInfo(&exception);
90
- type_info = GetTypeInfoList("*", &number_types, &exception);
91
- CHECK_EXCEPTION()
92
- (void) DestroyExceptionInfo(&exception);
103
+ exception = AcquireExceptionInfo();
104
+ type_info = GetTypeInfoList("*", &number_types, exception);
105
+ CHECK_EXCEPTION();
106
+ DestroyExceptionInfo(exception);
93
107
 
94
108
  if (rb_block_given_p())
95
109
  {
96
110
  for (x = 0; x < number_types; x++)
97
111
  {
98
- (void) rb_yield(Import_TypeInfo((const TypeInfo *)type_info[x]));
112
+ rb_rescue(rm_yield_body, Import_TypeInfo((const TypeInfo *)type_info[x]), rm_yield_handle_exception, (VALUE)type_info);
99
113
  }
100
114
  magick_free((void *)type_info);
101
115
  return class;
@@ -105,9 +119,10 @@ Magick_fonts(VALUE class)
105
119
  ary = rb_ary_new2((long)number_types);
106
120
  for (x = 0; x < number_types; x++)
107
121
  {
108
- (void) rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
122
+ rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
109
123
  }
110
124
  magick_free((void *)type_info);
125
+ RB_GC_GUARD(ary);
111
126
  return ary;
112
127
  }
113
128
 
@@ -122,7 +137,7 @@ Magick_fonts(VALUE class)
122
137
  * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
123
138
  * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
124
139
  * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
125
- *
140
+ *
126
141
  * No Ruby usage (internal function)
127
142
  *
128
143
  * @param magick_info a MagickInfo object.
@@ -133,10 +148,10 @@ MagickInfo_to_format(const MagickInfo *magick_info)
133
148
  {
134
149
  char mode[4];
135
150
 
136
- mode[0] = magick_info->blob_support ? '*': ' ';
137
- mode[1] = magick_info->decoder ? 'r' : '-';
138
- mode[2] = magick_info->encoder ? 'w' : '-';
139
- mode[3] = magick_info->encoder && magick_info->adjoin ? '+' : '-';
151
+ mode[0] = GetMagickBlobSupport(magick_info) ? '*': ' ';
152
+ mode[1] = GetImageDecoder(magick_info) ? 'r' : '-';
153
+ mode[2] = GetImageEncoder(magick_info) ? 'w' : '-';
154
+ mode[3] = GetMagickAdjoin(magick_info) ? '+' : '-';
140
155
 
141
156
  return rb_str_new(mode, sizeof(mode));
142
157
  }
@@ -146,46 +161,39 @@ MagickInfo_to_format(const MagickInfo *magick_info)
146
161
  * Build the @@formats hash. The hash keys are image formats. The hash values
147
162
  * specify the format "mode string", i.e. a description of what ImageMagick can
148
163
  * do with that format. The mode string is in the form "BRWA", where
149
- * - "B" is "*" if the format has native blob support, or " " otherwise.
150
- * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
151
- * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
152
- * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
153
- *
154
- * Ruby usage:
155
- * - @verbatim Magick.init_formats @endverbatim
156
164
  *
157
- * Notes:
158
- * - Only called once.
159
- * - There are 3 implementations.
165
+ * - "B" is "*" if the format has native blob support, or " " otherwise.
166
+ * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
167
+ * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
168
+ * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
160
169
  *
161
- * @param class the class on which the method is run.
162
- * @return the formats hash.
163
- * @see MagickInfo_to_format
170
+ * @return [Hash] the formats hash.
164
171
  */
165
172
  VALUE
166
- Magick_init_formats(VALUE class)
173
+ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
167
174
  {
168
175
  const MagickInfo **magick_info;
169
- unsigned long number_formats, x;
170
- volatile VALUE formats;
171
- ExceptionInfo exception;
176
+ size_t number_formats, x;
177
+ VALUE formats;
178
+ ExceptionInfo *exception;
172
179
 
173
- class = class; // defeat "never referenced" message from icc
174
180
  formats = rb_hash_new();
175
181
 
176
182
  // IM 6.1.3 added an exception argument to GetMagickInfoList
177
- GetExceptionInfo(&exception);
178
- magick_info = GetMagickInfoList("*", &number_formats, &exception);
179
- CHECK_EXCEPTION()
180
- (void) DestroyExceptionInfo(&exception);
183
+ exception = AcquireExceptionInfo();
184
+ magick_info = GetMagickInfoList("*", &number_formats, exception);
185
+ CHECK_EXCEPTION();
186
+ DestroyExceptionInfo(exception);
181
187
 
182
188
 
183
189
  for (x = 0; x < number_formats; x++)
184
190
  {
185
- (void) rb_hash_aset(formats
186
- , rb_str_new2(magick_info[x]->name)
187
- , MagickInfo_to_format((const MagickInfo *)magick_info[x]));
191
+ rb_hash_aset(formats,
192
+ rb_str_new2(magick_info[x]->name),
193
+ MagickInfo_to_format((const MagickInfo *)magick_info[x]));
188
194
  }
195
+ magick_free((void *)magick_info);
196
+ RB_GC_GUARD(formats);
189
197
  return formats;
190
198
  }
191
199
 
@@ -194,19 +202,21 @@ Magick_init_formats(VALUE class)
194
202
  * Get/set resource limits. If a limit is specified the old limit is set to the
195
203
  * new value. Either way the current/old limit is returned.
196
204
  *
197
- * Ruby usage:
198
- * - @verbatim Magick.limit_resource(resource) @endverbatim
199
- * - @verbatim Magick.limit_resource(resource, limit) @endverbatim
205
+ * @overload limit_resource(resource)
206
+ * Get resource limits.
207
+ * @param resource [String, Symbol] the type of resource
200
208
  *
201
- * @param argc number of input arguments.
202
- * @param argv array of input arguments.
203
- * @param class the class on which the method is run.
204
- * @return the current/old limit.
209
+ * @overload limit_resource(resource, limit)
210
+ * Set resource limits.
211
+ * @param resource [String, Symbol] the type of resource
212
+ * @param limit [Numeric] the new limit number
213
+ *
214
+ * @return [Numeric] the old limit.
205
215
  */
206
216
  VALUE
207
217
  Magick_limit_resource(int argc, VALUE *argv, VALUE class)
208
218
  {
209
- volatile VALUE resource, limit;
219
+ VALUE resource, limit;
210
220
  ResourceType res = UndefinedResource;
211
221
  char *str;
212
222
  ID id;
@@ -241,6 +251,10 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
241
251
  {
242
252
  res = FileResource;
243
253
  }
254
+ else if (id == rb_intern("time"))
255
+ {
256
+ res = TimeResource;
257
+ }
244
258
  else
245
259
  {
246
260
  rb_raise(rb_eArgError, "unknown resource: `:%s'", rb_id2name(id));
@@ -248,7 +262,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
248
262
  break;
249
263
 
250
264
  default:
251
- str = StringValuePtr(resource);
265
+ str = StringValueCStr(resource);
252
266
  if (*str == '\0')
253
267
  {
254
268
  return class;
@@ -273,6 +287,10 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
273
287
  {
274
288
  res = FileResource;
275
289
  }
290
+ else if (rm_strcasecmp("time", str) == 0)
291
+ {
292
+ res = TimeResource;
293
+ }
276
294
  else
277
295
  {
278
296
  rb_raise(rb_eArgError, "unknown resource: `%s'", str);
@@ -280,13 +298,17 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
280
298
  break;
281
299
  }
282
300
 
301
+ RB_GC_GUARD(resource);
302
+
283
303
  cur_limit = GetMagickResourceLimit(res);
284
304
 
285
305
  if (argc > 1)
286
306
  {
287
- (void) SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
307
+ SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
288
308
  }
289
309
 
310
+ RB_GC_GUARD(limit);
311
+
290
312
  return ULONG2NUM(cur_limit);
291
313
  }
292
314
 
@@ -296,22 +318,14 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
296
318
  * threshold is exceeded, all subsequent pixels cache operations are to/from
297
319
  * disk.
298
320
  *
299
- * Ruby usage:
300
- * - @verbatim Magick.set_cache_threshold(megabytes) @endverbatim
301
- *
302
- * Notes:
303
- * - singleton method
304
- *
305
- * @param class the class on which the method is run.
306
- * @param threshold the number of megabytes to set.
307
- * @return the class.
321
+ * @param threshold [Numeric] the number of megabytes to set.
308
322
  */
309
323
  VALUE
310
324
  Magick_set_cache_threshold(VALUE class, VALUE threshold)
311
325
  {
312
326
  unsigned long thrshld = NUM2ULONG(threshold);
313
- (void) SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
314
- (void) SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
327
+ SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
328
+ SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
315
329
  return class;
316
330
  }
317
331
 
@@ -319,32 +333,25 @@ Magick_set_cache_threshold(VALUE class, VALUE threshold)
319
333
  /**
320
334
  * Set the log event mask.
321
335
  *
322
- * Ruby usage:
323
- * - @verbatim Magick.set_log_event_mask(event) @endverbatim
324
- * - @verbatim Magick.set_log_event_mask(event,...) @endverbatim
336
+ * The arguments are one of:
325
337
  *
326
- * Notes:
327
- * - "event" is one of
328
- * - "all"
329
- * - "annotate"
330
- * - "blob"
331
- * - "cache"
332
- * - "coder"
333
- * - "configure"
334
- * - "deprecate"
335
- * - "locale"
336
- * - "none"
337
- * - "render"
338
- * - "transform"
339
- * - "user"
340
- * - "x11"
341
- * - Multiple events can be specified.
342
- * - Event names may be capitalized.
338
+ * - "all"
339
+ * - "annotate"
340
+ * - "blob"
341
+ * - "cache"
342
+ * - "coder"
343
+ * - "configure"
344
+ * - "deprecate"
345
+ * - "locale"
346
+ * - "none"
347
+ * - "render"
348
+ * - "transform"
349
+ * - "user"
350
+ * - "x11"
343
351
  *
344
- * @param argc number of input arguments.
345
- * @param argv array of input arguments.
346
- * @param class the class on which the method is run.
347
- * @return the class.
352
+ * Multiple events can be specified as the aruments. Event names may be capitalized.
353
+ *
354
+ * @param args [String] the mask of log event.
348
355
  */
349
356
  VALUE
350
357
  Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
@@ -357,38 +364,33 @@ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
357
364
  }
358
365
  for (x = 0; x < argc; x++)
359
366
  {
360
- (void) SetLogEventMask(StringValuePtr(argv[x]));
367
+ SetLogEventMask(StringValueCStr(argv[x]));
361
368
  }
362
369
  return class;
363
370
  }
364
371
 
365
372
  /**
366
373
  * Set the format for log messages.
367
- *
368
- * Ruby usage:
369
- * - @verbatim Magick.set_log_format(format) @endverbatim
370
374
  *
371
- * Notes:
372
- * - Format is a string containing one or more of:
373
- * - %t - current time
374
- * - %r - elapsed time
375
- * - %u - user time
376
- * - %p - pid
377
- * - %m - module (source file name)
378
- * - %f - function name
379
- * - %l - line number
380
- * - %d - event domain (one of the events listed above)
381
- * - %e - event name
382
- * - Plus other characters, including \\n, etc.
375
+ * Format is a string containing one or more of:
376
+ *
377
+ * - %t - current time
378
+ * - %r - elapsed time
379
+ * - %u - user time
380
+ * - %p - pid
381
+ * - %m - module (source file name)
382
+ * - %f - function name
383
+ * - %l - line number
384
+ * - %d - event domain (one of the events listed above)
385
+ * - %e - event name
386
+ * - Plus other characters, including \\n, etc.
383
387
  *
384
- * @param class the class on which the method is run.
385
- * @param format the format to set.
386
- * @return the class.
388
+ * @param format [String] the format to set.
387
389
  */
388
390
  VALUE
389
391
  Magick_set_log_format(VALUE class, VALUE format)
390
392
  {
391
- SetLogFormat(StringValuePtr(format));
393
+ SetLogFormat(StringValueCStr(format));
392
394
  return class;
393
395
  }
394
396