piglop-prawn 0.10.2.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.
- data/COPYING +340 -0
- data/HACKING +49 -0
- data/LICENSE +56 -0
- data/README +140 -0
- data/Rakefile +52 -0
- data/data/encodings/win_ansi.txt +29 -0
- 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/Courier-Bold.afm +342 -0
- data/data/fonts/Courier-BoldOblique.afm +342 -0
- data/data/fonts/Courier-Oblique.afm +342 -0
- data/data/fonts/Courier.afm +342 -0
- data/data/fonts/DejaVuSans.ttf +0 -0
- data/data/fonts/Dustismo_Roman.ttf +0 -0
- data/data/fonts/Helvetica-Bold.afm +2827 -0
- data/data/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/data/fonts/Helvetica-Oblique.afm +3051 -0
- data/data/fonts/Helvetica.afm +3051 -0
- data/data/fonts/MustRead.html +19 -0
- data/data/fonts/Symbol.afm +213 -0
- data/data/fonts/Times-Bold.afm +2588 -0
- data/data/fonts/Times-BoldItalic.afm +2384 -0
- data/data/fonts/Times-Italic.afm +2667 -0
- data/data/fonts/Times-Roman.afm +2419 -0
- data/data/fonts/ZapfDingbats.afm +225 -0
- data/data/fonts/comicsans.ttf +0 -0
- data/data/fonts/gkai00mp.ttf +0 -0
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/fractal.jpg +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/rails.dat +0 -0
- data/data/images/rails.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +1 -0
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/hexagon.pdf +61 -0
- data/data/pdfs/indirect_reference.pdf +86 -0
- data/data/pdfs/nested_pages.pdf +118 -0
- data/data/pdfs/resources_as_indirect_object.pdf +83 -0
- data/data/pdfs/two_hexagons.pdf +90 -0
- data/data/pdfs/version_1_6.pdf +61 -0
- data/data/shift_jis_text.txt +1 -0
- data/examples/bounding_box/bounding_boxes.rb +43 -0
- data/examples/bounding_box/indentation.rb +34 -0
- data/examples/bounding_box/russian_boxes.rb +36 -0
- data/examples/bounding_box/stretched_nesting.rb +67 -0
- data/examples/example_helper.rb +4 -0
- data/examples/general/background.rb +23 -0
- data/examples/general/canvas.rb +15 -0
- data/examples/general/context_sensitive_headers.rb +37 -0
- data/examples/general/float.rb +11 -0
- data/examples/general/margin.rb +36 -0
- data/examples/general/measurement_units.rb +51 -0
- data/examples/general/metadata-info.rb +16 -0
- data/examples/general/multi_page_layout.rb +18 -0
- data/examples/general/outlines.rb +50 -0
- data/examples/general/page_geometry.rb +31 -0
- data/examples/general/page_numbering.rb +15 -0
- data/examples/general/repeaters.rb +47 -0
- data/examples/general/stamp.rb +41 -0
- data/examples/general/templates.rb +13 -0
- data/examples/graphics/basic_images.rb +23 -0
- data/examples/graphics/cmyk.rb +12 -0
- data/examples/graphics/curves.rb +11 -0
- data/examples/graphics/hexagon.rb +13 -0
- data/examples/graphics/image_fit.rb +15 -0
- data/examples/graphics/image_flow.rb +37 -0
- data/examples/graphics/image_position.rb +17 -0
- data/examples/graphics/line.rb +32 -0
- data/examples/graphics/png_types.rb +22 -0
- data/examples/graphics/polygons.rb +16 -0
- data/examples/graphics/remote_images.rb +12 -0
- data/examples/graphics/rounded_polygons.rb +19 -0
- data/examples/graphics/rounded_rectangle.rb +20 -0
- data/examples/graphics/ruport_style_helpers.rb +19 -0
- data/examples/graphics/stroke_bounds.rb +20 -0
- data/examples/graphics/stroke_cap_and_join.rb +45 -0
- data/examples/graphics/stroke_dash.rb +42 -0
- data/examples/graphics/transformations.rb +52 -0
- data/examples/graphics/transparency.rb +26 -0
- data/examples/m17n/chinese_text_wrapping.rb +17 -0
- data/examples/m17n/euro.rb +15 -0
- data/examples/m17n/sjis.rb +28 -0
- data/examples/m17n/utf8.rb +13 -0
- data/examples/m17n/win_ansi_charset.rb +54 -0
- data/examples/security/hello_foo.rb +8 -0
- data/examples/table/bill.rb +53 -0
- data/examples/table/cell.rb +12 -0
- data/examples/table/checkerboard.rb +22 -0
- data/examples/table/header.rb +14 -0
- data/examples/table/inline_format_table.rb +12 -0
- data/examples/table/multi_page_table.rb +9 -0
- data/examples/table/simple_table.rb +24 -0
- data/examples/table/subtable.rb +12 -0
- data/examples/table/widths.rb +20 -0
- data/examples/text/alignment.rb +18 -0
- data/examples/text/dfont.rb +48 -0
- data/examples/text/family_based_styling.rb +24 -0
- data/examples/text/font_calculations.rb +91 -0
- data/examples/text/font_size.rb +33 -0
- data/examples/text/hyphenation.rb +45 -0
- data/examples/text/indent_paragraphs.rb +18 -0
- data/examples/text/inline_format.rb +72 -0
- data/examples/text/kerning.rb +30 -0
- data/examples/text/rotated.rb +98 -0
- data/examples/text/shaped_text_box.rb +31 -0
- data/examples/text/simple_text.rb +17 -0
- data/examples/text/simple_text_ttf.rb +17 -0
- data/examples/text/text_box.rb +88 -0
- data/examples/text/text_box_returning_excess.rb +51 -0
- data/examples/text/text_flow.rb +67 -0
- data/lib/prawn/compatibility.rb +51 -0
- data/lib/prawn/core/annotations.rb +61 -0
- data/lib/prawn/core/byte_string.rb +9 -0
- data/lib/prawn/core/destinations.rb +90 -0
- data/lib/prawn/core/document_state.rb +84 -0
- data/lib/prawn/core/literal_string.rb +16 -0
- data/lib/prawn/core/name_tree.rb +165 -0
- data/lib/prawn/core/object_store.rb +219 -0
- data/lib/prawn/core/page.rb +179 -0
- data/lib/prawn/core/pdf_object.rb +83 -0
- data/lib/prawn/core/reference.rb +112 -0
- data/lib/prawn/core/text/formatted/arranger.rb +260 -0
- data/lib/prawn/core/text/formatted/line_wrap.rb +127 -0
- data/lib/prawn/core/text/formatted/wrap.rb +113 -0
- data/lib/prawn/core/text/line_wrap.rb +198 -0
- data/lib/prawn/core/text/wrap.rb +80 -0
- data/lib/prawn/core/text.rb +115 -0
- data/lib/prawn/core.rb +89 -0
- data/lib/prawn/document/bounding_box.rb +425 -0
- data/lib/prawn/document/graphics_state.rb +48 -0
- data/lib/prawn/document/internals.rb +176 -0
- data/lib/prawn/document/page_geometry.rb +136 -0
- data/lib/prawn/document/snapshot.rb +87 -0
- data/lib/prawn/document.rb +573 -0
- data/lib/prawn/encoding.rb +121 -0
- data/lib/prawn/errors.rb +94 -0
- data/lib/prawn/font/afm.rb +225 -0
- data/lib/prawn/font/dfont.rb +42 -0
- data/lib/prawn/font/ttf.rb +350 -0
- data/lib/prawn/font.rb +342 -0
- data/lib/prawn/graphics/cap_style.rb +38 -0
- data/lib/prawn/graphics/color.rb +205 -0
- data/lib/prawn/graphics/dash.rb +71 -0
- data/lib/prawn/graphics/join_style.rb +38 -0
- data/lib/prawn/graphics/transformation.rb +156 -0
- data/lib/prawn/graphics/transparency.rb +99 -0
- data/lib/prawn/graphics.rb +321 -0
- data/lib/prawn/images/jpg.rb +46 -0
- data/lib/prawn/images/png.rb +226 -0
- data/lib/prawn/images.rb +348 -0
- data/lib/prawn/measurement_extensions.rb +46 -0
- data/lib/prawn/measurements.rb +71 -0
- data/lib/prawn/outline.rb +278 -0
- data/lib/prawn/repeater.rb +129 -0
- data/lib/prawn/security/arcfour.rb +51 -0
- data/lib/prawn/security.rb +262 -0
- data/lib/prawn/stamp.rb +126 -0
- data/lib/prawn/table/accessors.rb +180 -0
- data/lib/prawn/table/cell/in_table.rb +27 -0
- data/lib/prawn/table/cell/subtable.rb +65 -0
- data/lib/prawn/table/cell/text.rb +128 -0
- data/lib/prawn/table/cell.rb +330 -0
- data/lib/prawn/table.rb +421 -0
- data/lib/prawn/text/box.rb +380 -0
- data/lib/prawn/text/formatted/box.rb +215 -0
- data/lib/prawn/text/formatted/fragment.rb +127 -0
- data/lib/prawn/text/formatted/parser.rb +202 -0
- data/lib/prawn/text/formatted.rb +4 -0
- data/lib/prawn/text.rb +442 -0
- data/lib/prawn.rb +25 -0
- data/spec/annotations_spec.rb +90 -0
- data/spec/bounding_box_spec.rb +190 -0
- data/spec/cell_spec.rb +337 -0
- data/spec/destinations_spec.rb +15 -0
- data/spec/document_spec.rb +461 -0
- data/spec/font_spec.rb +314 -0
- data/spec/formatted_text_arranger_spec.rb +400 -0
- data/spec/formatted_text_box_spec.rb +659 -0
- data/spec/formatted_text_fragment_spec.rb +211 -0
- data/spec/graphics_spec.rb +446 -0
- data/spec/images_spec.rb +96 -0
- data/spec/inline_formatted_text_parser_spec.rb +446 -0
- data/spec/jpg_spec.rb +25 -0
- data/spec/line_wrap_spec.rb +341 -0
- data/spec/measurement_units_spec.rb +23 -0
- data/spec/name_tree_spec.rb +112 -0
- data/spec/object_store_spec.rb +160 -0
- data/spec/outline_spec.rb +229 -0
- data/spec/pdf_object_spec.rb +127 -0
- data/spec/png_spec.rb +237 -0
- data/spec/reference_spec.rb +82 -0
- data/spec/repeater_spec.rb +96 -0
- data/spec/security_spec.rb +120 -0
- data/spec/snapshot_spec.rb +138 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/stamp_spec.rb +108 -0
- data/spec/stroke_styles_spec.rb +163 -0
- data/spec/table_spec.rb +583 -0
- data/spec/template_spec.rb +158 -0
- data/spec/text_at_spec.rb +119 -0
- data/spec/text_box_spec.rb +675 -0
- data/spec/text_spacing_spec.rb +57 -0
- data/spec/text_spec.rb +328 -0
- data/spec/text_with_inline_formatting_spec.rb +193 -0
- data/spec/transparency_spec.rb +75 -0
- data/vendor/pdf-inspector/README +18 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/extgstate.rb +18 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +131 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/page.rb +25 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/text.rb +46 -0
- data/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +19 -0
- data/vendor/pdf-inspector/lib/pdf/inspector.rb +26 -0
- data/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
- data/vendor/ttfunk/example.rb +45 -0
- data/vendor/ttfunk/lib/ttfunk/directory.rb +17 -0
- data/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +88 -0
- data/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +69 -0
- data/vendor/ttfunk/lib/ttfunk/reader.rb +44 -0
- data/vendor/ttfunk/lib/ttfunk/resource_file.rb +78 -0
- data/vendor/ttfunk/lib/ttfunk/subset/base.rb +141 -0
- data/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +50 -0
- data/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +48 -0
- data/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +63 -0
- data/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +55 -0
- data/vendor/ttfunk/lib/ttfunk/subset.rb +18 -0
- data/vendor/ttfunk/lib/ttfunk/subset_collection.rb +72 -0
- data/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +54 -0
- data/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +126 -0
- data/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +79 -0
- data/vendor/ttfunk/lib/ttfunk/table/cmap.rb +34 -0
- data/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +81 -0
- data/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +37 -0
- data/vendor/ttfunk/lib/ttfunk/table/glyf.rb +64 -0
- data/vendor/ttfunk/lib/ttfunk/table/head.rb +44 -0
- data/vendor/ttfunk/lib/ttfunk/table/hhea.rb +41 -0
- data/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +47 -0
- data/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +62 -0
- data/vendor/ttfunk/lib/ttfunk/table/kern.rb +79 -0
- data/vendor/ttfunk/lib/ttfunk/table/loca.rb +43 -0
- data/vendor/ttfunk/lib/ttfunk/table/maxp.rb +40 -0
- data/vendor/ttfunk/lib/ttfunk/table/name.rb +125 -0
- data/vendor/ttfunk/lib/ttfunk/table/os2.rb +78 -0
- data/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +43 -0
- data/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +35 -0
- data/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +23 -0
- data/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +17 -0
- data/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +17 -0
- data/vendor/ttfunk/lib/ttfunk/table/post.rb +91 -0
- data/vendor/ttfunk/lib/ttfunk/table/simple.rb +14 -0
- data/vendor/ttfunk/lib/ttfunk/table.rb +46 -0
- data/vendor/ttfunk/lib/ttfunk.rb +102 -0
- metadata +364 -0
data/spec/font_spec.rb
ADDED
@@ -0,0 +1,314 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
+
require 'iconv'
|
5
|
+
|
6
|
+
describe "Font behavior" do
|
7
|
+
|
8
|
+
it "should default to Helvetica if no font is specified" do
|
9
|
+
@pdf = Prawn::Document.new
|
10
|
+
@pdf.font.name.should == "Helvetica"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#font_size" do
|
16
|
+
it "should allow setting font size in DSL style" do
|
17
|
+
create_pdf
|
18
|
+
@pdf.font_size 20
|
19
|
+
@pdf.font_size.should == 20
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "font style support" do
|
24
|
+
before(:each) { create_pdf }
|
25
|
+
|
26
|
+
it "should complain if there is no @current_page" do
|
27
|
+
pdf_without_page = Prawn::Document.new(:skip_page_creation => true)
|
28
|
+
|
29
|
+
lambda{ pdf_without_page.font "Helvetica" }.
|
30
|
+
should.raise(Prawn::Errors::NotOnPage)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should allow specifying font style by style name and font family" do
|
34
|
+
@pdf.font "Courier", :style => :bold
|
35
|
+
@pdf.text "In Courier bold"
|
36
|
+
|
37
|
+
@pdf.font "Courier", :style => :bold_italic
|
38
|
+
@pdf.text "In Courier bold-italic"
|
39
|
+
|
40
|
+
@pdf.font "Courier", :style => :italic
|
41
|
+
@pdf.text "In Courier italic"
|
42
|
+
|
43
|
+
@pdf.font "Courier", :style => :normal
|
44
|
+
@pdf.text "In Normal Courier"
|
45
|
+
|
46
|
+
@pdf.font "Helvetica"
|
47
|
+
@pdf.text "In Normal Helvetica"
|
48
|
+
|
49
|
+
text = PDF::Inspector::Text.analyze(@pdf.render)
|
50
|
+
text.font_settings.map { |e| e[:name] }.should ==
|
51
|
+
[:"Courier-Bold", :"Courier-BoldOblique", :"Courier-Oblique",
|
52
|
+
:Courier, :Helvetica]
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should allow font familes to be defined in a single dfont" do
|
56
|
+
file = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
|
57
|
+
@pdf.font_families["Action Man"] = {
|
58
|
+
:normal => { :file => file, :font => "ActionMan" },
|
59
|
+
:italic => { :file => file, :font => "ActionMan-Italic" },
|
60
|
+
:bold => { :file => file, :font => "ActionMan-Bold" },
|
61
|
+
:bold_italic => { :file => file, :font => "ActionMan-BoldItalic" }
|
62
|
+
}
|
63
|
+
|
64
|
+
@pdf.font "Action Man", :style => :italic
|
65
|
+
@pdf.text "In ActionMan-Italic"
|
66
|
+
|
67
|
+
text = PDF::Inspector::Text.analyze(@pdf.render)
|
68
|
+
name = text.font_settings.map { |e| e[:name] }.first.to_s
|
69
|
+
name = name.sub(/\w+\+/, "subset+")
|
70
|
+
name.should == "subset+ActionMan-Italic"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "Transactional font handling" do
|
75
|
+
before(:each) { create_pdf }
|
76
|
+
|
77
|
+
it "should allow setting of size directly when font is created" do
|
78
|
+
@pdf.font "Courier", :size => 16
|
79
|
+
@pdf.font_size.should == 16
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should allow temporary setting of a new font using a transaction" do
|
83
|
+
@pdf.font "Helvetica", :size => 12
|
84
|
+
|
85
|
+
@pdf.font "Courier", :size => 16 do
|
86
|
+
@pdf.font.name.should == "Courier"
|
87
|
+
@pdf.font_size.should == 16
|
88
|
+
end
|
89
|
+
|
90
|
+
@pdf.font.name.should == "Helvetica"
|
91
|
+
@pdf.font_size.should == 12
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should mask font size when using a transacation" do
|
95
|
+
@pdf.font "Courier", :size => 16 do
|
96
|
+
@pdf.font_size.should == 16
|
97
|
+
end
|
98
|
+
|
99
|
+
@pdf.font "Times-Roman"
|
100
|
+
@pdf.font "Courier"
|
101
|
+
|
102
|
+
@pdf.font_size.should == 12
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "Document#page_fonts" do
|
108
|
+
before(:each) { create_pdf }
|
109
|
+
|
110
|
+
it "should register fonts properly by page" do
|
111
|
+
@pdf.font "Courier"; @pdf.text("hello")
|
112
|
+
@pdf.font "Helvetica"; @pdf.text("hello")
|
113
|
+
@pdf.font "Times-Roman"; @pdf.text("hello")
|
114
|
+
["Courier","Helvetica","Times-Roman"].each { |f|
|
115
|
+
page_should_include_font(f)
|
116
|
+
}
|
117
|
+
|
118
|
+
@pdf.start_new_page
|
119
|
+
@pdf.font "Helvetica"; @pdf.text("hello")
|
120
|
+
page_should_include_font("Helvetica")
|
121
|
+
page_should_not_include_font("Courier")
|
122
|
+
page_should_not_include_font("Times-Roman")
|
123
|
+
end
|
124
|
+
|
125
|
+
def page_includes_font?(font)
|
126
|
+
@pdf.page.fonts.values.map { |e| e.data[:BaseFont] }.include?(font.to_sym)
|
127
|
+
end
|
128
|
+
|
129
|
+
def page_should_include_font(font)
|
130
|
+
assert_block("Expected page to include font: #{font}") do
|
131
|
+
page_includes_font?(font)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def page_should_not_include_font(font)
|
136
|
+
assert_block("Did not expect page to include font: #{font}") do
|
137
|
+
not page_includes_font?(font)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "AFM fonts" do
|
144
|
+
|
145
|
+
setup do
|
146
|
+
create_pdf
|
147
|
+
@times = @pdf.find_font "Times-Roman"
|
148
|
+
@iconv = ::Iconv.new('Windows-1252', 'utf-8')
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should calculate string width taking into account accented characters" do
|
152
|
+
@times.compute_width_of(@iconv.iconv("é"), :size => 12).should == @times.compute_width_of("e", :size => 12)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should calculate string width taking into account kerning pairs" do
|
156
|
+
@times.compute_width_of(@iconv.iconv("To"), :size => 12).should == 13.332
|
157
|
+
@times.compute_width_of(@iconv.iconv("To"), :size => 12, :kerning => true).should == 12.372
|
158
|
+
@times.compute_width_of(@iconv.iconv("Tö"), :size => 12, :kerning => true).should == 12.372
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should encode text without kerning by default" do
|
162
|
+
@times.encode_text(@iconv.iconv("To")).should == [[0, "To"]]
|
163
|
+
@times.encode_text(@iconv.iconv("Télé")).should == [[0, @iconv.iconv("Télé")]]
|
164
|
+
@times.encode_text(@iconv.iconv("Technology")).should == [[0, "Technology"]]
|
165
|
+
@times.encode_text(@iconv.iconv("Technology...")).should == [[0, "Technology..."]]
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should encode text with kerning if requested" do
|
169
|
+
@times.encode_text(@iconv.iconv("To"), :kerning => true).should == [[0, ["T", 80, "o"]]]
|
170
|
+
@times.encode_text(@iconv.iconv("Télé"), :kerning => true).should == [[0, ["T", 70, @iconv.iconv("élé")]]]
|
171
|
+
@times.encode_text(@iconv.iconv("Technology"), :kerning => true).should == [[0, ["T", 70, "echnology"]]]
|
172
|
+
@times.encode_text(@iconv.iconv("Technology..."), :kerning => true).should == [[0, ["T", 70, "echnology", 65, "..."]]]
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "when normalizing encoding" do
|
176
|
+
|
177
|
+
it "should not modify the original string when normalize_encoding() is used" do
|
178
|
+
original = "Foo"
|
179
|
+
normalized = @times.normalize_encoding(original)
|
180
|
+
assert ! original.equal?(normalized)
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should modify the original string when normalize_encoding!() is used" do
|
184
|
+
original = "Foo"
|
185
|
+
normalized = @times.normalize_encoding!(original)
|
186
|
+
assert original.equal?(normalized)
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should omit /Encoding for symbolic fonts" do
|
192
|
+
zapf = @pdf.find_font "ZapfDingbats"
|
193
|
+
font_dict = zapf.send(:register, nil)
|
194
|
+
font_dict.data[:Encoding].should == nil
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "TTF fonts" do
|
200
|
+
|
201
|
+
setup do
|
202
|
+
create_pdf
|
203
|
+
@activa = @pdf.find_font "#{Prawn::BASEDIR}/data/fonts/Activa.ttf"
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should calculate string width taking into account accented characters" do
|
207
|
+
@activa.compute_width_of("é", :size => 12).should == @activa.compute_width_of("e", :size => 12)
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should calculate string width taking into account kerning pairs" do
|
211
|
+
@activa.compute_width_of("To", :size => 12).should == 15.228
|
212
|
+
@activa.compute_width_of("To", :size => 12, :kerning => true).should == 12.996
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should encode text without kerning by default" do
|
216
|
+
@activa.encode_text("To").should == [[0, "To"]]
|
217
|
+
@activa.encode_text("Télé").should == [[0, "T\216l\216"]]
|
218
|
+
@activa.encode_text("Technology").should == [[0, "Technology"]]
|
219
|
+
@activa.encode_text("Technology...").should == [[0, "Technology..."]]
|
220
|
+
@activa.encode_text("Teχnology...").should == [[0, "Te"], [1, "!"], [0, "nology..."]]
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should encode text with kerning if requested" do
|
224
|
+
@activa.encode_text("To", :kerning => true).should == [[0, ["T", 186.0, "o"]]]
|
225
|
+
@activa.encode_text("To", :kerning => true).should == [[0, ["T", 186.0, "o"]]]
|
226
|
+
@activa.encode_text("Technology", :kerning => true).should == [[0, ["T", 186.0, "echnology"]]]
|
227
|
+
@activa.encode_text("Technology...", :kerning => true).should == [[0, ["T", 186.0, "echnology", 88.0, "..."]]]
|
228
|
+
@activa.encode_text("Teχnology...", :kerning => true).should == [[0, ["T", 186.0, "e"]], [1, "!"], [0, ["nology", 88.0, "..."]]]
|
229
|
+
end
|
230
|
+
|
231
|
+
describe "when normalizing encoding" do
|
232
|
+
|
233
|
+
it "should not modify the original string when normalize_encoding() is used" do
|
234
|
+
original = "Foo"
|
235
|
+
normalized = @activa.normalize_encoding(original)
|
236
|
+
assert ! original.equal?(normalized)
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should modify the original string when normalize_encoding!() is used" do
|
240
|
+
original = "Foo"
|
241
|
+
normalized = @activa.normalize_encoding!(original)
|
242
|
+
assert original.equal?(normalized)
|
243
|
+
end
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
describe "when used with snapshots or transactions" do
|
248
|
+
|
249
|
+
it "should allow TTF fonts to be used alongside document transactions" do
|
250
|
+
lambda {
|
251
|
+
Prawn::Document.new do
|
252
|
+
font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
|
253
|
+
text "Hi there"
|
254
|
+
transaction { text "Nice, thank you" }
|
255
|
+
end
|
256
|
+
}.should.not.raise
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should allow TTF fonts to be used inside transactions" do
|
260
|
+
pdf = Prawn::Document.new do
|
261
|
+
transaction do
|
262
|
+
font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"
|
263
|
+
text "Hi there"
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
text = PDF::Inspector::Text.analyze(pdf.render)
|
268
|
+
name = text.font_settings.map { |e| e[:name] }.first.to_s
|
269
|
+
name = name.sub(/\w+\+/, "subset+")
|
270
|
+
name.should == "subset+DejaVuSans"
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
276
|
+
|
277
|
+
describe "DFont fonts" do
|
278
|
+
setup do
|
279
|
+
create_pdf
|
280
|
+
@file = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should list all named fonts" do
|
284
|
+
list = Prawn::Font::DFont.named_fonts(@file)
|
285
|
+
list.sort.should == %w(ActionMan ActionMan-Italic ActionMan-Bold ActionMan-BoldItalic).sort
|
286
|
+
end
|
287
|
+
|
288
|
+
it "should count the number of fonts in the file" do
|
289
|
+
Prawn::Font::DFont.font_count(@file).should == 4
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should default selected font to the first one if not specified" do
|
293
|
+
font = @pdf.find_font(@file)
|
294
|
+
font.basename.should == "ActionMan"
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should allow font to be selected by index" do
|
298
|
+
font = @pdf.find_font(@file, :font => 2)
|
299
|
+
font.basename.should == "ActionMan-Italic"
|
300
|
+
end
|
301
|
+
|
302
|
+
it "should allow font to be selected by name" do
|
303
|
+
font = @pdf.find_font(@file, :font => "ActionMan-BoldItalic")
|
304
|
+
font.basename.should == "ActionMan-BoldItalic"
|
305
|
+
end
|
306
|
+
|
307
|
+
it "should cache font object based on selected font" do
|
308
|
+
f1 = @pdf.find_font(@file, :font => "ActionMan")
|
309
|
+
f2 = @pdf.find_font(@file, :font => "ActionMan-Bold")
|
310
|
+
assert_not_equal f1.object_id, f2.object_id
|
311
|
+
assert_equal f1.object_id, @pdf.find_font(@file, :font => "ActionMan").object_id
|
312
|
+
assert_equal f2.object_id, @pdf.find_font(@file, :font => "ActionMan-Bold").object_id
|
313
|
+
end
|
314
|
+
end
|