prawn 2.4.0 → 2.5.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 (203) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/prawn/document/bounding_box.rb +213 -141
  4. data/lib/prawn/document/column_box.rb +61 -26
  5. data/lib/prawn/document/internals.rb +25 -16
  6. data/lib/prawn/document/span.rb +20 -18
  7. data/lib/prawn/document.rb +257 -171
  8. data/lib/prawn/encoding.rb +2 -5
  9. data/lib/prawn/errors.rb +23 -34
  10. data/lib/prawn/font.rb +248 -135
  11. data/lib/prawn/font_metric_cache.rb +11 -10
  12. data/lib/prawn/fonts/afm.rb +85 -45
  13. data/lib/prawn/fonts/dfont.rb +7 -1
  14. data/lib/prawn/fonts/otf.rb +4 -1
  15. data/lib/prawn/fonts/to_unicode_cmap.rb +151 -0
  16. data/lib/prawn/fonts/ttc.rb +7 -2
  17. data/lib/prawn/fonts/ttf.rb +305 -93
  18. data/lib/prawn/fonts.rb +14 -0
  19. data/lib/prawn/graphics/blend_mode.rb +25 -28
  20. data/lib/prawn/graphics/cap_style.rb +9 -12
  21. data/lib/prawn/graphics/color.rb +57 -34
  22. data/lib/prawn/graphics/dash.rb +45 -42
  23. data/lib/prawn/graphics/join_style.rb +17 -11
  24. data/lib/prawn/graphics/patterns.rb +190 -69
  25. data/lib/prawn/graphics/transformation.rb +48 -41
  26. data/lib/prawn/graphics/transparency.rb +16 -40
  27. data/lib/prawn/graphics.rb +363 -253
  28. data/lib/prawn/grid.rb +184 -57
  29. data/lib/prawn/image_handler.rb +27 -10
  30. data/lib/prawn/images/image.rb +8 -10
  31. data/lib/prawn/images/jpg.rb +42 -19
  32. data/lib/prawn/images/png.rb +92 -41
  33. data/lib/prawn/images.rb +44 -57
  34. data/lib/prawn/measurement_extensions.rb +39 -8
  35. data/lib/prawn/measurements.rb +60 -5
  36. data/lib/prawn/outline.rb +114 -108
  37. data/lib/prawn/repeater.rb +51 -35
  38. data/lib/prawn/security/arcfour.rb +4 -4
  39. data/lib/prawn/security.rb +75 -70
  40. data/lib/prawn/soft_mask.rb +42 -30
  41. data/lib/prawn/stamp.rb +38 -42
  42. data/lib/prawn/text/box.rb +146 -96
  43. data/lib/prawn/text/formatted/arranger.rb +87 -26
  44. data/lib/prawn/text/formatted/box.rb +221 -150
  45. data/lib/prawn/text/formatted/fragment.rb +130 -14
  46. data/lib/prawn/text/formatted/line_wrap.rb +33 -24
  47. data/lib/prawn/text/formatted/parser.rb +112 -72
  48. data/lib/prawn/text/formatted/wrap.rb +12 -17
  49. data/lib/prawn/text/formatted.rb +75 -0
  50. data/lib/prawn/text.rb +441 -196
  51. data/lib/prawn/transformation_stack.rb +29 -10
  52. data/lib/prawn/utilities.rb +13 -13
  53. data/lib/prawn/version.rb +2 -1
  54. data/lib/prawn/view.rb +68 -53
  55. data/lib/prawn.rb +23 -18
  56. data.tar.gz.sig +0 -0
  57. metadata +54 -177
  58. metadata.gz.sig +0 -0
  59. data/.yardopts +0 -10
  60. data/Gemfile +0 -5
  61. data/Rakefile +0 -25
  62. data/manual/absolute_position.pdf +0 -0
  63. data/manual/basic_concepts/adding_pages.rb +0 -26
  64. data/manual/basic_concepts/basic_concepts.rb +0 -43
  65. data/manual/basic_concepts/creation.rb +0 -38
  66. data/manual/basic_concepts/cursor.rb +0 -32
  67. data/manual/basic_concepts/measurement.rb +0 -24
  68. data/manual/basic_concepts/origin.rb +0 -37
  69. data/manual/basic_concepts/other_cursor_helpers.rb +0 -39
  70. data/manual/basic_concepts/view.rb +0 -48
  71. data/manual/bounding_box/bounding_box.rb +0 -41
  72. data/manual/bounding_box/bounds.rb +0 -48
  73. data/manual/bounding_box/canvas.rb +0 -23
  74. data/manual/bounding_box/creation.rb +0 -22
  75. data/manual/bounding_box/indentation.rb +0 -45
  76. data/manual/bounding_box/nesting.rb +0 -52
  77. data/manual/bounding_box/russian_boxes.rb +0 -40
  78. data/manual/bounding_box/stretchy.rb +0 -29
  79. data/manual/contents.rb +0 -35
  80. data/manual/cover.rb +0 -43
  81. data/manual/document_and_page_options/background.rb +0 -29
  82. data/manual/document_and_page_options/document_and_page_options.rb +0 -34
  83. data/manual/document_and_page_options/metadata.rb +0 -25
  84. data/manual/document_and_page_options/page_margins.rb +0 -36
  85. data/manual/document_and_page_options/page_size.rb +0 -34
  86. data/manual/document_and_page_options/print_scaling.rb +0 -23
  87. data/manual/example_helper.rb +0 -8
  88. data/manual/graphics/blend_mode.rb +0 -52
  89. data/manual/graphics/circle_and_ellipse.rb +0 -21
  90. data/manual/graphics/color.rb +0 -22
  91. data/manual/graphics/common_lines.rb +0 -29
  92. data/manual/graphics/fill_and_stroke.rb +0 -41
  93. data/manual/graphics/fill_rules.rb +0 -38
  94. data/manual/graphics/gradients.rb +0 -43
  95. data/manual/graphics/graphics.rb +0 -64
  96. data/manual/graphics/helper.rb +0 -34
  97. data/manual/graphics/line_width.rb +0 -36
  98. data/manual/graphics/lines_and_curves.rb +0 -40
  99. data/manual/graphics/polygon.rb +0 -27
  100. data/manual/graphics/rectangle.rb +0 -20
  101. data/manual/graphics/rotate.rb +0 -25
  102. data/manual/graphics/scale.rb +0 -42
  103. data/manual/graphics/soft_masks.rb +0 -44
  104. data/manual/graphics/stroke_cap.rb +0 -30
  105. data/manual/graphics/stroke_dash.rb +0 -47
  106. data/manual/graphics/stroke_join.rb +0 -29
  107. data/manual/graphics/translate.rb +0 -29
  108. data/manual/graphics/transparency.rb +0 -33
  109. data/manual/how_to_read_this_manual.rb +0 -39
  110. data/manual/images/absolute_position.rb +0 -22
  111. data/manual/images/fit.rb +0 -20
  112. data/manual/images/horizontal.rb +0 -24
  113. data/manual/images/images.rb +0 -41
  114. data/manual/images/plain_image.rb +0 -17
  115. data/manual/images/scale.rb +0 -21
  116. data/manual/images/vertical.rb +0 -30
  117. data/manual/images/width_and_height.rb +0 -24
  118. data/manual/layout/boxes.rb +0 -26
  119. data/manual/layout/content.rb +0 -24
  120. data/manual/layout/layout.rb +0 -27
  121. data/manual/layout/simple_grid.rb +0 -22
  122. data/manual/outline/add_subsection_to.rb +0 -60
  123. data/manual/outline/insert_section_after.rb +0 -46
  124. data/manual/outline/outline.rb +0 -33
  125. data/manual/outline/sections_and_pages.rb +0 -66
  126. data/manual/repeatable_content/alternate_page_numbering.rb +0 -36
  127. data/manual/repeatable_content/page_numbering.rb +0 -55
  128. data/manual/repeatable_content/repeatable_content.rb +0 -35
  129. data/manual/repeatable_content/repeater.rb +0 -54
  130. data/manual/repeatable_content/stamp.rb +0 -40
  131. data/manual/security/encryption.rb +0 -28
  132. data/manual/security/permissions.rb +0 -43
  133. data/manual/security/security.rb +0 -28
  134. data/manual/table.rb +0 -16
  135. data/manual/text/alignment.rb +0 -43
  136. data/manual/text/color.rb +0 -24
  137. data/manual/text/column_box.rb +0 -30
  138. data/manual/text/fallback_fonts.rb +0 -41
  139. data/manual/text/font.rb +0 -40
  140. data/manual/text/font_size.rb +0 -44
  141. data/manual/text/font_style.rb +0 -25
  142. data/manual/text/formatted_callbacks.rb +0 -70
  143. data/manual/text/formatted_text.rb +0 -61
  144. data/manual/text/free_flowing_text.rb +0 -50
  145. data/manual/text/inline.rb +0 -40
  146. data/manual/text/kerning_and_character_spacing.rb +0 -38
  147. data/manual/text/leading.rb +0 -24
  148. data/manual/text/line_wrapping.rb +0 -60
  149. data/manual/text/paragraph_indentation.rb +0 -31
  150. data/manual/text/positioned_text.rb +0 -37
  151. data/manual/text/registering_families.rb +0 -51
  152. data/manual/text/rendering_and_color.rb +0 -36
  153. data/manual/text/right_to_left_text.rb +0 -54
  154. data/manual/text/rotation.rb +0 -52
  155. data/manual/text/single_usage.rb +0 -36
  156. data/manual/text/text.rb +0 -75
  157. data/manual/text/text_box_excess.rb +0 -35
  158. data/manual/text/text_box_extensions.rb +0 -48
  159. data/manual/text/text_box_overflow.rb +0 -51
  160. data/manual/text/utf8.rb +0 -27
  161. data/manual/text/win_ansi_charset.rb +0 -62
  162. data/prawn.gemspec +0 -51
  163. data/spec/data/curves.pdf +0 -66
  164. data/spec/extensions/encoding_helpers.rb +0 -11
  165. data/spec/prawn/document/bounding_box_spec.rb +0 -550
  166. data/spec/prawn/document/column_box_spec.rb +0 -75
  167. data/spec/prawn/document/security_spec.rb +0 -176
  168. data/spec/prawn/document_annotations_spec.rb +0 -76
  169. data/spec/prawn/document_destinations_spec.rb +0 -15
  170. data/spec/prawn/document_grid_spec.rb +0 -99
  171. data/spec/prawn/document_reference_spec.rb +0 -27
  172. data/spec/prawn/document_span_spec.rb +0 -44
  173. data/spec/prawn/document_spec.rb +0 -805
  174. data/spec/prawn/font_metric_cache_spec.rb +0 -54
  175. data/spec/prawn/font_spec.rb +0 -544
  176. data/spec/prawn/graphics/blend_mode_spec.rb +0 -63
  177. data/spec/prawn/graphics/transparency_spec.rb +0 -81
  178. data/spec/prawn/graphics_spec.rb +0 -872
  179. data/spec/prawn/graphics_stroke_styles_spec.rb +0 -229
  180. data/spec/prawn/image_handler_spec.rb +0 -53
  181. data/spec/prawn/images/jpg_spec.rb +0 -20
  182. data/spec/prawn/images/png_spec.rb +0 -283
  183. data/spec/prawn/images_spec.rb +0 -229
  184. data/spec/prawn/measurements_extensions_spec.rb +0 -24
  185. data/spec/prawn/outline_spec.rb +0 -512
  186. data/spec/prawn/repeater_spec.rb +0 -166
  187. data/spec/prawn/soft_mask_spec.rb +0 -74
  188. data/spec/prawn/stamp_spec.rb +0 -173
  189. data/spec/prawn/text/box_spec.rb +0 -1110
  190. data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
  191. data/spec/prawn/text/formatted/box_spec.rb +0 -849
  192. data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
  193. data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -495
  194. data/spec/prawn/text/formatted/parser_spec.rb +0 -697
  195. data/spec/prawn/text_draw_text_spec.rb +0 -150
  196. data/spec/prawn/text_rendering_mode_spec.rb +0 -48
  197. data/spec/prawn/text_spacing_spec.rb +0 -95
  198. data/spec/prawn/text_spec.rb +0 -603
  199. data/spec/prawn/text_with_inline_formatting_spec.rb +0 -35
  200. data/spec/prawn/transformation_stack_spec.rb +0 -66
  201. data/spec/prawn/view_spec.rb +0 -63
  202. data/spec/prawn_manual_spec.rb +0 -35
  203. data/spec/spec_helper.rb +0 -48
@@ -1,150 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Prawn::Text do
6
- describe '#draw_text' do
7
- let(:pdf) { create_pdf }
8
-
9
- it 'raise_errors ArgumentError if :at option omitted' do
10
- expect { pdf.draw_text('hai', {}) }.to raise_error(ArgumentError)
11
- end
12
-
13
- it 'raise_errors ArgumentError if :align option included' do
14
- expect do
15
- pdf.draw_text('hai', at: [0, 0], align: :center)
16
- end.to raise_error(ArgumentError)
17
- end
18
-
19
- it 'allows drawing empty strings to the page' do
20
- pdf.draw_text(' ', at: [100, 100])
21
- text = PDF::Inspector::Text.analyze(pdf.render)
22
- expect(text.strings.first).to eq(' ')
23
- end
24
-
25
- it 'defaults to 12 point helvetica' do
26
- pdf.draw_text('Blah', at: [100, 100])
27
- text = PDF::Inspector::Text.analyze(pdf.render)
28
- expect(text.font_settings[0][:name]).to eq(:Helvetica)
29
- expect(text.font_settings[0][:size]).to eq(12)
30
- expect(text.strings.first).to eq('Blah')
31
- end
32
-
33
- it 'allows setting font size' do
34
- pdf.draw_text('Blah', at: [100, 100], size: 16)
35
- text = PDF::Inspector::Text.analyze(pdf.render)
36
- expect(text.font_settings[0][:size]).to eq(16)
37
- end
38
-
39
- it 'allows setting a default font size' do
40
- pdf.font_size = 16
41
- pdf.draw_text('Blah', at: [0, 0])
42
-
43
- text = PDF::Inspector::Text.analyze(pdf.render)
44
- expect(text.font_settings[0][:size]).to eq(16)
45
- end
46
-
47
- # rubocop: disable Naming/AccessorMethodName
48
- rotated_text_inspector =
49
- Class.new(PDF::Inspector) do
50
- attr_reader :tm_operator_used
51
-
52
- def initialize
53
- @tm_operator_used = false
54
- end
55
-
56
- def set_text_matrix_and_text_line_matrix(*_arguments)
57
- @tm_operator_used = true
58
- end
59
- end
60
- # rubocop: enable Naming/AccessorMethodName
61
-
62
- it 'allows rotation' do
63
- pdf.draw_text('Test', at: [100, 100], rotate: 90)
64
-
65
- text = rotated_text_inspector.analyze(pdf.render)
66
-
67
- expect(text.tm_operator_used).to eq true
68
- end
69
-
70
- it 'does not use rotation matrix by default' do
71
- pdf.draw_text('Test', at: [100, 100])
72
-
73
- text = rotated_text_inspector.analyze(pdf.render)
74
-
75
- expect(text.tm_operator_used).to eq false
76
- end
77
-
78
- it 'allows overriding default font for a single instance' do
79
- pdf.font_size = 16
80
-
81
- pdf.draw_text('Blah', size: 11, at: [0, 0])
82
- pdf.draw_text('Blaz', at: [0, 0])
83
- text = PDF::Inspector::Text.analyze(pdf.render)
84
- expect(text.font_settings[0][:size]).to eq(11)
85
- expect(text.font_settings[1][:size]).to eq(16)
86
- end
87
-
88
- it 'allows setting a font size transaction with a block' do
89
- pdf.font_size 16 do
90
- pdf.draw_text('Blah', at: [0, 0])
91
- end
92
-
93
- pdf.draw_text('blah', at: [0, 0])
94
-
95
- text = PDF::Inspector::Text.analyze(pdf.render)
96
- expect(text.font_settings[0][:size]).to eq(16)
97
- expect(text.font_settings[1][:size]).to eq(12)
98
- end
99
-
100
- it 'allows manual setting the font size when in a font size block' do
101
- pdf.font_size(16) do
102
- pdf.draw_text('Foo', at: [0, 0])
103
- pdf.draw_text('Blah', size: 11, at: [0, 0])
104
- pdf.draw_text('Blaz', at: [0, 0])
105
- end
106
- text = PDF::Inspector::Text.analyze(pdf.render)
107
- expect(text.font_settings[0][:size]).to eq(16)
108
- expect(text.font_settings[1][:size]).to eq(11)
109
- expect(text.font_settings[2][:size]).to eq(16)
110
- end
111
-
112
- it 'allows registering of built-in font_settings on the fly' do
113
- pdf.font 'Times-Roman'
114
- pdf.draw_text('Blah', at: [100, 100])
115
- pdf.font 'Courier'
116
- pdf.draw_text('Blaz', at: [150, 150])
117
- text = PDF::Inspector::Text.analyze(pdf.render)
118
- expect(text.font_settings[0][:name]).to eq(:"Times-Roman")
119
- expect(text.font_settings[1][:name]).to eq(:Courier)
120
- end
121
-
122
- it 'raise_errors an exception when an unknown font is used' do
123
- expect { pdf.font 'Pao bu' }.to raise_error(Prawn::Errors::UnknownFont)
124
- end
125
-
126
- it 'correctlies render a utf-8 string when using a built-in font' do
127
- str = '©' # copyright symbol
128
- pdf.draw_text(str, at: [0, 0])
129
-
130
- # grab the text from the rendered PDF and ensure it matches
131
- text = PDF::Inspector::Text.analyze(pdf.render)
132
- expect(text.strings.first).to eq(str)
133
- end
134
-
135
- it 'raises an exception when a utf-8 incompatible string is rendered' do
136
- str = "Blah \xDD"
137
- expect { pdf.draw_text(str, at: [0, 0]) }.to raise_error(
138
- Prawn::Errors::IncompatibleStringEncoding
139
- )
140
- end
141
-
142
- it 'does not raise an exception when a shift-jis string is rendered' do
143
- datafile = "#{Prawn::DATADIR}/shift_jis_text.txt"
144
- sjis_str = File.open(datafile, 'r:shift_jis', &:gets)
145
- pdf.font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf")
146
-
147
- pdf.draw_text(sjis_str, at: [0, 0])
148
- end
149
- end
150
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Prawn::Text do
6
- let(:pdf) { create_pdf }
7
-
8
- describe '#text_rendering_mode' do
9
- it 'draws the text rendering mode to the document' do
10
- pdf.text_rendering_mode(:stroke) do
11
- pdf.text('hello world')
12
- end
13
- contents = PDF::Inspector::Text.analyze(pdf.render)
14
- expect(contents.text_rendering_mode.first).to eq(1)
15
- end
16
-
17
- it 'does not draw the text rendering mode to the document' \
18
- ' when the new mode matches the old' do
19
- pdf.text_rendering_mode(:fill) do
20
- pdf.text('hello world')
21
- end
22
- contents = PDF::Inspector::Text.analyze(pdf.render)
23
- expect(contents.text_rendering_mode).to be_empty
24
- end
25
-
26
- it 'restores character spacing to 0' do
27
- pdf.text_rendering_mode(:stroke) do
28
- pdf.text('hello world')
29
- end
30
- contents = PDF::Inspector::Text.analyze(pdf.render)
31
- expect(contents.text_rendering_mode).to eq([1, 0])
32
- end
33
-
34
- it 'functions as an accessor when no parameter given' do
35
- pdf.text_rendering_mode(:fill_stroke) do
36
- pdf.text('hello world')
37
- expect(pdf.text_rendering_mode).to eq(:fill_stroke)
38
- end
39
- expect(pdf.text_rendering_mode).to eq(:fill)
40
- end
41
-
42
- it 'raise_errors an exception when passed an invalid mode' do
43
- expect { pdf.text_rendering_mode(-1) }.to raise_error(ArgumentError)
44
- expect { pdf.text_rendering_mode(8) }.to raise_error(ArgumentError)
45
- expect { pdf.text_rendering_mode(:flil) }.to raise_error(ArgumentError)
46
- end
47
- end
48
- end
@@ -1,95 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Prawn::Text do
6
- let(:pdf) { create_pdf }
7
-
8
- describe '#character_spacing' do
9
- it 'draws the character spacing to the document' do
10
- pdf.character_spacing(10.555555) do
11
- pdf.text('hello world')
12
- end
13
- contents = PDF::Inspector::Text.analyze(pdf.render)
14
- expect(contents.character_spacing.first).to eq(10.55556)
15
- end
16
-
17
- it 'does not draw the character spacing to the document' \
18
- ' when the new character spacing matches the old' do
19
- pdf.character_spacing(0) do
20
- pdf.text('hello world')
21
- end
22
- contents = PDF::Inspector::Text.analyze(pdf.render)
23
- expect(contents.character_spacing).to be_empty
24
- end
25
-
26
- it 'restores character spacing to 0' do
27
- pdf.character_spacing(10.555555) do
28
- pdf.text('hello world')
29
- end
30
- contents = PDF::Inspector::Text.analyze(pdf.render)
31
- expect(contents.character_spacing.last).to eq(0)
32
- end
33
-
34
- it 'functions as an accessor when no parameter given' do
35
- pdf.character_spacing(10.555555) do
36
- pdf.text('hello world')
37
- expect(pdf.character_spacing).to eq(10.555555)
38
- end
39
- expect(pdf.character_spacing).to eq(0)
40
- end
41
-
42
- # ensure that we properly internationalize by using the number of characters
43
- # in a string, not the number of bytes, to insert character spaces
44
- #
45
- it 'calculates character spacing widths by characters, not bytes' do
46
- pdf.font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf")
47
-
48
- str = 'こんにちは世界'
49
- raw_width = nil
50
- pdf.character_spacing(0) do
51
- raw_width = pdf.width_of(str)
52
- end
53
-
54
- pdf.character_spacing(10) do
55
- # the new width should include six 10-pt character spaces.
56
- expect(pdf.width_of(str)).to be_within(0.001).of(raw_width + (10 * 6))
57
- end
58
- end
59
- end
60
-
61
- describe '#word_spacing' do
62
- it 'draws the word spacing to the document' do
63
- pdf.word_spacing(10.555555) do
64
- pdf.text('hello world')
65
- end
66
- contents = PDF::Inspector::Text.analyze(pdf.render)
67
- expect(contents.word_spacing.first).to eq(10.55556)
68
- end
69
-
70
- it 'draws the word spacing to the document' \
71
- ' when the new word spacing matches the old' do
72
- pdf.word_spacing(0) do
73
- pdf.text('hello world')
74
- end
75
- contents = PDF::Inspector::Text.analyze(pdf.render)
76
- expect(contents.word_spacing).to be_empty
77
- end
78
-
79
- it 'restores word spacing to 0' do
80
- pdf.word_spacing(10.555555) do
81
- pdf.text('hello world')
82
- end
83
- contents = PDF::Inspector::Text.analyze(pdf.render)
84
- expect(contents.word_spacing.last).to eq(0)
85
- end
86
-
87
- it 'functions as an accessor when no parameter given' do
88
- pdf.word_spacing(10.555555) do
89
- pdf.text('hello world')
90
- expect(pdf.word_spacing).to eq(10.555555)
91
- end
92
- expect(pdf.word_spacing).to eq(0)
93
- end
94
- end
95
- end