rmagick 3.2.0 → 4.3.0

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 (420) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.devcontainer/Dockerfile +14 -0
  4. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  5. data/.devcontainer/devcontainer.json +11 -0
  6. data/.devcontainer/setup-repo.sh +10 -0
  7. data/.devcontainer/setup-user.sh +45 -0
  8. data/.editorconfig +3 -0
  9. data/.github/ISSUE_TEMPLATE.md +17 -0
  10. data/.github/workflows/ci.yml +79 -0
  11. data/.gitignore +3 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +24 -0
  14. data/.rubocop_todo.yml +151 -297
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +233 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +14 -10
  19. data/README.md +326 -0
  20. data/Rakefile +16 -22
  21. data/before_install_linux.sh +22 -28
  22. data/before_install_osx.sh +57 -2
  23. data/ext/RMagick/extconf.rb +149 -105
  24. data/ext/RMagick/rmagick.c +77 -104
  25. data/ext/RMagick/rmagick.h +121 -103
  26. data/ext/RMagick/rmdraw.c +364 -436
  27. data/ext/RMagick/rmenum.c +106 -114
  28. data/ext/RMagick/rmfill.c +149 -70
  29. data/ext/RMagick/rmilist.c +225 -367
  30. data/ext/RMagick/rmimage.c +4751 -4405
  31. data/ext/RMagick/rminfo.c +574 -787
  32. data/ext/RMagick/rmkinfo.c +51 -121
  33. data/ext/RMagick/rmmain.c +454 -286
  34. data/ext/RMagick/rmmontage.c +64 -130
  35. data/ext/RMagick/rmpixel.c +488 -437
  36. data/ext/RMagick/rmstruct.c +83 -96
  37. data/ext/RMagick/rmutil.c +302 -214
  38. data/lib/rmagick/version.rb +1 -1
  39. data/lib/rmagick_internal.rb +138 -93
  40. data/lib/rvg/clippath.rb +2 -1
  41. data/lib/rvg/container.rb +10 -5
  42. data/lib/rvg/describable.rb +1 -1
  43. data/lib/rvg/embellishable.rb +5 -4
  44. data/lib/rvg/misc.rb +15 -12
  45. data/lib/rvg/paint.rb +2 -1
  46. data/lib/rvg/pathdata.rb +12 -11
  47. data/lib/rvg/rvg.rb +12 -8
  48. data/lib/rvg/stylable.rb +9 -7
  49. data/lib/rvg/text.rb +11 -6
  50. data/lib/rvg/transformable.rb +3 -2
  51. data/lib/rvg/units.rb +1 -1
  52. data/rmagick.gemspec +10 -11
  53. metadata +52 -423
  54. data/.appveyor.yml +0 -45
  55. data/.circleci/config.yml +0 -56
  56. data/.ruby-version +0 -1
  57. data/.simplecov +0 -27
  58. data/.travis.yml +0 -62
  59. data/Doxyfile +0 -1514
  60. data/README.textile +0 -259
  61. data/benchmarks/memory/README.md +0 -50
  62. data/benchmarks/memory/image_new.rb +0 -8
  63. data/benchmarks/memory/rmagick.gnuplot +0 -16
  64. data/doc/.cvsignore +0 -1
  65. data/doc/comtasks.html +0 -287
  66. data/doc/constants.html +0 -1581
  67. data/doc/css/doc.css +0 -299
  68. data/doc/css/popup.css +0 -34
  69. data/doc/css/ref.css +0 -67
  70. data/doc/draw.html +0 -3272
  71. data/doc/ex/InitialCoords.rb +0 -22
  72. data/doc/ex/NewCoordSys.rb +0 -30
  73. data/doc/ex/OrigCoordSys.rb +0 -16
  74. data/doc/ex/PreserveAspectRatio.rb +0 -204
  75. data/doc/ex/RotateScale.rb +0 -36
  76. data/doc/ex/Skew.rb +0 -38
  77. data/doc/ex/Use01.rb +0 -15
  78. data/doc/ex/Use02.rb +0 -20
  79. data/doc/ex/Use03.rb +0 -16
  80. data/doc/ex/ViewBox.rb +0 -31
  81. data/doc/ex/adaptive_threshold.rb +0 -9
  82. data/doc/ex/add_noise.rb +0 -16
  83. data/doc/ex/affine.rb +0 -48
  84. data/doc/ex/affine_transform.rb +0 -20
  85. data/doc/ex/arc.rb +0 -49
  86. data/doc/ex/arcpath.rb +0 -32
  87. data/doc/ex/arcs01.rb +0 -28
  88. data/doc/ex/arcs02.rb +0 -59
  89. data/doc/ex/average.rb +0 -15
  90. data/doc/ex/axes.rb +0 -64
  91. data/doc/ex/baseline_shift01.rb +0 -17
  92. data/doc/ex/bilevel_channel.rb +0 -8
  93. data/doc/ex/blur_image.rb +0 -12
  94. data/doc/ex/border.rb +0 -10
  95. data/doc/ex/bounding_box.rb +0 -42
  96. data/doc/ex/cbezier1.rb +0 -41
  97. data/doc/ex/cbezier2.rb +0 -41
  98. data/doc/ex/cbezier3.rb +0 -41
  99. data/doc/ex/cbezier4.rb +0 -42
  100. data/doc/ex/cbezier5.rb +0 -42
  101. data/doc/ex/cbezier6.rb +0 -53
  102. data/doc/ex/channel.rb +0 -25
  103. data/doc/ex/charcoal.rb +0 -12
  104. data/doc/ex/chop.rb +0 -29
  105. data/doc/ex/circle.rb +0 -33
  106. data/doc/ex/circle01.rb +0 -16
  107. data/doc/ex/clip_path.rb +0 -60
  108. data/doc/ex/coalesce.rb +0 -57
  109. data/doc/ex/color_fill_to_border.rb +0 -29
  110. data/doc/ex/color_floodfill.rb +0 -28
  111. data/doc/ex/color_histogram.rb +0 -47
  112. data/doc/ex/color_reset.rb +0 -11
  113. data/doc/ex/colorize.rb +0 -16
  114. data/doc/ex/colors.rb +0 -64
  115. data/doc/ex/compose_mask.rb +0 -22
  116. data/doc/ex/composite.rb +0 -133
  117. data/doc/ex/composite_layers.rb +0 -52
  118. data/doc/ex/composite_tiled.rb +0 -21
  119. data/doc/ex/contrast.rb +0 -36
  120. data/doc/ex/crop.rb +0 -31
  121. data/doc/ex/crop_with_gravity.rb +0 -42
  122. data/doc/ex/cubic01.rb +0 -43
  123. data/doc/ex/cubic02.rb +0 -91
  124. data/doc/ex/cycle_colormap.rb +0 -21
  125. data/doc/ex/dissolve.rb +0 -12
  126. data/doc/ex/drawcomp.rb +0 -41
  127. data/doc/ex/drop_shadow.rb +0 -60
  128. data/doc/ex/edge.rb +0 -11
  129. data/doc/ex/ellipse.rb +0 -45
  130. data/doc/ex/ellipse01.rb +0 -21
  131. data/doc/ex/emboss.rb +0 -11
  132. data/doc/ex/enhance.rb +0 -28
  133. data/doc/ex/equalize.rb +0 -11
  134. data/doc/ex/evenodd.rb +0 -42
  135. data/doc/ex/fill_pattern.rb +0 -23
  136. data/doc/ex/flatten_images.rb +0 -36
  137. data/doc/ex/flip.rb +0 -11
  138. data/doc/ex/flop.rb +0 -11
  139. data/doc/ex/font_styles.rb +0 -32
  140. data/doc/ex/fonts.rb +0 -16
  141. data/doc/ex/frame.rb +0 -12
  142. data/doc/ex/gaussian_blur.rb +0 -11
  143. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  144. data/doc/ex/get_pixels.rb +0 -45
  145. data/doc/ex/get_type_metrics.rb +0 -142
  146. data/doc/ex/gradientfill.rb +0 -27
  147. data/doc/ex/grav.rb +0 -45
  148. data/doc/ex/gravity.rb +0 -78
  149. data/doc/ex/group.rb +0 -26
  150. data/doc/ex/hatchfill.rb +0 -27
  151. data/doc/ex/image.rb +0 -44
  152. data/doc/ex/images/Apple.miff +0 -0
  153. data/doc/ex/images/Ballerina.jpg +0 -0
  154. data/doc/ex/images/Ballerina3.jpg +0 -0
  155. data/doc/ex/images/Button_0.gif +0 -0
  156. data/doc/ex/images/Button_1.gif +0 -0
  157. data/doc/ex/images/Button_2.gif +0 -0
  158. data/doc/ex/images/Button_3.gif +0 -0
  159. data/doc/ex/images/Button_4.gif +0 -0
  160. data/doc/ex/images/Button_5.gif +0 -0
  161. data/doc/ex/images/Button_6.gif +0 -0
  162. data/doc/ex/images/Button_7.gif +0 -0
  163. data/doc/ex/images/Button_8.gif +0 -0
  164. data/doc/ex/images/Button_9.gif +0 -0
  165. data/doc/ex/images/Button_A.gif +0 -0
  166. data/doc/ex/images/Button_B.gif +0 -0
  167. data/doc/ex/images/Button_C.gif +0 -0
  168. data/doc/ex/images/Button_D.gif +0 -0
  169. data/doc/ex/images/Button_E.gif +0 -0
  170. data/doc/ex/images/Button_F.gif +0 -0
  171. data/doc/ex/images/Button_G.gif +0 -0
  172. data/doc/ex/images/Button_H.gif +0 -0
  173. data/doc/ex/images/Button_I.gif +0 -0
  174. data/doc/ex/images/Button_J.gif +0 -0
  175. data/doc/ex/images/Button_K.gif +0 -0
  176. data/doc/ex/images/Button_L.gif +0 -0
  177. data/doc/ex/images/Button_M.gif +0 -0
  178. data/doc/ex/images/Button_N.gif +0 -0
  179. data/doc/ex/images/Button_O.gif +0 -0
  180. data/doc/ex/images/Button_P.gif +0 -0
  181. data/doc/ex/images/Button_Q.gif +0 -0
  182. data/doc/ex/images/Button_R.gif +0 -0
  183. data/doc/ex/images/Button_S.gif +0 -0
  184. data/doc/ex/images/Button_T.gif +0 -0
  185. data/doc/ex/images/Button_U.gif +0 -0
  186. data/doc/ex/images/Button_V.gif +0 -0
  187. data/doc/ex/images/Button_W.gif +0 -0
  188. data/doc/ex/images/Button_X.gif +0 -0
  189. data/doc/ex/images/Button_Y.gif +0 -0
  190. data/doc/ex/images/Button_Z.gif +0 -0
  191. data/doc/ex/images/Cheetah.jpg +0 -0
  192. data/doc/ex/images/Coffee.png +0 -0
  193. data/doc/ex/images/Flower_Hat.jpg +0 -0
  194. data/doc/ex/images/Gold_Statue.jpg +0 -0
  195. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  197. data/doc/ex/images/Leaf.miff +0 -0
  198. data/doc/ex/images/No.png +0 -0
  199. data/doc/ex/images/Polynesia.jpg +0 -0
  200. data/doc/ex/images/Red_Rocks.jpg +0 -0
  201. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  202. data/doc/ex/images/Shorts.jpg +0 -0
  203. data/doc/ex/images/Snake.png +0 -0
  204. data/doc/ex/images/Violin.jpg +0 -0
  205. data/doc/ex/images/Yellow_Rose.miff +0 -0
  206. data/doc/ex/images/big-duck.gif +0 -0
  207. data/doc/ex/images/duck.gif +0 -0
  208. data/doc/ex/images/duck0.gif +0 -0
  209. data/doc/ex/images/duck1.gif +0 -0
  210. data/doc/ex/images/duck10.gif +0 -0
  211. data/doc/ex/images/duck11.gif +0 -0
  212. data/doc/ex/images/duck12.gif +0 -0
  213. data/doc/ex/images/duck13.gif +0 -0
  214. data/doc/ex/images/duck14.gif +0 -0
  215. data/doc/ex/images/duck15.gif +0 -0
  216. data/doc/ex/images/duck2.gif +0 -0
  217. data/doc/ex/images/duck3.gif +0 -0
  218. data/doc/ex/images/duck4.gif +0 -0
  219. data/doc/ex/images/duck5.gif +0 -0
  220. data/doc/ex/images/duck6.gif +0 -0
  221. data/doc/ex/images/duck7.gif +0 -0
  222. data/doc/ex/images/duck8.gif +0 -0
  223. data/doc/ex/images/duck9.gif +0 -0
  224. data/doc/ex/images/graydient230x6.gif +0 -0
  225. data/doc/ex/images/image_with_profile.jpg +0 -0
  226. data/doc/ex/images/logo400x83.gif +0 -0
  227. data/doc/ex/images/model.miff +0 -0
  228. data/doc/ex/images/notimplemented.gif +0 -0
  229. data/doc/ex/images/smile.miff +0 -0
  230. data/doc/ex/images/spin.gif +0 -0
  231. data/doc/ex/implode.rb +0 -34
  232. data/doc/ex/level.rb +0 -11
  233. data/doc/ex/level_colors.rb +0 -11
  234. data/doc/ex/line.rb +0 -41
  235. data/doc/ex/line01.rb +0 -21
  236. data/doc/ex/mask.rb +0 -35
  237. data/doc/ex/matte_fill_to_border.rb +0 -39
  238. data/doc/ex/matte_floodfill.rb +0 -32
  239. data/doc/ex/matte_replace.rb +0 -39
  240. data/doc/ex/median_filter.rb +0 -28
  241. data/doc/ex/modulate.rb +0 -11
  242. data/doc/ex/mono.rb +0 -23
  243. data/doc/ex/morph.rb +0 -25
  244. data/doc/ex/mosaic.rb +0 -37
  245. data/doc/ex/motion_blur.rb +0 -11
  246. data/doc/ex/negate.rb +0 -11
  247. data/doc/ex/negate_channel.rb +0 -9
  248. data/doc/ex/nested_rvg.rb +0 -21
  249. data/doc/ex/nonzero.rb +0 -42
  250. data/doc/ex/normalize.rb +0 -11
  251. data/doc/ex/oil_paint.rb +0 -11
  252. data/doc/ex/opacity.rb +0 -37
  253. data/doc/ex/ordered_dither.rb +0 -11
  254. data/doc/ex/path.rb +0 -63
  255. data/doc/ex/pattern1.rb +0 -25
  256. data/doc/ex/pattern2.rb +0 -26
  257. data/doc/ex/polaroid.rb +0 -26
  258. data/doc/ex/polygon.rb +0 -23
  259. data/doc/ex/polygon01.rb +0 -21
  260. data/doc/ex/polyline.rb +0 -22
  261. data/doc/ex/polyline01.rb +0 -21
  262. data/doc/ex/posterize.rb +0 -8
  263. data/doc/ex/preview.rb +0 -8
  264. data/doc/ex/qbezierpath.rb +0 -52
  265. data/doc/ex/quad01.rb +0 -34
  266. data/doc/ex/quantize-m.rb +0 -25
  267. data/doc/ex/radial_blur.rb +0 -9
  268. data/doc/ex/raise.rb +0 -8
  269. data/doc/ex/random_threshold_channel.rb +0 -13
  270. data/doc/ex/rect01.rb +0 -14
  271. data/doc/ex/rect02.rb +0 -20
  272. data/doc/ex/rectangle.rb +0 -34
  273. data/doc/ex/reduce_noise.rb +0 -28
  274. data/doc/ex/remap.rb +0 -11
  275. data/doc/ex/remap_images.rb +0 -19
  276. data/doc/ex/resize_to_fill.rb +0 -8
  277. data/doc/ex/resize_to_fit.rb +0 -8
  278. data/doc/ex/roll.rb +0 -9
  279. data/doc/ex/rotate.rb +0 -44
  280. data/doc/ex/rotate_f.rb +0 -14
  281. data/doc/ex/roundrect.rb +0 -33
  282. data/doc/ex/rubyname.rb +0 -30
  283. data/doc/ex/rvg_clippath.rb +0 -12
  284. data/doc/ex/rvg_linecap.rb +0 -42
  285. data/doc/ex/rvg_linejoin.rb +0 -40
  286. data/doc/ex/rvg_opacity.rb +0 -18
  287. data/doc/ex/rvg_pattern.rb +0 -26
  288. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  289. data/doc/ex/segment.rb +0 -11
  290. data/doc/ex/sepiatone.rb +0 -7
  291. data/doc/ex/shade.rb +0 -11
  292. data/doc/ex/shadow.rb +0 -30
  293. data/doc/ex/shave.rb +0 -15
  294. data/doc/ex/shear.rb +0 -10
  295. data/doc/ex/sketch.rb +0 -17
  296. data/doc/ex/skewx.rb +0 -51
  297. data/doc/ex/skewy.rb +0 -47
  298. data/doc/ex/smile.rb +0 -126
  299. data/doc/ex/solarize.rb +0 -11
  300. data/doc/ex/sparse_color.rb +0 -55
  301. data/doc/ex/splice.rb +0 -8
  302. data/doc/ex/spread.rb +0 -11
  303. data/doc/ex/stegano.rb +0 -54
  304. data/doc/ex/stroke_dasharray.rb +0 -42
  305. data/doc/ex/stroke_fill.rb +0 -10
  306. data/doc/ex/stroke_linecap.rb +0 -44
  307. data/doc/ex/stroke_linejoin.rb +0 -48
  308. data/doc/ex/stroke_width.rb +0 -49
  309. data/doc/ex/swirl.rb +0 -17
  310. data/doc/ex/text.rb +0 -37
  311. data/doc/ex/text01.rb +0 -16
  312. data/doc/ex/text_align.rb +0 -36
  313. data/doc/ex/text_antialias.rb +0 -37
  314. data/doc/ex/text_styles.rb +0 -19
  315. data/doc/ex/text_undercolor.rb +0 -28
  316. data/doc/ex/texture_fill_to_border.rb +0 -34
  317. data/doc/ex/texture_floodfill.rb +0 -32
  318. data/doc/ex/texturefill.rb +0 -24
  319. data/doc/ex/threshold.rb +0 -13
  320. data/doc/ex/to_blob.rb +0 -13
  321. data/doc/ex/translate.rb +0 -39
  322. data/doc/ex/transparent.rb +0 -38
  323. data/doc/ex/transpose.rb +0 -9
  324. data/doc/ex/transverse.rb +0 -9
  325. data/doc/ex/tref01.rb +0 -24
  326. data/doc/ex/triangle01.rb +0 -15
  327. data/doc/ex/trim.rb +0 -23
  328. data/doc/ex/tspan01.rb +0 -17
  329. data/doc/ex/tspan02.rb +0 -17
  330. data/doc/ex/tspan03.rb +0 -19
  331. data/doc/ex/unsharp_mask.rb +0 -28
  332. data/doc/ex/viewex.rb +0 -33
  333. data/doc/ex/vignette.rb +0 -12
  334. data/doc/ex/watermark.rb +0 -27
  335. data/doc/ex/wave.rb +0 -9
  336. data/doc/ex/wet_floor.rb +0 -58
  337. data/doc/ex/writing_mode01.rb +0 -26
  338. data/doc/ex/writing_mode02.rb +0 -26
  339. data/doc/ilist.html +0 -2056
  340. data/doc/image1.html +0 -4680
  341. data/doc/image2.html +0 -3665
  342. data/doc/image3.html +0 -4522
  343. data/doc/imageattrs.html +0 -1638
  344. data/doc/imusage.html +0 -514
  345. data/doc/index.html +0 -416
  346. data/doc/info.html +0 -1499
  347. data/doc/magick.html +0 -570
  348. data/doc/optequiv.html +0 -2435
  349. data/doc/rvg.html +0 -975
  350. data/doc/rvgclip.html +0 -248
  351. data/doc/rvggroup.html +0 -305
  352. data/doc/rvgimage.html +0 -289
  353. data/doc/rvgpattern.html +0 -475
  354. data/doc/rvgshape.html +0 -406
  355. data/doc/rvgstyle.html +0 -270
  356. data/doc/rvgtext.html +0 -465
  357. data/doc/rvgtspan.html +0 -238
  358. data/doc/rvgtut.html +0 -530
  359. data/doc/rvguse.html +0 -145
  360. data/doc/rvgxform.html +0 -294
  361. data/doc/scripts/doc.js +0 -22
  362. data/doc/scripts/stripeTables.js +0 -23
  363. data/doc/struct.html +0 -1339
  364. data/doc/usage.html +0 -1621
  365. data/examples/constitute.rb +0 -7
  366. data/examples/crop_with_gravity.rb +0 -42
  367. data/examples/demo.rb +0 -323
  368. data/examples/describe.rb +0 -41
  369. data/examples/find_similar_region.rb +0 -34
  370. data/examples/histogram.rb +0 -312
  371. data/examples/identify.rb +0 -174
  372. data/examples/image_opacity.rb +0 -28
  373. data/examples/import_export.rb +0 -31
  374. data/examples/pattern_fill.rb +0 -37
  375. data/examples/rotating_text.rb +0 -45
  376. data/examples/spinner.rb +0 -49
  377. data/examples/thumbnail.rb +0 -64
  378. data/examples/vignette.rb +0 -78
  379. data/lib/obsolete.rb +0 -66
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -155
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  383. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  384. data/spec/rmagick/image/composite_spec.rb +0 -72
  385. data/spec/rmagick/image/constitute_spec.rb +0 -13
  386. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  387. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  388. data/spec/rmagick/image/ping_spec.rb +0 -12
  389. data/spec/rmagick/image/properties_spec.rb +0 -27
  390. data/spec/rmagick/image/read_spec.rb +0 -28
  391. data/spec/spec_helper.rb +0 -10
  392. data/spec/support/issue_200/app.rb +0 -8
  393. data/test/Draw.rb +0 -351
  394. data/test/Enum.rb +0 -228
  395. data/test/Fill.rb +0 -93
  396. data/test/Image1.rb +0 -627
  397. data/test/Image2.rb +0 -1426
  398. data/test/Image3.rb +0 -1091
  399. data/test/ImageList1.rb +0 -858
  400. data/test/ImageList2.rb +0 -406
  401. data/test/Image_attributes.rb +0 -666
  402. data/test/Import_Export.rb +0 -115
  403. data/test/Info.rb +0 -444
  404. data/test/KernelInfo.rb +0 -67
  405. data/test/Magick.rb +0 -311
  406. data/test/Pixel.rb +0 -285
  407. data/test/PolaroidOptions.rb +0 -23
  408. data/test/Preview.rb +0 -26
  409. data/test/Struct.rb +0 -45
  410. data/test/appearance/Montage.rb +0 -26
  411. data/test/appearance/appearance_assertion.rb +0 -13
  412. data/test/appearance/expected/montage_border_color.jpg +0 -0
  413. data/test/cmyk.icm +0 -0
  414. data/test/lib/Obsolete.rb +0 -30
  415. data/test/lib/internal/Draw.rb +0 -823
  416. data/test/lib/internal/Geometry.rb +0 -98
  417. data/test/lib/internal/Magick.rb +0 -40
  418. data/test/srgb.icm +0 -0
  419. data/test/test_all_basic.rb +0 -49
  420. data/test/tmpnam_test.rb +0 -50
data/ext/RMagick/rmenum.c CHANGED
@@ -76,55 +76,54 @@ rm_enum_new(VALUE class, VALUE sym, VALUE val)
76
76
  static const char *
77
77
  rm_enum_to_cstr(VALUE enum_type)
78
78
  {
79
- MagickEnum *magick_enum;
79
+ MagickEnum *magick_enum;
80
80
 
81
- Data_Get_Struct(enum_type, MagickEnum, magick_enum);
82
- return rb_id2name(magick_enum->id);
81
+ Data_Get_Struct(enum_type, MagickEnum, magick_enum);
82
+ return rb_id2name(magick_enum->id);
83
83
  }
84
84
 
85
85
  /**
86
- * Enum class alloc function.
86
+ * Free Enum or Enum subclass object
87
87
  *
88
88
  * No Ruby usage (internal function)
89
89
  *
90
- * @param class the Ruby class to use
91
- * @return a new enumerator
90
+ * @param magick_enum the enum
91
+ */
92
+ static void rm_enum_free(void *magick_enum)
93
+ {
94
+ xfree(magick_enum);
95
+ }
96
+ /**
97
+ * Enum class alloc function.
98
+ *
99
+ * @return [Magick::Enum] a new enumerator
92
100
  */
93
101
  VALUE
94
102
  Enum_alloc(VALUE class)
95
103
  {
96
- MagickEnum *magick_enum;
97
- VALUE enumr;
98
-
99
- enumr = Data_Make_Struct(class, MagickEnum, NULL, NULL, magick_enum);
100
- rb_obj_freeze(enumr);
104
+ MagickEnum *magick_enum;
105
+ VALUE enumr;
101
106
 
102
- RB_GC_GUARD(enumr);
107
+ enumr = Data_Make_Struct(class, MagickEnum, NULL, rm_enum_free, magick_enum);
108
+ rb_obj_freeze(enumr);
103
109
 
104
- return enumr;
110
+ return enumr;
105
111
  }
106
112
 
107
113
 
108
114
  /**
109
115
  * "Case equal" operator for Enum.
110
116
  *
111
- * Ruby usage:
112
- * - @verbatim Enum#=== @endverbatim
113
- *
114
- * Notes:
115
- * - Yes, I know "case equal" is a misnomer.
116
- *
117
- * @param self this object
118
- * @param other the other object
119
- * @return true or false
117
+ * @param other [Object] the other object
118
+ * @return [Boolean] true or false
120
119
  */
121
120
  VALUE
122
121
  Enum_case_eq(VALUE self, VALUE other)
123
122
  {
124
- MagickEnum *this, *that;
125
-
126
123
  if (CLASS_OF(self) == CLASS_OF(other))
127
124
  {
125
+ MagickEnum *this, *that;
126
+
128
127
  Data_Get_Struct(self, MagickEnum, this);
129
128
  Data_Get_Struct(other, MagickEnum, that);
130
129
  return this->val == that->val ? Qtrue : Qfalse;
@@ -137,58 +136,43 @@ Enum_case_eq(VALUE self, VALUE other)
137
136
  /**
138
137
  * Initialize a new Enum instance.
139
138
  *
140
- * Ruby usage:
141
- * - @verbatim Enum#initialize(sym,val) @endverbatim
142
- *
143
- * @param self this object
144
- * @param sym the symbol
145
- * @param val the value for the symbol
146
- * @return self
139
+ * @param sym [Symbol] the symbol as enum name
140
+ * @param val [Numeric] the value for enum
141
+ * @return [Magick::Enum] self
147
142
  */
148
143
  VALUE
149
144
  Enum_initialize(VALUE self, VALUE sym, VALUE val)
150
145
  {
151
- MagickEnum *magick_enum;
146
+ MagickEnum *magick_enum;
152
147
 
153
- Data_Get_Struct(self, MagickEnum, magick_enum);
154
- magick_enum->id = rb_to_id(sym); /* convert symbol to ID */
155
- magick_enum->val = NUM2INT(val);
148
+ Data_Get_Struct(self, MagickEnum, magick_enum);
149
+ magick_enum->id = rb_to_id(sym); /* convert symbol to ID */
150
+ magick_enum->val = NUM2INT(val);
156
151
 
157
- return self;
152
+ return self;
158
153
  }
159
154
 
160
155
 
161
156
  /**
162
157
  * Return the value of an enum.
163
158
  *
164
- * Ruby usage:
165
- * - @verbatim Enum#to_i @endverbatim
166
- *
167
- * @param self this object
168
- * @return this object's value
159
+ * @return [Numeric] this object's value
169
160
  */
170
161
  VALUE
171
162
  Enum_to_i(VALUE self)
172
163
  {
173
- MagickEnum *magick_enum;
164
+ MagickEnum *magick_enum;
174
165
 
175
- Data_Get_Struct(self, MagickEnum, magick_enum);
176
- return INT2NUM(magick_enum->val);
166
+ Data_Get_Struct(self, MagickEnum, magick_enum);
167
+ return INT2NUM(magick_enum->val);
177
168
  }
178
169
 
179
170
 
180
171
  /**
181
172
  * Support Comparable module in Enum.
182
173
  *
183
- * Ruby usage:
184
- * - @verbatim Enum#<=> @endverbatim
185
- *
186
- * Notes:
187
- * - Enums must be instances of the same class to be equal.
188
- *
189
- * @param self this object
190
- * @param other the other object
191
- * @return -1, 0, 1, or nil
174
+ * @param other [Object] the other object
175
+ * @return [-1, 0, 1, nil] the result of compare
192
176
  */
193
177
  VALUE
194
178
  Enum_spaceship(VALUE self, VALUE other)
@@ -216,67 +200,52 @@ Enum_spaceship(VALUE self, VALUE other)
216
200
 
217
201
  /**
218
202
  * Bitwise OR for enums
219
- *
220
- * Ruby usage:
221
- * - @verbatim Enum1 | Enum2 @endverbatim
222
- *
223
- * Notes:
224
- * - Enums must be instances of the same class.
225
203
  *
226
- * @param Enum1 this object
227
- * @param Enum2 another enum
228
- * @return new Enum instance
204
+ * @param another [Magick::Enum] the another enum
205
+ * @return [Magick::Enum] new Enum instance
229
206
  */
230
207
  VALUE
231
208
  Enum_bitwise_or(VALUE self, VALUE another)
232
209
  {
233
- VALUE new_enum, cls;
234
- MagickEnum *this, *that, *new_enum_data;
210
+ VALUE new_enum, cls;
211
+ MagickEnum *this, *that, *new_enum_data;
235
212
 
236
- cls = CLASS_OF(self);
237
- if (CLASS_OF(another) != cls)
238
- {
239
- rb_raise(rb_eArgError, "Expected class %s but got %s", rb_class2name(cls), rb_class2name(CLASS_OF(another)));
240
- }
213
+ cls = CLASS_OF(self);
214
+ if (CLASS_OF(another) != cls)
215
+ {
216
+ rb_raise(rb_eArgError, "Expected class %s but got %s", rb_class2name(cls), rb_class2name(CLASS_OF(another)));
217
+ }
241
218
 
242
- new_enum = Enum_alloc(cls);
219
+ new_enum = Enum_alloc(cls);
243
220
 
244
- Data_Get_Struct(self, MagickEnum, this);
245
- Data_Get_Struct(another, MagickEnum, that);
246
- Data_Get_Struct(new_enum, MagickEnum, new_enum_data);
221
+ Data_Get_Struct(self, MagickEnum, this);
222
+ Data_Get_Struct(another, MagickEnum, that);
223
+ Data_Get_Struct(new_enum, MagickEnum, new_enum_data);
247
224
 
248
- new_enum_data->id = rb_to_id(rb_sprintf("%s|%s", rb_id2name(this->id), rb_id2name(that->id)));
249
- new_enum_data->val = this->val | that->val;
225
+ new_enum_data->id = rb_to_id(rb_sprintf("%s|%s", rb_id2name(this->id), rb_id2name(that->id)));
226
+ new_enum_data->val = this->val | that->val;
250
227
 
251
- return new_enum;
228
+ return new_enum;
252
229
  }
253
230
 
254
231
  /**
255
232
  * Return the name of an enum.
256
233
  *
257
- * Ruby usage:
258
- * - @verbatim Enum#to_s @endverbatim
259
- *
260
- * @param self this object
261
- * @return the name
234
+ * @return [String] the name of an enum
262
235
  */
263
236
  VALUE
264
237
  Enum_to_s(VALUE self)
265
238
  {
266
- return rb_str_new2(rm_enum_to_cstr(self));
239
+ return rb_str_new2(rm_enum_to_cstr(self));
267
240
  }
268
241
 
269
242
 
270
243
  /**
271
244
  * Initialize method for all Enum subclasses.
272
245
  *
273
- * Ruby usage:
274
- * - @verbatim xxx#initialize(sym,val) @endverbatim
275
- *
276
- * @param self this object
277
- * @param sym the symbol
278
- * @param val the value of the symbol
279
- * @return self
246
+ * @param sym [Symbol] the symbol as enum name
247
+ * @param val [Numeric] the value for enum
248
+ * @return [Magick::Enum] self
280
249
  */
281
250
  VALUE
282
251
  Enum_type_initialize(VALUE self, VALUE sym, VALUE val)
@@ -286,7 +255,7 @@ Enum_type_initialize(VALUE self, VALUE sym, VALUE val)
286
255
 
287
256
  super_argv[0] = sym;
288
257
  super_argv[1] = val;
289
- (void) rb_call_super(2, (const VALUE *)super_argv);
258
+ rb_call_super(2, (const VALUE *)super_argv);
290
259
 
291
260
  if (rb_cvar_defined(CLASS_OF(self), rb_intern(ENUMERATORS_CLASS_VAR)) != Qtrue)
292
261
  {
@@ -294,7 +263,7 @@ Enum_type_initialize(VALUE self, VALUE sym, VALUE val)
294
263
  }
295
264
 
296
265
  enumerators = rb_cv_get(CLASS_OF(self), ENUMERATORS_CLASS_VAR);
297
- (void) rb_ary_push(enumerators, self);
266
+ rb_ary_push(enumerators, self);
298
267
 
299
268
  RB_GC_GUARD(enumerators);
300
269
 
@@ -305,11 +274,7 @@ Enum_type_initialize(VALUE self, VALUE sym, VALUE val)
305
274
  /**
306
275
  * Enum subclass #inspect.
307
276
  *
308
- * Ruby usage:
309
- * - @verbatim xxx#inspect @endverbatim
310
- *
311
- * @param self this object
312
- * @return string representation of self
277
+ * @return [String] representation of self
313
278
  */
314
279
  static VALUE
315
280
  Enum_type_inspect(VALUE self)
@@ -318,7 +283,7 @@ Enum_type_inspect(VALUE self)
318
283
  MagickEnum *magick_enum;
319
284
 
320
285
  Data_Get_Struct(self, MagickEnum, magick_enum);
321
- sprintf(str, "%.48s=%d", rb_id2name(magick_enum->id), magick_enum->val);
286
+ snprintf(str, sizeof(str), "%.48s=%d", rb_id2name(magick_enum->id), magick_enum->val);
322
287
 
323
288
  return rb_str_new2(str);
324
289
  }
@@ -327,15 +292,14 @@ Enum_type_inspect(VALUE self)
327
292
  /**
328
293
  * Behaves like #each if a block is present, otherwise like #to_a.
329
294
  *
330
- * Ruby usage:
331
- * - @verbatim xxx.values @endverbatim
332
- * - @verbatim xxx.values {|v| } @endverbatim
333
- *
334
- * Notes:
335
- * - Defined for each Enum subclass
295
+ * @overload values
296
+ * @return [Array<Magick::Enum>] the enum values
336
297
  *
337
- * @param class the subclass
338
- * @return iterator over values if given block, a copy of the values otherwise
298
+ * @overload values
299
+ * iterator over values if given block
300
+ * @yield [val]
301
+ * @yieldparam val [Magick::Enum] an enum
302
+ * @return [Magick::Enum] self
339
303
  */
340
304
  static VALUE
341
305
  Enum_type_values(VALUE class)
@@ -350,7 +314,7 @@ Enum_type_values(VALUE class)
350
314
  {
351
315
  for (x = 0; x < RARRAY_LEN(enumerators); x++)
352
316
  {
353
- (void) rb_yield(rb_ary_entry(enumerators, x));
317
+ rb_yield(rb_ary_entry(enumerators, x));
354
318
  }
355
319
  rv = class;
356
320
  }
@@ -359,7 +323,7 @@ Enum_type_values(VALUE class)
359
323
  copy = rb_ary_new2(RARRAY_LEN(enumerators));
360
324
  for (x = 0; x < RARRAY_LEN(enumerators); x++)
361
325
  {
362
- (void) rb_ary_push(copy, rb_ary_entry(enumerators, x));
326
+ rb_ary_push(copy, rb_ary_entry(enumerators, x));
363
327
  }
364
328
  rb_obj_freeze(copy);
365
329
  rv = copy;
@@ -394,12 +358,12 @@ Enum_find(VALUE class, int val)
394
358
 
395
359
  for (x = 0; x < RARRAY_LEN(enumerators); x++)
396
360
  {
397
- VALUE enumerator = rb_ary_entry(enumerators, x);
398
- Data_Get_Struct(enumerator, MagickEnum, magick_enum);
399
- if (magick_enum->val == val)
400
- {
401
- return enumerator;
402
- }
361
+ VALUE enumerator = rb_ary_entry(enumerators, x);
362
+ Data_Get_Struct(enumerator, MagickEnum, magick_enum);
363
+ if (magick_enum->val == val)
364
+ {
365
+ return enumerator;
366
+ }
403
367
  }
404
368
 
405
369
  return Qnil;
@@ -496,7 +460,35 @@ ComplianceType_name(ComplianceType *c)
496
460
  VALUE
497
461
  ComplianceType_find(ComplianceType compliance)
498
462
  {
499
- return Enum_find(Class_ComplianceType, compliance);
463
+ ComplianceType c;
464
+
465
+ // Turn off undefined bits
466
+ if ((compliance & (SVGCompliance|X11Compliance|XPMCompliance))
467
+ == (SVGCompliance|X11Compliance|XPMCompliance))
468
+ {
469
+ c = SVGCompliance|X11Compliance|XPMCompliance;
470
+ }
471
+ else if (compliance & SVGCompliance)
472
+ {
473
+ c = SVGCompliance;
474
+ }
475
+ else if (compliance & X11Compliance)
476
+ {
477
+ c = X11Compliance;
478
+ }
479
+ else if (compliance & XPMCompliance)
480
+ {
481
+ c = XPMCompliance;
482
+ }
483
+ else if (compliance == NoCompliance)
484
+ {
485
+ c = NoCompliance;
486
+ }
487
+ else
488
+ {
489
+ c = UndefinedCompliance;
490
+ }
491
+ return Enum_find(Class_ComplianceType, c);
500
492
  }
501
493
 
502
494