prawn 1.0.0.rc2 → 1.0.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 +7 -0
- data/.yardopts +9 -0
- data/COPYING +2 -2
- data/Gemfile +8 -15
- data/LICENSE +1 -1
- data/Rakefile +25 -16
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.color +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.color +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/license.md +8 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.color +0 -0
- data/lib/prawn.rb +85 -23
- data/lib/prawn/document.rb +134 -116
- data/lib/prawn/document/bounding_box.rb +33 -4
- data/lib/prawn/document/column_box.rb +18 -6
- data/lib/prawn/document/graphics_state.rb +11 -74
- data/lib/prawn/document/internals.rb +24 -23
- data/lib/prawn/document/span.rb +12 -10
- data/lib/prawn/encoding.rb +8 -9
- data/lib/prawn/errors.rb +13 -32
- data/lib/prawn/font.rb +137 -105
- data/lib/prawn/font/afm.rb +76 -32
- data/lib/prawn/font/dfont.rb +4 -3
- data/lib/prawn/font/ttf.rb +33 -25
- data/lib/prawn/font_metric_cache.rb +47 -0
- data/lib/prawn/graphics.rb +177 -57
- data/lib/prawn/graphics/cap_style.rb +4 -3
- data/lib/prawn/graphics/color.rb +5 -4
- data/lib/prawn/graphics/dash.rb +53 -31
- data/lib/prawn/graphics/join_style.rb +9 -7
- data/lib/prawn/graphics/patterns.rb +4 -15
- data/lib/prawn/graphics/transformation.rb +10 -9
- data/lib/prawn/graphics/transparency.rb +3 -1
- data/lib/prawn/{layout/grid.rb → grid.rb} +72 -54
- data/lib/prawn/image_handler.rb +42 -0
- data/lib/prawn/images.rb +58 -54
- data/lib/prawn/images/image.rb +6 -22
- data/lib/prawn/images/jpg.rb +20 -14
- data/lib/prawn/images/png.rb +58 -121
- data/lib/prawn/layout.rb +12 -15
- data/lib/prawn/measurement_extensions.rb +10 -6
- data/lib/prawn/measurements.rb +27 -21
- data/lib/prawn/outline.rb +108 -147
- data/lib/prawn/repeater.rb +10 -8
- data/lib/prawn/security.rb +59 -40
- data/lib/prawn/security/arcfour.rb +52 -0
- data/lib/prawn/soft_mask.rb +4 -4
- data/lib/prawn/stamp.rb +5 -3
- data/lib/prawn/table.rb +83 -60
- data/lib/prawn/table/cell.rb +17 -21
- data/lib/prawn/table/cell/image.rb +2 -3
- data/lib/prawn/table/cell/in_table.rb +8 -2
- data/lib/prawn/table/cell/span_dummy.rb +5 -0
- data/lib/prawn/table/cell/subtable.rb +3 -2
- data/lib/prawn/table/cell/text.rb +14 -12
- data/lib/prawn/table/cells.rb +58 -14
- data/lib/prawn/table/column_width_calculator.rb +61 -0
- data/lib/prawn/text.rb +27 -26
- data/lib/prawn/text/box.rb +12 -6
- data/lib/prawn/text/formatted.rb +5 -4
- data/lib/prawn/text/formatted/arranger.rb +290 -0
- data/lib/prawn/text/formatted/box.rb +85 -57
- data/lib/prawn/text/formatted/fragment.rb +11 -11
- data/lib/prawn/text/formatted/line_wrap.rb +266 -0
- data/lib/prawn/text/formatted/parser.rb +11 -4
- data/lib/prawn/text/formatted/wrap.rb +156 -0
- data/lib/prawn/utilities.rb +5 -3
- data/manual/document_and_page_options/document_and_page_options.rb +2 -1
- data/manual/document_and_page_options/metadata.rb +3 -3
- data/manual/document_and_page_options/page_size.rb +2 -2
- data/manual/document_and_page_options/print_scaling.rb +20 -0
- data/manual/example_file.rb +2 -7
- data/manual/example_helper.rb +62 -81
- data/manual/graphics/common_lines.rb +2 -0
- data/manual/graphics/helper.rb +11 -4
- data/manual/graphics/stroke_dash.rb +19 -14
- data/manual/manual/cover.rb +16 -0
- data/manual/manual/manual.rb +1 -5
- data/manual/text/fallback_fonts.rb +4 -4
- data/manual/text/formatted_text.rb +5 -5
- data/manual/text/inline.rb +2 -4
- data/manual/text/registering_families.rb +12 -12
- data/manual/text/single_usage.rb +4 -4
- data/manual/text/text.rb +0 -2
- data/prawn.gemspec +21 -13
- data/spec/acceptance/png.rb +23 -0
- data/spec/annotations_spec.rb +16 -32
- data/spec/bounding_box_spec.rb +22 -5
- data/spec/cell_spec.rb +49 -5
- data/spec/column_box_spec.rb +32 -0
- data/spec/destinations_spec.rb +5 -5
- data/spec/document_spec.rb +112 -118
- data/spec/extensions/encoding_helpers.rb +5 -2
- data/spec/font_metric_cache_spec.rb +52 -0
- data/spec/font_spec.rb +121 -120
- data/spec/formatted_text_arranger_spec.rb +24 -24
- data/spec/formatted_text_box_spec.rb +31 -32
- data/spec/formatted_text_fragment_spec.rb +2 -2
- data/spec/graphics_spec.rb +63 -45
- data/spec/grid_spec.rb +24 -13
- data/spec/image_handler_spec.rb +54 -0
- data/spec/images_spec.rb +34 -21
- data/spec/inline_formatted_text_parser_spec.rb +69 -20
- data/spec/jpg_spec.rb +3 -3
- data/spec/line_wrap_spec.rb +25 -14
- data/spec/measurement_units_spec.rb +5 -5
- data/spec/outline_spec.rb +68 -64
- data/spec/png_spec.rb +15 -18
- data/spec/reference_spec.rb +2 -82
- data/spec/repeater_spec.rb +1 -1
- data/spec/security_spec.rb +41 -9
- data/spec/soft_mask_spec.rb +0 -40
- data/spec/span_spec.rb +6 -11
- data/spec/spec_helper.rb +20 -2
- data/spec/stamp_spec.rb +19 -20
- data/spec/stroke_styles_spec.rb +31 -13
- data/spec/table/span_dummy_spec.rb +17 -0
- data/spec/table_spec.rb +268 -43
- data/spec/text_at_spec.rb +13 -27
- data/spec/text_box_spec.rb +35 -30
- data/spec/text_spec.rb +56 -40
- data/spec/transparency_spec.rb +5 -5
- metadata +214 -217
- data/README.md +0 -98
- data/data/fonts/Action Man.dfont +0 -0
- data/data/fonts/Activa.ttf +0 -0
- data/data/fonts/Chalkboard.ttf +0 -0
- data/data/fonts/DejaVuSans.ttf +0 -0
- data/data/fonts/Dustismo_Roman.ttf +0 -0
- data/data/fonts/comicsans.ttf +0 -0
- data/data/fonts/gkai00mp.ttf +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/rails.dat +0 -0
- data/data/images/rails.png +0 -0
- data/lib/prawn/compatibility.rb +0 -87
- data/lib/prawn/core.rb +0 -87
- data/lib/prawn/core/annotations.rb +0 -61
- data/lib/prawn/core/byte_string.rb +0 -9
- data/lib/prawn/core/destinations.rb +0 -90
- data/lib/prawn/core/document_state.rb +0 -79
- data/lib/prawn/core/literal_string.rb +0 -16
- data/lib/prawn/core/name_tree.rb +0 -177
- data/lib/prawn/core/object_store.rb +0 -320
- data/lib/prawn/core/page.rb +0 -212
- data/lib/prawn/core/pdf_object.rb +0 -125
- data/lib/prawn/core/reference.rb +0 -119
- data/lib/prawn/core/text.rb +0 -268
- data/lib/prawn/core/text/formatted/arranger.rb +0 -294
- data/lib/prawn/core/text/formatted/line_wrap.rb +0 -288
- data/lib/prawn/core/text/formatted/wrap.rb +0 -153
- data/lib/prawn/document/page_geometry.rb +0 -136
- data/lib/prawn/document/snapshot.rb +0 -89
- data/manual/manual/foreword.rb +0 -13
- data/manual/templates/full_template.rb +0 -23
- data/manual/templates/page_template.rb +0 -47
- data/manual/templates/templates.rb +0 -26
- data/manual/text/group.rb +0 -29
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/snapshot_spec.rb +0 -186
- data/spec/template_spec.rb +0 -351
data/spec/jpg_spec.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# contents of palette and transparency to ensure they're correct.
|
5
5
|
# Need to find files that have these sections first.
|
6
6
|
|
7
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
7
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
8
8
|
|
9
9
|
describe "When reading a JPEG file" do
|
10
10
|
|
@@ -12,10 +12,10 @@ describe "When reading a JPEG file" do
|
|
12
12
|
@filename = "#{Prawn::DATADIR}/images/pigs.jpg"
|
13
13
|
@img_data = File.open(@filename, "rb") { |f| f.read }
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "should read the basic attributes correctly" do
|
17
17
|
jpg = Prawn::Images::JPG.new(@img_data)
|
18
|
-
|
18
|
+
|
19
19
|
jpg.width.should == 604
|
20
20
|
jpg.height.should == 453
|
21
21
|
jpg.bits.should == 8
|
data/spec/line_wrap_spec.rb
CHANGED
@@ -5,8 +5,8 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
|
5
5
|
describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
6
6
|
before(:each) do
|
7
7
|
create_pdf
|
8
|
-
@arranger = Prawn::
|
9
|
-
@line_wrap = Prawn::
|
8
|
+
@arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
|
9
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
10
10
|
@one_word_width = 50
|
11
11
|
end
|
12
12
|
it "should strip leading and trailing spaces" do
|
@@ -113,11 +113,11 @@ describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
|
113
113
|
:width => @one_word_width,
|
114
114
|
:document => @pdf)
|
115
115
|
expected = @pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}")
|
116
|
-
expected.force_encoding(
|
116
|
+
expected.force_encoding(Encoding::UTF_8)
|
117
117
|
string.should == expected
|
118
118
|
|
119
119
|
@pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
|
120
|
-
@line_wrap = Prawn::
|
120
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
121
121
|
|
122
122
|
string = "hello#{Prawn::Text::SHY}world"
|
123
123
|
array = [{ :text => string }]
|
@@ -138,7 +138,7 @@ describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
|
138
138
|
string.should == "helloworld"
|
139
139
|
|
140
140
|
@pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
|
141
|
-
@line_wrap = Prawn::
|
141
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
142
142
|
|
143
143
|
string = "hello#{Prawn::Text::SHY}world"
|
144
144
|
array = [{ :text => string }]
|
@@ -167,7 +167,7 @@ describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
|
167
167
|
string.should == "hello"
|
168
168
|
|
169
169
|
@pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
|
170
|
-
@line_wrap = Prawn::
|
170
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
171
171
|
enough_width_for_hello_world = 68
|
172
172
|
|
173
173
|
array = [{ :text => "hello world" }]
|
@@ -202,11 +202,11 @@ describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
|
202
202
|
:width => @one_word_width,
|
203
203
|
:document => @pdf)
|
204
204
|
expected = @pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}")
|
205
|
-
expected.force_encoding(
|
205
|
+
expected.force_encoding(Encoding::UTF_8)
|
206
206
|
string.should == expected
|
207
207
|
|
208
208
|
@pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
|
209
|
-
@line_wrap = Prawn::
|
209
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
210
210
|
|
211
211
|
string = "hello#{Prawn::Text::SHY}-"
|
212
212
|
array = [{ :text => string }]
|
@@ -224,13 +224,24 @@ describe "Core::Text::Formatted::LineWrap#wrap_line" do
|
|
224
224
|
:document => @pdf)
|
225
225
|
string.should == "hello#{Prawn::Text::SHY}"
|
226
226
|
end
|
227
|
+
|
228
|
+
it "should process UTF-8 chars", :unresolved, :issue => 693 do
|
229
|
+
array = [{ :text => "Test" }]
|
230
|
+
@arranger.format_array = array
|
231
|
+
|
232
|
+
# Should not raise an encoding error
|
233
|
+
string = @line_wrap.wrap_line(:arranger => @arranger,
|
234
|
+
:width => 300,
|
235
|
+
:document => @pdf)
|
236
|
+
string.should == "Test"
|
237
|
+
end
|
227
238
|
end
|
228
239
|
|
229
240
|
describe "Core::Text::Formatted::LineWrap#space_count" do
|
230
241
|
before(:each) do
|
231
242
|
create_pdf
|
232
|
-
@arranger = Prawn::
|
233
|
-
@line_wrap = Prawn::
|
243
|
+
@arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
|
244
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
234
245
|
end
|
235
246
|
it "should return the number of spaces in the last wrapped line" do
|
236
247
|
array = [{ :text => "hello world, " },
|
@@ -255,7 +266,7 @@ end
|
|
255
266
|
describe "Core::Text::Formatted::LineWrap" do
|
256
267
|
before(:each) do
|
257
268
|
create_pdf
|
258
|
-
@arranger = Prawn::
|
269
|
+
@arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
|
259
270
|
array = [{ :text => "hello\nworld\n\n\nhow are you?" },
|
260
271
|
{ :text => "\n" },
|
261
272
|
{ :text => "\n" },
|
@@ -265,7 +276,7 @@ describe "Core::Text::Formatted::LineWrap" do
|
|
265
276
|
{ :text => "\n" },
|
266
277
|
{ :text => "" }]
|
267
278
|
@arranger.format_array = array
|
268
|
-
@line_wrap = Prawn::
|
279
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
269
280
|
end
|
270
281
|
it "should only return an empty string if nothing fit or there" +
|
271
282
|
"was nothing to wrap" do
|
@@ -285,8 +296,8 @@ end
|
|
285
296
|
describe "Core::Text::Formatted::LineWrap#paragraph_finished?" do
|
286
297
|
before(:each) do
|
287
298
|
create_pdf
|
288
|
-
@arranger = Prawn::
|
289
|
-
@line_wrap = Prawn::
|
299
|
+
@arranger = Prawn::Text::Formatted::Arranger.new(@pdf)
|
300
|
+
@line_wrap = Prawn::Text::Formatted::LineWrap.new
|
290
301
|
@one_word_width = 50
|
291
302
|
end
|
292
303
|
it "should be_false when the last printed line is not the end of the paragraph" do
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
2
|
require "prawn/measurement_extensions"
|
3
3
|
|
4
4
|
describe "Measurement units" do
|
5
|
-
|
5
|
+
|
6
6
|
it "should convert units to PostScriptPoints" do
|
7
7
|
1.mm.should be_within(0.000000001).of(2.834645669)
|
8
8
|
1.mm.should == (72 / 25.4)
|
@@ -12,12 +12,12 @@ describe "Measurement units" do
|
|
12
12
|
1.cm.should == 10 * 72 / 25.4
|
13
13
|
1.dm.should == 100 * 72 / 25.4
|
14
14
|
1.m.should == 1000 * 72 / 25.4
|
15
|
-
|
15
|
+
|
16
16
|
1.in.should == 72
|
17
17
|
1.ft.should == 72 * 12
|
18
18
|
1.yd.should == 72 * 12 * 3
|
19
19
|
1.pt.should == 1
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
end
|
23
|
-
|
23
|
+
|
data/spec/outline_spec.rb
CHANGED
@@ -16,20 +16,20 @@ describe "Outline" do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
19
|
+
|
20
|
+
describe "outline encoding" do
|
21
|
+
it "should store all outline titles as UTF-16" do
|
22
|
+
render_and_find_objects
|
23
|
+
@hash.values.each do |obj|
|
24
|
+
if obj.is_a?(Hash) && obj[:Title]
|
25
|
+
title = obj[:Title].dup
|
26
|
+
title.force_encoding(Encoding::UTF_16LE)
|
27
|
+
title.valid_encoding?.should == true
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
32
|
+
|
33
33
|
describe "#generate_outline" do
|
34
34
|
before(:each) do
|
35
35
|
render_and_find_objects
|
@@ -87,6 +87,28 @@ describe "Outline" do
|
|
87
87
|
|
88
88
|
end
|
89
89
|
|
90
|
+
describe "adding a custom destination" do
|
91
|
+
before(:each) do
|
92
|
+
@pdf.start_new_page
|
93
|
+
@pdf.text "Page 3 with a destination"
|
94
|
+
@pdf.add_dest('customdest', @pdf.dest_xyz(200, 200))
|
95
|
+
pdf = @pdf
|
96
|
+
@pdf.outline.update do
|
97
|
+
page :destination => pdf.dest_xyz(200, 200), :title => 'Custom Destination'
|
98
|
+
end
|
99
|
+
render_and_find_objects
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should create an outline item" do
|
103
|
+
@custom_dest.should_not be_nil
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should reference the custom destination" do
|
107
|
+
referenced_object(@custom_dest[:Dest].first).should == referenced_object(@pages.last)
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
90
112
|
describe "addding a section later with outline#section" do
|
91
113
|
before(:each) do
|
92
114
|
@pdf.start_new_page
|
@@ -120,11 +142,11 @@ describe "Outline" do
|
|
120
142
|
@outline_root[:Count].should == 5
|
121
143
|
end
|
122
144
|
|
123
|
-
end
|
124
|
-
|
125
|
-
describe "#outline.add_subsection_to" do
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "#outline.add_subsection_to" do
|
126
148
|
context "positioned last" do
|
127
|
-
|
149
|
+
|
128
150
|
before(:each) do
|
129
151
|
@pdf.start_new_page
|
130
152
|
@pdf.text "Page 3. An added subsection "
|
@@ -133,45 +155,45 @@ describe "Outline" do
|
|
133
155
|
section 'Added SubSection', :destination => 3 do
|
134
156
|
page :destination => 3, :title => 'Added Page 3'
|
135
157
|
end
|
136
|
-
end
|
158
|
+
end
|
137
159
|
end
|
138
160
|
render_and_find_objects
|
139
161
|
end
|
140
|
-
|
162
|
+
|
141
163
|
it "should add new outline items to document" do
|
142
164
|
[@subsection, @added_page_3].each { |item| item.should_not be_nil}
|
143
165
|
end
|
144
|
-
|
166
|
+
|
145
167
|
it "should reset the last item for parent item dictionary" do
|
146
168
|
referenced_object(@section_1[:First]).should == @page_1
|
147
169
|
referenced_object(@section_1[:Last]).should == @subsection
|
148
170
|
end
|
149
|
-
|
171
|
+
|
150
172
|
it "should set the prev relation for the new subsection to its parent's old last item" do
|
151
173
|
referenced_object(@subsection[:Prev]).should == @page_2
|
152
174
|
end
|
153
|
-
|
154
|
-
|
175
|
+
|
176
|
+
|
155
177
|
it "the subsection should become the next relation for its parent's old last item" do
|
156
178
|
referenced_object(@page_2[:Next]).should == @subsection
|
157
179
|
end
|
158
|
-
|
180
|
+
|
159
181
|
it "should set the first relation for the new subsection" do
|
160
182
|
referenced_object(@subsection[:First]).should == @added_page_3
|
161
183
|
end
|
162
|
-
|
184
|
+
|
163
185
|
it "should set the correct last relation of the added to section" do
|
164
186
|
referenced_object(@subsection[:Last]).should == @added_page_3
|
165
187
|
end
|
166
|
-
|
188
|
+
|
167
189
|
it "should increase the count of root outline dictionary" do
|
168
190
|
@outline_root[:Count].should == 5
|
169
191
|
end
|
170
|
-
|
171
|
-
end
|
172
|
-
|
192
|
+
|
193
|
+
end
|
194
|
+
|
173
195
|
context "positioned first" do
|
174
|
-
|
196
|
+
|
175
197
|
before(:each) do
|
176
198
|
@pdf.start_new_page
|
177
199
|
@pdf.text "Page 3. An added subsection "
|
@@ -193,7 +215,7 @@ describe "Outline" do
|
|
193
215
|
referenced_object(@section_1[:First]).should == @subsection
|
194
216
|
referenced_object(@section_1[:Last]).should == @page_2
|
195
217
|
end
|
196
|
-
|
218
|
+
|
197
219
|
it "should set the next relation for the new subsection to its parent's old first item" do
|
198
220
|
referenced_object(@subsection[:Next]).should == @page_1
|
199
221
|
end
|
@@ -215,7 +237,7 @@ describe "Outline" do
|
|
215
237
|
end
|
216
238
|
|
217
239
|
end
|
218
|
-
|
240
|
+
|
219
241
|
it "should require an existing title" do
|
220
242
|
lambda do
|
221
243
|
@pdf.go_to_page 1
|
@@ -229,7 +251,7 @@ describe "Outline" do
|
|
229
251
|
render_and_find_objects
|
230
252
|
end.should raise_error(Prawn::Errors::UnknownOutlineTitle)
|
231
253
|
end
|
232
|
-
end
|
254
|
+
end
|
233
255
|
|
234
256
|
describe "#outline.insert_section_after" do
|
235
257
|
describe "inserting in the middle of another section" do
|
@@ -248,45 +270,45 @@ describe "Outline" do
|
|
248
270
|
render_and_find_objects
|
249
271
|
@inserted_page.should_not be_nil
|
250
272
|
end
|
251
|
-
|
273
|
+
|
252
274
|
it "should adjust the count of all ancestors" do
|
253
275
|
render_and_find_objects
|
254
276
|
@outline_root[:Count].should == 4
|
255
277
|
@section_1[:Count].abs.should == 3
|
256
278
|
end
|
257
|
-
|
279
|
+
|
258
280
|
describe "#adjust_relations" do
|
259
|
-
|
281
|
+
|
260
282
|
it "should reset the sibling relations of adjoining items to inserted item" do
|
261
283
|
render_and_find_objects
|
262
284
|
referenced_object(@page_1[:Next]).should == @inserted_page
|
263
285
|
referenced_object(@page_2[:Prev]).should == @inserted_page
|
264
286
|
end
|
265
|
-
|
287
|
+
|
266
288
|
it "should set the sibling relation of added item to adjoining items" do
|
267
289
|
render_and_find_objects
|
268
290
|
referenced_object(@inserted_page[:Next]).should == @page_2
|
269
291
|
referenced_object(@inserted_page[:Prev]).should == @page_1
|
270
292
|
end
|
271
|
-
|
293
|
+
|
272
294
|
it "should not affect the first and last relations of parent item" do
|
273
295
|
render_and_find_objects
|
274
296
|
referenced_object(@section_1[:First]).should == @page_1
|
275
297
|
referenced_object(@section_1[:Last]).should == @page_2
|
276
298
|
end
|
277
|
-
|
278
|
-
end
|
279
|
-
|
280
|
-
|
281
|
-
context "when adding another section afterwards" do
|
299
|
+
|
300
|
+
end
|
301
|
+
|
302
|
+
|
303
|
+
context "when adding another section afterwards" do
|
282
304
|
it "should have reset the root position so that a new section is added at the end of root sections" do
|
283
305
|
@pdf.start_new_page
|
284
306
|
@pdf.text "Another Inserted Page"
|
285
307
|
@pdf.outline.update do
|
286
308
|
section 'Added Section' do
|
287
309
|
page :destination => page_number, :title => "Inserted Page"
|
288
|
-
end
|
289
|
-
end
|
310
|
+
end
|
311
|
+
end
|
290
312
|
render_and_find_objects
|
291
313
|
referenced_object(@outline_root[:Last]).should == @section_2
|
292
314
|
referenced_object(@section_1[:Next]).should == @section_2
|
@@ -305,7 +327,7 @@ describe "Outline" do
|
|
305
327
|
@pdf.outline.update do
|
306
328
|
insert_section_after 'Page 2' do
|
307
329
|
page :destination => page_number, :title => "Inserted Page"
|
308
|
-
end
|
330
|
+
end
|
309
331
|
end
|
310
332
|
render_and_find_objects
|
311
333
|
end
|
@@ -357,7 +379,7 @@ describe "Outline" do
|
|
357
379
|
end
|
358
380
|
end
|
359
381
|
end
|
360
|
-
|
382
|
+
|
361
383
|
describe "foreign character encoding" do
|
362
384
|
before(:each) do
|
363
385
|
pdf = Prawn::Document.new() do
|
@@ -374,24 +396,6 @@ describe "foreign character encoding" do
|
|
374
396
|
end
|
375
397
|
end
|
376
398
|
|
377
|
-
describe "with optimize_objects option" do
|
378
|
-
before(:each) do
|
379
|
-
@pdf = Prawn::Document.new(:optimize_objects => true) do
|
380
|
-
outline.define do
|
381
|
-
section 'Chapter 1', :destination => 1, :closed => true do
|
382
|
-
page :destination => 1, :title => 'Page 1'
|
383
|
-
end
|
384
|
-
end
|
385
|
-
end
|
386
|
-
render_and_find_objects
|
387
|
-
end
|
388
|
-
|
389
|
-
it "should generate an outline" do
|
390
|
-
@section_1.should_not be_nil
|
391
|
-
@page_1.should_not be_nil
|
392
|
-
end
|
393
|
-
end
|
394
|
-
|
395
399
|
def render_and_find_objects
|
396
400
|
output = StringIO.new(@pdf.render, 'r+')
|
397
401
|
@hash = PDF::Reader::ObjectHash.new(output)
|
@@ -402,9 +406,10 @@ def render_and_find_objects
|
|
402
406
|
@page_2 = find_by_title('Page 2')
|
403
407
|
@section_2 = find_by_title('Added Section')
|
404
408
|
@page_3 = find_by_title('Page 3')
|
405
|
-
@inserted_page = find_by_title('Inserted Page')
|
409
|
+
@inserted_page = find_by_title('Inserted Page')
|
406
410
|
@subsection = find_by_title('Added SubSection')
|
407
411
|
@added_page_3 = find_by_title('Added Page 3')
|
412
|
+
@custom_dest = find_by_title('Custom Destination')
|
408
413
|
end
|
409
414
|
|
410
415
|
# Outline titles are stored as UTF-16. This method accepts a UTF-8 outline title
|
@@ -423,4 +428,3 @@ end
|
|
423
428
|
def referenced_object(reference)
|
424
429
|
@hash[reference]
|
425
430
|
end
|
426
|
-
|
data/spec/png_spec.rb
CHANGED
@@ -31,7 +31,7 @@ describe "When reading a greyscale PNG file (color type 0)" do
|
|
31
31
|
|
32
32
|
it "should read the image data chunk correctly" do
|
33
33
|
png = Prawn::Images::PNG.new(@img_data)
|
34
|
-
data = File.binread(@data_filename)
|
34
|
+
data = Zlib::Inflate.inflate(File.binread(@data_filename))
|
35
35
|
png.img_data.should == data
|
36
36
|
end
|
37
37
|
end
|
@@ -75,7 +75,7 @@ describe "When reading an RGB PNG file (color type 2)" do
|
|
75
75
|
|
76
76
|
it "should read the image data chunk correctly" do
|
77
77
|
png = Prawn::Images::PNG.new(@img_data)
|
78
|
-
data = File.binread(@data_filename)
|
78
|
+
data = Zlib::Inflate.inflate(File.binread(@data_filename))
|
79
79
|
png.img_data.should == data
|
80
80
|
end
|
81
81
|
end
|
@@ -103,16 +103,16 @@ end
|
|
103
103
|
describe "When reading an indexed color PNG file (color type 3)" do
|
104
104
|
|
105
105
|
before(:each) do
|
106
|
-
@filename = "#{Prawn::DATADIR}/images/
|
107
|
-
@data_filename = "#{Prawn::DATADIR}/images/
|
106
|
+
@filename = "#{Prawn::DATADIR}/images/indexed_color.png"
|
107
|
+
@data_filename = "#{Prawn::DATADIR}/images/indexed_color.dat"
|
108
108
|
@img_data = File.binread(@filename)
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should read the attributes from the header chunk correctly" do
|
112
112
|
png = Prawn::Images::PNG.new(@img_data)
|
113
113
|
|
114
|
-
png.width.should ==
|
115
|
-
png.height.should ==
|
114
|
+
png.width.should == 150
|
115
|
+
png.height.should == 200
|
116
116
|
png.bits.should == 8
|
117
117
|
png.color_type.should == 3
|
118
118
|
png.compression_method.should == 0
|
@@ -122,7 +122,7 @@ describe "When reading an indexed color PNG file (color type 3)" do
|
|
122
122
|
|
123
123
|
it "should read the image data chunk correctly" do
|
124
124
|
png = Prawn::Images::PNG.new(@img_data)
|
125
|
-
data = File.binread(@data_filename)
|
125
|
+
data = Zlib::Inflate.inflate(File.binread(@data_filename))
|
126
126
|
png.img_data.should == data
|
127
127
|
end
|
128
128
|
end
|
@@ -131,7 +131,7 @@ describe "When reading a greyscale+alpha PNG file (color type 4)" do
|
|
131
131
|
|
132
132
|
before(:each) do
|
133
133
|
@filename = "#{Prawn::DATADIR}/images/page_white_text.png"
|
134
|
-
@
|
134
|
+
@color_data_filename = "#{Prawn::DATADIR}/images/page_white_text.color"
|
135
135
|
@alpha_data_filename = "#{Prawn::DATADIR}/images/page_white_text.alpha"
|
136
136
|
@img_data = File.binread(@filename)
|
137
137
|
end
|
@@ -151,7 +151,7 @@ describe "When reading a greyscale+alpha PNG file (color type 4)" do
|
|
151
151
|
it "should correctly return the raw image data (with no alpha channel) from the image data chunk" do
|
152
152
|
png = Prawn::Images::PNG.new(@img_data)
|
153
153
|
png.split_alpha_channel!
|
154
|
-
data = File.binread(@
|
154
|
+
data = File.binread(@color_data_filename)
|
155
155
|
png.img_data.should == data
|
156
156
|
end
|
157
157
|
|
@@ -167,7 +167,7 @@ describe "When reading an RGB+alpha PNG file (color type 6)" do
|
|
167
167
|
|
168
168
|
before(:each) do
|
169
169
|
@filename = "#{Prawn::DATADIR}/images/dice.png"
|
170
|
-
@
|
170
|
+
@color_data_filename = "#{Prawn::DATADIR}/images/dice.color"
|
171
171
|
@alpha_data_filename = "#{Prawn::DATADIR}/images/dice.alpha"
|
172
172
|
@img_data = File.binread(@filename)
|
173
173
|
end
|
@@ -187,18 +187,15 @@ describe "When reading an RGB+alpha PNG file (color type 6)" do
|
|
187
187
|
it "should correctly return the raw image data (with no alpha channel) from the image data chunk" do
|
188
188
|
png = Prawn::Images::PNG.new(@img_data)
|
189
189
|
png.split_alpha_channel!
|
190
|
-
data = File.binread(@
|
191
|
-
|
192
|
-
# because JRuby's implementation of Zlib is different from MRI --
|
193
|
-
# both generate valid gzipped data, but not bit-identical to each other
|
194
|
-
Zlib::Inflate.inflate(png.img_data).should == Zlib::Inflate.inflate(data)
|
190
|
+
data = File.binread(@color_data_filename)
|
191
|
+
png.img_data.should == data
|
195
192
|
end
|
196
193
|
|
197
194
|
it "should correctly extract the alpha channel data from the image data chunk" do
|
198
195
|
png = Prawn::Images::PNG.new(@img_data)
|
199
196
|
png.split_alpha_channel!
|
200
197
|
data = File.binread(@alpha_data_filename)
|
201
|
-
|
198
|
+
png.alpha_channel.should == data
|
202
199
|
end
|
203
200
|
end
|
204
201
|
|
@@ -206,7 +203,7 @@ describe "When reading a 16bit RGB+alpha PNG file (color type 6)" do
|
|
206
203
|
|
207
204
|
before(:each) do
|
208
205
|
@filename = "#{Prawn::DATADIR}/images/16bit.png"
|
209
|
-
@
|
206
|
+
@color_data_filename = "#{Prawn::DATADIR}/images/16bit.color"
|
210
207
|
# alpha channel truncated to 8-bit
|
211
208
|
@alpha_data_filename = "#{Prawn::DATADIR}/images/16bit.alpha"
|
212
209
|
@img_data = File.binread(@filename)
|
@@ -227,7 +224,7 @@ describe "When reading a 16bit RGB+alpha PNG file (color type 6)" do
|
|
227
224
|
it "should correctly return the raw image data (with no alpha channel) from the image data chunk" do
|
228
225
|
png = Prawn::Images::PNG.new(@img_data)
|
229
226
|
png.split_alpha_channel!
|
230
|
-
data = File.binread(@
|
227
|
+
data = File.binread(@color_data_filename)
|
231
228
|
png.img_data.should == data
|
232
229
|
end
|
233
230
|
|