hexapdf 0.6.0 → 0.7.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 (257) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +33 -0
  3. data/CONTRIBUTERS +1 -1
  4. data/LICENSE +1 -1
  5. data/Rakefile +1 -1
  6. data/VERSION +1 -1
  7. data/bin/hexapdf +1 -1
  8. data/examples/text_layouter_styling.rb +1 -2
  9. data/lib/hexapdf.rb +2 -2
  10. data/lib/hexapdf/cli.rb +3 -3
  11. data/lib/hexapdf/cli/batch.rb +5 -5
  12. data/lib/hexapdf/cli/command.rb +15 -17
  13. data/lib/hexapdf/cli/files.rb +3 -3
  14. data/lib/hexapdf/cli/images.rb +3 -4
  15. data/lib/hexapdf/cli/info.rb +5 -5
  16. data/lib/hexapdf/cli/inspect.rb +6 -6
  17. data/lib/hexapdf/cli/merge.rb +6 -6
  18. data/lib/hexapdf/cli/modify.rb +4 -4
  19. data/lib/hexapdf/cli/optimize.rb +3 -3
  20. data/lib/hexapdf/configuration.rb +4 -5
  21. data/lib/hexapdf/content.rb +2 -2
  22. data/lib/hexapdf/content/canvas.rb +35 -36
  23. data/lib/hexapdf/content/color_space.rb +9 -14
  24. data/lib/hexapdf/content/graphic_object.rb +2 -2
  25. data/lib/hexapdf/content/graphic_object/arc.rb +3 -3
  26. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +2 -2
  27. data/lib/hexapdf/content/graphic_object/solid_arc.rb +4 -8
  28. data/lib/hexapdf/content/graphics_state.rb +4 -13
  29. data/lib/hexapdf/content/operator.rb +33 -35
  30. data/lib/hexapdf/content/parser.rb +28 -18
  31. data/lib/hexapdf/content/processor.rb +4 -5
  32. data/lib/hexapdf/content/transformation_matrix.rb +2 -2
  33. data/lib/hexapdf/data_dir.rb +2 -2
  34. data/lib/hexapdf/dictionary.rb +8 -9
  35. data/lib/hexapdf/dictionary_fields.rb +7 -10
  36. data/lib/hexapdf/document.rb +18 -18
  37. data/lib/hexapdf/document/files.rb +12 -10
  38. data/lib/hexapdf/document/fonts.rb +2 -2
  39. data/lib/hexapdf/document/images.rb +3 -3
  40. data/lib/hexapdf/document/pages.rb +4 -4
  41. data/lib/hexapdf/encryption.rb +2 -2
  42. data/lib/hexapdf/encryption/aes.rb +2 -2
  43. data/lib/hexapdf/encryption/arc4.rb +4 -4
  44. data/lib/hexapdf/encryption/fast_aes.rb +2 -2
  45. data/lib/hexapdf/encryption/fast_arc4.rb +4 -4
  46. data/lib/hexapdf/encryption/identity.rb +5 -4
  47. data/lib/hexapdf/encryption/ruby_aes.rb +147 -139
  48. data/lib/hexapdf/encryption/ruby_arc4.rb +4 -4
  49. data/lib/hexapdf/encryption/security_handler.rb +11 -12
  50. data/lib/hexapdf/encryption/standard_security_handler.rb +6 -9
  51. data/lib/hexapdf/error.rb +7 -9
  52. data/lib/hexapdf/filter.rb +2 -3
  53. data/lib/hexapdf/filter/ascii85_decode.rb +3 -3
  54. data/lib/hexapdf/filter/ascii_hex_decode.rb +2 -2
  55. data/lib/hexapdf/filter/dct_decode.rb +2 -2
  56. data/lib/hexapdf/filter/encryption.rb +2 -2
  57. data/lib/hexapdf/filter/flate_decode.rb +16 -33
  58. data/lib/hexapdf/filter/jpx_decode.rb +2 -2
  59. data/lib/hexapdf/filter/lzw_decode.rb +4 -4
  60. data/lib/hexapdf/filter/predictor.rb +2 -6
  61. data/lib/hexapdf/filter/run_length_decode.rb +2 -2
  62. data/lib/hexapdf/font/cmap.rb +2 -3
  63. data/lib/hexapdf/font/cmap/parser.rb +11 -11
  64. data/lib/hexapdf/font/cmap/writer.rb +25 -25
  65. data/lib/hexapdf/font/encoding.rb +2 -2
  66. data/lib/hexapdf/font/encoding/base.rb +2 -2
  67. data/lib/hexapdf/font/encoding/difference_encoding.rb +2 -2
  68. data/lib/hexapdf/font/encoding/glyph_list.rb +6 -6
  69. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +2 -2
  70. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +2 -2
  71. data/lib/hexapdf/font/encoding/standard_encoding.rb +2 -2
  72. data/lib/hexapdf/font/encoding/symbol_encoding.rb +2 -2
  73. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +2 -2
  74. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +2 -2
  75. data/lib/hexapdf/font/invalid_glyph.rb +7 -7
  76. data/lib/hexapdf/font/true_type.rb +2 -2
  77. data/lib/hexapdf/font/true_type/builder.rb +13 -7
  78. data/lib/hexapdf/font/true_type/font.rb +2 -3
  79. data/lib/hexapdf/font/true_type/optimizer.rb +2 -2
  80. data/lib/hexapdf/font/true_type/subsetter.rb +4 -4
  81. data/lib/hexapdf/font/true_type/table.rb +3 -5
  82. data/lib/hexapdf/font/true_type/table/cmap.rb +2 -2
  83. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +9 -16
  84. data/lib/hexapdf/font/true_type/table/directory.rb +4 -4
  85. data/lib/hexapdf/font/true_type/table/glyf.rb +2 -2
  86. data/lib/hexapdf/font/true_type/table/head.rb +3 -2
  87. data/lib/hexapdf/font/true_type/table/hhea.rb +2 -2
  88. data/lib/hexapdf/font/true_type/table/hmtx.rb +2 -2
  89. data/lib/hexapdf/font/true_type/table/kern.rb +3 -3
  90. data/lib/hexapdf/font/true_type/table/loca.rb +3 -3
  91. data/lib/hexapdf/font/true_type/table/maxp.rb +2 -2
  92. data/lib/hexapdf/font/true_type/table/name.rb +3 -5
  93. data/lib/hexapdf/font/true_type/table/os2.rb +4 -3
  94. data/lib/hexapdf/font/true_type/table/post.rb +3 -7
  95. data/lib/hexapdf/font/true_type_wrapper.rb +20 -22
  96. data/lib/hexapdf/font/type1.rb +2 -2
  97. data/lib/hexapdf/font/type1/afm_parser.rb +7 -7
  98. data/lib/hexapdf/font/type1/character_metrics.rb +2 -2
  99. data/lib/hexapdf/font/type1/font.rb +3 -3
  100. data/lib/hexapdf/font/type1/font_metrics.rb +2 -4
  101. data/lib/hexapdf/font/type1/pfb_parser.rb +2 -2
  102. data/lib/hexapdf/font/type1_wrapper.rb +8 -9
  103. data/lib/hexapdf/font_loader.rb +2 -2
  104. data/lib/hexapdf/font_loader/from_configuration.rb +2 -2
  105. data/lib/hexapdf/font_loader/from_file.rb +2 -2
  106. data/lib/hexapdf/font_loader/standard14.rb +2 -2
  107. data/lib/hexapdf/image_loader.rb +2 -2
  108. data/lib/hexapdf/image_loader/jpeg.rb +6 -4
  109. data/lib/hexapdf/image_loader/pdf.rb +2 -2
  110. data/lib/hexapdf/image_loader/png.rb +6 -6
  111. data/lib/hexapdf/importer.rb +6 -4
  112. data/lib/hexapdf/layout.rb +2 -2
  113. data/lib/hexapdf/layout/box.rb +4 -4
  114. data/lib/hexapdf/layout/inline_box.rb +2 -2
  115. data/lib/hexapdf/layout/line.rb +6 -6
  116. data/lib/hexapdf/layout/numeric_refinements.rb +2 -2
  117. data/lib/hexapdf/layout/style.rb +17 -8
  118. data/lib/hexapdf/layout/text_fragment.rb +86 -48
  119. data/lib/hexapdf/layout/text_layouter.rb +40 -21
  120. data/lib/hexapdf/layout/text_shaper.rb +2 -2
  121. data/lib/hexapdf/name_tree_node.rb +2 -2
  122. data/lib/hexapdf/number_tree_node.rb +2 -2
  123. data/lib/hexapdf/object.rb +6 -8
  124. data/lib/hexapdf/parser.rb +10 -10
  125. data/lib/hexapdf/rectangle.rb +4 -4
  126. data/lib/hexapdf/reference.rb +2 -2
  127. data/lib/hexapdf/revision.rb +4 -4
  128. data/lib/hexapdf/revisions.rb +5 -5
  129. data/lib/hexapdf/serializer.rb +27 -24
  130. data/lib/hexapdf/stream.rb +4 -4
  131. data/lib/hexapdf/task.rb +2 -2
  132. data/lib/hexapdf/task/dereference.rb +4 -4
  133. data/lib/hexapdf/task/optimize.rb +5 -4
  134. data/lib/hexapdf/tokenizer.rb +12 -14
  135. data/lib/hexapdf/type.rb +2 -2
  136. data/lib/hexapdf/type/action.rb +3 -3
  137. data/lib/hexapdf/type/actions.rb +2 -2
  138. data/lib/hexapdf/type/actions/go_to.rb +2 -2
  139. data/lib/hexapdf/type/actions/go_to_r.rb +2 -2
  140. data/lib/hexapdf/type/actions/launch.rb +2 -2
  141. data/lib/hexapdf/type/actions/uri.rb +3 -3
  142. data/lib/hexapdf/type/annotation.rb +3 -3
  143. data/lib/hexapdf/type/annotations.rb +2 -2
  144. data/lib/hexapdf/type/annotations/link.rb +2 -2
  145. data/lib/hexapdf/type/annotations/markup_annotation.rb +2 -2
  146. data/lib/hexapdf/type/annotations/text.rb +2 -2
  147. data/lib/hexapdf/type/catalog.rb +4 -4
  148. data/lib/hexapdf/type/cid_font.rb +4 -5
  149. data/lib/hexapdf/type/embedded_file.rb +3 -3
  150. data/lib/hexapdf/type/file_specification.rb +6 -7
  151. data/lib/hexapdf/type/font.rb +4 -4
  152. data/lib/hexapdf/type/font_descriptor.rb +3 -4
  153. data/lib/hexapdf/type/font_simple.rb +12 -16
  154. data/lib/hexapdf/type/font_true_type.rb +2 -2
  155. data/lib/hexapdf/type/font_type0.rb +5 -5
  156. data/lib/hexapdf/type/font_type1.rb +4 -4
  157. data/lib/hexapdf/type/form.rb +3 -3
  158. data/lib/hexapdf/type/graphics_state_parameter.rb +3 -3
  159. data/lib/hexapdf/type/image.rb +13 -14
  160. data/lib/hexapdf/type/info.rb +2 -2
  161. data/lib/hexapdf/type/names.rb +2 -2
  162. data/lib/hexapdf/type/object_stream.rb +5 -5
  163. data/lib/hexapdf/type/page.rb +9 -10
  164. data/lib/hexapdf/type/page_tree_node.rb +5 -6
  165. data/lib/hexapdf/type/resources.rb +11 -11
  166. data/lib/hexapdf/type/trailer.rb +3 -3
  167. data/lib/hexapdf/type/viewer_preferences.rb +2 -2
  168. data/lib/hexapdf/type/xref_stream.rb +8 -4
  169. data/lib/hexapdf/utils/bit_field.rb +4 -4
  170. data/lib/hexapdf/utils/bit_stream.rb +4 -4
  171. data/lib/hexapdf/utils/graphics_helpers.rb +2 -2
  172. data/lib/hexapdf/utils/lru_cache.rb +2 -2
  173. data/lib/hexapdf/utils/math_helpers.rb +2 -2
  174. data/lib/hexapdf/utils/object_hash.rb +3 -3
  175. data/lib/hexapdf/utils/pdf_doc_encoding.rb +3 -3
  176. data/lib/hexapdf/utils/sorted_tree_node.rb +12 -11
  177. data/lib/hexapdf/version.rb +3 -3
  178. data/lib/hexapdf/writer.rb +8 -8
  179. data/lib/hexapdf/xref_section.rb +3 -3
  180. data/test/hexapdf/common_tokenizer_tests.rb +6 -7
  181. data/test/hexapdf/content/graphic_object/test_endpoint_arc.rb +0 -1
  182. data/test/hexapdf/content/test_canvas.rb +28 -36
  183. data/test/hexapdf/content/test_color_space.rb +4 -0
  184. data/test/hexapdf/content/test_graphics_state.rb +2 -0
  185. data/test/hexapdf/content/test_operator.rb +6 -7
  186. data/test/hexapdf/content/test_parser.rb +2 -2
  187. data/test/hexapdf/content/test_processor.rb +1 -1
  188. data/test/hexapdf/document/test_files.rb +1 -0
  189. data/test/hexapdf/document/test_images.rb +1 -1
  190. data/test/hexapdf/encryption/common.rb +3 -3
  191. data/test/hexapdf/encryption/test_aes.rb +10 -4
  192. data/test/hexapdf/encryption/test_identity.rb +1 -1
  193. data/test/hexapdf/encryption/test_security_handler.rb +13 -17
  194. data/test/hexapdf/encryption/test_standard_security_handler.rb +12 -12
  195. data/test/hexapdf/filter/test_ascii85_decode.rb +2 -3
  196. data/test/hexapdf/filter/test_ascii_hex_decode.rb +6 -1
  197. data/test/hexapdf/filter/test_flate_decode.rb +2 -2
  198. data/test/hexapdf/filter/test_lzw_decode.rb +10 -10
  199. data/test/hexapdf/filter/test_predictor.rb +10 -2
  200. data/test/hexapdf/filter/test_run_length_decode.rb +1 -1
  201. data/test/hexapdf/font/cmap/test_parser.rb +40 -40
  202. data/test/hexapdf/font/cmap/test_writer.rb +29 -29
  203. data/test/hexapdf/font/test_true_type_wrapper.rb +3 -2
  204. data/test/hexapdf/font/true_type/common.rb +2 -0
  205. data/test/hexapdf/font/true_type/table/test_cmap.rb +1 -1
  206. data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +5 -4
  207. data/test/hexapdf/font/true_type/table/test_glyf.rb +2 -2
  208. data/test/hexapdf/font/true_type/table/test_head.rb +2 -2
  209. data/test/hexapdf/font/true_type/table/test_name.rb +9 -6
  210. data/test/hexapdf/font/true_type/test_builder.rb +8 -3
  211. data/test/hexapdf/font/true_type/test_optimizer.rb +1 -2
  212. data/test/hexapdf/font/type1/test_afm_parser.rb +2 -2
  213. data/test/hexapdf/image_loader/test_jpeg.rb +1 -1
  214. data/test/hexapdf/image_loader/test_pdf.rb +1 -1
  215. data/test/hexapdf/image_loader/test_png.rb +3 -3
  216. data/test/hexapdf/layout/test_inline_box.rb +10 -1
  217. data/test/hexapdf/layout/test_line.rb +4 -4
  218. data/test/hexapdf/layout/test_style.rb +19 -7
  219. data/test/hexapdf/layout/test_text_fragment.rb +73 -27
  220. data/test/hexapdf/layout/test_text_layouter.rb +84 -68
  221. data/test/hexapdf/layout/test_text_shaper.rb +4 -6
  222. data/test/hexapdf/task/test_dereference.rb +2 -2
  223. data/test/hexapdf/task/test_optimize.rb +16 -7
  224. data/test/hexapdf/test_configuration.rb +1 -1
  225. data/test/hexapdf/test_data_dir.rb +2 -2
  226. data/test/hexapdf/test_dictionary.rb +6 -3
  227. data/test/hexapdf/test_dictionary_fields.rb +15 -14
  228. data/test/hexapdf/test_document.rb +47 -48
  229. data/test/hexapdf/test_filter.rb +30 -26
  230. data/test/hexapdf/test_importer.rb +14 -0
  231. data/test/hexapdf/test_object.rb +16 -4
  232. data/test/hexapdf/test_parser.rb +36 -36
  233. data/test/hexapdf/test_reference.rb +7 -5
  234. data/test/hexapdf/test_revision.rb +1 -1
  235. data/test/hexapdf/test_revisions.rb +90 -90
  236. data/test/hexapdf/test_serializer.rb +3 -2
  237. data/test/hexapdf/test_stream.rb +2 -4
  238. data/test/hexapdf/test_tokenizer.rb +2 -2
  239. data/test/hexapdf/test_writer.rb +80 -80
  240. data/test/hexapdf/test_xref_section.rb +1 -1
  241. data/test/hexapdf/type/annotations/test_link.rb +1 -1
  242. data/test/hexapdf/type/annotations/test_text.rb +3 -3
  243. data/test/hexapdf/type/test_font_descriptor.rb +1 -1
  244. data/test/hexapdf/type/test_font_simple.rb +2 -2
  245. data/test/hexapdf/type/test_font_type0.rb +0 -1
  246. data/test/hexapdf/type/test_image.rb +0 -3
  247. data/test/hexapdf/type/test_object_stream.rb +2 -1
  248. data/test/hexapdf/type/test_page.rb +5 -1
  249. data/test/hexapdf/type/test_page_tree_node.rb +4 -4
  250. data/test/hexapdf/type/test_trailer.rb +1 -1
  251. data/test/hexapdf/type/test_xref_stream.rb +4 -0
  252. data/test/hexapdf/utils/test_bit_field.rb +2 -0
  253. data/test/hexapdf/utils/test_bit_stream.rb +1 -1
  254. data/test/hexapdf/utils/test_lru_cache.rb +1 -1
  255. data/test/hexapdf/utils/test_sorted_tree_node.rb +10 -4
  256. data/test/test_helper.rb +3 -6
  257. metadata +3 -3
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -159,7 +159,7 @@ module HexaPDF
159
159
  def draw(canvas, move_to_start: true)
160
160
  @max_curves = canvas.context.document.config['graphic_object.arc.max_curves']
161
161
  canvas.move_to(*start_point) if move_to_start
162
- curves.each {|curve| canvas.curve_to(*curve)}
162
+ curves.each {|curve| canvas.curve_to(*curve) }
163
163
  end
164
164
 
165
165
  # Returns an array of arrays that contain the points for the Bezier curves which are used
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -138,12 +138,10 @@ module HexaPDF
138
138
  inclination: @inclination, clockwise: false)
139
139
  if angle_difference == 0
140
140
  arc.draw(canvas)
141
- canvas.close_subpath
142
141
  else
143
142
  canvas.move_to(@cx, @cy)
144
143
  canvas.line_to(*arc.start_point)
145
144
  arc.draw(canvas, move_to_start: false)
146
- canvas.close_subpath
147
145
  end
148
146
  else
149
147
  inner = canvas.graphic_object(:arc, cx: @cx, cy: @cy, a: @inner_a, b: @inner_b,
@@ -152,18 +150,16 @@ module HexaPDF
152
150
  outer = canvas.graphic_object(:arc, cx: @cx, cy: @cy, a: @outer_a, b: @outer_b,
153
151
  start_angle: @start_angle, end_angle: @end_angle,
154
152
  inclination: @inclination, clockwise: false)
153
+ outer.draw(canvas)
155
154
  if angle_difference == 0
156
- outer.draw(canvas)
157
155
  canvas.close_subpath
158
156
  inner.draw(canvas)
159
- canvas.close_subpath
160
157
  else
161
- outer.draw(canvas)
162
158
  canvas.line_to(*inner.start_point)
163
159
  inner.draw(canvas, move_to_start: false)
164
- canvas.close_subpath
165
160
  end
166
161
  end
162
+ canvas.close_subpath
167
163
  end
168
164
 
169
165
  end
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -69,7 +69,6 @@ module HexaPDF
69
69
 
70
70
  end
71
71
 
72
-
73
72
  # Defines all available line cap styles as constants. Each line cap style is an instance of
74
73
  # NamedValue. For use with Content::GraphicsState#line_cap_style.
75
74
  #
@@ -103,7 +102,6 @@ module HexaPDF
103
102
 
104
103
  end
105
104
 
106
-
107
105
  # Defines all available line join styles as constants. Each line join style is an instance of
108
106
  # NamedValue. For use with Content::GraphicsState#line_join_style.
109
107
  #
@@ -138,7 +136,6 @@ module HexaPDF
138
136
 
139
137
  end
140
138
 
141
-
142
139
  # The line dash pattern defines how a line should be dashed. For use with
143
140
  # Content::GraphicsState#line_dash_pattern.
144
141
  #
@@ -186,7 +183,7 @@ module HexaPDF
186
183
  # non-negative and must not all be zero.
187
184
  def initialize(array = [], phase = 0)
188
185
  if phase < 0 || (!array.empty? &&
189
- array.inject(0) {|m, n| m < 0 ? m : (n < 0 ? -1 : m + n)} <= 0)
186
+ array.inject(0) {|m, n| m < 0 ? m : (n < 0 ? -1 : m + n) } <= 0)
190
187
  raise ArgumentError, "Invalid line dash pattern: #{array.inspect} #{phase.inspect}"
191
188
  end
192
189
  @array = array.freeze
@@ -206,7 +203,6 @@ module HexaPDF
206
203
 
207
204
  end
208
205
 
209
-
210
206
  # Defines all available rendering intents as constants. For use with
211
207
  # Content::GraphicsState#rendering_intent.
212
208
  #
@@ -241,7 +237,6 @@ module HexaPDF
241
237
 
242
238
  end
243
239
 
244
-
245
240
  # Defines all available text rendering modes as constants. Each text rendering mode is an
246
241
  # instance of NamedValue. For use with Content::GraphicsState#text_rendering_mode.
247
242
  #
@@ -300,7 +295,6 @@ module HexaPDF
300
295
 
301
296
  end
302
297
 
303
-
304
298
  # A GraphicsState object holds all the graphic control parameters needed for correct
305
299
  # operation when parsing or creating a content stream with a Processor object.
306
300
  #
@@ -360,7 +354,6 @@ module HexaPDF
360
354
  # interpreted as shape values or opacity values.
361
355
  attr_accessor :alpha_source
362
356
 
363
-
364
357
  # The text matrix.
365
358
  #
366
359
  # This attribute is non-nil only when inside a text object.
@@ -417,7 +410,6 @@ module HexaPDF
417
410
  # all glyphs together are treated as one elementary object (knockout = +true+).
418
411
  attr_accessor :text_knockout
419
412
 
420
-
421
413
  # The scaled character spacing used in glyph displacement calculations.
422
414
  #
423
415
  # This returns the value T_c multiplied by #scaled_horizontal_scaling.
@@ -447,12 +439,11 @@ module HexaPDF
447
439
  # See PDF1.7 s9.4.4
448
440
  attr_reader :scaled_horizontal_scaling
449
441
 
450
-
451
442
  # Initializes the graphics state parameters to their default values.
452
443
  def initialize
453
444
  @ctm = TransformationMatrix.new
454
445
  @stroke_color = @fill_color =
455
- GlobalConfiguration.constantize('color_space.map'.freeze, :DeviceGray).new.default_color
446
+ GlobalConfiguration.constantize('color_space.map', :DeviceGray).new.default_color
456
447
  @line_width = 1.0
457
448
  @line_cap_style = LineCapStyle::BUTT_CAP
458
449
  @line_join_style = LineJoinStyle::MITER_JOIN
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
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-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 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
@@ -102,9 +102,9 @@ module HexaPDF
102
102
  def serialize(serializer, *operands)
103
103
  result = ''.b
104
104
  operands.each do |operand|
105
- result << serializer.serialize(operand) << " ".freeze
105
+ result << serializer.serialize(operand) << " "
106
106
  end
107
- result << name << "\n".freeze
107
+ result << name << "\n"
108
108
  end
109
109
 
110
110
  end
@@ -115,7 +115,7 @@ module HexaPDF
115
115
 
116
116
  def initialize(name) #:nodoc:
117
117
  super(name)
118
- @serialized = "#{name}\n".freeze
118
+ @serialized = "#{name}\n"
119
119
  end
120
120
 
121
121
  def invoke(_processor) # :nodoc:
@@ -277,7 +277,7 @@ module HexaPDF
277
277
 
278
278
  def serialize(serializer, dash_array, dash_phase) #:nodoc:
279
279
  "#{serializer.serialize_array(dash_array)} " \
280
- "#{serializer.serialize_integer(dash_phase)} d\n".freeze
280
+ "#{serializer.serialize_integer(dash_phase)} d\n"
281
281
  end
282
282
 
283
283
  end
@@ -297,7 +297,7 @@ module HexaPDF
297
297
  end
298
298
 
299
299
  def serialize(serializer, intent) #:nodoc:
300
- "#{serializer.serialize_symbol(intent)} ri\n".freeze
300
+ "#{serializer.serialize_symbol(intent)} ri\n"
301
301
  end
302
302
 
303
303
  end
@@ -342,7 +342,7 @@ module HexaPDF
342
342
  end
343
343
 
344
344
  def serialize(serializer, name) #:nodoc:
345
- "#{serializer.serialize_symbol(name)} gs\n".freeze
345
+ "#{serializer.serialize_symbol(name)} gs\n"
346
346
  end
347
347
 
348
348
  end
@@ -362,7 +362,7 @@ module HexaPDF
362
362
  end
363
363
 
364
364
  def serialize(serializer, name) #:nodoc:
365
- "#{serializer.serialize_symbol(name)} CS\n".freeze
365
+ "#{serializer.serialize_symbol(name)} CS\n"
366
366
  end
367
367
 
368
368
  end
@@ -382,7 +382,7 @@ module HexaPDF
382
382
  end
383
383
 
384
384
  def serialize(serializer, name) #:nodoc:
385
- "#{serializer.serialize_symbol(name)} cs\n".freeze
385
+ "#{serializer.serialize_symbol(name)} cs\n"
386
386
  end
387
387
 
388
388
  end
@@ -461,7 +461,7 @@ module HexaPDF
461
461
 
462
462
  def serialize(serializer, r, g, b) #:nodoc:
463
463
  "#{serializer.serialize_numeric(r)} #{serializer.serialize_numeric(g)} " \
464
- "#{serializer.serialize_numeric(b)} RG\n".freeze
464
+ "#{serializer.serialize_numeric(b)} RG\n"
465
465
  end
466
466
 
467
467
  end
@@ -483,7 +483,7 @@ module HexaPDF
483
483
 
484
484
  def serialize(serializer, r, g, b) #:nodoc:
485
485
  "#{serializer.serialize_numeric(r)} #{serializer.serialize_numeric(g)} " \
486
- "#{serializer.serialize_numeric(b)} rg\n".freeze
486
+ "#{serializer.serialize_numeric(b)} rg\n"
487
487
  end
488
488
 
489
489
  end
@@ -505,7 +505,7 @@ module HexaPDF
505
505
 
506
506
  def serialize(serializer, c, m, y, k) #:nodoc:
507
507
  "#{serializer.serialize_numeric(c)} #{serializer.serialize_numeric(m)} " \
508
- "#{serializer.serialize_numeric(y)} #{serializer.serialize_numeric(k)} K\n".freeze
508
+ "#{serializer.serialize_numeric(y)} #{serializer.serialize_numeric(k)} K\n"
509
509
  end
510
510
 
511
511
  end
@@ -527,7 +527,7 @@ module HexaPDF
527
527
 
528
528
  def serialize(serializer, c, m, y, k) #:nodoc:
529
529
  "#{serializer.serialize_numeric(c)} #{serializer.serialize_numeric(m)} " \
530
- "#{serializer.serialize_numeric(y)} #{serializer.serialize_numeric(k)} k\n".freeze
530
+ "#{serializer.serialize_numeric(y)} #{serializer.serialize_numeric(k)} k\n"
531
531
  end
532
532
 
533
533
  end
@@ -547,7 +547,7 @@ module HexaPDF
547
547
  end
548
548
 
549
549
  def serialize(serializer, x, y) #:nodoc:
550
- "#{serializer.serialize_numeric(x)} #{serializer.serialize_numeric(y)} m\n".freeze
550
+ "#{serializer.serialize_numeric(x)} #{serializer.serialize_numeric(y)} m\n"
551
551
  end
552
552
 
553
553
  end
@@ -568,7 +568,7 @@ module HexaPDF
568
568
 
569
569
  def serialize(serializer, x, y, w, h) #:nodoc:
570
570
  "#{serializer.serialize_numeric(x)} #{serializer.serialize_numeric(y)} " \
571
- "#{serializer.serialize_numeric(w)} #{serializer.serialize_numeric(h)} re\n".freeze
571
+ "#{serializer.serialize_numeric(w)} #{serializer.serialize_numeric(h)} re\n"
572
572
  end
573
573
 
574
574
  end
@@ -587,7 +587,7 @@ module HexaPDF
587
587
  end
588
588
 
589
589
  def serialize(serializer, x, y) #:nodoc:
590
- "#{serializer.serialize_numeric(x)} #{serializer.serialize_numeric(y)} l\n".freeze
590
+ "#{serializer.serialize_numeric(x)} #{serializer.serialize_numeric(y)} l\n"
591
591
  end
592
592
 
593
593
  end
@@ -605,7 +605,7 @@ module HexaPDF
605
605
  def serialize(serializer, x1, y1, x2, y2, x3, y3) #:nodoc:
606
606
  "#{serializer.serialize_numeric(x1)} #{serializer.serialize_numeric(y1)} " \
607
607
  "#{serializer.serialize_numeric(x2)} #{serializer.serialize_numeric(y2)} " \
608
- "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} c\n".freeze
608
+ "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} c\n"
609
609
  end
610
610
 
611
611
  end
@@ -622,7 +622,7 @@ module HexaPDF
622
622
 
623
623
  def serialize(serializer, x2, y2, x3, y3) #:nodoc:
624
624
  "#{serializer.serialize_numeric(x2)} #{serializer.serialize_numeric(y2)} " \
625
- "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} v\n".freeze
625
+ "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} v\n"
626
626
  end
627
627
 
628
628
  end
@@ -639,7 +639,7 @@ module HexaPDF
639
639
 
640
640
  def serialize(serializer, x1, y1, x3, y3) #:nodoc:
641
641
  "#{serializer.serialize_numeric(x1)} #{serializer.serialize_numeric(y1)} " \
642
- "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} y\n".freeze
642
+ "#{serializer.serialize_numeric(x3)} #{serializer.serialize_numeric(y3)} y\n"
643
643
  end
644
644
 
645
645
  end
@@ -678,12 +678,12 @@ module HexaPDF
678
678
  end
679
679
 
680
680
  def serialize(serializer, dict, data) #:nodoc:
681
- result = "BI\n"
681
+ result = +"BI\n"
682
682
  dict.each do |k, v|
683
- result << serializer.serialize_symbol(k) << ' '.freeze
684
- result << serializer.serialize(v) << ' '.freeze
683
+ result << serializer.serialize_symbol(k) << ' '
684
+ result << serializer.serialize(v) << ' '
685
685
  end
686
- result << "ID\n".freeze << data << "EI\n"
686
+ result << "ID\n" << data << "EI\n"
687
687
  end
688
688
 
689
689
  end
@@ -768,7 +768,7 @@ module HexaPDF
768
768
  end
769
769
 
770
770
  def serialize(serializer, font, size) #:nodoc:
771
- "#{serializer.serialize_symbol(font)} #{serializer.serialize_numeric(size)} Tf\n".freeze
771
+ "#{serializer.serialize_symbol(font)} #{serializer.serialize_numeric(size)} Tf\n"
772
772
  end
773
773
 
774
774
  end
@@ -856,7 +856,7 @@ module HexaPDF
856
856
  end
857
857
 
858
858
  def serialize(serializer, tx, ty) #:nodoc:
859
- "#{serializer.serialize_numeric(tx)} #{serializer.serialize_numeric(ty)} Td\n".freeze
859
+ "#{serializer.serialize_numeric(tx)} #{serializer.serialize_numeric(ty)} Td\n"
860
860
  end
861
861
 
862
862
  end
@@ -877,7 +877,7 @@ module HexaPDF
877
877
  end
878
878
 
879
879
  def serialize(serializer, tx, ty) #:nodoc:
880
- "#{serializer.serialize_numeric(tx)} #{serializer.serialize_numeric(ty)} TD\n".freeze
880
+ "#{serializer.serialize_numeric(tx)} #{serializer.serialize_numeric(ty)} TD\n"
881
881
  end
882
882
 
883
883
  end
@@ -900,7 +900,7 @@ module HexaPDF
900
900
  def serialize(serializer, a, b, c, d, e, f) #:nodoc:
901
901
  "#{serializer.serialize_numeric(a)} #{serializer.serialize_numeric(b)} " \
902
902
  "#{serializer.serialize_numeric(c)} #{serializer.serialize_numeric(d)} " \
903
- "#{serializer.serialize_numeric(e)} #{serializer.serialize_numeric(f)} Tm\n".freeze
903
+ "#{serializer.serialize_numeric(e)} #{serializer.serialize_numeric(f)} Tm\n"
904
904
  end
905
905
 
906
906
  end
@@ -933,7 +933,7 @@ module HexaPDF
933
933
  end
934
934
 
935
935
  def serialize(serializer, text) #:nodoc:
936
- "#{serializer.serialize_string(text)} Tj\n".freeze
936
+ "#{serializer.serialize_string(text)}Tj\n"
937
937
  end
938
938
 
939
939
  end
@@ -953,7 +953,7 @@ module HexaPDF
953
953
  end
954
954
 
955
955
  def serialize(serializer, text)
956
- "#{serializer.serialize_string(text)} '\n".freeze
956
+ "#{serializer.serialize_string(text)}'\n"
957
957
  end
958
958
 
959
959
  end
@@ -977,12 +977,11 @@ module HexaPDF
977
977
  def serialize(serializer, word_space, char_space, text) #:nodoc:
978
978
  "#{serializer.serialize_numeric(word_space)} " \
979
979
  "#{serializer.serialize_numeric(char_space)} " \
980
- "#{serializer.serialize_string(text)} \"\n".freeze
980
+ "#{serializer.serialize_string(text)}\"\n"
981
981
  end
982
982
 
983
983
  end
984
984
 
985
-
986
985
  # Implementation of the 'TJ' operator.
987
986
  #
988
987
  # See: PDF1.7 s9.4.3
@@ -994,12 +993,11 @@ module HexaPDF
994
993
  end
995
994
 
996
995
  def serialize(serializer, array) #:nodoc:
997
- "#{serializer.serialize_array(array)} TJ\n".freeze
996
+ "#{serializer.serialize_array(array)}TJ\n"
998
997
  end
999
998
 
1000
999
  end
1001
1000
 
1002
-
1003
1001
  # Mapping of operator names to their default operator implementations.
1004
1002
  DEFAULT_OPERATORS = {
1005
1003
  q: SaveGraphicsState.new,
@@ -1064,7 +1062,7 @@ module HexaPDF
1064
1062
  '"'.to_sym => SetSpacingMoveTextNextLineAndShowText.new,
1065
1063
  TJ: ShowTextWithPositioning.new,
1066
1064
  }
1067
- DEFAULT_OPERATORS.default_proc = proc {|h, k| h[k] = BaseOperator.new(k.to_s)}
1065
+ DEFAULT_OPERATORS.default_proc = proc {|h, k| h[k] = BaseOperator.new(k.to_s) }
1068
1066
 
1069
1067
  end
1070
1068