prawn 0.4.1 → 0.5.0.1

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 (179) hide show
  1. data/lib/prawn.rb +2 -72
  2. metadata +33 -224
  3. data/COPYING +0 -340
  4. data/LICENSE +0 -56
  5. data/README +0 -40
  6. data/Rakefile +0 -79
  7. data/data/encodings/win_ansi.txt +0 -29
  8. data/data/fonts/Action Man.dfont +0 -0
  9. data/data/fonts/Activa.ttf +0 -0
  10. data/data/fonts/Chalkboard.ttf +0 -0
  11. data/data/fonts/Courier-Bold.afm +0 -342
  12. data/data/fonts/Courier-BoldOblique.afm +0 -342
  13. data/data/fonts/Courier-Oblique.afm +0 -342
  14. data/data/fonts/Courier.afm +0 -342
  15. data/data/fonts/DejaVuSans.ttf +0 -0
  16. data/data/fonts/Dustismo_Roman.ttf +0 -0
  17. data/data/fonts/Helvetica-Bold.afm +0 -2827
  18. data/data/fonts/Helvetica-BoldOblique.afm +0 -2827
  19. data/data/fonts/Helvetica-Oblique.afm +0 -3051
  20. data/data/fonts/Helvetica.afm +0 -3051
  21. data/data/fonts/MustRead.html +0 -19
  22. data/data/fonts/Symbol.afm +0 -213
  23. data/data/fonts/Times-Bold.afm +0 -2588
  24. data/data/fonts/Times-BoldItalic.afm +0 -2384
  25. data/data/fonts/Times-Italic.afm +0 -2667
  26. data/data/fonts/Times-Roman.afm +0 -2419
  27. data/data/fonts/ZapfDingbats.afm +0 -225
  28. data/data/fonts/comicsans.ttf +0 -0
  29. data/data/fonts/gkai00mp.ttf +0 -0
  30. data/data/images/arrow.png +0 -0
  31. data/data/images/arrow2.png +0 -0
  32. data/data/images/barcode_issue.png +0 -0
  33. data/data/images/dice.alpha +0 -0
  34. data/data/images/dice.dat +0 -0
  35. data/data/images/dice.png +0 -0
  36. data/data/images/fractal.jpg +0 -0
  37. data/data/images/letterhead.jpg +0 -0
  38. data/data/images/page_white_text.alpha +0 -0
  39. data/data/images/page_white_text.dat +0 -0
  40. data/data/images/page_white_text.png +0 -0
  41. data/data/images/pigs.jpg +0 -0
  42. data/data/images/rails.dat +0 -0
  43. data/data/images/rails.png +0 -0
  44. data/data/images/ruport.png +0 -0
  45. data/data/images/ruport_data.dat +0 -0
  46. data/data/images/ruport_transparent.png +0 -0
  47. data/data/images/ruport_type0.png +0 -0
  48. data/data/images/stef.jpg +0 -0
  49. data/data/images/web-links.dat +0 -1
  50. data/data/images/web-links.png +0 -0
  51. data/data/shift_jis_text.txt +0 -1
  52. data/examples/bounding_box/bounding_boxes.rb +0 -44
  53. data/examples/bounding_box/lazy_bounding_boxes.rb +0 -28
  54. data/examples/bounding_box/padded_box.rb +0 -24
  55. data/examples/bounding_box/russian_boxes.rb +0 -37
  56. data/examples/general/background.rb +0 -20
  57. data/examples/general/canvas.rb +0 -16
  58. data/examples/general/measurement_units.rb +0 -52
  59. data/examples/general/multi_page_layout.rb +0 -17
  60. data/examples/general/page_geometry.rb +0 -32
  61. data/examples/graphics/basic_images.rb +0 -27
  62. data/examples/graphics/cmyk.rb +0 -13
  63. data/examples/graphics/curves.rb +0 -12
  64. data/examples/graphics/hexagon.rb +0 -14
  65. data/examples/graphics/image_fit.rb +0 -16
  66. data/examples/graphics/image_flow.rb +0 -38
  67. data/examples/graphics/image_position.rb +0 -18
  68. data/examples/graphics/line.rb +0 -33
  69. data/examples/graphics/png_types.rb +0 -23
  70. data/examples/graphics/polygons.rb +0 -17
  71. data/examples/graphics/remote_images.rb +0 -12
  72. data/examples/graphics/ruport_style_helpers.rb +0 -20
  73. data/examples/graphics/stroke_bounds.rb +0 -23
  74. data/examples/m17n/chinese_text_wrapping.rb +0 -20
  75. data/examples/m17n/euro.rb +0 -16
  76. data/examples/m17n/sjis.rb +0 -29
  77. data/examples/m17n/utf8.rb +0 -14
  78. data/examples/m17n/win_ansi_charset.rb +0 -55
  79. data/examples/text/alignment.rb +0 -19
  80. data/examples/text/dfont.rb +0 -49
  81. data/examples/text/family_based_styling.rb +0 -25
  82. data/examples/text/flowing_text_with_header_and_footer.rb +0 -37
  83. data/examples/text/font_calculations.rb +0 -92
  84. data/examples/text/font_size.rb +0 -34
  85. data/examples/text/kerning.rb +0 -31
  86. data/examples/text/simple_text.rb +0 -18
  87. data/examples/text/simple_text_ttf.rb +0 -18
  88. data/examples/text/span.rb +0 -30
  89. data/examples/text/text_box.rb +0 -26
  90. data/examples/text/text_flow.rb +0 -68
  91. data/lib/prawn/compatibility.rb +0 -38
  92. data/lib/prawn/document.rb +0 -309
  93. data/lib/prawn/document/annotations.rb +0 -63
  94. data/lib/prawn/document/bounding_box.rb +0 -368
  95. data/lib/prawn/document/destinations.rb +0 -81
  96. data/lib/prawn/document/internals.rb +0 -126
  97. data/lib/prawn/document/page_geometry.rb +0 -79
  98. data/lib/prawn/document/span.rb +0 -55
  99. data/lib/prawn/document/text.rb +0 -185
  100. data/lib/prawn/document/text/box.rb +0 -76
  101. data/lib/prawn/document/text/wrapping.rb +0 -59
  102. data/lib/prawn/encoding.rb +0 -121
  103. data/lib/prawn/errors.rb +0 -40
  104. data/lib/prawn/font.rb +0 -277
  105. data/lib/prawn/font/afm.rb +0 -202
  106. data/lib/prawn/font/dfont.rb +0 -31
  107. data/lib/prawn/font/ttf.rb +0 -326
  108. data/lib/prawn/graphics.rb +0 -257
  109. data/lib/prawn/graphics/color.rb +0 -140
  110. data/lib/prawn/images.rb +0 -339
  111. data/lib/prawn/images/jpg.rb +0 -45
  112. data/lib/prawn/images/png.rb +0 -199
  113. data/lib/prawn/literal_string.rb +0 -14
  114. data/lib/prawn/measurement_extensions.rb +0 -46
  115. data/lib/prawn/measurements.rb +0 -71
  116. data/lib/prawn/name_tree.rb +0 -165
  117. data/lib/prawn/pdf_object.rb +0 -73
  118. data/lib/prawn/reference.rb +0 -59
  119. data/spec/annotations_spec.rb +0 -90
  120. data/spec/bounding_box_spec.rb +0 -141
  121. data/spec/destinations_spec.rb +0 -15
  122. data/spec/document_spec.rb +0 -193
  123. data/spec/font_spec.rb +0 -234
  124. data/spec/graphics_spec.rb +0 -209
  125. data/spec/images_spec.rb +0 -68
  126. data/spec/jpg_spec.rb +0 -25
  127. data/spec/measurement_units_spec.rb +0 -23
  128. data/spec/name_tree_spec.rb +0 -103
  129. data/spec/pdf_object_spec.rb +0 -112
  130. data/spec/png_spec.rb +0 -196
  131. data/spec/reference_spec.rb +0 -42
  132. data/spec/spec_helper.rb +0 -23
  133. data/spec/text_spec.rb +0 -178
  134. data/vendor/pdf-inspector/README +0 -18
  135. data/vendor/pdf-inspector/lib/pdf/inspector.rb +0 -25
  136. data/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +0 -80
  137. data/vendor/pdf-inspector/lib/pdf/inspector/page.rb +0 -16
  138. data/vendor/pdf-inspector/lib/pdf/inspector/text.rb +0 -31
  139. data/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +0 -19
  140. data/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
  141. data/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
  142. data/vendor/ttfunk/example.rb +0 -45
  143. data/vendor/ttfunk/lib/ttfunk.rb +0 -102
  144. data/vendor/ttfunk/lib/ttfunk/directory.rb +0 -17
  145. data/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +0 -88
  146. data/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +0 -69
  147. data/vendor/ttfunk/lib/ttfunk/reader.rb +0 -44
  148. data/vendor/ttfunk/lib/ttfunk/resource_file.rb +0 -78
  149. data/vendor/ttfunk/lib/ttfunk/subset.rb +0 -18
  150. data/vendor/ttfunk/lib/ttfunk/subset/base.rb +0 -141
  151. data/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +0 -46
  152. data/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +0 -48
  153. data/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +0 -63
  154. data/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +0 -51
  155. data/vendor/ttfunk/lib/ttfunk/subset_collection.rb +0 -72
  156. data/vendor/ttfunk/lib/ttfunk/table.rb +0 -46
  157. data/vendor/ttfunk/lib/ttfunk/table/cmap.rb +0 -34
  158. data/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +0 -54
  159. data/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +0 -126
  160. data/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +0 -79
  161. data/vendor/ttfunk/lib/ttfunk/table/glyf.rb +0 -64
  162. data/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +0 -81
  163. data/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +0 -37
  164. data/vendor/ttfunk/lib/ttfunk/table/head.rb +0 -44
  165. data/vendor/ttfunk/lib/ttfunk/table/hhea.rb +0 -41
  166. data/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +0 -47
  167. data/vendor/ttfunk/lib/ttfunk/table/kern.rb +0 -79
  168. data/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +0 -62
  169. data/vendor/ttfunk/lib/ttfunk/table/loca.rb +0 -43
  170. data/vendor/ttfunk/lib/ttfunk/table/maxp.rb +0 -40
  171. data/vendor/ttfunk/lib/ttfunk/table/name.rb +0 -119
  172. data/vendor/ttfunk/lib/ttfunk/table/os2.rb +0 -78
  173. data/vendor/ttfunk/lib/ttfunk/table/post.rb +0 -91
  174. data/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +0 -43
  175. data/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +0 -35
  176. data/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +0 -23
  177. data/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +0 -17
  178. data/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +0 -17
  179. data/vendor/ttfunk/lib/ttfunk/table/simple.rb +0 -14
data/spec/jpg_spec.rb DELETED
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # Spec'ing the PNG class. Not complete yet - still needs to check the
4
- # contents of palette and transparency to ensure they're correct.
5
- # Need to find files that have these sections first.
6
-
7
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
8
-
9
- describe "When reading a JPEG file" do
10
-
11
- before(:each) do
12
- @filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
13
- @img_data = File.open(@filename, "rb") { |f| f.read }
14
- end
15
-
16
- it "should read the basic attributes correctly" do
17
- jpg = Prawn::Images::JPG.new(@img_data)
18
-
19
- jpg.width.should == 604
20
- jpg.height.should == 453
21
- jpg.bits.should == 8
22
- jpg.channels.should == 3
23
- end
24
- end
25
-
@@ -1,23 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
- require "prawn/measurement_extensions"
3
-
4
- describe "Measurement units" do
5
-
6
- it "should convert units to PostScriptPoints" do
7
- 1.mm.should.be.close(2.834645669, 0.000000001)
8
- 1.mm.should == (72 / 25.4)
9
- 2.mm.should == (2 * 72 / 25.4)
10
- 3.mm.should == 3 * 72 / 25.4
11
- -3.mm.should == -3 * 72/25.4
12
- 1.cm.should == 10 * 72 / 25.4
13
- 1.dm.should == 100 * 72 / 25.4
14
- 1.m.should == 1000 * 72 / 25.4
15
-
16
- 1.in.should == 72
17
- 1.ft.should == 72 * 12
18
- 1.yd.should == 72 * 12 * 3
19
- 1.pt.should == 1
20
- end
21
-
22
- end
23
-
@@ -1,103 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
2
-
3
- def tree_dump(tree)
4
- if tree.is_a?(Prawn::NameTree::Node)
5
- "[" + tree.children.map { |child| tree_dump(child) }.join(",") + "]"
6
- else
7
- "#{tree.name}=#{tree.value}"
8
- end
9
- end
10
-
11
- def tree_add(tree, *args)
12
- args.each do |(name, value)|
13
- tree.add(name, value)
14
- end
15
- end
16
-
17
- def tree_value(name, value)
18
- Prawn::NameTree::Value.new(name, value)
19
- end
20
-
21
- class RefExposingDocument < Prawn::Document
22
- attr_reader :objects
23
- end
24
-
25
- describe "Name Tree" do
26
- before(:each) { create_pdf(RefExposingDocument) }
27
-
28
- it "should have no children when first initialized" do
29
- node = Prawn::NameTree::Node.new(@pdf, 3)
30
- node.children.length.should == 0
31
- end
32
-
33
- it "should have no subtrees while child limit is not reached" do
34
- node = Prawn::NameTree::Node.new(@pdf, 3)
35
- tree_add(node, ["one", 1], ["two", 2], ["three", 3])
36
- tree_dump(node).should == "[one=1,three=3,two=2]"
37
- end
38
-
39
- it "should split into subtrees when limit is exceeded" do
40
- node = Prawn::NameTree::Node.new(@pdf, 3)
41
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
42
- tree_dump(node).should == "[[four=4,one=1],[three=3,two=2]]"
43
- end
44
-
45
- it "should create a two new references when root is split" do
46
- ref_count = @pdf.objects.length
47
- node = Prawn::NameTree::Node.new(@pdf, 3)
48
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
49
- @pdf.objects.length.should.equal ref_count+2
50
- end
51
-
52
- it "should create a one new reference when subtree is split" do
53
- node = Prawn::NameTree::Node.new(@pdf, 3)
54
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
55
-
56
- ref_count = @pdf.objects.length # save when root is split
57
- tree_add(node, ["five", 5], ["six", 6], ["seven", 7])
58
- tree_dump(node).should == "[[five=5,four=4,one=1],[seven=7,six=6],[three=3,two=2]]"
59
- @pdf.objects.length.should.equal ref_count+1
60
- end
61
-
62
- it "should keep tree balanced when subtree split cascades to root" do
63
- node = Prawn::NameTree::Node.new(@pdf, 3)
64
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
65
- tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
66
- tree_dump(node).should == "[[[eight=8,five=5],[four=4,one=1]],[[seven=7,six=6],[three=3,two=2]]]"
67
- end
68
-
69
- it "should emit only :Names key with to_hash if root is only node" do
70
- node = Prawn::NameTree::Node.new(@pdf, 3)
71
- tree_add(node, ["one", 1], ["two", 2], ["three", 3])
72
- node.to_hash.should.equal(
73
- { :Names => [tree_value("one", 1), tree_value("three", 3), tree_value("two", 2)] }
74
- )
75
- end
76
-
77
- it "should emit only :Kids key with to_hash if root has children" do
78
- node = Prawn::NameTree::Node.new(@pdf, 3)
79
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
80
- node.to_hash.should.equal({ :Kids => node.children.map { |child| child.ref } })
81
- end
82
-
83
- it "should emit :Limits and :Names keys with to_hash for leaf node" do
84
- node = Prawn::NameTree::Node.new(@pdf, 3)
85
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
86
- node.children.first.to_hash.should.equal(
87
- { :Limits => %w(four one),
88
- :Names => [tree_value("four", 4), tree_value("one", 1)] }
89
- )
90
- end
91
-
92
- it "should emit :Limits and :Kids keys with to_hash for inner node" do
93
- node = Prawn::NameTree::Node.new(@pdf, 3)
94
- tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
95
- tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
96
- tree_add(node, ["nine", 9], ["ten", 10], ["eleven", 11], ["twelve", 12])
97
- tree_add(node, ["thirteen", 13], ["fourteen", 14], ["fifteen", 15], ["sixteen", 16])
98
- node.children.first.to_hash.should.equal(
99
- { :Limits => %w(eight one),
100
- :Kids => node.children.first.children.map { |child| child.ref } }
101
- )
102
- end
103
- end
@@ -1,112 +0,0 @@
1
- # encoding: ASCII-8BIT
2
-
3
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
-
5
- # See PDF Reference, Sixth Edition (1.7) pp51-60 for details
6
- describe "PDF Object Serialization" do
7
-
8
- it "should convert Ruby's nil to PDF null" do
9
- Prawn::PdfObject(nil).should == "null"
10
- end
11
-
12
- it "should convert Ruby booleans to PDF booleans" do
13
- Prawn::PdfObject(true).should == "true"
14
- Prawn::PdfObject(false).should == "false"
15
- end
16
-
17
- it "should convert a Ruby number to PDF number" do
18
- Prawn::PdfObject(1).should == "1"
19
- Prawn::PdfObject(1.214112421).should == "1.214112421"
20
- end
21
-
22
- it "should convert a Ruby string to PDF string when inside a content stream" do
23
- s = "I can has a string"
24
- PDF::Inspector.parse(Prawn::PdfObject(s, true)).should == s
25
- end
26
-
27
- it "should convert a Ruby string to a UTF-16 PDF string when outside a content stream" do
28
- s = "I can has a string"
29
- s_utf16 = "\xFE\xFF" + s.unpack("U*").pack("n*")
30
- PDF::Inspector.parse(Prawn::PdfObject(s, false)).should == s_utf16
31
- end
32
-
33
- it "should escape parens when converting from Ruby string to PDF" do
34
- s = 'I )(can has a string'
35
- PDF::Inspector.parse(Prawn::PdfObject(s, true)).should == s
36
- end
37
-
38
- it "should handle ruby escaped parens when converting to PDF string" do
39
- s = 'I can \\)( has string'
40
- PDF::Inspector.parse(Prawn::PdfObject(s, true)).should == s
41
- end
42
-
43
- it "should convert a Ruby symbol to PDF name" do
44
- Prawn::PdfObject(:my_symbol).should == "/my_symbol"
45
- Prawn::PdfObject(:"A;Name_With−Various***Characters?").should ==
46
- "/A;Name_With−Various***Characters?"
47
- end
48
-
49
- it "should not convert a whitespace containing Ruby symbol to a PDF name" do
50
- lambda { Prawn::PdfObject(:"My Symbol With Spaces") }.
51
- should.raise(Prawn::Errors::FailedObjectConversion)
52
- end
53
-
54
- it "should convert a Ruby array to PDF Array when inside a content stream" do
55
- Prawn::PdfObject([1,2,3]).should == "[1 2 3]"
56
- PDF::Inspector.parse(Prawn::PdfObject([[1,2],:foo,"Bar"], true)).should ==
57
- [[1,2],:foo, "Bar"]
58
- end
59
-
60
- it "should convert a Ruby array to PDF Array when outside a content stream" do
61
- bar = "\xFE\xFF" + "Bar".unpack("U*").pack("n*")
62
- Prawn::PdfObject([1,2,3]).should == "[1 2 3]"
63
- PDF::Inspector.parse(Prawn::PdfObject([[1,2],:foo,"Bar"], false)).should ==
64
- [[1,2],:foo, bar]
65
- end
66
-
67
- it "should convert a Ruby hash to a PDF Dictionary when inside a content stream" do
68
- dict = Prawn::PdfObject( {:foo => :bar,
69
- "baz" => [1,2,3],
70
- :bang => {:a => "what", :b => [:you, :say] }}, true )
71
-
72
- res = PDF::Inspector.parse(dict)
73
-
74
- res[:foo].should == :bar
75
- res[:baz].should == [1,2,3]
76
- res[:bang].should == { :a => "what", :b => [:you, :say] }
77
-
78
- end
79
-
80
- it "should convert a Ruby hash to a PDF Dictionary when outside a content stream" do
81
- what = "\xFE\xFF" + "what".unpack("U*").pack("n*")
82
- dict = Prawn::PdfObject( {:foo => :bar,
83
- "baz" => [1,2,3],
84
- :bang => {:a => "what", :b => [:you, :say] }}, false )
85
-
86
- res = PDF::Inspector.parse(dict)
87
-
88
- res[:foo].should == :bar
89
- res[:baz].should == [1,2,3]
90
- res[:bang].should == { :a => what, :b => [:you, :say] }
91
-
92
- end
93
-
94
- it "should not allow keys other than strings or symbols for PDF dicts" do
95
- lambda { Prawn::PdfObject(:foo => :bar, :baz => :bang, 1 => 4) }.
96
- should.raise(Prawn::Errors::FailedObjectConversion)
97
- end
98
-
99
- it "should convert a Prawn::Reference to a PDF indirect object reference" do
100
- ref = Prawn::Reference(1,true)
101
- Prawn::PdfObject(ref).should == ref.to_s
102
- end
103
-
104
- it "should convert a NameTree::Node to a PDF hash" do
105
- node = Prawn::NameTree::Node.new(Prawn::Document.new, 10)
106
- node.add "hello", 1.0
107
- node.add "world", 2.0
108
- data = Prawn::PdfObject(node)
109
- res = PDF::Inspector.parse(data)
110
- res.should == {:Names => ["hello", 1.0, "world", 2.0]}
111
- end
112
- end
data/spec/png_spec.rb DELETED
@@ -1,196 +0,0 @@
1
- # encoding: ASCII-8BIT
2
-
3
- # Spec'ing the PNG class. Not complete yet - still needs to check the
4
- # contents of palette and transparency to ensure they're correct.
5
- # Need to find files that have these sections first.
6
- #
7
- # see http://www.w3.org/TR/PNG/ for a detailed description of the PNG spec,
8
- # particuarly Table 11.1 for the different color types
9
-
10
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
11
-
12
- describe "When reading a greyscale PNG file (color type 0)" do
13
-
14
- before(:each) do
15
- @filename = "#{Prawn::BASEDIR}/data/images/web-links.png"
16
- @data_filename = "#{Prawn::BASEDIR}/data/images/web-links.dat"
17
- @img_data = File.binread(@filename)
18
- end
19
-
20
- it "should read the attributes from the header chunk correctly" do
21
- png = Prawn::Images::PNG.new(@img_data)
22
-
23
- png.width.should == 21
24
- png.height.should == 14
25
- png.bits.should == 8
26
- png.color_type.should == 0
27
- png.compression_method.should == 0
28
- png.filter_method.should == 0
29
- png.interlace_method.should == 0
30
- end
31
-
32
- it "should read the image data chunk correctly" do
33
- png = Prawn::Images::PNG.new(@img_data)
34
- data = File.binread(@data_filename)
35
- png.img_data.should == data
36
- end
37
- end
38
-
39
- describe "When reading a greyscale PNG file with transparency (color type 0)" do
40
-
41
- before(:each) do
42
- @filename = "#{Prawn::BASEDIR}/data/images/ruport_type0.png"
43
- @img_data = File.binread(@filename)
44
- end
45
-
46
- # In a greyscale type 0 PNG image, the tRNS chunk should contain a single value
47
- # that indicates the color that should be interpreted as transparent.
48
- #
49
- # http://www.w3.org/TR/PNG/#11tRNS
50
- it "should read the tRNS chunk correctly" do
51
- png = Prawn::Images::PNG.new(@img_data)
52
- png.transparency[:grayscale].should == 255
53
- end
54
- end
55
-
56
- describe "When reading an RGB PNG file (color type 2)" do
57
-
58
- before(:each) do
59
- @filename = "#{Prawn::BASEDIR}/data/images/ruport.png"
60
- @data_filename = "#{Prawn::BASEDIR}/data/images/ruport_data.dat"
61
- @img_data = File.binread(@filename)
62
- end
63
-
64
- it "should read the attributes from the header chunk correctly" do
65
- png = Prawn::Images::PNG.new(@img_data)
66
-
67
- png.width.should == 258
68
- png.height.should == 105
69
- png.bits.should == 8
70
- png.color_type.should == 2
71
- png.compression_method.should == 0
72
- png.filter_method.should == 0
73
- png.interlace_method.should == 0
74
- end
75
-
76
- it "should read the image data chunk correctly" do
77
- png = Prawn::Images::PNG.new(@img_data)
78
- data = File.binread(@data_filename)
79
- png.img_data.should == data
80
- end
81
- end
82
-
83
- describe "When reading an RGB PNG file with transparency (color type 2)" do
84
-
85
- before(:each) do
86
- @filename = "#{Prawn::BASEDIR}/data/images/arrow2.png"
87
- @img_data = File.binread(@filename)
88
- end
89
-
90
- # In a RGB type 2 PNG image, the tRNS chunk should contain a single RGB value
91
- # that indicates the color that should be interpreted as transparent. In this
92
- # case it's green.
93
- #
94
- # http://www.w3.org/TR/PNG/#11tRNS
95
- it "should read the tRNS chunk correctly" do
96
- png = Prawn::Images::PNG.new(@img_data)
97
- png.transparency[:rgb].should == [0, 255, 0]
98
- end
99
- end
100
-
101
- # TODO: describe "When reading an indexed color PNG file wiih transparency (color type 3)"
102
-
103
- describe "When reading an indexed color PNG file (color type 3)" do
104
-
105
- before(:each) do
106
- @filename = "#{Prawn::BASEDIR}/data/images/rails.png"
107
- @data_filename = "#{Prawn::BASEDIR}/data/images/rails.dat"
108
- @img_data = File.binread(@filename)
109
- end
110
-
111
- it "should read the attributes from the header chunk correctly" do
112
- png = Prawn::Images::PNG.new(@img_data)
113
-
114
- png.width.should == 50
115
- png.height.should == 64
116
- png.bits.should == 8
117
- png.color_type.should == 3
118
- png.compression_method.should == 0
119
- png.filter_method.should == 0
120
- png.interlace_method.should == 0
121
- end
122
-
123
- it "should read the image data chunk correctly" do
124
- png = Prawn::Images::PNG.new(@img_data)
125
- data = File.binread(@data_filename)
126
- png.img_data.should == data
127
- end
128
- end
129
-
130
- describe "When reading a greyscale+alpha PNG file (color type 4)" do
131
-
132
- before(:each) do
133
- @filename = "#{Prawn::BASEDIR}/data/images/page_white_text.png"
134
- @data_filename = "#{Prawn::BASEDIR}/data/images/page_white_text.dat"
135
- @alpha_data_filename = "#{Prawn::BASEDIR}/data/images/page_white_text.alpha"
136
- @img_data = File.binread(@filename)
137
- end
138
-
139
- it "should read the attributes from the header chunk correctly" do
140
- png = Prawn::Images::PNG.new(@img_data)
141
-
142
- png.width.should == 16
143
- png.height.should == 16
144
- png.bits.should == 8
145
- png.color_type.should == 4
146
- png.compression_method.should == 0
147
- png.filter_method.should == 0
148
- png.interlace_method.should == 0
149
- end
150
-
151
- it "should correctly return the raw image data (with no alpha channel) from the image data chunk" do
152
- png = Prawn::Images::PNG.new(@img_data)
153
- data = File.binread(@data_filename)
154
- png.img_data.should == data
155
- end
156
-
157
- it "should correctly extract the alpha channel data from the image data chunk" do
158
- png = Prawn::Images::PNG.new(@img_data)
159
- data = File.binread(@alpha_data_filename)
160
- png.alpha_channel.should == data
161
- end
162
- end
163
-
164
- describe "When reading an RGB+alpha PNG file (color type 6)" do
165
-
166
- before(:each) do
167
- @filename = "#{Prawn::BASEDIR}/data/images/dice.png"
168
- @data_filename = "#{Prawn::BASEDIR}/data/images/dice.dat"
169
- @alpha_data_filename = "#{Prawn::BASEDIR}/data/images/dice.alpha"
170
- @img_data = File.binread(@filename)
171
- end
172
-
173
- it "should read the attributes from the header chunk correctly" do
174
- png = Prawn::Images::PNG.new(@img_data)
175
-
176
- png.width.should == 320
177
- png.height.should == 240
178
- png.bits.should == 8
179
- png.color_type.should == 6
180
- png.compression_method.should == 0
181
- png.filter_method.should == 0
182
- png.interlace_method.should == 0
183
- end
184
-
185
- it "should correctly return the raw image data (with no alpha channel) from the image data chunk" do
186
- png = Prawn::Images::PNG.new(@img_data)
187
- data = File.binread(@data_filename)
188
- png.img_data.should == data
189
- end
190
-
191
- it "should correctly extract the alpha channel data from the image data chunk" do
192
- png = Prawn::Images::PNG.new(@img_data)
193
- data = File.binread(@alpha_data_filename)
194
- png.alpha_channel.should == data
195
- end
196
- end