hexapdf 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE +1 -1
  4. data/examples/009-text_layouter_alignment.rb +4 -0
  5. data/examples/010-text_layouter_inline_boxes.rb +4 -0
  6. data/examples/011-text_layouter_line_wrapping.rb +4 -0
  7. data/examples/012-text_layouter_styling.rb +9 -4
  8. data/examples/013-text_layouter_shapes.rb +5 -0
  9. data/examples/015-boxes.rb +3 -0
  10. data/examples/016-frame_automatic_box_placement.rb +3 -0
  11. data/examples/017-frame_text_flow.rb +3 -0
  12. data/examples/{028-frame_mask_mode.rb → 028-composer_mask_mode.rb} +3 -3
  13. data/lib/hexapdf/cli/batch.rb +1 -1
  14. data/lib/hexapdf/cli/command.rb +2 -2
  15. data/lib/hexapdf/cli/files.rb +1 -1
  16. data/lib/hexapdf/cli/fonts.rb +1 -1
  17. data/lib/hexapdf/cli/form.rb +1 -1
  18. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  19. data/lib/hexapdf/cli/images.rb +1 -1
  20. data/lib/hexapdf/cli/info.rb +1 -1
  21. data/lib/hexapdf/cli/inspect.rb +1 -1
  22. data/lib/hexapdf/cli/merge.rb +1 -1
  23. data/lib/hexapdf/cli/modify.rb +1 -1
  24. data/lib/hexapdf/cli/optimize.rb +1 -1
  25. data/lib/hexapdf/cli/split.rb +1 -1
  26. data/lib/hexapdf/cli/usage.rb +1 -1
  27. data/lib/hexapdf/cli/watermark.rb +1 -1
  28. data/lib/hexapdf/cli.rb +1 -1
  29. data/lib/hexapdf/composer.rb +1 -1
  30. data/lib/hexapdf/configuration.rb +6 -1
  31. data/lib/hexapdf/content/canvas.rb +1 -1
  32. data/lib/hexapdf/content/canvas_composer.rb +1 -1
  33. data/lib/hexapdf/content/color_space.rb +1 -1
  34. data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
  35. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  36. data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
  37. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  38. data/lib/hexapdf/content/graphic_object.rb +1 -1
  39. data/lib/hexapdf/content/graphics_state.rb +1 -1
  40. data/lib/hexapdf/content/operator.rb +1 -1
  41. data/lib/hexapdf/content/parser.rb +22 -25
  42. data/lib/hexapdf/content/processor.rb +1 -1
  43. data/lib/hexapdf/content/transformation_matrix.rb +1 -1
  44. data/lib/hexapdf/content.rb +1 -1
  45. data/lib/hexapdf/data_dir.rb +1 -1
  46. data/lib/hexapdf/dictionary.rb +1 -1
  47. data/lib/hexapdf/dictionary_fields.rb +1 -1
  48. data/lib/hexapdf/digital_signature/cms_handler.rb +1 -1
  49. data/lib/hexapdf/digital_signature/handler.rb +1 -1
  50. data/lib/hexapdf/digital_signature/pkcs1_handler.rb +1 -1
  51. data/lib/hexapdf/digital_signature/signature.rb +1 -1
  52. data/lib/hexapdf/digital_signature/signatures.rb +1 -1
  53. data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -1
  54. data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +1 -1
  55. data/lib/hexapdf/digital_signature/signing/timestamp_handler.rb +1 -1
  56. data/lib/hexapdf/digital_signature/signing.rb +1 -1
  57. data/lib/hexapdf/digital_signature/verification_result.rb +1 -1
  58. data/lib/hexapdf/digital_signature.rb +1 -1
  59. data/lib/hexapdf/document/destinations.rb +1 -1
  60. data/lib/hexapdf/document/files.rb +1 -1
  61. data/lib/hexapdf/document/fonts.rb +1 -1
  62. data/lib/hexapdf/document/images.rb +1 -1
  63. data/lib/hexapdf/document/layout.rb +1 -1
  64. data/lib/hexapdf/document/metadata.rb +1 -1
  65. data/lib/hexapdf/document/pages.rb +1 -1
  66. data/lib/hexapdf/document.rb +1 -1
  67. data/lib/hexapdf/encryption/aes.rb +1 -1
  68. data/lib/hexapdf/encryption/arc4.rb +1 -1
  69. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  70. data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
  71. data/lib/hexapdf/encryption/identity.rb +1 -1
  72. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  73. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  74. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  75. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  76. data/lib/hexapdf/encryption.rb +1 -1
  77. data/lib/hexapdf/error.rb +1 -1
  78. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  79. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  80. data/lib/hexapdf/filter/crypt.rb +1 -1
  81. data/lib/hexapdf/filter/encryption.rb +1 -1
  82. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  83. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  84. data/lib/hexapdf/filter/pass_through.rb +1 -1
  85. data/lib/hexapdf/filter/predictor.rb +1 -1
  86. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  87. data/lib/hexapdf/filter.rb +1 -1
  88. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  89. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  90. data/lib/hexapdf/font/cmap.rb +1 -1
  91. data/lib/hexapdf/font/encoding/base.rb +1 -1
  92. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  93. data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
  94. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  95. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  96. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  97. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  98. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  99. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  100. data/lib/hexapdf/font/encoding.rb +1 -1
  101. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  102. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  103. data/lib/hexapdf/font/true_type/font.rb +1 -1
  104. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  105. data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
  106. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  107. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  108. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  109. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  110. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  111. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  112. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  113. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  114. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  115. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  116. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  117. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  118. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  119. data/lib/hexapdf/font/true_type/table.rb +1 -1
  120. data/lib/hexapdf/font/true_type.rb +1 -1
  121. data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
  122. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  123. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  124. data/lib/hexapdf/font/type1/font.rb +1 -1
  125. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  126. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  127. data/lib/hexapdf/font/type1.rb +1 -1
  128. data/lib/hexapdf/font/type1_wrapper.rb +1 -1
  129. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  130. data/lib/hexapdf/font_loader/from_file.rb +1 -1
  131. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  132. data/lib/hexapdf/font_loader/variant_from_name.rb +1 -1
  133. data/lib/hexapdf/font_loader.rb +1 -1
  134. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  135. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  136. data/lib/hexapdf/image_loader/png.rb +1 -1
  137. data/lib/hexapdf/image_loader.rb +1 -1
  138. data/lib/hexapdf/importer.rb +1 -1
  139. data/lib/hexapdf/layout/box.rb +1 -1
  140. data/lib/hexapdf/layout/box_fitter.rb +1 -1
  141. data/lib/hexapdf/layout/column_box.rb +1 -1
  142. data/lib/hexapdf/layout/container_box.rb +1 -1
  143. data/lib/hexapdf/layout/frame.rb +1 -1
  144. data/lib/hexapdf/layout/image_box.rb +1 -1
  145. data/lib/hexapdf/layout/inline_box.rb +1 -1
  146. data/lib/hexapdf/layout/line.rb +1 -1
  147. data/lib/hexapdf/layout/list_box.rb +1 -1
  148. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  149. data/lib/hexapdf/layout/page_style.rb +1 -1
  150. data/lib/hexapdf/layout/style.rb +4 -2
  151. data/lib/hexapdf/layout/table_box.rb +9 -2
  152. data/lib/hexapdf/layout/text_box.rb +1 -1
  153. data/lib/hexapdf/layout/text_fragment.rb +11 -1
  154. data/lib/hexapdf/layout/text_layouter.rb +1 -1
  155. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  156. data/lib/hexapdf/layout/width_from_polygon.rb +1 -1
  157. data/lib/hexapdf/layout.rb +1 -1
  158. data/lib/hexapdf/name_tree_node.rb +1 -1
  159. data/lib/hexapdf/number_tree_node.rb +1 -1
  160. data/lib/hexapdf/object.rb +1 -1
  161. data/lib/hexapdf/parser.rb +1 -1
  162. data/lib/hexapdf/pdf_array.rb +1 -1
  163. data/lib/hexapdf/rectangle.rb +1 -1
  164. data/lib/hexapdf/reference.rb +1 -1
  165. data/lib/hexapdf/revision.rb +1 -1
  166. data/lib/hexapdf/revisions.rb +1 -1
  167. data/lib/hexapdf/serializer.rb +1 -1
  168. data/lib/hexapdf/stream.rb +1 -1
  169. data/lib/hexapdf/task/dereference.rb +1 -1
  170. data/lib/hexapdf/task/merge_acro_form.rb +1 -1
  171. data/lib/hexapdf/task/optimize.rb +1 -1
  172. data/lib/hexapdf/task/pdfa.rb +1 -1
  173. data/lib/hexapdf/task.rb +1 -1
  174. data/lib/hexapdf/test_utils.rb +1 -1
  175. data/lib/hexapdf/tokenizer.rb +49 -46
  176. data/lib/hexapdf/type/acro_form/appearance_generator.rb +1 -1
  177. data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
  178. data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
  179. data/lib/hexapdf/type/acro_form/field.rb +1 -1
  180. data/lib/hexapdf/type/acro_form/form.rb +1 -1
  181. data/lib/hexapdf/type/acro_form/java_script_actions.rb +1 -1
  182. data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
  183. data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
  184. data/lib/hexapdf/type/acro_form/variable_text_field.rb +1 -1
  185. data/lib/hexapdf/type/acro_form.rb +1 -1
  186. data/lib/hexapdf/type/action.rb +1 -1
  187. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  188. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  189. data/lib/hexapdf/type/actions/launch.rb +1 -1
  190. data/lib/hexapdf/type/actions/set_ocg_state.rb +1 -1
  191. data/lib/hexapdf/type/actions/uri.rb +1 -1
  192. data/lib/hexapdf/type/actions.rb +1 -1
  193. data/lib/hexapdf/type/annotation.rb +1 -1
  194. data/lib/hexapdf/type/annotations/link.rb +1 -1
  195. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  196. data/lib/hexapdf/type/annotations/text.rb +1 -1
  197. data/lib/hexapdf/type/annotations/widget.rb +1 -1
  198. data/lib/hexapdf/type/annotations.rb +1 -1
  199. data/lib/hexapdf/type/catalog.rb +2 -2
  200. data/lib/hexapdf/type/cid_font.rb +2 -2
  201. data/lib/hexapdf/type/cmap.rb +1 -1
  202. data/lib/hexapdf/type/embedded_file.rb +1 -1
  203. data/lib/hexapdf/type/file_specification.rb +1 -1
  204. data/lib/hexapdf/type/font.rb +1 -1
  205. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  206. data/lib/hexapdf/type/font_simple.rb +1 -1
  207. data/lib/hexapdf/type/font_true_type.rb +1 -1
  208. data/lib/hexapdf/type/font_type0.rb +1 -1
  209. data/lib/hexapdf/type/font_type1.rb +1 -1
  210. data/lib/hexapdf/type/font_type3.rb +1 -1
  211. data/lib/hexapdf/type/form.rb +1 -1
  212. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  213. data/lib/hexapdf/type/icon_fit.rb +1 -1
  214. data/lib/hexapdf/type/image.rb +1 -1
  215. data/lib/hexapdf/type/info.rb +1 -1
  216. data/lib/hexapdf/type/mark_information.rb +1 -1
  217. data/lib/hexapdf/type/marked_content_reference.rb +59 -0
  218. data/lib/hexapdf/type/metadata.rb +1 -1
  219. data/lib/hexapdf/type/names.rb +1 -1
  220. data/lib/hexapdf/type/namespace.rb +57 -0
  221. data/lib/hexapdf/type/object_reference.rb +57 -0
  222. data/lib/hexapdf/type/object_stream.rb +1 -1
  223. data/lib/hexapdf/type/optional_content_configuration.rb +1 -1
  224. data/lib/hexapdf/type/optional_content_group.rb +1 -1
  225. data/lib/hexapdf/type/optional_content_membership.rb +1 -1
  226. data/lib/hexapdf/type/optional_content_properties.rb +1 -1
  227. data/lib/hexapdf/type/outline.rb +1 -1
  228. data/lib/hexapdf/type/outline_item.rb +1 -1
  229. data/lib/hexapdf/type/output_intent.rb +1 -1
  230. data/lib/hexapdf/type/page.rb +1 -1
  231. data/lib/hexapdf/type/page_label.rb +1 -1
  232. data/lib/hexapdf/type/page_tree_node.rb +1 -1
  233. data/lib/hexapdf/type/resources.rb +7 -3
  234. data/lib/hexapdf/type/struct_elem.rb +72 -0
  235. data/lib/hexapdf/type/struct_tree_root.rb +64 -0
  236. data/lib/hexapdf/type/trailer.rb +1 -1
  237. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  238. data/lib/hexapdf/type/xref_stream.rb +1 -1
  239. data/lib/hexapdf/type.rb +6 -1
  240. data/lib/hexapdf/utils/bit_field.rb +1 -1
  241. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  242. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  243. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  244. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  245. data/lib/hexapdf/utils/object_hash.rb +1 -1
  246. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  247. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  248. data/lib/hexapdf/utils.rb +1 -1
  249. data/lib/hexapdf/version.rb +2 -2
  250. data/lib/hexapdf/writer.rb +1 -1
  251. data/lib/hexapdf/xref_section.rb +1 -1
  252. data/lib/hexapdf.rb +1 -1
  253. data/test/hexapdf/common_tokenizer_tests.rb +0 -5
  254. data/test/hexapdf/layout/test_box.rb +0 -2
  255. data/test/hexapdf/layout/test_style.rb +0 -10
  256. data/test/hexapdf/layout/test_table_box.rb +0 -15
  257. data/test/hexapdf/layout/test_text_box.rb +0 -6
  258. data/test/hexapdf/type/test_font_type1.rb +1 -1
  259. data/test/hexapdf/type/test_resources.rb +3 -1
  260. data/test/test_helper.rb +1 -0
  261. metadata +23 -7
@@ -4,7 +4,7 @@
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -37,6 +37,6 @@
37
37
  module HexaPDF
38
38
 
39
39
  # The version of HexaPDF.
40
- VERSION = '1.0.3'
40
+ VERSION = '1.1.0'
41
41
 
42
42
  end
@@ -4,7 +4,7 @@
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -4,7 +4,7 @@
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
data/lib/hexapdf.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -126,11 +126,6 @@ module CommonTokenizerTests
126
126
  assert(token.kind_of?(HexaPDF::Tokenizer::Token))
127
127
  end
128
128
 
129
- it "next_token: should not fail when reading super long numbers" do
130
- create_tokenizer("1" + "0" * 10_000)
131
- assert_equal(10**10_000, @tokenizer.next_token)
132
- end
133
-
134
129
  it "next_object: works for all PDF object types, including array and dictionary" do
135
130
  create_tokenizer(<<-EOF.chomp.gsub(/^ {8}/, ''))
136
131
  true false null 123 34.5 (string) <4E6F76> /Name
@@ -270,8 +270,6 @@ describe HexaPDF::Layout::Box do
270
270
  [:restore_graphics_state],
271
271
  [:save_graphics_state],
272
272
  [:set_line_width, [5]],
273
- [:append_rectangle, [5, 5, 150, 130]],
274
- [:clip_path_non_zero], [:end_path],
275
273
  [:append_rectangle, [7.5, 7.5, 145, 125]],
276
274
  [:stroke_path],
277
275
  [:restore_graphics_state],
@@ -199,8 +199,6 @@ describe HexaPDF::Layout::Style::Border do
199
199
  assert_operators(@canvas.contents, [[:save_graphics_state],
200
200
  [:set_device_gray_stroking_color, [0.5]],
201
201
  [:set_line_width, [10]],
202
- [:append_rectangle, [0, 0, 100, 100]],
203
- [:clip_path_non_zero], [:end_path],
204
202
  [:append_rectangle, [5, 5, 90, 90]],
205
203
  [:stroke_path],
206
204
  [:restore_graphics_state]])
@@ -213,8 +211,6 @@ describe HexaPDF::Layout::Style::Border do
213
211
  [:set_device_gray_stroking_color, [0.5]],
214
212
  [:set_line_width, [10]],
215
213
  [:set_line_cap_style, [2]],
216
- [:append_rectangle, [0, 0, 200, 300]],
217
- [:clip_path_non_zero], [:end_path],
218
214
  [:set_line_dash_pattern, [[10, 20], 25]],
219
215
  [:move_to, [0, 295]], [:line_to, [200, 295]],
220
216
  [:move_to, [200, 5]], [:line_to, [0, 5]],
@@ -234,8 +230,6 @@ describe HexaPDF::Layout::Style::Border do
234
230
  [:set_device_gray_stroking_color, [0.5]],
235
231
  [:set_line_width, [10]],
236
232
  [:set_line_cap_style, [1]],
237
- [:append_rectangle, [0, 0, 200, 300]],
238
- [:clip_path_non_zero], [:end_path],
239
233
  [:set_line_dash_pattern, [[10, 20], 25]],
240
234
  [:move_to, [0, 295]], [:line_to, [200, 295]],
241
235
  [:move_to, [200, 5]], [:line_to, [0, 5]],
@@ -255,8 +249,6 @@ describe HexaPDF::Layout::Style::Border do
255
249
  [:set_device_gray_stroking_color, [0.5]],
256
250
  [:set_line_width, [10]],
257
251
  [:set_line_cap_style, [1]],
258
- [:append_rectangle, [0, 0, 100, 200]],
259
- [:clip_path_non_zero], [:end_path],
260
252
  [:set_line_dash_pattern, [[0, 18], 13]],
261
253
  [:move_to, [0, 195]], [:line_to, [100, 195]],
262
254
  [:move_to, [100, 5]], [:line_to, [0, 5]],
@@ -275,8 +267,6 @@ describe HexaPDF::Layout::Style::Border do
275
267
  assert_operators(@canvas.contents, [[:save_graphics_state],
276
268
  [:set_device_gray_stroking_color, [0.5]],
277
269
  [:set_line_width, [10]],
278
- [:append_rectangle, [-5, -5, 110, 110]],
279
- [:clip_path_non_zero], [:end_path],
280
270
  [:append_rectangle, [0, 0, 100, 100]],
281
271
  [:stroke_path],
282
272
  [:restore_graphics_state]])
@@ -143,9 +143,6 @@ describe HexaPDF::Layout::TableBox::Cell do
143
143
  box.fit(100, 100, @frame)
144
144
  box.draw(@canvas, 10, 75)
145
145
  operators = [[:save_graphics_state],
146
- [:append_rectangle, [9.5, 74.5, 101.0, 38.0]],
147
- [:clip_path_non_zero],
148
- [:end_path],
149
146
  [:append_rectangle, [10.0, 75.0, 100.0, 37.0]],
150
147
  [:stroke_path],
151
148
  [:restore_graphics_state],
@@ -674,9 +671,6 @@ describe HexaPDF::Layout::TableBox do
674
671
  box.fit(100, 100, @frame)
675
672
  box.draw(@canvas, 20, 10)
676
673
  operators = [[:save_graphics_state],
677
- [:append_rectangle, [20.0, 32.0, 50.5, 23.0]],
678
- [:clip_path_non_zero],
679
- [:end_path],
680
674
  [:append_rectangle, [20.5, 32.5, 49.5, 22.0]],
681
675
  [:stroke_path],
682
676
  [:restore_graphics_state],
@@ -686,9 +680,6 @@ describe HexaPDF::Layout::TableBox do
686
680
  [:end_path],
687
681
  [:restore_graphics_state],
688
682
  [:save_graphics_state],
689
- [:append_rectangle, [69.5, 32.0, 50.5, 23.0]],
690
- [:clip_path_non_zero],
691
- [:end_path],
692
683
  [:append_rectangle, [70.0, 32.5, 49.5, 22.0]],
693
684
  [:stroke_path],
694
685
  [:restore_graphics_state],
@@ -698,9 +689,6 @@ describe HexaPDF::Layout::TableBox do
698
689
  [:end_path],
699
690
  [:restore_graphics_state],
700
691
  [:save_graphics_state],
701
- [:append_rectangle, [20.0, 10.0, 50.5, 23.0]],
702
- [:clip_path_non_zero],
703
- [:end_path],
704
692
  [:append_rectangle, [20.5, 10.5, 49.5, 22.0]],
705
693
  [:stroke_path],
706
694
  [:restore_graphics_state],
@@ -710,9 +698,6 @@ describe HexaPDF::Layout::TableBox do
710
698
  [:end_path],
711
699
  [:restore_graphics_state],
712
700
  [:save_graphics_state],
713
- [:append_rectangle, [69.5, 10.0, 50.5, 23.0]],
714
- [:clip_path_non_zero],
715
- [:end_path],
716
701
  [:append_rectangle, [70.0, 10.5, 49.5, 22.0]],
717
702
  [:stroke_path],
718
703
  [:restore_graphics_state],
@@ -178,9 +178,6 @@ describe HexaPDF::Layout::TextBox do
178
178
  assert_operators(@canvas.contents, [[:save_graphics_state],
179
179
  [:restore_graphics_state],
180
180
  [:save_graphics_state],
181
- [:append_rectangle, [5, 10, 10, 10]],
182
- [:clip_path_non_zero],
183
- [:end_path],
184
181
  [:append_rectangle, [5.5, 10.5, 9.0, 9.0]],
185
182
  [:stroke_path],
186
183
  [:restore_graphics_state],
@@ -194,9 +191,6 @@ describe HexaPDF::Layout::TextBox do
194
191
  box.fit(60, 100, @frame)
195
192
  box.draw(@canvas, 40, 88)
196
193
  assert_operators(@canvas.contents, [[:save_graphics_state],
197
- [:append_rectangle, [40, 88, 12, 12]],
198
- [:clip_path_non_zero],
199
- [:end_path],
200
194
  [:append_rectangle, [40.5, 88.5, 11.0, 11.0]],
201
195
  [:stroke_path],
202
196
  [:restore_graphics_state],
@@ -31,7 +31,7 @@ describe HexaPDF::Type::FontType1::StandardFonts do
31
31
  end
32
32
 
33
33
  it "returns nil if the given name doesn't belong to a standard font" do
34
- refute_nil(@obj.font(:TimesNewRoman))
34
+ assert_nil(@obj.font(:SomeOtherFont))
35
35
  end
36
36
  end
37
37
  end
@@ -196,7 +196,9 @@ describe HexaPDF::Type::Resources do
196
196
  describe "validation" do
197
197
  it "handles an invalid ProcSet containing a single value instead of an array" do
198
198
  @res[:ProcSet] = :PDF
199
- @res.validate
199
+ msg = nil
200
+ @res.validate {|message, *| msg = message unless msg }
201
+ assert_match(/single value instead of an Array/, msg)
200
202
  assert_equal([:PDF], @res[:ProcSet].value)
201
203
  end
202
204
 
data/test/test_helper.rb CHANGED
@@ -11,6 +11,7 @@ rescue LoadError
11
11
  end
12
12
 
13
13
  gem 'minitest'
14
+ gem 'strscan'
14
15
  require 'minitest/autorun'
15
16
  require 'fiber'
16
17
  require 'zlib'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexapdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-04 00:00:00.000000000 Z
10
+ date: 2025-01-08 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: cmdparse
@@ -64,6 +63,20 @@ dependencies:
64
63
  - - ">="
65
64
  - !ruby/object:Gem::Version
66
65
  version: 2.2.1
66
+ - !ruby/object:Gem::Dependency
67
+ name: strscan
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 3.1.2
73
+ type: :runtime
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 3.1.2
67
80
  - !ruby/object:Gem::Dependency
68
81
  name: kramdown
69
82
  requirement: !ruby/object:Gem::Requirement
@@ -303,7 +316,7 @@ files:
303
316
  - examples/025-table_box.rb
304
317
  - examples/026-optional_content.rb
305
318
  - examples/027-composer_optional_content.rb
306
- - examples/028-frame_mask_mode.rb
319
+ - examples/028-composer_mask_mode.rb
307
320
  - examples/029-composer_fallback_fonts.rb
308
321
  - examples/030-pdfa.rb
309
322
  - examples/031-acro_form_java_script.rb
@@ -516,8 +529,11 @@ files:
516
529
  - lib/hexapdf/type/image.rb
517
530
  - lib/hexapdf/type/info.rb
518
531
  - lib/hexapdf/type/mark_information.rb
532
+ - lib/hexapdf/type/marked_content_reference.rb
519
533
  - lib/hexapdf/type/metadata.rb
520
534
  - lib/hexapdf/type/names.rb
535
+ - lib/hexapdf/type/namespace.rb
536
+ - lib/hexapdf/type/object_reference.rb
521
537
  - lib/hexapdf/type/object_stream.rb
522
538
  - lib/hexapdf/type/optional_content_configuration.rb
523
539
  - lib/hexapdf/type/optional_content_group.rb
@@ -530,6 +546,8 @@ files:
530
546
  - lib/hexapdf/type/page_label.rb
531
547
  - lib/hexapdf/type/page_tree_node.rb
532
548
  - lib/hexapdf/type/resources.rb
549
+ - lib/hexapdf/type/struct_elem.rb
550
+ - lib/hexapdf/type/struct_tree_root.rb
533
551
  - lib/hexapdf/type/trailer.rb
534
552
  - lib/hexapdf/type/viewer_preferences.rb
535
553
  - lib/hexapdf/type/xref_stream.rb
@@ -810,7 +828,6 @@ licenses:
810
828
  - AGPL-3.0
811
829
  - Nonstandard
812
830
  metadata: {}
813
- post_install_message:
814
831
  rdoc_options: []
815
832
  require_paths:
816
833
  - lib
@@ -825,8 +842,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
825
842
  - !ruby/object:Gem::Version
826
843
  version: '0'
827
844
  requirements: []
828
- rubygems_version: 3.5.3
829
- signing_key:
845
+ rubygems_version: 3.6.2
830
846
  specification_version: 4
831
847
  summary: HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
832
848
  test_files: []