prawn 2.3.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 +223 -143
  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 +21 -18
  7. data/lib/prawn/document.rb +273 -182
  8. data/lib/prawn/encoding.rb +2 -5
  9. data/lib/prawn/errors.rb +23 -34
  10. data/lib/prawn/font.rb +254 -139
  11. data/lib/prawn/font_metric_cache.rb +18 -16
  12. data/lib/prawn/fonts/afm.rb +99 -57
  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 +345 -107
  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 +75 -50
  22. data/lib/prawn/graphics/dash.rb +45 -42
  23. data/lib/prawn/graphics/join_style.rb +18 -12
  24. data/lib/prawn/graphics/patterns.rb +239 -110
  25. data/lib/prawn/graphics/transformation.rb +51 -44
  26. data/lib/prawn/graphics/transparency.rb +16 -40
  27. data/lib/prawn/graphics.rb +370 -260
  28. data/lib/prawn/grid.rb +219 -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 +46 -20
  32. data/lib/prawn/images/png.rb +94 -42
  33. data/lib/prawn/images.rb +70 -81
  34. data/lib/prawn/measurement_extensions.rb +39 -8
  35. data/lib/prawn/measurements.rb +60 -5
  36. data/lib/prawn/outline.rb +120 -113
  37. data/lib/prawn/repeater.rb +52 -36
  38. data/lib/prawn/security/arcfour.rb +4 -4
  39. data/lib/prawn/security.rb +106 -98
  40. data/lib/prawn/soft_mask.rb +42 -30
  41. data/lib/prawn/stamp.rb +38 -42
  42. data/lib/prawn/text/box.rb +156 -105
  43. data/lib/prawn/text/formatted/arranger.rb +121 -41
  44. data/lib/prawn/text/formatted/box.rb +239 -163
  45. data/lib/prawn/text/formatted/fragment.rb +130 -14
  46. data/lib/prawn/text/formatted/line_wrap.rb +49 -38
  47. data/lib/prawn/text/formatted/parser.rb +116 -74
  48. data/lib/prawn/text/formatted/wrap.rb +25 -26
  49. data/lib/prawn/text/formatted.rb +75 -0
  50. data/lib/prawn/text.rb +456 -211
  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 +69 -54
  55. data/lib/prawn.rb +24 -18
  56. data.tar.gz.sig +0 -0
  57. metadata +55 -262
  58. metadata.gz.sig +3 -4
  59. data/.yardopts +0 -10
  60. data/Gemfile +0 -5
  61. data/Rakefile +0 -54
  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 -25
  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 -22
  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 -37
  94. data/manual/graphics/gradients.rb +0 -43
  95. data/manual/graphics/graphics.rb +0 -64
  96. data/manual/graphics/helper.rb +0 -27
  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 -28
  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 -27
  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 -41
  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 -22
  142. data/manual/text/formatted_callbacks.rb +0 -65
  143. data/manual/text/formatted_text.rb +0 -58
  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 -32
  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 -47
  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 -49
  160. data/manual/text/utf8.rb +0 -27
  161. data/manual/text/win_ansi_charset.rb +0 -62
  162. data/prawn.gemspec +0 -57
  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 -546
  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 -36
  173. data/spec/prawn/document_spec.rb +0 -802
  174. data/spec/prawn/font_metric_cache_spec.rb +0 -54
  175. data/spec/prawn/font_spec.rb +0 -542
  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 -837
  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 -224
  184. data/spec/prawn/measurements_extensions_spec.rb +0 -24
  185. data/spec/prawn/outline_spec.rb +0 -412
  186. data/spec/prawn/repeater_spec.rb +0 -165
  187. data/spec/prawn/soft_mask_spec.rb +0 -74
  188. data/spec/prawn/stamp_spec.rb +0 -172
  189. data/spec/prawn/text/box_spec.rb +0 -1112
  190. data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
  191. data/spec/prawn/text/formatted/box_spec.rb +0 -846
  192. data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
  193. data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -494
  194. data/spec/prawn/text/formatted/parser_spec.rb +0 -697
  195. data/spec/prawn/text_draw_text_spec.rb +0 -149
  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,149 +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 = Class.new(PDF::Inspector) do
49
- attr_reader :tm_operator_used
50
-
51
- def initialize
52
- @tm_operator_used = false
53
- end
54
-
55
- def set_text_matrix_and_text_line_matrix(*_arguments)
56
- @tm_operator_used = true
57
- end
58
- end
59
- # rubocop: enable Naming/AccessorMethodName
60
-
61
- it 'allows rotation' do
62
- pdf.draw_text('Test', at: [100, 100], rotate: 90)
63
-
64
- text = rotated_text_inspector.analyze(pdf.render)
65
-
66
- expect(text.tm_operator_used).to eq true
67
- end
68
-
69
- it 'does not use rotation matrix by default' do
70
- pdf.draw_text('Test', at: [100, 100])
71
-
72
- text = rotated_text_inspector.analyze(pdf.render)
73
-
74
- expect(text.tm_operator_used).to eq false
75
- end
76
-
77
- it 'allows overriding default font for a single instance' do
78
- pdf.font_size = 16
79
-
80
- pdf.draw_text('Blah', size: 11, at: [0, 0])
81
- pdf.draw_text('Blaz', at: [0, 0])
82
- text = PDF::Inspector::Text.analyze(pdf.render)
83
- expect(text.font_settings[0][:size]).to eq(11)
84
- expect(text.font_settings[1][:size]).to eq(16)
85
- end
86
-
87
- it 'allows setting a font size transaction with a block' do
88
- pdf.font_size 16 do
89
- pdf.draw_text('Blah', at: [0, 0])
90
- end
91
-
92
- pdf.draw_text('blah', at: [0, 0])
93
-
94
- text = PDF::Inspector::Text.analyze(pdf.render)
95
- expect(text.font_settings[0][:size]).to eq(16)
96
- expect(text.font_settings[1][:size]).to eq(12)
97
- end
98
-
99
- it 'allows manual setting the font size when in a font size block' do
100
- pdf.font_size(16) do
101
- pdf.draw_text('Foo', at: [0, 0])
102
- pdf.draw_text('Blah', size: 11, at: [0, 0])
103
- pdf.draw_text('Blaz', at: [0, 0])
104
- end
105
- text = PDF::Inspector::Text.analyze(pdf.render)
106
- expect(text.font_settings[0][:size]).to eq(16)
107
- expect(text.font_settings[1][:size]).to eq(11)
108
- expect(text.font_settings[2][:size]).to eq(16)
109
- end
110
-
111
- it 'allows registering of built-in font_settings on the fly' do
112
- pdf.font 'Times-Roman'
113
- pdf.draw_text('Blah', at: [100, 100])
114
- pdf.font 'Courier'
115
- pdf.draw_text('Blaz', at: [150, 150])
116
- text = PDF::Inspector::Text.analyze(pdf.render)
117
- expect(text.font_settings[0][:name]).to eq(:"Times-Roman")
118
- expect(text.font_settings[1][:name]).to eq(:Courier)
119
- end
120
-
121
- it 'raise_errors an exception when an unknown font is used' do
122
- expect { pdf.font 'Pao bu' }.to raise_error(Prawn::Errors::UnknownFont)
123
- end
124
-
125
- it 'correctlies render a utf-8 string when using a built-in font' do
126
- str = '©' # copyright symbol
127
- pdf.draw_text(str, at: [0, 0])
128
-
129
- # grab the text from the rendered PDF and ensure it matches
130
- text = PDF::Inspector::Text.analyze(pdf.render)
131
- expect(text.strings.first).to eq(str)
132
- end
133
-
134
- it 'raises an exception when a utf-8 incompatible string is rendered' do
135
- str = "Blah \xDD"
136
- expect { pdf.draw_text(str, at: [0, 0]) }.to raise_error(
137
- Prawn::Errors::IncompatibleStringEncoding
138
- )
139
- end
140
-
141
- it 'does not raise an exception when a shift-jis string is rendered' do
142
- datafile = "#{Prawn::DATADIR}/shift_jis_text.txt"
143
- sjis_str = File.open(datafile, 'r:shift_jis', &:gets)
144
- pdf.font("#{Prawn::DATADIR}/fonts/gkai00mp.ttf")
145
-
146
- pdf.draw_text(sjis_str, at: [0, 0])
147
- end
148
- end
149
- 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.5556)
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.5556)
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