rmagick 4.0.0 → 5.3.0

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