rmagick 4.1.0.rc2 → 4.1.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 (412) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/ci.yml +148 -0
  5. data/.gitignore +3 -1
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +24 -0
  8. data/.rubocop_todo.yml +80 -270
  9. data/.yardopts +5 -0
  10. data/CHANGELOG.md +63 -0
  11. data/CONTRIBUTING.md +14 -10
  12. data/README.md +292 -0
  13. data/Rakefile +16 -22
  14. data/before_install_linux.sh +22 -32
  15. data/before_install_osx.sh +56 -2
  16. data/ext/RMagick/extconf.rb +100 -94
  17. data/ext/RMagick/rmagick.c +77 -104
  18. data/ext/RMagick/rmagick.h +74 -70
  19. data/ext/RMagick/rmdraw.c +261 -444
  20. data/ext/RMagick/rmenum.c +96 -113
  21. data/ext/RMagick/rmfill.c +46 -77
  22. data/ext/RMagick/rmilist.c +136 -244
  23. data/ext/RMagick/rmimage.c +3395 -4166
  24. data/ext/RMagick/rminfo.c +531 -737
  25. data/ext/RMagick/rmkinfo.c +21 -87
  26. data/ext/RMagick/rmmain.c +405 -245
  27. data/ext/RMagick/rmmontage.c +60 -126
  28. data/ext/RMagick/rmpixel.c +401 -345
  29. data/ext/RMagick/rmstruct.c +62 -88
  30. data/ext/RMagick/rmutil.c +112 -218
  31. data/lib/rmagick/version.rb +1 -1
  32. data/lib/rmagick_internal.rb +128 -77
  33. data/lib/rvg/clippath.rb +2 -1
  34. data/lib/rvg/container.rb +10 -5
  35. data/lib/rvg/describable.rb +1 -1
  36. data/lib/rvg/embellishable.rb +5 -4
  37. data/lib/rvg/misc.rb +15 -12
  38. data/lib/rvg/paint.rb +2 -1
  39. data/lib/rvg/pathdata.rb +12 -11
  40. data/lib/rvg/rvg.rb +8 -4
  41. data/lib/rvg/stylable.rb +9 -7
  42. data/lib/rvg/text.rb +11 -6
  43. data/lib/rvg/transformable.rb +3 -2
  44. data/lib/rvg/units.rb +1 -1
  45. data/rmagick.gemspec +7 -6
  46. metadata +31 -421
  47. data/.appveyor.yml +0 -57
  48. data/.circleci/config.yml +0 -56
  49. data/.ruby-version +0 -1
  50. data/.simplecov +0 -27
  51. data/.travis.yml +0 -64
  52. data/Doxyfile +0 -1514
  53. data/README.textile +0 -259
  54. data/benchmarks/memory/README.md +0 -50
  55. data/benchmarks/memory/image_new.rb +0 -8
  56. data/benchmarks/memory/rmagick.gnuplot +0 -16
  57. data/doc/.cvsignore +0 -1
  58. data/doc/comtasks.html +0 -287
  59. data/doc/constants.html +0 -1581
  60. data/doc/css/doc.css +0 -299
  61. data/doc/css/popup.css +0 -34
  62. data/doc/css/ref.css +0 -67
  63. data/doc/draw.html +0 -3272
  64. data/doc/ex/InitialCoords.rb +0 -22
  65. data/doc/ex/NewCoordSys.rb +0 -30
  66. data/doc/ex/OrigCoordSys.rb +0 -16
  67. data/doc/ex/PreserveAspectRatio.rb +0 -204
  68. data/doc/ex/RotateScale.rb +0 -36
  69. data/doc/ex/Skew.rb +0 -38
  70. data/doc/ex/Use01.rb +0 -15
  71. data/doc/ex/Use02.rb +0 -20
  72. data/doc/ex/Use03.rb +0 -16
  73. data/doc/ex/ViewBox.rb +0 -31
  74. data/doc/ex/adaptive_threshold.rb +0 -9
  75. data/doc/ex/add_noise.rb +0 -16
  76. data/doc/ex/affine.rb +0 -48
  77. data/doc/ex/affine_transform.rb +0 -20
  78. data/doc/ex/arc.rb +0 -49
  79. data/doc/ex/arcpath.rb +0 -32
  80. data/doc/ex/arcs01.rb +0 -28
  81. data/doc/ex/arcs02.rb +0 -59
  82. data/doc/ex/average.rb +0 -15
  83. data/doc/ex/axes.rb +0 -64
  84. data/doc/ex/baseline_shift01.rb +0 -17
  85. data/doc/ex/bilevel_channel.rb +0 -8
  86. data/doc/ex/blur_image.rb +0 -12
  87. data/doc/ex/border.rb +0 -10
  88. data/doc/ex/bounding_box.rb +0 -42
  89. data/doc/ex/cbezier1.rb +0 -41
  90. data/doc/ex/cbezier2.rb +0 -41
  91. data/doc/ex/cbezier3.rb +0 -41
  92. data/doc/ex/cbezier4.rb +0 -42
  93. data/doc/ex/cbezier5.rb +0 -42
  94. data/doc/ex/cbezier6.rb +0 -53
  95. data/doc/ex/channel.rb +0 -25
  96. data/doc/ex/charcoal.rb +0 -12
  97. data/doc/ex/chop.rb +0 -29
  98. data/doc/ex/circle.rb +0 -33
  99. data/doc/ex/circle01.rb +0 -16
  100. data/doc/ex/clip_path.rb +0 -60
  101. data/doc/ex/coalesce.rb +0 -57
  102. data/doc/ex/color_fill_to_border.rb +0 -29
  103. data/doc/ex/color_floodfill.rb +0 -28
  104. data/doc/ex/color_histogram.rb +0 -47
  105. data/doc/ex/color_reset.rb +0 -11
  106. data/doc/ex/colorize.rb +0 -16
  107. data/doc/ex/colors.rb +0 -64
  108. data/doc/ex/compose_mask.rb +0 -22
  109. data/doc/ex/composite.rb +0 -133
  110. data/doc/ex/composite_layers.rb +0 -52
  111. data/doc/ex/composite_tiled.rb +0 -21
  112. data/doc/ex/contrast.rb +0 -36
  113. data/doc/ex/crop.rb +0 -31
  114. data/doc/ex/crop_with_gravity.rb +0 -42
  115. data/doc/ex/cubic01.rb +0 -43
  116. data/doc/ex/cubic02.rb +0 -91
  117. data/doc/ex/cycle_colormap.rb +0 -21
  118. data/doc/ex/dissolve.rb +0 -12
  119. data/doc/ex/drawcomp.rb +0 -41
  120. data/doc/ex/drop_shadow.rb +0 -60
  121. data/doc/ex/edge.rb +0 -11
  122. data/doc/ex/ellipse.rb +0 -45
  123. data/doc/ex/ellipse01.rb +0 -21
  124. data/doc/ex/emboss.rb +0 -11
  125. data/doc/ex/enhance.rb +0 -28
  126. data/doc/ex/equalize.rb +0 -11
  127. data/doc/ex/evenodd.rb +0 -42
  128. data/doc/ex/fill_pattern.rb +0 -23
  129. data/doc/ex/flatten_images.rb +0 -36
  130. data/doc/ex/flip.rb +0 -11
  131. data/doc/ex/flop.rb +0 -11
  132. data/doc/ex/font_styles.rb +0 -32
  133. data/doc/ex/fonts.rb +0 -16
  134. data/doc/ex/frame.rb +0 -12
  135. data/doc/ex/gaussian_blur.rb +0 -11
  136. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  137. data/doc/ex/get_pixels.rb +0 -45
  138. data/doc/ex/get_type_metrics.rb +0 -142
  139. data/doc/ex/gradientfill.rb +0 -27
  140. data/doc/ex/grav.rb +0 -45
  141. data/doc/ex/gravity.rb +0 -78
  142. data/doc/ex/group.rb +0 -26
  143. data/doc/ex/hatchfill.rb +0 -27
  144. data/doc/ex/image.rb +0 -44
  145. data/doc/ex/images/Apple.miff +0 -0
  146. data/doc/ex/images/Ballerina.jpg +0 -0
  147. data/doc/ex/images/Ballerina3.jpg +0 -0
  148. data/doc/ex/images/Button_0.gif +0 -0
  149. data/doc/ex/images/Button_1.gif +0 -0
  150. data/doc/ex/images/Button_2.gif +0 -0
  151. data/doc/ex/images/Button_3.gif +0 -0
  152. data/doc/ex/images/Button_4.gif +0 -0
  153. data/doc/ex/images/Button_5.gif +0 -0
  154. data/doc/ex/images/Button_6.gif +0 -0
  155. data/doc/ex/images/Button_7.gif +0 -0
  156. data/doc/ex/images/Button_8.gif +0 -0
  157. data/doc/ex/images/Button_9.gif +0 -0
  158. data/doc/ex/images/Button_A.gif +0 -0
  159. data/doc/ex/images/Button_B.gif +0 -0
  160. data/doc/ex/images/Button_C.gif +0 -0
  161. data/doc/ex/images/Button_D.gif +0 -0
  162. data/doc/ex/images/Button_E.gif +0 -0
  163. data/doc/ex/images/Button_F.gif +0 -0
  164. data/doc/ex/images/Button_G.gif +0 -0
  165. data/doc/ex/images/Button_H.gif +0 -0
  166. data/doc/ex/images/Button_I.gif +0 -0
  167. data/doc/ex/images/Button_J.gif +0 -0
  168. data/doc/ex/images/Button_K.gif +0 -0
  169. data/doc/ex/images/Button_L.gif +0 -0
  170. data/doc/ex/images/Button_M.gif +0 -0
  171. data/doc/ex/images/Button_N.gif +0 -0
  172. data/doc/ex/images/Button_O.gif +0 -0
  173. data/doc/ex/images/Button_P.gif +0 -0
  174. data/doc/ex/images/Button_Q.gif +0 -0
  175. data/doc/ex/images/Button_R.gif +0 -0
  176. data/doc/ex/images/Button_S.gif +0 -0
  177. data/doc/ex/images/Button_T.gif +0 -0
  178. data/doc/ex/images/Button_U.gif +0 -0
  179. data/doc/ex/images/Button_V.gif +0 -0
  180. data/doc/ex/images/Button_W.gif +0 -0
  181. data/doc/ex/images/Button_X.gif +0 -0
  182. data/doc/ex/images/Button_Y.gif +0 -0
  183. data/doc/ex/images/Button_Z.gif +0 -0
  184. data/doc/ex/images/Cheetah.jpg +0 -0
  185. data/doc/ex/images/Coffee.png +0 -0
  186. data/doc/ex/images/Flower_Hat.jpg +0 -0
  187. data/doc/ex/images/Gold_Statue.jpg +0 -0
  188. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  189. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  190. data/doc/ex/images/Leaf.miff +0 -0
  191. data/doc/ex/images/No.png +0 -0
  192. data/doc/ex/images/Polynesia.jpg +0 -0
  193. data/doc/ex/images/Red_Rocks.jpg +0 -0
  194. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  195. data/doc/ex/images/Shorts.jpg +0 -0
  196. data/doc/ex/images/Snake.png +0 -0
  197. data/doc/ex/images/Violin.jpg +0 -0
  198. data/doc/ex/images/Yellow_Rose.miff +0 -0
  199. data/doc/ex/images/big-duck.gif +0 -0
  200. data/doc/ex/images/duck.gif +0 -0
  201. data/doc/ex/images/duck0.gif +0 -0
  202. data/doc/ex/images/duck1.gif +0 -0
  203. data/doc/ex/images/duck10.gif +0 -0
  204. data/doc/ex/images/duck11.gif +0 -0
  205. data/doc/ex/images/duck12.gif +0 -0
  206. data/doc/ex/images/duck13.gif +0 -0
  207. data/doc/ex/images/duck14.gif +0 -0
  208. data/doc/ex/images/duck15.gif +0 -0
  209. data/doc/ex/images/duck2.gif +0 -0
  210. data/doc/ex/images/duck3.gif +0 -0
  211. data/doc/ex/images/duck4.gif +0 -0
  212. data/doc/ex/images/duck5.gif +0 -0
  213. data/doc/ex/images/duck6.gif +0 -0
  214. data/doc/ex/images/duck7.gif +0 -0
  215. data/doc/ex/images/duck8.gif +0 -0
  216. data/doc/ex/images/duck9.gif +0 -0
  217. data/doc/ex/images/graydient230x6.gif +0 -0
  218. data/doc/ex/images/image_with_profile.jpg +0 -0
  219. data/doc/ex/images/logo400x83.gif +0 -0
  220. data/doc/ex/images/model.miff +0 -0
  221. data/doc/ex/images/notimplemented.gif +0 -0
  222. data/doc/ex/images/smile.miff +0 -0
  223. data/doc/ex/images/spin.gif +0 -0
  224. data/doc/ex/implode.rb +0 -34
  225. data/doc/ex/level.rb +0 -11
  226. data/doc/ex/level_colors.rb +0 -11
  227. data/doc/ex/line.rb +0 -41
  228. data/doc/ex/line01.rb +0 -21
  229. data/doc/ex/mask.rb +0 -35
  230. data/doc/ex/matte_fill_to_border.rb +0 -39
  231. data/doc/ex/matte_floodfill.rb +0 -32
  232. data/doc/ex/matte_replace.rb +0 -39
  233. data/doc/ex/median_filter.rb +0 -28
  234. data/doc/ex/modulate.rb +0 -11
  235. data/doc/ex/mono.rb +0 -23
  236. data/doc/ex/morph.rb +0 -25
  237. data/doc/ex/mosaic.rb +0 -37
  238. data/doc/ex/motion_blur.rb +0 -11
  239. data/doc/ex/negate.rb +0 -11
  240. data/doc/ex/negate_channel.rb +0 -9
  241. data/doc/ex/nested_rvg.rb +0 -21
  242. data/doc/ex/nonzero.rb +0 -42
  243. data/doc/ex/normalize.rb +0 -11
  244. data/doc/ex/oil_paint.rb +0 -11
  245. data/doc/ex/opacity.rb +0 -37
  246. data/doc/ex/ordered_dither.rb +0 -11
  247. data/doc/ex/path.rb +0 -63
  248. data/doc/ex/pattern1.rb +0 -25
  249. data/doc/ex/pattern2.rb +0 -26
  250. data/doc/ex/polaroid.rb +0 -26
  251. data/doc/ex/polygon.rb +0 -23
  252. data/doc/ex/polygon01.rb +0 -21
  253. data/doc/ex/polyline.rb +0 -22
  254. data/doc/ex/polyline01.rb +0 -21
  255. data/doc/ex/posterize.rb +0 -8
  256. data/doc/ex/preview.rb +0 -8
  257. data/doc/ex/qbezierpath.rb +0 -52
  258. data/doc/ex/quad01.rb +0 -34
  259. data/doc/ex/quantize-m.rb +0 -25
  260. data/doc/ex/radial_blur.rb +0 -9
  261. data/doc/ex/raise.rb +0 -8
  262. data/doc/ex/random_threshold_channel.rb +0 -13
  263. data/doc/ex/rect01.rb +0 -14
  264. data/doc/ex/rect02.rb +0 -20
  265. data/doc/ex/rectangle.rb +0 -34
  266. data/doc/ex/reduce_noise.rb +0 -28
  267. data/doc/ex/remap.rb +0 -11
  268. data/doc/ex/remap_images.rb +0 -19
  269. data/doc/ex/resize_to_fill.rb +0 -8
  270. data/doc/ex/resize_to_fit.rb +0 -8
  271. data/doc/ex/roll.rb +0 -9
  272. data/doc/ex/rotate.rb +0 -44
  273. data/doc/ex/rotate_f.rb +0 -14
  274. data/doc/ex/roundrect.rb +0 -33
  275. data/doc/ex/rubyname.rb +0 -30
  276. data/doc/ex/rvg_clippath.rb +0 -12
  277. data/doc/ex/rvg_linecap.rb +0 -42
  278. data/doc/ex/rvg_linejoin.rb +0 -40
  279. data/doc/ex/rvg_opacity.rb +0 -18
  280. data/doc/ex/rvg_pattern.rb +0 -26
  281. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  282. data/doc/ex/segment.rb +0 -11
  283. data/doc/ex/sepiatone.rb +0 -7
  284. data/doc/ex/shade.rb +0 -11
  285. data/doc/ex/shadow.rb +0 -30
  286. data/doc/ex/shave.rb +0 -15
  287. data/doc/ex/shear.rb +0 -10
  288. data/doc/ex/sketch.rb +0 -17
  289. data/doc/ex/skewx.rb +0 -51
  290. data/doc/ex/skewy.rb +0 -47
  291. data/doc/ex/smile.rb +0 -126
  292. data/doc/ex/solarize.rb +0 -11
  293. data/doc/ex/sparse_color.rb +0 -55
  294. data/doc/ex/splice.rb +0 -8
  295. data/doc/ex/spread.rb +0 -11
  296. data/doc/ex/stegano.rb +0 -54
  297. data/doc/ex/stroke_dasharray.rb +0 -42
  298. data/doc/ex/stroke_fill.rb +0 -10
  299. data/doc/ex/stroke_linecap.rb +0 -44
  300. data/doc/ex/stroke_linejoin.rb +0 -48
  301. data/doc/ex/stroke_width.rb +0 -49
  302. data/doc/ex/swirl.rb +0 -17
  303. data/doc/ex/text.rb +0 -37
  304. data/doc/ex/text01.rb +0 -16
  305. data/doc/ex/text_align.rb +0 -36
  306. data/doc/ex/text_antialias.rb +0 -37
  307. data/doc/ex/text_styles.rb +0 -19
  308. data/doc/ex/text_undercolor.rb +0 -28
  309. data/doc/ex/texture_fill_to_border.rb +0 -34
  310. data/doc/ex/texture_floodfill.rb +0 -32
  311. data/doc/ex/texturefill.rb +0 -24
  312. data/doc/ex/threshold.rb +0 -13
  313. data/doc/ex/to_blob.rb +0 -13
  314. data/doc/ex/translate.rb +0 -39
  315. data/doc/ex/transparent.rb +0 -38
  316. data/doc/ex/transpose.rb +0 -9
  317. data/doc/ex/transverse.rb +0 -9
  318. data/doc/ex/tref01.rb +0 -24
  319. data/doc/ex/triangle01.rb +0 -15
  320. data/doc/ex/trim.rb +0 -23
  321. data/doc/ex/tspan01.rb +0 -17
  322. data/doc/ex/tspan02.rb +0 -17
  323. data/doc/ex/tspan03.rb +0 -19
  324. data/doc/ex/unsharp_mask.rb +0 -28
  325. data/doc/ex/viewex.rb +0 -33
  326. data/doc/ex/vignette.rb +0 -12
  327. data/doc/ex/watermark.rb +0 -27
  328. data/doc/ex/wave.rb +0 -9
  329. data/doc/ex/wet_floor.rb +0 -58
  330. data/doc/ex/writing_mode01.rb +0 -26
  331. data/doc/ex/writing_mode02.rb +0 -26
  332. data/doc/ilist.html +0 -2056
  333. data/doc/image1.html +0 -4680
  334. data/doc/image2.html +0 -3665
  335. data/doc/image3.html +0 -4522
  336. data/doc/imageattrs.html +0 -1638
  337. data/doc/imusage.html +0 -514
  338. data/doc/index.html +0 -416
  339. data/doc/info.html +0 -1499
  340. data/doc/magick.html +0 -570
  341. data/doc/optequiv.html +0 -2435
  342. data/doc/rvg.html +0 -975
  343. data/doc/rvgclip.html +0 -248
  344. data/doc/rvggroup.html +0 -305
  345. data/doc/rvgimage.html +0 -289
  346. data/doc/rvgpattern.html +0 -475
  347. data/doc/rvgshape.html +0 -406
  348. data/doc/rvgstyle.html +0 -270
  349. data/doc/rvgtext.html +0 -465
  350. data/doc/rvgtspan.html +0 -238
  351. data/doc/rvgtut.html +0 -530
  352. data/doc/rvguse.html +0 -145
  353. data/doc/rvgxform.html +0 -294
  354. data/doc/scripts/doc.js +0 -22
  355. data/doc/scripts/stripeTables.js +0 -23
  356. data/doc/struct.html +0 -1339
  357. data/doc/usage.html +0 -1621
  358. data/examples/constitute.rb +0 -7
  359. data/examples/crop_with_gravity.rb +0 -43
  360. data/examples/demo.rb +0 -323
  361. data/examples/describe.rb +0 -41
  362. data/examples/find_similar_region.rb +0 -34
  363. data/examples/histogram.rb +0 -312
  364. data/examples/identify.rb +0 -174
  365. data/examples/image_opacity.rb +0 -28
  366. data/examples/import_export.rb +0 -31
  367. data/examples/pattern_fill.rb +0 -37
  368. data/examples/rotating_text.rb +0 -45
  369. data/examples/spinner.rb +0 -49
  370. data/examples/thumbnail.rb +0 -64
  371. data/examples/vignette.rb +0 -78
  372. data/spec/rmagick/ImageList1_spec.rb +0 -24
  373. data/spec/rmagick/draw_spec.rb +0 -155
  374. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  375. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  376. data/spec/rmagick/image/composite_spec.rb +0 -72
  377. data/spec/rmagick/image/constitute_spec.rb +0 -13
  378. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  379. data/spec/rmagick/image/dissolve_spec.rb +0 -54
  380. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  381. data/spec/rmagick/image/ping_spec.rb +0 -12
  382. data/spec/rmagick/image/properties_spec.rb +0 -27
  383. data/spec/rmagick/image/read_spec.rb +0 -28
  384. data/spec/spec_helper.rb +0 -9
  385. data/spec/support/issue_200/app.rb +0 -8
  386. data/test/Draw.rb +0 -351
  387. data/test/Enum.rb +0 -228
  388. data/test/Fill.rb +0 -93
  389. data/test/Image1.rb +0 -606
  390. data/test/Image2.rb +0 -1408
  391. data/test/Image3.rb +0 -1086
  392. data/test/ImageList1.rb +0 -858
  393. data/test/ImageList2.rb +0 -375
  394. data/test/Image_attributes.rb +0 -635
  395. data/test/Import_Export.rb +0 -111
  396. data/test/Info.rb +0 -436
  397. data/test/KernelInfo.rb +0 -59
  398. data/test/Magick.rb +0 -311
  399. data/test/Pixel.rb +0 -259
  400. data/test/PolaroidOptions.rb +0 -23
  401. data/test/Preview.rb +0 -26
  402. data/test/Struct.rb +0 -45
  403. data/test/appearance/Montage.rb +0 -26
  404. data/test/appearance/appearance_assertion.rb +0 -13
  405. data/test/appearance/expected/montage_border_color.jpg +0 -0
  406. data/test/cmyk.icm +0 -0
  407. data/test/lib/internal/Draw.rb +0 -811
  408. data/test/lib/internal/Geometry.rb +0 -98
  409. data/test/lib/internal/Magick.rb +0 -40
  410. data/test/srgb.icm +0 -0
  411. data/test/test_all_basic.rb +0 -49
  412. data/test/tmpnam_test.rb +0 -50
@@ -14,6 +14,7 @@
14
14
 
15
15
 
16
16
 
17
+ static VALUE rm_yield_handle_exception(VALUE, VALUE) ATTRIBUTE_NORETURN;
17
18
 
18
19
  static VALUE
19
20
  rm_yield_body(VALUE object)
@@ -26,22 +27,19 @@ rm_yield_handle_exception(VALUE allocated_area, VALUE exc)
26
27
  {
27
28
  magick_free((void *)allocated_area);
28
29
  rb_exc_raise(exc);
29
- return Qnil; /* not reachable */
30
30
  }
31
31
 
32
32
  /**
33
33
  * If called with the optional block, iterates over the colors, otherwise
34
- * returns an array of Magick::Color objects.
34
+ * returns an array of {Magick::Color} objects.
35
35
  *
36
- * Ruby usage:
37
- * - @verbatim Magick::colors @endverbatim
38
- * - @verbatim Magick::colors { |colorinfo| } @endverbatim
36
+ * @overload colors
37
+ * @return [Array<Magick::Color>] the array of {Magick::Color}
39
38
  *
40
- * Notes:
41
- * - There are 3 implementations.
39
+ * @overload colors
40
+ * @yield [colorinfo]
41
+ * @yieldparam colorinfo [Magick::Color] the color
42
42
  *
43
- * @param class the class on which the method is run.
44
- * @return either the input class (if a block was given) or the array of colors.
45
43
  */
46
44
  VALUE
47
45
  Magick_colors(VALUE class)
@@ -54,8 +52,8 @@ Magick_colors(VALUE class)
54
52
  exception = AcquireExceptionInfo();
55
53
 
56
54
  color_info_list = GetColorInfoList("*", &number_colors, exception);
57
- CHECK_EXCEPTION()
58
- (void) DestroyExceptionInfo(exception);
55
+ CHECK_EXCEPTION();
56
+ DestroyExceptionInfo(exception);
59
57
 
60
58
 
61
59
  if (rb_block_given_p())
@@ -72,7 +70,7 @@ Magick_colors(VALUE class)
72
70
  ary = rb_ary_new2((long) number_colors);
73
71
  for (x = 0; x < number_colors; x++)
74
72
  {
75
- (void) rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
73
+ rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
76
74
  }
77
75
 
78
76
  magick_free((void *)color_info_list);
@@ -84,14 +82,15 @@ Magick_colors(VALUE class)
84
82
 
85
83
  /**
86
84
  * If called with the optional block, iterates over the fonts, otherwise returns
87
- * an array of Magick::Font objects.
85
+ * an array of {Magick::Font} objects.
88
86
  *
89
- * Ruby usage:
90
- * - @verbatim Magick::fonts @endverbatim
91
- * - @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
92
93
  *
93
- * @param class the class on which the method is run.
94
- * @return either the input class (if a block was given) or the array of fonts.
95
94
  */
96
95
  VALUE
97
96
  Magick_fonts(VALUE class)
@@ -103,8 +102,8 @@ Magick_fonts(VALUE class)
103
102
 
104
103
  exception = AcquireExceptionInfo();
105
104
  type_info = GetTypeInfoList("*", &number_types, exception);
106
- CHECK_EXCEPTION()
107
- (void) DestroyExceptionInfo(exception);
105
+ CHECK_EXCEPTION();
106
+ DestroyExceptionInfo(exception);
108
107
 
109
108
  if (rb_block_given_p())
110
109
  {
@@ -120,7 +119,7 @@ Magick_fonts(VALUE class)
120
119
  ary = rb_ary_new2((long)number_types);
121
120
  for (x = 0; x < number_types; x++)
122
121
  {
123
- (void) rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
122
+ rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
124
123
  }
125
124
  magick_free((void *)type_info);
126
125
  RB_GC_GUARD(ary);
@@ -138,7 +137,7 @@ Magick_fonts(VALUE class)
138
137
  * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
139
138
  * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
140
139
  * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
141
- *
140
+ *
142
141
  * No Ruby usage (internal function)
143
142
  *
144
143
  * @param magick_info a MagickInfo object.
@@ -162,21 +161,13 @@ MagickInfo_to_format(const MagickInfo *magick_info)
162
161
  * Build the @@formats hash. The hash keys are image formats. The hash values
163
162
  * specify the format "mode string", i.e. a description of what ImageMagick can
164
163
  * do with that format. The mode string is in the form "BRWA", where
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.
169
- *
170
- * Ruby usage:
171
- * - @verbatim Magick.init_formats @endverbatim
172
164
  *
173
- * Notes:
174
- * - Only called once.
175
- * - 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.
176
169
  *
177
- * @param class the class on which the method is run.
178
- * @return the formats hash.
179
- * @see MagickInfo_to_format
170
+ * @return [Hash] the formats hash.
180
171
  */
181
172
  VALUE
182
173
  Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
@@ -191,15 +182,15 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
191
182
  // IM 6.1.3 added an exception argument to GetMagickInfoList
192
183
  exception = AcquireExceptionInfo();
193
184
  magick_info = GetMagickInfoList("*", &number_formats, exception);
194
- CHECK_EXCEPTION()
195
- (void) DestroyExceptionInfo(exception);
185
+ CHECK_EXCEPTION();
186
+ DestroyExceptionInfo(exception);
196
187
 
197
188
 
198
189
  for (x = 0; x < number_formats; x++)
199
190
  {
200
- (void) rb_hash_aset(formats
201
- , rb_str_new2(magick_info[x]->name)
202
- , 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]));
203
194
  }
204
195
  magick_free((void *)magick_info);
205
196
  RB_GC_GUARD(formats);
@@ -211,14 +202,16 @@ Magick_init_formats(VALUE class ATTRIBUTE_UNUSED)
211
202
  * Get/set resource limits. If a limit is specified the old limit is set to the
212
203
  * new value. Either way the current/old limit is returned.
213
204
  *
214
- * Ruby usage:
215
- * - @verbatim Magick.limit_resource(resource) @endverbatim
216
- * - @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
217
208
  *
218
- * @param argc number of input arguments.
219
- * @param argv array of input arguments.
220
- * @param class the class on which the method is run.
221
- * @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.
222
215
  */
223
216
  VALUE
224
217
  Magick_limit_resource(int argc, VALUE *argv, VALUE class)
@@ -269,7 +262,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
269
262
  break;
270
263
 
271
264
  default:
272
- str = StringValuePtr(resource);
265
+ str = StringValueCStr(resource);
273
266
  if (*str == '\0')
274
267
  {
275
268
  return class;
@@ -311,7 +304,7 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
311
304
 
312
305
  if (argc > 1)
313
306
  {
314
- (void) SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
307
+ SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
315
308
  }
316
309
 
317
310
  RB_GC_GUARD(limit);
@@ -325,22 +318,14 @@ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
325
318
  * threshold is exceeded, all subsequent pixels cache operations are to/from
326
319
  * disk.
327
320
  *
328
- * Ruby usage:
329
- * - @verbatim Magick.set_cache_threshold(megabytes) @endverbatim
330
- *
331
- * Notes:
332
- * - singleton method
333
- *
334
- * @param class the class on which the method is run.
335
- * @param threshold the number of megabytes to set.
336
- * @return the class.
321
+ * @param threshold [Numeric] the number of megabytes to set.
337
322
  */
338
323
  VALUE
339
324
  Magick_set_cache_threshold(VALUE class, VALUE threshold)
340
325
  {
341
326
  unsigned long thrshld = NUM2ULONG(threshold);
342
- (void) SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
343
- (void) SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
327
+ SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
328
+ SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
344
329
  return class;
345
330
  }
346
331
 
@@ -348,32 +333,25 @@ Magick_set_cache_threshold(VALUE class, VALUE threshold)
348
333
  /**
349
334
  * Set the log event mask.
350
335
  *
351
- * Ruby usage:
352
- * - @verbatim Magick.set_log_event_mask(event) @endverbatim
353
- * - @verbatim Magick.set_log_event_mask(event,...) @endverbatim
336
+ * The arguments are one of:
354
337
  *
355
- * Notes:
356
- * - "event" is one of
357
- * - "all"
358
- * - "annotate"
359
- * - "blob"
360
- * - "cache"
361
- * - "coder"
362
- * - "configure"
363
- * - "deprecate"
364
- * - "locale"
365
- * - "none"
366
- * - "render"
367
- * - "transform"
368
- * - "user"
369
- * - "x11"
370
- * - Multiple events can be specified.
371
- * - 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"
372
351
  *
373
- * @param argc number of input arguments.
374
- * @param argv array of input arguments.
375
- * @param class the class on which the method is run.
376
- * @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.
377
355
  */
378
356
  VALUE
379
357
  Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
@@ -386,38 +364,33 @@ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
386
364
  }
387
365
  for (x = 0; x < argc; x++)
388
366
  {
389
- (void) SetLogEventMask(StringValuePtr(argv[x]));
367
+ SetLogEventMask(StringValueCStr(argv[x]));
390
368
  }
391
369
  return class;
392
370
  }
393
371
 
394
372
  /**
395
373
  * Set the format for log messages.
396
- *
397
- * Ruby usage:
398
- * - @verbatim Magick.set_log_format(format) @endverbatim
399
374
  *
400
- * Notes:
401
- * - Format is a string containing one or more of:
402
- * - %t - current time
403
- * - %r - elapsed time
404
- * - %u - user time
405
- * - %p - pid
406
- * - %m - module (source file name)
407
- * - %f - function name
408
- * - %l - line number
409
- * - %d - event domain (one of the events listed above)
410
- * - %e - event name
411
- * - 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.
412
387
  *
413
- * @param class the class on which the method is run.
414
- * @param format the format to set.
415
- * @return the class.
388
+ * @param format [String] the format to set.
416
389
  */
417
390
  VALUE
418
391
  Magick_set_log_format(VALUE class, VALUE format)
419
392
  {
420
- SetLogFormat(StringValuePtr(format));
393
+ SetLogFormat(StringValueCStr(format));
421
394
  return class;
422
395
  }
423
396
 
@@ -25,6 +25,33 @@
25
25
  #include "ruby.h"
26
26
  #include "ruby/io.h"
27
27
 
28
+ #if defined(__MINGW32__)
29
+ // Ruby defines wrong format specifiers for MinGW. So this defines original macro in here.
30
+ #if SIZEOF_SIZE_T == SIZEOF_LONG
31
+ #define RMIuSIZE "lu"
32
+ #define RMIdSIZE "ld"
33
+ #define RMIsVALUE "li\v"
34
+ #elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
35
+ #define RMIuSIZE "I64u"
36
+ #define RMIdSIZE "I64d"
37
+ #define RMIsVALUE "I64i\v"
38
+ #endif
39
+ #else
40
+ // Use constants defined in Ruby
41
+ #define RMIuSIZE PRIuSIZE
42
+ #define RMIdSIZE PRIdSIZE
43
+ #define RMIsVALUE PRIsVALUE
44
+ #endif
45
+
46
+ #if defined(__GNUC__)
47
+ #pragma GCC diagnostic push
48
+ #pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
49
+ #pragma GCC diagnostic ignored "-Wunknown-pragmas"
50
+
51
+ #if __GNUC__ > 6
52
+ #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
53
+ #endif
54
+ #endif
28
55
 
29
56
  // Undef Ruby's versions of these symbols
30
57
  #undef PACKAGE_VERSION
@@ -54,9 +81,11 @@
54
81
  #define Q(q) Q2(q)
55
82
 
56
83
  #ifdef __GNUC__
57
- #define ATTRIBUTE_UNUSED __attribute__((unused))
84
+ #define ATTRIBUTE_UNUSED __attribute__((unused))
85
+ #define ATTRIBUTE_NORETURN __attribute__((__noreturn__))
58
86
  #else
59
87
  #define ATTRIBUTE_UNUSED
88
+ #define ATTRIBUTE_NORETURN
60
89
  #endif
61
90
 
62
91
  //! Trace new image creation in bang methods
@@ -90,11 +119,11 @@
90
119
  #define PIXEL_INTENSITY(q) ((Quantum)(0.299*(q)->red + 0.587*(q)->green + 0.114*(q)->blue + 0.5))
91
120
 
92
121
  //! find maximum of longs
93
- #define LMAX(a,b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
122
+ #define LMAX(a, b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
94
123
  //! find maximum of floats
95
- #define FMAX(a,b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
124
+ #define FMAX(a, b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
96
125
  //! find minimum of floats
97
- #define FMIN(a,b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
126
+ #define FMIN(a, b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
98
127
 
99
128
  #define RMAGICK_PI 3.14159265358979 /**< pi */
100
129
 
@@ -111,7 +140,10 @@
111
140
  */
112
141
  #define OBJ_TO_MAGICK_STRING(f, obj) \
113
142
  if ((obj) != Qnil)\
114
- magick_clone_string(&f, RSTRING_PTR(obj));\
143
+ {\
144
+ VALUE str = rb_String(obj);\
145
+ magick_clone_string(&f, StringValueCStr(str));\
146
+ }\
115
147
  else\
116
148
  f = NULL;
117
149
 
@@ -134,7 +166,16 @@ typedef ImageInfo Info; /**< Make type name match class name */
134
166
  typedef PixelInfo MagickPixel;
135
167
  typedef PixelInfo PixelColor;
136
168
  #else
137
- typedef PixelPacket Pixel;
169
+ typedef struct _RMagickPixelPacket
170
+ {
171
+ Quantum
172
+ red,
173
+ green,
174
+ blue,
175
+ opacity,
176
+ black;
177
+ } RMagickPixelPacket;
178
+ typedef RMagickPixelPacket Pixel;
138
179
  typedef MagickPixelPacket MagickPixel;
139
180
  typedef PixelPacket PixelColor;
140
181
  typedef AlphaChannelType AlphaChannelOption;
@@ -361,61 +402,34 @@ EXTERN ID rm_ID_changed; /**< "changed" */
361
402
  EXTERN ID rm_ID_cur_image; /**< "cur_image" */
362
403
  EXTERN ID rm_ID_dup; /**< "dup" */
363
404
  EXTERN ID rm_ID_fill; /**< "fill" */
364
- EXTERN ID rm_ID_flag; /**< "flag" */
365
- EXTERN ID rm_ID_from_s; /**< "from_s" */
366
405
  EXTERN ID rm_ID_Geometry; /**< "Geometry" */
367
- EXTERN ID rm_ID_GeometryValue; /**< "GeometryValue" */
368
- EXTERN ID rm_ID_has_key_q; /**< "has_key?" */
369
406
  EXTERN ID rm_ID_height; /**< "height" */
370
407
  EXTERN ID rm_ID_initialize_copy; /**< "initialize_copy" */
371
- EXTERN ID rm_ID_length; /**< "length" */
372
408
  EXTERN ID rm_ID_notify_observers; /**< "notify_observers" */
373
409
  EXTERN ID rm_ID_new; /**< "new" */
374
410
  EXTERN ID rm_ID_push; /**< "push" */
375
- EXTERN ID rm_ID_spaceship; /**< "<=>" */
376
- EXTERN ID rm_ID_to_i; /**< "to_i" */
377
- EXTERN ID rm_ID_to_s; /**< "to_s" */
378
411
  EXTERN ID rm_ID_values; /**< "values" */
379
412
  EXTERN ID rm_ID_width; /**< "width" */
380
- EXTERN ID rm_ID_x; /**< "x" */
381
- EXTERN ID rm_ID_y; /**< "y" */
382
413
 
383
414
  #if !defined(min)
384
- #define min(a,b) ((a)<(b)?(a):(b)) /**< min of two values */
415
+ #define min(a, b) ((a)<(b)?(a):(b)) /**< min of two values */
385
416
  #endif
386
417
  #if !defined(max)
387
- #define max(a,b) ((a)>(b)?(a):(b)) /**< max of two values */
418
+ #define max(a, b) ((a)>(b)?(a):(b)) /**< max of two values */
388
419
  #endif
389
420
 
390
421
  /**
391
422
  Handle warnings & errors
392
423
  */
393
424
  //! Handle warnings & errors
394
- #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError);
425
+ #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError)
395
426
 
396
427
 
397
- /*
398
- Call rb_define_method for an attribute accessor method
399
- */
400
- //! attribute reader
401
- #define DCL_ATTR_READER(class, attr) \
402
- rb_define_method(Class_##class, #attr, class##_##attr, 0);
403
- //! attribute writer
404
- #define DCL_ATTR_WRITER(class, attr) \
405
- rb_define_method(Class_##class, #attr "=", class##_##attr##_eq, 1);
406
- //! attribute accessor
407
- #define DCL_ATTR_ACCESSOR(class, attr) \
408
- DCL_ATTR_READER(class, attr) \
409
- DCL_ATTR_WRITER(class, attr)
410
- //! Borrow another class' attribute writer definition
411
- #define SHARE_ATTR_WRITER(to, from, attr) \
412
- rb_define_method(Class_##to, #attr "=", from##_##attr##_eq, 1);
413
-
414
428
  /*
415
429
  Define simple attribute accessor methods (boolean, int, string, and double types)
416
430
  */
417
- #define C_bool_to_R_bool(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
418
- #define R_bool_to_C_bool(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
431
+ #define C_boolean_to_R_boolean(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
432
+ #define R_boolean_to_C_boolean(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
419
433
  #define C_int_to_R_int(attr) INT2FIX(attr) /**< C int -> Ruby int */
420
434
  #define R_int_to_C_int(attr) NUM2INT(attr) /**< C int <- Ruby int */
421
435
  #define C_long_to_R_long(attr) INT2NUM(attr) /**< C long -> Ruby long */
@@ -427,34 +441,31 @@ EXTERN ID rm_ID_y; /**< "y" */
427
441
  #define R_dbl_to_C_dbl(attr) NUM2DBL(attr) /**< C double <- Ruby double */
428
442
 
429
443
  //! define attribute reader
430
- #define DEF_ATTR_READER(class, attr, type) \
431
- VALUE class##_##attr(VALUE self)\
444
+ #define IMPLEMENT_ATTR_READER(class, attr, type) \
432
445
  {\
433
446
  class *ptr;\
434
447
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
435
- (void) rm_check_destroyed(self); \
448
+ rm_check_destroyed(self); \
436
449
  }\
437
450
  Data_Get_Struct(self, class, ptr);\
438
451
  return C_##type##_to_R_##type(ptr->attr);\
439
452
  }
440
453
 
441
454
  //! define attribute reader when attribute name is different from the field name
442
- #define DEF_ATTR_READERF(class, attr, field, type) \
443
- VALUE class##_##attr(VALUE self)\
455
+ #define IMPLEMENT_ATTR_READERF(class, attr, field, type) \
444
456
  {\
445
457
  class *ptr;\
446
- (void) rm_check_destroyed(self); \
458
+ rm_check_destroyed(self); \
447
459
  Data_Get_Struct(self, class, ptr);\
448
460
  return C_##type##_to_R_##type(ptr->field);\
449
461
  }
450
462
 
451
463
  //! define attribute writer
452
- #define DEF_ATTR_WRITER(class, attr, type) \
453
- VALUE class##_##attr##_eq(VALUE self, VALUE val)\
464
+ #define IMPLEMENT_ATTR_WRITER(class, attr, type) \
454
465
  {\
455
466
  class *ptr;\
456
467
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
457
- (void) rm_check_destroyed(self); \
468
+ rm_check_destroyed(self); \
458
469
  }\
459
470
  rb_check_frozen(self);\
460
471
  Data_Get_Struct(self, class, ptr);\
@@ -463,12 +474,11 @@ EXTERN ID rm_ID_y; /**< "y" */
463
474
  }
464
475
 
465
476
  //! define attribute writer when attribute name is different from the field name
466
- #define DEF_ATTR_WRITERF(class, attr, field, type) \
467
- VALUE class##_##attr##_eq(VALUE self, VALUE val)\
477
+ #define IMPLEMENT_ATTR_WRITERF(class, attr, field, type) \
468
478
  {\
469
479
  class *ptr;\
470
480
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
471
- (void) rm_check_destroyed(self); \
481
+ rm_check_destroyed(self); \
472
482
  }\
473
483
  rb_check_frozen(self);\
474
484
  Data_Get_Struct(self, class, ptr);\
@@ -476,15 +486,6 @@ EXTERN ID rm_ID_y; /**< "y" */
476
486
  return self;\
477
487
  }
478
488
 
479
- //! define attribute accessor
480
- #define DEF_ATTR_ACCESSOR(class, attr, type)\
481
- DEF_ATTR_READER(class, attr, type)\
482
- DEF_ATTR_WRITER(class, attr, type)
483
-
484
- //! define attribute accessor when attribute name is different from the field name
485
- #define DEF_ATTR_ACCESSORF(class, attr, field, type)\
486
- DEF_ATTR_READERF(class, attr, field, type)\
487
- DEF_ATTR_WRITERF(class, attr, field, type)
488
489
 
489
490
  /*
490
491
  * Declare attribute accessors
@@ -516,8 +517,8 @@ EXTERN ID rm_ID_y; /**< "y" */
516
517
  do {\
517
518
  MagickEnum *magick_enum;\
518
519
  if (CLASS_OF(value) != Class_##type)\
519
- rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s"\
520
- , rb_class2name(Class_##type),rb_class2name(CLASS_OF(value)));\
520
+ rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s", \
521
+ rb_class2name(Class_##type), rb_class2name(CLASS_OF(value)));\
521
522
  Data_Get_Struct(value, MagickEnum, magick_enum);\
522
523
  e = (type)(magick_enum->val);\
523
524
  } while(0)
@@ -779,7 +780,7 @@ ATTR_ACCESSOR(Image, x_resolution)
779
780
  ATTR_ACCESSOR(Image, y_resolution)
780
781
 
781
782
  extern ChannelType extract_channels(int *, VALUE *);
782
- extern void raise_ChannelType_error(VALUE);
783
+ extern void raise_ChannelType_error(VALUE) ATTRIBUTE_NORETURN;
783
784
  extern void add_format_prefix(Info *, VALUE);
784
785
 
785
786
  extern VALUE Image_alloc(VALUE);
@@ -821,7 +822,11 @@ extern VALUE Image_compare_channel(int, VALUE *, VALUE);
821
822
  extern VALUE Image_channel_depth(int, VALUE *, VALUE);
822
823
  extern VALUE Image_channel_extrema(int, VALUE *, VALUE);
823
824
  extern VALUE Image_channel_mean(int, VALUE *, VALUE);
825
+ #if defined(HAVE_GETIMAGECHANNELENTROPY) || defined(IMAGEMAGICK_7)
824
826
  extern VALUE Image_channel_entropy(int, VALUE *, VALUE);
827
+ #else
828
+ extern VALUE Image_channel_entropy(int, VALUE *, VALUE) ATTRIBUTE_NORETURN;
829
+ #endif
825
830
  extern VALUE Image_charcoal(int, VALUE *, VALUE);
826
831
  extern VALUE Image_chop(VALUE, VALUE, VALUE, VALUE, VALUE);
827
832
  extern VALUE Image_clone(VALUE);
@@ -1098,6 +1103,7 @@ extern VALUE ChromaticityInfo_to_s(VALUE);
1098
1103
  extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1099
1104
  extern void Color_to_PixelColor(PixelColor *, VALUE);
1100
1105
  extern void Color_to_MagickPixel(Image *, MagickPixel *, VALUE);
1106
+ extern void Color_to_Pixel(Pixel *, VALUE);
1101
1107
  extern VALUE Color_to_s(VALUE);
1102
1108
  extern VALUE Import_ColorInfo(const ColorInfo *);
1103
1109
  extern VALUE Font_to_s(VALUE);
@@ -1132,7 +1138,6 @@ extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1132
1138
  extern void *magick_malloc(const size_t);
1133
1139
  extern void *magick_safe_malloc(const size_t, const size_t);
1134
1140
  extern void magick_free(void *);
1135
- extern void *magick_realloc(void *, const size_t);
1136
1141
  extern void *magick_safe_realloc(void *, const size_t, const size_t);
1137
1142
  extern void magick_clone_string(char **, const char *);
1138
1143
  extern Image *rm_acquire_image(ImageInfo *);
@@ -1141,26 +1146,25 @@ extern VALUE rm_pixelcolor_to_color_name(Image *, PixelColor *);
1141
1146
  extern VALUE rm_pixelcolor_to_color_name_info(Info *, PixelColor *);
1142
1147
  extern void rm_init_magickpixel(const Image *, MagickPixel *);
1143
1148
  extern void rm_set_magickpixel(MagickPixel *, const char *);
1144
- extern VALUE rm_no_freeze(VALUE);
1149
+ extern VALUE rm_no_freeze(VALUE) ATTRIBUTE_NORETURN;
1145
1150
  extern int rm_strcasecmp(const char *, const char *);
1146
1151
  extern int rm_strncasecmp(const char *, const char *, size_t);
1152
+ extern size_t rm_strnlen_s(const char *, size_t);
1147
1153
  extern void rm_check_ary_len(VALUE, long);
1148
1154
  extern VALUE rm_check_ary_type(VALUE ary);
1149
1155
  extern Image *rm_check_destroyed(VALUE);
1150
1156
  extern Image *rm_check_frozen(VALUE);
1151
- extern VALUE rm_to_s(VALUE);
1152
1157
  extern char *rm_str2cstr(VALUE, long *);
1153
1158
  extern int rm_check_num2dbl(VALUE);
1154
1159
  extern double rm_fuzz_to_dbl(VALUE);
1155
1160
  extern Quantum rm_app2quantum(VALUE);
1156
- extern double rm_percentage(VALUE,double);
1161
+ extern double rm_percentage(VALUE, double);
1157
1162
  extern double rm_str_to_pct(VALUE);
1158
1163
  extern VALUE rm_define_enum_type(const char *);
1159
- extern void rm_write_temp_image(Image *, char *);
1164
+ extern void rm_write_temp_image(Image *, char *, size_t);
1160
1165
  extern void rm_delete_temp_image(char *);
1161
- extern void rm_not_implemented(void);
1166
+ extern void rm_not_implemented(void) ATTRIBUTE_NORETURN;
1162
1167
  extern void rm_attr_write(VALUE, VALUE);
1163
- extern void rm_get_geometry(VALUE, long *, long *, unsigned long *, unsigned long *, int *);
1164
1168
  extern const char *rm_get_property(const Image *, const char *);
1165
1169
  extern MagickBooleanType rm_set_property(Image *, const char *, const char *);
1166
1170
  extern void rm_set_user_artifact(Image *, Info *);
@@ -1188,7 +1192,7 @@ extern MagickBooleanType rm_progress_monitor(const char *, const MagickOffsetTyp
1188
1192
  extern VALUE rm_exif_by_entry(Image *);
1189
1193
  extern VALUE rm_exif_by_number(Image *);
1190
1194
  extern void rm_get_optional_arguments(VALUE);
1191
- extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *);
1195
+ extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *) ATTRIBUTE_NORETURN;
1192
1196
  extern void rm_error_handler(const ExceptionType, const char *, const char *);
1193
1197
  extern void rm_warning_handler(const ExceptionType, const char *, const char *);
1194
1198
  extern MagickBooleanType rm_should_raise_exception(ExceptionInfo *, const ExceptionRetention);