prawn 2.2.2 → 2.3.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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/GPLv2 +20 -21
- data/Gemfile +2 -0
- data/Rakefile +10 -3
- data/lib/prawn.rb +9 -3
- data/lib/prawn/document.rb +40 -18
- data/lib/prawn/document/bounding_box.rb +9 -4
- data/lib/prawn/document/column_box.rb +2 -0
- data/lib/prawn/document/internals.rb +6 -4
- data/lib/prawn/document/span.rb +2 -0
- data/lib/prawn/encoding.rb +4 -1
- data/lib/prawn/errors.rb +2 -0
- data/lib/prawn/font.rb +34 -17
- data/lib/prawn/font_metric_cache.rb +8 -3
- data/lib/prawn/{font → fonts}/afm.rb +14 -7
- data/lib/prawn/{font → fonts}/dfont.rb +3 -1
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/{font → fonts}/ttc.rb +3 -1
- data/lib/prawn/{font → fonts}/ttf.rb +23 -12
- data/lib/prawn/graphics.rb +24 -26
- data/lib/prawn/graphics/blend_mode.rb +2 -0
- data/lib/prawn/graphics/cap_style.rb +2 -0
- data/lib/prawn/graphics/color.rb +8 -3
- data/lib/prawn/graphics/dash.rb +3 -1
- data/lib/prawn/graphics/join_style.rb +2 -0
- data/lib/prawn/graphics/patterns.rb +7 -2
- data/lib/prawn/graphics/transformation.rb +5 -1
- data/lib/prawn/graphics/transparency.rb +2 -0
- data/lib/prawn/grid.rb +39 -38
- data/lib/prawn/image_handler.rb +2 -0
- data/lib/prawn/images.rb +21 -19
- data/lib/prawn/images/image.rb +2 -0
- data/lib/prawn/images/jpg.rb +2 -0
- data/lib/prawn/images/png.rb +9 -9
- data/lib/prawn/measurement_extensions.rb +2 -0
- data/lib/prawn/measurements.rb +5 -0
- data/lib/prawn/outline.rb +2 -0
- data/lib/prawn/repeater.rb +2 -0
- data/lib/prawn/security.rb +26 -24
- data/lib/prawn/security/arcfour.rb +2 -0
- data/lib/prawn/soft_mask.rb +3 -1
- data/lib/prawn/stamp.rb +4 -1
- data/lib/prawn/text.rb +14 -12
- data/lib/prawn/text/box.rb +3 -1
- data/lib/prawn/text/formatted.rb +2 -0
- data/lib/prawn/text/formatted/arranger.rb +12 -12
- data/lib/prawn/text/formatted/box.rb +23 -13
- data/lib/prawn/text/formatted/fragment.rb +2 -0
- data/lib/prawn/text/formatted/line_wrap.rb +10 -8
- data/lib/prawn/text/formatted/parser.rb +8 -10
- data/lib/prawn/text/formatted/wrap.rb +4 -2
- data/lib/prawn/transformation_stack.rb +5 -2
- data/lib/prawn/utilities.rb +2 -2
- data/lib/prawn/version.rb +3 -1
- data/lib/prawn/view.rb +15 -7
- data/manual/basic_concepts/adding_pages.rb +2 -0
- data/manual/basic_concepts/basic_concepts.rb +4 -2
- data/manual/basic_concepts/creation.rb +2 -0
- data/manual/basic_concepts/cursor.rb +2 -0
- data/manual/basic_concepts/measurement.rb +3 -1
- data/manual/basic_concepts/origin.rb +2 -0
- data/manual/basic_concepts/other_cursor_helpers.rb +2 -0
- data/manual/basic_concepts/view.rb +2 -0
- data/manual/bounding_box/bounding_box.rb +4 -2
- data/manual/bounding_box/bounds.rb +6 -4
- data/manual/bounding_box/canvas.rb +2 -0
- data/manual/bounding_box/creation.rb +2 -0
- data/manual/bounding_box/indentation.rb +2 -0
- data/manual/bounding_box/nesting.rb +2 -0
- data/manual/bounding_box/russian_boxes.rb +6 -4
- data/manual/bounding_box/stretchy.rb +2 -0
- data/manual/contents.rb +2 -0
- data/manual/cover.rb +10 -7
- data/manual/document_and_page_options/background.rb +2 -0
- data/manual/document_and_page_options/document_and_page_options.rb +4 -2
- data/manual/document_and_page_options/metadata.rb +2 -0
- data/manual/document_and_page_options/page_margins.rb +2 -0
- data/manual/document_and_page_options/page_size.rb +2 -0
- data/manual/document_and_page_options/print_scaling.rb +2 -0
- data/manual/example_helper.rb +5 -2
- data/manual/graphics/blend_mode.rb +6 -4
- data/manual/graphics/circle_and_ellipse.rb +2 -0
- data/manual/graphics/color.rb +2 -0
- data/manual/graphics/common_lines.rb +2 -0
- data/manual/graphics/fill_and_stroke.rb +2 -0
- data/manual/graphics/fill_rules.rb +2 -0
- data/manual/graphics/gradients.rb +2 -0
- data/manual/graphics/graphics.rb +4 -2
- data/manual/graphics/helper.rb +2 -0
- data/manual/graphics/line_width.rb +3 -0
- data/manual/graphics/lines_and_curves.rb +2 -0
- data/manual/graphics/polygon.rb +2 -0
- data/manual/graphics/rectangle.rb +2 -0
- data/manual/graphics/rotate.rb +2 -0
- data/manual/graphics/scale.rb +2 -0
- data/manual/graphics/soft_masks.rb +2 -0
- data/manual/graphics/stroke_cap.rb +3 -1
- data/manual/graphics/stroke_dash.rb +2 -0
- data/manual/graphics/stroke_join.rb +3 -1
- data/manual/graphics/translate.rb +2 -0
- data/manual/graphics/transparency.rb +2 -0
- data/manual/how_to_read_this_manual.rb +2 -0
- data/manual/images/absolute_position.rb +2 -0
- data/manual/images/fit.rb +2 -0
- data/manual/images/horizontal.rb +3 -1
- data/manual/images/images.rb +4 -2
- data/manual/images/plain_image.rb +2 -0
- data/manual/images/scale.rb +2 -0
- data/manual/images/vertical.rb +3 -1
- data/manual/images/width_and_height.rb +2 -0
- data/manual/layout/boxes.rb +2 -0
- data/manual/layout/content.rb +2 -0
- data/manual/layout/layout.rb +4 -2
- data/manual/layout/simple_grid.rb +2 -0
- data/manual/outline/add_subsection_to.rb +2 -0
- data/manual/outline/insert_section_after.rb +2 -0
- data/manual/outline/outline.rb +4 -2
- data/manual/outline/sections_and_pages.rb +2 -0
- data/manual/repeatable_content/alternate_page_numbering.rb +2 -0
- data/manual/repeatable_content/page_numbering.rb +2 -0
- data/manual/repeatable_content/repeatable_content.rb +4 -2
- data/manual/repeatable_content/repeater.rb +2 -0
- data/manual/repeatable_content/stamp.rb +2 -0
- data/manual/security/encryption.rb +2 -0
- data/manual/security/permissions.rb +2 -0
- data/manual/security/security.rb +4 -2
- data/manual/table.rb +2 -0
- data/manual/text/alignment.rb +2 -0
- data/manual/text/color.rb +2 -0
- data/manual/text/column_box.rb +4 -2
- data/manual/text/fallback_fonts.rb +4 -2
- data/manual/text/font.rb +2 -0
- data/manual/text/font_size.rb +2 -0
- data/manual/text/font_style.rb +4 -2
- data/manual/text/formatted_callbacks.rb +2 -0
- data/manual/text/formatted_text.rb +3 -1
- data/manual/text/free_flowing_text.rb +2 -0
- data/manual/text/inline.rb +2 -0
- data/manual/text/kerning_and_character_spacing.rb +2 -0
- data/manual/text/leading.rb +2 -0
- data/manual/text/line_wrapping.rb +4 -1
- data/manual/text/paragraph_indentation.rb +2 -0
- data/manual/text/positioned_text.rb +2 -0
- data/manual/text/registering_families.rb +4 -2
- data/manual/text/rendering_and_color.rb +2 -0
- data/manual/text/right_to_left_text.rb +2 -0
- data/manual/text/rotation.rb +3 -1
- data/manual/text/single_usage.rb +2 -0
- data/manual/text/text.rb +4 -3
- data/manual/text/text_box_excess.rb +2 -0
- data/manual/text/text_box_extensions.rb +2 -0
- data/manual/text/text_box_overflow.rb +3 -1
- data/manual/text/utf8.rb +3 -1
- data/manual/text/win_ansi_charset.rb +6 -3
- data/prawn.gemspec +14 -11
- data/spec/extensions/encoding_helpers.rb +4 -2
- data/spec/prawn/document/bounding_box_spec.rb +8 -8
- data/spec/prawn/document/column_box_spec.rb +2 -0
- data/spec/prawn/document/security_spec.rb +12 -9
- data/spec/prawn/document_annotations_spec.rb +2 -0
- data/spec/prawn/document_destinations_spec.rb +2 -0
- data/spec/prawn/document_grid_spec.rb +3 -0
- data/spec/prawn/document_reference_spec.rb +2 -0
- data/spec/prawn/document_span_spec.rb +2 -0
- data/spec/prawn/document_spec.rb +59 -14
- data/spec/prawn/font_metric_cache_spec.rb +2 -0
- data/spec/prawn/font_spec.rb +45 -16
- data/spec/prawn/graphics/blend_mode_spec.rb +4 -2
- data/spec/prawn/graphics/transparency_spec.rb +2 -0
- data/spec/prawn/graphics_spec.rb +40 -20
- data/spec/prawn/graphics_stroke_styles_spec.rb +2 -0
- data/spec/prawn/image_handler_spec.rb +2 -0
- data/spec/prawn/images/jpg_spec.rb +2 -0
- data/spec/prawn/images/png_spec.rb +2 -0
- data/spec/prawn/images_spec.rb +56 -2
- data/spec/prawn/measurements_extensions_spec.rb +2 -0
- data/spec/prawn/outline_spec.rb +6 -2
- data/spec/prawn/repeater_spec.rb +6 -4
- data/spec/prawn/soft_mask_spec.rb +2 -0
- data/spec/prawn/stamp_spec.rb +11 -7
- data/spec/prawn/text/box_spec.rb +26 -27
- data/spec/prawn/text/formatted/arranger_spec.rb +30 -28
- data/spec/prawn/text/formatted/box_spec.rb +78 -57
- data/spec/prawn/text/formatted/fragment_spec.rb +10 -8
- data/spec/prawn/text/formatted/line_wrap_spec.rb +8 -5
- data/spec/prawn/text/formatted/parser_spec.rb +32 -2
- data/spec/prawn/text_draw_text_spec.rb +5 -3
- data/spec/prawn/text_rendering_mode_spec.rb +7 -1
- data/spec/prawn/text_spacing_spec.rb +6 -4
- data/spec/prawn/text_spec.rb +9 -7
- data/spec/prawn/text_with_inline_formatting_spec.rb +3 -1
- data/spec/prawn/transformation_stack_spec.rb +2 -0
- data/spec/prawn/view_spec.rb +18 -0
- data/spec/{manual_spec.rb → prawn_manual_spec.rb} +6 -4
- data/spec/spec_helper.rb +9 -10
- metadata +86 -73
- metadata.gz.sig +4 -2
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Prawn::Document do
|
@@ -26,6 +28,7 @@ describe Prawn::Document do
|
|
26
28
|
let(:num_columns) { 5 }
|
27
29
|
let(:num_rows) { 8 }
|
28
30
|
let(:gutter) { 10.0 }
|
31
|
+
|
29
32
|
before do
|
30
33
|
pdf.define_grid(
|
31
34
|
columns: num_columns,
|
data/spec/prawn/document_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'tempfile'
|
3
5
|
|
@@ -32,7 +34,7 @@ describe Prawn::Document do
|
|
32
34
|
|
33
35
|
describe 'when generating a document with a custom text formatter' do
|
34
36
|
it 'uses the provided text formatter' do
|
35
|
-
|
37
|
+
text_formatter = Class.new do
|
36
38
|
def self.format(string)
|
37
39
|
[
|
38
40
|
{
|
@@ -49,7 +51,7 @@ describe Prawn::Document do
|
|
49
51
|
]
|
50
52
|
end
|
51
53
|
end
|
52
|
-
pdf = described_class.new text_formatter:
|
54
|
+
pdf = described_class.new text_formatter: text_formatter
|
53
55
|
pdf.text 'Dr. Who?', inline_format: true
|
54
56
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
55
57
|
expect(text.strings.first).to eq("Just 'The Doctor'.")
|
@@ -161,6 +163,48 @@ describe Prawn::Document do
|
|
161
163
|
end
|
162
164
|
end
|
163
165
|
|
166
|
+
describe '#delete_page(index)' do
|
167
|
+
before do
|
168
|
+
pdf.text 'Page one'
|
169
|
+
pdf.start_new_page
|
170
|
+
pdf.text 'Page two'
|
171
|
+
pdf.start_new_page
|
172
|
+
pdf.text 'Page three'
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'destroy a specific page of the document' do
|
176
|
+
pdf.delete_page(1)
|
177
|
+
expect(pdf.page_number).to eq(2)
|
178
|
+
text_analysis = PDF::Inspector::Text.analyze(pdf.render)
|
179
|
+
expect(text_analysis.strings).to eq(['Page one', 'Page three'])
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'destroy the last page of the document' do
|
183
|
+
pdf.delete_page(-1)
|
184
|
+
expect(pdf.page_number).to eq(2)
|
185
|
+
text_analysis = PDF::Inspector::Text.analyze(pdf.render)
|
186
|
+
expect(text_analysis.strings).to eq(['Page one', 'Page two'])
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'with an invalid index' do
|
190
|
+
let(:expected_content) { ['Page one', 'Page two', 'Page three'] }
|
191
|
+
|
192
|
+
it 'does not destroy an invalid positve index' do
|
193
|
+
pdf.delete_page(42)
|
194
|
+
expect(pdf.page_number).to eq(3)
|
195
|
+
text_analysis = PDF::Inspector::Text.analyze(pdf.render)
|
196
|
+
expect(text_analysis.strings).to eq(expected_content)
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'does not destroy an invalid negative index' do
|
200
|
+
pdf.delete_page(-42)
|
201
|
+
expect(pdf.page_number).to eq(3)
|
202
|
+
text_analysis = PDF::Inspector::Text.analyze(pdf.render)
|
203
|
+
expect(text_analysis.strings).to eq(expected_content)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
164
208
|
describe '#page_number' do
|
165
209
|
it 'is 1 for a new document' do
|
166
210
|
pdf = described_class.new
|
@@ -356,7 +400,7 @@ describe Prawn::Document do
|
|
356
400
|
end
|
357
401
|
|
358
402
|
(PDF::Core::PageGeometry::SIZES.keys - ['LETTER']).each do |k|
|
359
|
-
it "
|
403
|
+
it "provides #{k} geometry" do
|
360
404
|
pdf = described_class.new(page_size: k)
|
361
405
|
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
362
406
|
expect(pages.first[:size]).to eq(PDF::Core::PageGeometry::SIZES[k])
|
@@ -572,7 +616,7 @@ describe Prawn::Document do
|
|
572
616
|
expect(pdf).to_not have_received(:text_box)
|
573
617
|
end
|
574
618
|
|
575
|
-
context 'start_count_at option' do
|
619
|
+
context 'with start_count_at option' do
|
576
620
|
[1, 2].each do |startat|
|
577
621
|
context "equal to #{startat}" do
|
578
622
|
it 'increments the pages' do
|
@@ -605,7 +649,7 @@ describe Prawn::Document do
|
|
605
649
|
end
|
606
650
|
end
|
607
651
|
|
608
|
-
context 'total_pages option' do
|
652
|
+
context 'with total_pages option' do
|
609
653
|
it 'allows the total pages count to be overridden' do
|
610
654
|
2.times { pdf.start_new_page }
|
611
655
|
allow(pdf).to receive(:text_box)
|
@@ -616,8 +660,8 @@ describe Prawn::Document do
|
|
616
660
|
end
|
617
661
|
end
|
618
662
|
|
619
|
-
context 'special page filter' do
|
620
|
-
|
663
|
+
context 'with special page filter' do
|
664
|
+
describe 'such as :odd' do
|
621
665
|
it 'increments the pages' do
|
622
666
|
3.times { pdf.start_new_page }
|
623
667
|
allow(pdf).to receive(:text_box)
|
@@ -629,7 +673,7 @@ describe Prawn::Document do
|
|
629
673
|
end
|
630
674
|
end
|
631
675
|
|
632
|
-
|
676
|
+
describe 'missing' do
|
633
677
|
it 'does not print any page numbers' do
|
634
678
|
3.times { pdf.start_new_page }
|
635
679
|
allow(pdf).to receive(:text_box)
|
@@ -640,8 +684,8 @@ describe Prawn::Document do
|
|
640
684
|
end
|
641
685
|
end
|
642
686
|
|
643
|
-
context '
|
644
|
-
|
687
|
+
context 'with both a special page filter and a start_count_at parameter' do
|
688
|
+
describe 'such as :odd and 7' do
|
645
689
|
it 'increments the pages' do
|
646
690
|
3.times { pdf.start_new_page }
|
647
691
|
allow(pdf).to receive(:text_box)
|
@@ -660,7 +704,8 @@ describe Prawn::Document do
|
|
660
704
|
expect(pdf).to have_received(:text_box).with('7 3', height: 50)
|
661
705
|
end
|
662
706
|
end
|
663
|
-
|
707
|
+
|
708
|
+
context 'with some crazy proc and 2' do
|
664
709
|
it 'increments the pages' do
|
665
710
|
6.times { pdf.start_new_page }
|
666
711
|
options = {
|
@@ -691,7 +736,7 @@ describe Prawn::Document do
|
|
691
736
|
end
|
692
737
|
end
|
693
738
|
|
694
|
-
|
739
|
+
describe 'height option' do
|
695
740
|
before do
|
696
741
|
pdf.start_new_page
|
697
742
|
end
|
@@ -724,7 +769,7 @@ describe Prawn::Document do
|
|
724
769
|
end
|
725
770
|
|
726
771
|
it 'returns nil given no filter' do
|
727
|
-
expect(pdf.
|
772
|
+
expect(pdf).to_not be_page_match(:nil, 1)
|
728
773
|
end
|
729
774
|
|
730
775
|
it 'must provide an :all filter' do
|
@@ -735,7 +780,7 @@ describe Prawn::Document do
|
|
735
780
|
it 'must provide an :odd filter' do
|
736
781
|
odd, even = (1..pdf.page_count).partition(&:odd?)
|
737
782
|
expect(odd.all? { |i| pdf.page_match?(:odd, i) }).to eq true
|
738
|
-
expect(even.
|
783
|
+
expect(even).to_not(be_any { |i| pdf.page_match?(:odd, i) })
|
739
784
|
end
|
740
785
|
|
741
786
|
it 'must be able to filter by an array of page numbers' do
|
data/spec/prawn/font_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'pathname'
|
3
5
|
|
@@ -39,7 +41,7 @@ describe Prawn::Font do
|
|
39
41
|
it 'takes character spacing into account' do
|
40
42
|
original_width = pdf.width_of('hello world')
|
41
43
|
pdf.character_spacing(7) do
|
42
|
-
expect(pdf.width_of('hello world')).to eq(original_width +
|
44
|
+
expect(pdf.width_of('hello world')).to eq(original_width + 10 * 7)
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
@@ -69,6 +71,14 @@ describe Prawn::Font do
|
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
74
|
+
it 'reports missing font with style' do
|
75
|
+
expect do
|
76
|
+
pdf.font('Nada', style: :bold) do
|
77
|
+
pdf.width_of('hello')
|
78
|
+
end
|
79
|
+
end.to raise_error(Prawn::Errors::UnknownFont, /Nada \(bold\)/)
|
80
|
+
end
|
81
|
+
|
72
82
|
it 'calculates styled widths correctly using TTFs' do
|
73
83
|
pdf.font_families.update(
|
74
84
|
'DejaVu Sans' => {
|
@@ -134,9 +144,9 @@ describe Prawn::Font do
|
|
134
144
|
|
135
145
|
text = PDF::Inspector::Text.analyze(pdf.render)
|
136
146
|
expect(text.font_settings.map { |e| e[:name] }).to eq(
|
137
|
-
[
|
138
|
-
|
139
|
-
|
147
|
+
%i[
|
148
|
+
Courier-Bold Courier-BoldOblique Courier-Oblique
|
149
|
+
Courier Helvetica
|
140
150
|
]
|
141
151
|
)
|
142
152
|
end
|
@@ -263,7 +273,7 @@ describe Prawn::Font do
|
|
263
273
|
pdf.font 'Times-Roman'
|
264
274
|
pdf.text('hello')
|
265
275
|
|
266
|
-
[
|
276
|
+
%w[Courier Helvetica Times-Roman].each do |f|
|
267
277
|
page_should_include_font(f)
|
268
278
|
end
|
269
279
|
|
@@ -342,12 +352,6 @@ describe Prawn::Font do
|
|
342
352
|
normalized = times.normalize_encoding(original)
|
343
353
|
expect(original.equal?(normalized)).to eq false
|
344
354
|
end
|
345
|
-
|
346
|
-
it 'modifies the original string when normalize_encoding!() is used' do
|
347
|
-
original = 'Foo'
|
348
|
-
normalized = times.normalize_encoding!(original)
|
349
|
-
expect(original.equal?(normalized)).to eq true
|
350
|
-
end
|
351
355
|
end
|
352
356
|
|
353
357
|
it 'omits /Encoding for symbolic fonts' do
|
@@ -450,11 +454,36 @@ describe Prawn::Font do
|
|
450
454
|
normalized = font.normalize_encoding(original)
|
451
455
|
expect(original.equal?(normalized)).to eq false
|
452
456
|
end
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
460
|
+
describe 'OTF fonts' do
|
461
|
+
let(:font) { pdf.find_font "#{Prawn::DATADIR}/fonts/Bodoni-Book.otf" }
|
453
462
|
|
454
|
-
|
463
|
+
it 'calculates string width taking into account accented characters' do
|
464
|
+
expect(font.compute_width_of('é', size: 12)).to eq(
|
465
|
+
font.compute_width_of('e', size: 12)
|
466
|
+
)
|
467
|
+
end
|
468
|
+
|
469
|
+
it 'uses the ascender, descender, and cap height from the OTF verbatim' do
|
470
|
+
# These metrics are relative to the font's own bbox. They should not be
|
471
|
+
# scaled with font size.
|
472
|
+
ref = pdf.ref!({})
|
473
|
+
font.send :embed, ref, 0
|
474
|
+
|
475
|
+
# Pull out the embedded font descriptor
|
476
|
+
descriptor = ref.data[:FontDescriptor].data
|
477
|
+
expect(descriptor[:Ascent]).to eq(1023)
|
478
|
+
expect(descriptor[:Descent]).to eq(-200)
|
479
|
+
expect(descriptor[:CapHeight]).to eq(3072)
|
480
|
+
end
|
481
|
+
|
482
|
+
describe 'when normalizing encoding' do
|
483
|
+
it 'does not modify the original string with normalize_encoding()' do
|
455
484
|
original = 'Foo'
|
456
|
-
normalized = font.normalize_encoding
|
457
|
-
expect(original.
|
485
|
+
normalized = font.normalize_encoding(original)
|
486
|
+
expect(original).to_not be_equal(normalized)
|
458
487
|
end
|
459
488
|
end
|
460
489
|
end
|
@@ -463,14 +492,14 @@ describe Prawn::Font do
|
|
463
492
|
let(:file) { "#{Prawn::DATADIR}/fonts/Panic+Sans.dfont" }
|
464
493
|
|
465
494
|
it 'lists all named fonts' do
|
466
|
-
list = Prawn::
|
495
|
+
list = Prawn::Fonts::DFont.named_fonts(file)
|
467
496
|
expect(list).to match_array(%w[
|
468
497
|
PanicSans PanicSans-Bold PanicSans-BoldItalic PanicSans-Italic
|
469
498
|
])
|
470
499
|
end
|
471
500
|
|
472
501
|
it 'counts the number of fonts in the file' do
|
473
|
-
expect(Prawn::
|
502
|
+
expect(Prawn::Fonts::DFont.font_count(file)).to eq(4)
|
474
503
|
end
|
475
504
|
|
476
505
|
it 'defaults selected font to the first one if not specified' do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Prawn::Graphics::BlendMode do
|
@@ -42,9 +44,9 @@ describe Prawn::Graphics::BlendMode do
|
|
42
44
|
|
43
45
|
it 'setting the blend mode with multiple parameters sets an array of '\
|
44
46
|
'blend modes' do
|
45
|
-
make_blend_mode([
|
47
|
+
make_blend_mode(%i[Multiply Screen Overlay])
|
46
48
|
extgstate = PDF::Inspector::ExtGState.analyze(pdf.render).extgstates.first
|
47
|
-
expect(extgstate[:blend_mode]).to eq([
|
49
|
+
expect(extgstate[:blend_mode]).to eq(%i[Multiply Screen Overlay])
|
48
50
|
end
|
49
51
|
|
50
52
|
describe 'with more than one page' do
|
data/spec/prawn/graphics_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Prawn::Graphics do
|
@@ -12,8 +14,7 @@ describe Prawn::Graphics do
|
|
12
14
|
expect(line_drawing.points).to eq([[100, 600], [100, 500]])
|
13
15
|
end
|
14
16
|
|
15
|
-
it '
|
16
|
-
'and (75,100) to (50,125)' do
|
17
|
+
it 'draws two lines at (100,600) to (100,500) and (75,100) to (50,125)' do
|
17
18
|
pdf.line(100, 600, 100, 500)
|
18
19
|
pdf.line(75, 100, 50, 125)
|
19
20
|
|
@@ -67,6 +68,7 @@ describe Prawn::Graphics do
|
|
67
68
|
line_drawing = PDF::Inspector::Graphics::Line.analyze(pdf.render)
|
68
69
|
expect(line_drawing.points).to eq([[350, 300], [350, 400]])
|
69
70
|
end
|
71
|
+
|
70
72
|
it 'requires a y coordinate' do
|
71
73
|
expect { pdf.vertical_line(400, 500) }
|
72
74
|
.to raise_error(ArgumentError)
|
@@ -116,6 +118,7 @@ describe Prawn::Graphics do
|
|
116
118
|
|
117
119
|
describe 'When drawing a rounded rectangle' do
|
118
120
|
before { pdf.rounded_rectangle([50, 550], 50, 100, 10) }
|
121
|
+
|
119
122
|
let(:original_point) do
|
120
123
|
curve = PDF::Inspector::Graphics::Curve.analyze(pdf.render)
|
121
124
|
curve_points = curve.coords.each_slice(2).to_a
|
@@ -245,6 +248,10 @@ describe Prawn::Graphics do
|
|
245
248
|
expect { pdf.fill_color 'zcff00' }.to raise_error(ArgumentError)
|
246
249
|
end
|
247
250
|
|
251
|
+
it 'raises an error for a color string with invalid characters' do
|
252
|
+
expect { pdf.fill_color 'f0f0f?' }.to raise_error(ArgumentError)
|
253
|
+
end
|
254
|
+
|
248
255
|
it 'resets the colors on each new page if they have been defined' do
|
249
256
|
pdf.fill_color 'ccff00'
|
250
257
|
|
@@ -295,6 +302,23 @@ describe Prawn::Graphics do
|
|
295
302
|
end).to eq true
|
296
303
|
end
|
297
304
|
|
305
|
+
it 'creates a unique ID for each pattern resource' do
|
306
|
+
pdf.fill_gradient(
|
307
|
+
[256, 512],
|
308
|
+
[356, 512],
|
309
|
+
'ffffff', 'fe00ff'
|
310
|
+
)
|
311
|
+
pdf.fill_gradient(
|
312
|
+
[256, 256],
|
313
|
+
[356, 256],
|
314
|
+
'ffffff', '0000ff'
|
315
|
+
)
|
316
|
+
|
317
|
+
str = pdf.render
|
318
|
+
pattern_ids = str.scan(/SP\h{40}\s+scn/)
|
319
|
+
expect(pattern_ids.uniq.length).to eq 2
|
320
|
+
end
|
321
|
+
|
298
322
|
it 'fill_gradient should set fill color to the pattern' do
|
299
323
|
pdf.fill_gradient(
|
300
324
|
[0, pdf.bounds.height],
|
@@ -411,7 +435,7 @@ describe Prawn::Graphics do
|
|
411
435
|
end
|
412
436
|
|
413
437
|
describe 'gradient transformations' do
|
414
|
-
subject do
|
438
|
+
subject(:transformations) do
|
415
439
|
pdf.scale 2 do
|
416
440
|
pdf.translate 40, 40 do
|
417
441
|
pdf.fill_gradient [0, 10], [15, 15], 'FF0000', '0000FF', opts
|
@@ -429,7 +453,7 @@ describe Prawn::Graphics do
|
|
429
453
|
|
430
454
|
it 'uses the transformation stack to translate user co-ordinates to '\
|
431
455
|
'document co-ordinates required by /Pattern' do
|
432
|
-
|
456
|
+
expect(transformations).to eq([[2, 0, 0, 2, 80, 100]])
|
433
457
|
end
|
434
458
|
end
|
435
459
|
|
@@ -437,7 +461,7 @@ describe Prawn::Graphics do
|
|
437
461
|
let(:opts) { { apply_transformations: false } }
|
438
462
|
|
439
463
|
it "doesn't transform the gradient" do
|
440
|
-
|
464
|
+
expect(transformations).to eq([[1, 0, 0, 1, 0, 10]])
|
441
465
|
end
|
442
466
|
end
|
443
467
|
|
@@ -446,7 +470,7 @@ describe Prawn::Graphics do
|
|
446
470
|
|
447
471
|
it "doesn't transform the gradient and displays a warning" do
|
448
472
|
allow(pdf).to receive(:warn).twice
|
449
|
-
|
473
|
+
expect(transformations).to eq([[1, 0, 0, 1, 0, 10]])
|
450
474
|
expect(pdf).to have_received(:warn).twice
|
451
475
|
end
|
452
476
|
end
|
@@ -607,7 +631,7 @@ describe Prawn::Graphics do
|
|
607
631
|
'the initializer' do
|
608
632
|
new_state = PDF::Core::GraphicState.new(pdf.graphic_state)
|
609
633
|
|
610
|
-
[
|
634
|
+
%i[color_space dash fill_color stroke_color].each do |attr|
|
611
635
|
expect(new_state.send(attr)).to eq(pdf.graphic_state.send(attr))
|
612
636
|
expect(new_state.send(attr)).to_not equal(pdf.graphic_state.send(attr))
|
613
637
|
end
|
@@ -616,7 +640,7 @@ describe Prawn::Graphics do
|
|
616
640
|
it 'copies mutable attributes when duping' do
|
617
641
|
new_state = pdf.graphic_state.dup
|
618
642
|
|
619
|
-
[
|
643
|
+
%i[color_space dash fill_color stroke_color].each do |attr|
|
620
644
|
expect(new_state.send(attr)).to eq(pdf.graphic_state.send(attr))
|
621
645
|
expect(new_state.send(attr)).to_not equal(pdf.graphic_state.send(attr))
|
622
646
|
end
|
@@ -629,15 +653,15 @@ describe Prawn::Graphics do
|
|
629
653
|
|
630
654
|
it 'sends the right content on transformation_matrix' do
|
631
655
|
allow(pdf.renderer).to receive(:add_content)
|
632
|
-
.with('1.
|
656
|
+
.with('1.0 0.0 0.12346 -1.0 5.5 20.0 cm')
|
633
657
|
pdf.transformation_matrix 1, 0, 0.123456789, -1.0, 5.5, 20
|
634
658
|
expect(pdf.renderer).to have_received(:add_content)
|
635
|
-
.with('1.
|
659
|
+
.with('1.0 0.0 0.12346 -1.0 5.5 20.0 cm')
|
636
660
|
end
|
637
661
|
|
638
662
|
it 'uses fixed digits with very small number' do
|
639
663
|
values = Array.new(6, 0.000000000001)
|
640
|
-
string = Array.new(6, '0.
|
664
|
+
string = Array.new(6, '0.0').join ' '
|
641
665
|
allow(pdf.renderer).to receive(:add_content).with("#{string} cm")
|
642
666
|
pdf.transformation_matrix(*values)
|
643
667
|
expect(pdf.renderer).to have_received(:add_content).with("#{string} cm")
|
@@ -651,7 +675,7 @@ describe Prawn::Graphics do
|
|
651
675
|
|
652
676
|
it 'saves the graphics state inside the given block' do
|
653
677
|
values = Array.new(6, 0.000000000001)
|
654
|
-
string = Array.new(6, '0.
|
678
|
+
string = Array.new(6, '0.0').join ' '
|
655
679
|
|
656
680
|
allow(pdf).to receive(:save_graphics_state).with(no_args)
|
657
681
|
allow(pdf.renderer).to receive(:add_content).with(any_args).twice
|
@@ -742,10 +766,6 @@ describe Prawn::Graphics do
|
|
742
766
|
pdf.rotate(angle, origin: [x, y])
|
743
767
|
end.to raise_error(Prawn::Errors::BlockRequired)
|
744
768
|
end
|
745
|
-
|
746
|
-
def reduce_precision(float)
|
747
|
-
(format '%.5f', float).to_f
|
748
|
-
end
|
749
769
|
end
|
750
770
|
|
751
771
|
describe '#translate' do
|
@@ -808,10 +828,10 @@ describe Prawn::Graphics do
|
|
808
828
|
pdf.scale(factor, origin: [x, y])
|
809
829
|
end.to raise_error(Prawn::Errors::BlockRequired)
|
810
830
|
end
|
811
|
-
|
812
|
-
def reduce_precision(float)
|
813
|
-
(format '%.5f', float).to_f
|
814
|
-
end
|
815
831
|
end
|
816
832
|
end
|
833
|
+
|
834
|
+
def reduce_precision(float)
|
835
|
+
float.round(5)
|
836
|
+
end
|
817
837
|
end
|