prawn-layout 0.3.2 → 0.7.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/README +1 -0
- data/Rakefile +6 -3
- data/lib/prawn/layout.rb +1 -1
- data/lib/prawn/layout/page.rb +0 -40
- data/lib/prawn/table/cell.rb +15 -13
- metadata +31 -309
- data/examples/page_layout/flowing_text_with_header_and_footer.rb +0 -36
- data/spec/page_layout_spec.rb +0 -41
- data/vendor/prawn-core/COPYING +0 -340
- data/vendor/prawn-core/HACKING +0 -46
- data/vendor/prawn-core/LICENSE +0 -56
- data/vendor/prawn-core/README +0 -142
- data/vendor/prawn-core/Rakefile +0 -75
- data/vendor/prawn-core/bench/afm_text_bench.rb +0 -18
- data/vendor/prawn-core/bench/png_type_6.rb +0 -15
- data/vendor/prawn-core/bench/ttf_text_bench.rb +0 -19
- data/vendor/prawn-core/bugs/canvas_sets_y_to_0.rb +0 -15
- data/vendor/prawn-core/bugs/png_barcode_issue.rb +0 -11
- data/vendor/prawn-core/bugs/resolved/canvas_sets_y_to_0.rb +0 -15
- data/vendor/prawn-core/data/encodings/win_ansi.txt +0 -29
- data/vendor/prawn-core/data/fonts/Action Man.dfont +0 -0
- data/vendor/prawn-core/data/fonts/Activa.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Chalkboard.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Courier-Bold.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier-BoldOblique.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier-Oblique.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier.afm +0 -342
- data/vendor/prawn-core/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Dustismo_Roman.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Helvetica-Bold.afm +0 -2827
- data/vendor/prawn-core/data/fonts/Helvetica-BoldOblique.afm +0 -2827
- data/vendor/prawn-core/data/fonts/Helvetica-Oblique.afm +0 -3051
- data/vendor/prawn-core/data/fonts/Helvetica.afm +0 -3051
- data/vendor/prawn-core/data/fonts/MustRead.html +0 -19
- data/vendor/prawn-core/data/fonts/Symbol.afm +0 -213
- data/vendor/prawn-core/data/fonts/Times-Bold.afm +0 -2588
- data/vendor/prawn-core/data/fonts/Times-BoldItalic.afm +0 -2384
- data/vendor/prawn-core/data/fonts/Times-Italic.afm +0 -2667
- data/vendor/prawn-core/data/fonts/Times-Roman.afm +0 -2419
- data/vendor/prawn-core/data/fonts/ZapfDingbats.afm +0 -225
- data/vendor/prawn-core/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/gkai00mp.ttf +0 -0
- data/vendor/prawn-core/data/images/16bit.alpha +0 -0
- data/vendor/prawn-core/data/images/16bit.dat +0 -0
- data/vendor/prawn-core/data/images/16bit.png +0 -0
- data/vendor/prawn-core/data/images/arrow.png +0 -0
- data/vendor/prawn-core/data/images/arrow2.png +0 -0
- data/vendor/prawn-core/data/images/barcode_issue.png +0 -0
- data/vendor/prawn-core/data/images/dice.alpha +0 -0
- data/vendor/prawn-core/data/images/dice.dat +0 -0
- data/vendor/prawn-core/data/images/dice.png +0 -0
- data/vendor/prawn-core/data/images/dice_interlaced.png +0 -0
- data/vendor/prawn-core/data/images/fractal.jpg +0 -0
- data/vendor/prawn-core/data/images/letterhead.jpg +0 -0
- data/vendor/prawn-core/data/images/page_white_text.alpha +0 -0
- data/vendor/prawn-core/data/images/page_white_text.dat +0 -0
- data/vendor/prawn-core/data/images/page_white_text.png +0 -0
- data/vendor/prawn-core/data/images/pigs.jpg +0 -0
- data/vendor/prawn-core/data/images/rails.dat +0 -0
- data/vendor/prawn-core/data/images/rails.png +0 -0
- data/vendor/prawn-core/data/images/ruport.png +0 -0
- data/vendor/prawn-core/data/images/ruport_data.dat +0 -0
- data/vendor/prawn-core/data/images/ruport_transparent.png +0 -0
- data/vendor/prawn-core/data/images/ruport_type0.png +0 -0
- data/vendor/prawn-core/data/images/stef.jpg +0 -0
- data/vendor/prawn-core/data/images/tru256.bmp +0 -0
- data/vendor/prawn-core/data/images/web-links.dat +0 -1
- data/vendor/prawn-core/data/images/web-links.png +0 -0
- data/vendor/prawn-core/data/shift_jis_text.txt +0 -1
- data/vendor/prawn-core/examples/bounding_box/bounding_boxes.rb +0 -43
- data/vendor/prawn-core/examples/bounding_box/indentation.rb +0 -34
- data/vendor/prawn-core/examples/bounding_box/russian_boxes.rb +0 -36
- data/vendor/prawn-core/examples/bounding_box/stretched_nesting.rb +0 -67
- data/vendor/prawn-core/examples/column_box/column_box_example.rb +0 -43
- data/vendor/prawn-core/examples/example_helper.rb +0 -3
- data/vendor/prawn-core/examples/general/background.rb +0 -23
- data/vendor/prawn-core/examples/general/canvas.rb +0 -15
- data/vendor/prawn-core/examples/general/margin.rb +0 -36
- data/vendor/prawn-core/examples/general/measurement_units.rb +0 -51
- data/vendor/prawn-core/examples/general/metadata-info.rb +0 -16
- data/vendor/prawn-core/examples/general/multi_page_layout.rb +0 -18
- data/vendor/prawn-core/examples/general/page_geometry.rb +0 -31
- data/vendor/prawn-core/examples/general/page_numbering.rb +0 -15
- data/vendor/prawn-core/examples/general/stamp.rb +0 -45
- data/vendor/prawn-core/examples/graphics/basic_images.rb +0 -23
- data/vendor/prawn-core/examples/graphics/cmyk.rb +0 -12
- data/vendor/prawn-core/examples/graphics/curves.rb +0 -11
- data/vendor/prawn-core/examples/graphics/hexagon.rb +0 -13
- data/vendor/prawn-core/examples/graphics/image_fit.rb +0 -15
- data/vendor/prawn-core/examples/graphics/image_flow.rb +0 -37
- data/vendor/prawn-core/examples/graphics/image_position.rb +0 -17
- data/vendor/prawn-core/examples/graphics/line.rb +0 -32
- data/vendor/prawn-core/examples/graphics/png_types.rb +0 -22
- data/vendor/prawn-core/examples/graphics/polygons.rb +0 -16
- data/vendor/prawn-core/examples/graphics/remote_images.rb +0 -12
- data/vendor/prawn-core/examples/graphics/ruport_style_helpers.rb +0 -19
- data/vendor/prawn-core/examples/graphics/stroke_bounds.rb +0 -20
- data/vendor/prawn-core/examples/graphics/stroke_cap_and_join.rb +0 -45
- data/vendor/prawn-core/examples/graphics/stroke_dash.rb +0 -42
- data/vendor/prawn-core/examples/graphics/transparency.rb +0 -26
- data/vendor/prawn-core/examples/m17n/chinese_text_wrapping.rb +0 -19
- data/vendor/prawn-core/examples/m17n/euro.rb +0 -15
- data/vendor/prawn-core/examples/m17n/sjis.rb +0 -28
- data/vendor/prawn-core/examples/m17n/utf8.rb +0 -13
- data/vendor/prawn-core/examples/m17n/win_ansi_charset.rb +0 -54
- data/vendor/prawn-core/examples/text/alignment.rb +0 -18
- data/vendor/prawn-core/examples/text/dfont.rb +0 -48
- data/vendor/prawn-core/examples/text/family_based_styling.rb +0 -24
- data/vendor/prawn-core/examples/text/font_calculations.rb +0 -91
- data/vendor/prawn-core/examples/text/font_size.rb +0 -33
- data/vendor/prawn-core/examples/text/kerning.rb +0 -30
- data/vendor/prawn-core/examples/text/simple_text.rb +0 -17
- data/vendor/prawn-core/examples/text/simple_text_ttf.rb +0 -17
- data/vendor/prawn-core/examples/text/span.rb +0 -29
- data/vendor/prawn-core/examples/text/text_box.rb +0 -25
- data/vendor/prawn-core/examples/text/text_box_returning_excess.rb +0 -51
- data/vendor/prawn-core/examples/text/text_flow.rb +0 -67
- data/vendor/prawn-core/lib/prawn/byte_string.rb +0 -7
- data/vendor/prawn-core/lib/prawn/compatibility.rb +0 -38
- data/vendor/prawn-core/lib/prawn/core.rb +0 -85
- data/vendor/prawn-core/lib/prawn/document.rb +0 -534
- data/vendor/prawn-core/lib/prawn/document/annotations.rb +0 -65
- data/vendor/prawn-core/lib/prawn/document/bounding_box.rb +0 -390
- data/vendor/prawn-core/lib/prawn/document/column_box.rb +0 -102
- data/vendor/prawn-core/lib/prawn/document/destinations.rb +0 -92
- data/vendor/prawn-core/lib/prawn/document/internals.rb +0 -180
- data/vendor/prawn-core/lib/prawn/document/page_geometry.rb +0 -153
- data/vendor/prawn-core/lib/prawn/document/snapshot.rb +0 -71
- data/vendor/prawn-core/lib/prawn/document/span.rb +0 -55
- data/vendor/prawn-core/lib/prawn/document/text.rb +0 -184
- data/vendor/prawn-core/lib/prawn/document/text/box.rb +0 -90
- data/vendor/prawn-core/lib/prawn/document/text/wrapping.rb +0 -62
- data/vendor/prawn-core/lib/prawn/encoding.rb +0 -121
- data/vendor/prawn-core/lib/prawn/errors.rb +0 -61
- data/vendor/prawn-core/lib/prawn/font.rb +0 -297
- data/vendor/prawn-core/lib/prawn/font/afm.rb +0 -202
- data/vendor/prawn-core/lib/prawn/font/dfont.rb +0 -34
- data/vendor/prawn-core/lib/prawn/font/ttf.rb +0 -329
- data/vendor/prawn-core/lib/prawn/graphics.rb +0 -264
- data/vendor/prawn-core/lib/prawn/graphics/cap_style.rb +0 -35
- data/vendor/prawn-core/lib/prawn/graphics/color.rb +0 -141
- data/vendor/prawn-core/lib/prawn/graphics/dash.rb +0 -69
- data/vendor/prawn-core/lib/prawn/graphics/join_style.rb +0 -35
- data/vendor/prawn-core/lib/prawn/graphics/transparency.rb +0 -56
- data/vendor/prawn-core/lib/prawn/images.rb +0 -339
- data/vendor/prawn-core/lib/prawn/images/jpg.rb +0 -46
- data/vendor/prawn-core/lib/prawn/images/png.rb +0 -219
- data/vendor/prawn-core/lib/prawn/literal_string.rb +0 -14
- data/vendor/prawn-core/lib/prawn/measurement_extensions.rb +0 -46
- data/vendor/prawn-core/lib/prawn/measurements.rb +0 -71
- data/vendor/prawn-core/lib/prawn/name_tree.rb +0 -166
- data/vendor/prawn-core/lib/prawn/object_store.rb +0 -63
- data/vendor/prawn-core/lib/prawn/pdf_object.rb +0 -81
- data/vendor/prawn-core/lib/prawn/reference.rb +0 -72
- data/vendor/prawn-core/lib/prawn/stamp.rb +0 -87
- data/vendor/prawn-core/meta/Rakefile +0 -62
- data/vendor/prawn-core/meta/lib/prawn.rb +0 -2
- data/vendor/prawn-core/reference_pdfs/alignment.pdf +0 -229
- data/vendor/prawn-core/reference_pdfs/background.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/basic_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/bounding_boxes.pdf +0 -128
- data/vendor/prawn-core/reference_pdfs/canvas.pdf +0 -78
- data/vendor/prawn-core/reference_pdfs/chinese_flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/cmyk.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/column_box.pdf +0 -3671
- data/vendor/prawn-core/reference_pdfs/curves.pdf +0 -62
- data/vendor/prawn-core/reference_pdfs/dfont.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/euro.pdf +0 -75
- data/vendor/prawn-core/reference_pdfs/family_style.pdf +0 -286
- data/vendor/prawn-core/reference_pdfs/flow.pdf +0 -964
- data/vendor/prawn-core/reference_pdfs/font_calculations.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/font_size.pdf +0 -142
- data/vendor/prawn-core/reference_pdfs/hexagon.pdf +0 -61
- data/vendor/prawn-core/reference_pdfs/image-flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_fit.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_position.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/indentation.pdf +0 -124
- data/vendor/prawn-core/reference_pdfs/kerning.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/landscape_a4.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/landscape_legal.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/landscape_letter.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/lines.pdf +0 -116
- data/vendor/prawn-core/reference_pdfs/margin.pdf +0 -3850
- data/vendor/prawn-core/reference_pdfs/measurement_units.pdf +0 -4667
- data/vendor/prawn-core/reference_pdfs/metadata-info.pdf +0 -88
- data/vendor/prawn-core/reference_pdfs/multi-layout.pdf +0 -209
- data/vendor/prawn-core/reference_pdfs/page_with_numbering.pdf +0 -156
- data/vendor/prawn-core/reference_pdfs/png_types.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/portrait_a4.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/portrait_legal.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/portrait_letter.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/pretty_polygons.pdf +0 -122
- data/vendor/prawn-core/reference_pdfs/remote_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/ruport.pdf +0 -101
- data/vendor/prawn-core/reference_pdfs/russian_boxes.pdf +0 -2780
- data/vendor/prawn-core/reference_pdfs/simple_text.pdf +0 -136
- data/vendor/prawn-core/reference_pdfs/simple_text_ttf.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/sjis.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/span.pdf +0 -1975
- data/vendor/prawn-core/reference_pdfs/stamp.pdf +0 -696
- data/vendor/prawn-core/reference_pdfs/stretched_nesting.pdf +0 -200
- data/vendor/prawn-core/reference_pdfs/stroke_bounds.pdf +0 -135
- data/vendor/prawn-core/reference_pdfs/stroke_cap_and_join.pdf +0 -80
- data/vendor/prawn-core/reference_pdfs/stroke_dash.pdf +0 -457
- data/vendor/prawn-core/reference_pdfs/text_box.pdf +0 -315
- data/vendor/prawn-core/reference_pdfs/text_box_returning_excess.pdf +0 -271
- data/vendor/prawn-core/reference_pdfs/transparency.pdf +0 -347
- data/vendor/prawn-core/reference_pdfs/utf8.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/win-ansi.pdf +0 -6172
- data/vendor/prawn-core/spec/annotations_spec.rb +0 -90
- data/vendor/prawn-core/spec/bounding_box_spec.rb +0 -185
- data/vendor/prawn-core/spec/destinations_spec.rb +0 -15
- data/vendor/prawn-core/spec/document_spec.rb +0 -231
- data/vendor/prawn-core/spec/font_spec.rb +0 -273
- data/vendor/prawn-core/spec/graphics_spec.rb +0 -209
- data/vendor/prawn-core/spec/images_spec.rb +0 -79
- data/vendor/prawn-core/spec/jpg_spec.rb +0 -25
- data/vendor/prawn-core/spec/measurement_units_spec.rb +0 -23
- data/vendor/prawn-core/spec/name_tree_spec.rb +0 -112
- data/vendor/prawn-core/spec/object_store_spec.rb +0 -42
- data/vendor/prawn-core/spec/pdf_object_spec.rb +0 -122
- data/vendor/prawn-core/spec/png_spec.rb +0 -236
- data/vendor/prawn-core/spec/reference_spec.rb +0 -82
- data/vendor/prawn-core/spec/snapshot_spec.rb +0 -115
- data/vendor/prawn-core/spec/span_spec.rb +0 -45
- data/vendor/prawn-core/spec/spec_helper.rb +0 -20
- data/vendor/prawn-core/spec/stamp_spec.rb +0 -98
- data/vendor/prawn-core/spec/stroke_styles_spec.rb +0 -152
- data/vendor/prawn-core/spec/text_box_spec.rb +0 -109
- data/vendor/prawn-core/spec/text_spec.rb +0 -185
- data/vendor/prawn-core/spec/transparency_spec.rb +0 -61
- data/vendor/prawn-core/vendor/pdf-inspector/README +0 -18
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector.rb +0 -26
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/extgstate.rb +0 -18
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +0 -119
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/page.rb +0 -25
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/text.rb +0 -31
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +0 -19
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/example.rb +0 -45
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk.rb +0 -102
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/directory.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +0 -88
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +0 -69
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/reader.rb +0 -44
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/resource_file.rb +0 -78
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset.rb +0 -18
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/base.rb +0 -141
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +0 -46
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +0 -48
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +0 -63
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +0 -51
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset_collection.rb +0 -72
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table.rb +0 -46
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap.rb +0 -34
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +0 -54
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +0 -126
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +0 -79
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf.rb +0 -64
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +0 -81
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +0 -37
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/head.rb +0 -44
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hhea.rb +0 -41
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +0 -47
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern.rb +0 -79
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +0 -62
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/loca.rb +0 -43
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/maxp.rb +0 -40
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/name.rb +0 -119
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/os2.rb +0 -78
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post.rb +0 -91
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +0 -43
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +0 -35
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +0 -23
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/simple.rb +0 -14
- data/vendor/prawn-core/www/index.html +0 -196
- data/vendor/prawn-core/www/media/bounding_boxes.pdf +0 -146
- data/vendor/prawn-core/www/media/bounding_boxes.png +0 -0
- data/vendor/prawn-core/www/media/bounding_boxes_out.png +0 -0
- data/vendor/prawn-core/www/media/fancy_table.pdf +0 -350
- data/vendor/prawn-core/www/media/image.pdf +0 -0
- data/vendor/prawn-core/www/media/images.png +0 -0
- data/vendor/prawn-core/www/media/prawn_logo.png +0 -0
- data/vendor/prawn-core/www/media/tables.png +0 -0
- data/vendor/prawn-core/www/media/utf8.pdf +0 -0
- data/vendor/prawn-core/www/media/utf8.png +0 -0
- data/vendor/prawn-core/www/prawn-Chinese.html +0 -113
- data/vendor/prawn-core/www/prawn.css +0 -86
- data/vendor/prawn-core/www/twilight.css +0 -266
@@ -1,202 +0,0 @@
|
|
1
|
-
require 'prawn/encoding'
|
2
|
-
|
3
|
-
module Prawn
|
4
|
-
class Font
|
5
|
-
class AFM < Font
|
6
|
-
BUILT_INS = %w[ Courier Helvetica Times-Roman Symbol ZapfDingbats
|
7
|
-
Courier-Bold Courier-Oblique Courier-BoldOblique
|
8
|
-
Times-Bold Times-Italic Times-BoldItalic
|
9
|
-
Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique ]
|
10
|
-
|
11
|
-
def self.metrics_path
|
12
|
-
if m = ENV['METRICS']
|
13
|
-
@metrics_path ||= m.split(':')
|
14
|
-
else
|
15
|
-
@metrics_path ||= [
|
16
|
-
".", "/usr/lib/afm",
|
17
|
-
"/usr/local/lib/afm",
|
18
|
-
"/usr/openwin/lib/fonts/afm/",
|
19
|
-
Prawn::BASEDIR+'/data/fonts/']
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
attr_reader :attributes
|
24
|
-
|
25
|
-
def initialize(document, name, options={})
|
26
|
-
unless BUILT_INS.include?(name)
|
27
|
-
raise Prawn::Errors::UnknownFont, "#{name} is not a known font."
|
28
|
-
end
|
29
|
-
|
30
|
-
super
|
31
|
-
|
32
|
-
@attributes = {}
|
33
|
-
@glyph_widths = {}
|
34
|
-
@bounding_boxes = {}
|
35
|
-
@kern_pairs = {}
|
36
|
-
|
37
|
-
file_name = @name.dup
|
38
|
-
file_name << ".afm" unless file_name =~ /\.afm$/
|
39
|
-
file_name = file_name[0] == ?/ ? file_name : find_font(file_name)
|
40
|
-
|
41
|
-
parse_afm(file_name)
|
42
|
-
|
43
|
-
@ascender = @attributes["ascender"].to_i
|
44
|
-
@descender = @attributes["descender"].to_i
|
45
|
-
@line_gap = Float(bbox[3] - bbox[1]) - (@ascender - @descender)
|
46
|
-
end
|
47
|
-
|
48
|
-
def bbox
|
49
|
-
@bbox ||= @attributes['fontbbox'].split(/\s+/).map { |e| Integer(e) }
|
50
|
-
end
|
51
|
-
|
52
|
-
# calculates the width of the supplied string.
|
53
|
-
#
|
54
|
-
# String *must* be encoded as WinAnsi
|
55
|
-
#
|
56
|
-
def compute_width_of(string, options={})
|
57
|
-
scale = (options[:size] || size) / 1000.0
|
58
|
-
|
59
|
-
if options[:kerning]
|
60
|
-
strings, numbers = kern(string).partition { |e| e.is_a?(String) }
|
61
|
-
total_kerning_offset = numbers.inject(0.0) { |s,r| s + r }
|
62
|
-
(unscaled_width_of(strings.join) - total_kerning_offset) * scale
|
63
|
-
else
|
64
|
-
unscaled_width_of(string) * scale
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def has_kerning_data?
|
69
|
-
@kern_pairs.any?
|
70
|
-
end
|
71
|
-
|
72
|
-
# built-in fonts only work with winansi encoding, so translate the
|
73
|
-
# string. Changes the encoding in-place, so the argument itself
|
74
|
-
# is replaced with a string in WinAnsi encoding.
|
75
|
-
def normalize_encoding(text)
|
76
|
-
enc = Prawn::Encoding::WinAnsi.new
|
77
|
-
text.unpack("U*").collect { |i| enc[i] }.pack("C*")
|
78
|
-
end
|
79
|
-
|
80
|
-
# Perform any changes to the string that need to happen
|
81
|
-
# before it is rendered to the canvas. Returns an array of
|
82
|
-
# subset "chunks", where each chunk is an array of two elements.
|
83
|
-
# The first element is the font subset number, and the second
|
84
|
-
# is either a string or an array (for kerned text).
|
85
|
-
#
|
86
|
-
# For Adobe fonts, there is only ever a single subset, so
|
87
|
-
# the first element of the array is "0", and the second is
|
88
|
-
# the string itself (or an array, if kerning is performed).
|
89
|
-
#
|
90
|
-
# The +text+ parameter must be in WinAnsi encoding (cp1252).
|
91
|
-
def encode_text(text, options={})
|
92
|
-
[[0, options[:kerning] ? kern(text) : text]]
|
93
|
-
end
|
94
|
-
|
95
|
-
private
|
96
|
-
|
97
|
-
def register(subset)
|
98
|
-
@document.ref!(:Type => :Font,
|
99
|
-
:Subtype => :Type1,
|
100
|
-
:BaseFont => name.to_sym,
|
101
|
-
:Encoding => :WinAnsiEncoding)
|
102
|
-
end
|
103
|
-
|
104
|
-
def find_font(file)
|
105
|
-
self.class.metrics_path.find { |f| File.exist? "#{f}/#{file}" } + "/#{file}"
|
106
|
-
rescue NoMethodError
|
107
|
-
raise Prawn::Errors::UnknownFont,
|
108
|
-
"Couldn't find the font: #{file} in any of:\n" +
|
109
|
-
self.class.metrics_path.join("\n")
|
110
|
-
end
|
111
|
-
|
112
|
-
def parse_afm(file_name)
|
113
|
-
section = []
|
114
|
-
|
115
|
-
File.foreach(file_name) do |line|
|
116
|
-
case line
|
117
|
-
when /^Start(\w+)/
|
118
|
-
section.push $1
|
119
|
-
next
|
120
|
-
when /^End(\w+)/
|
121
|
-
section.pop
|
122
|
-
next
|
123
|
-
end
|
124
|
-
|
125
|
-
case section
|
126
|
-
when ["FontMetrics", "CharMetrics"]
|
127
|
-
next unless line =~ /^CH?\s/
|
128
|
-
|
129
|
-
name = line[/\bN\s+(\.?\w+)\s*;/, 1]
|
130
|
-
@glyph_widths[name] = line[/\bWX\s+(\d+)\s*;/, 1].to_i
|
131
|
-
@bounding_boxes[name] = line[/\bB\s+([^;]+);/, 1].to_s.rstrip
|
132
|
-
when ["FontMetrics", "KernData", "KernPairs"]
|
133
|
-
next unless line =~ /^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/
|
134
|
-
@kern_pairs[[$1, $2]] = $3.to_i
|
135
|
-
when ["FontMetrics", "KernData", "TrackKern"],
|
136
|
-
["FontMetrics", "Composites"]
|
137
|
-
next
|
138
|
-
else
|
139
|
-
parse_generic_afm_attribute(line)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def parse_generic_afm_attribute(line)
|
145
|
-
line =~ /(^\w+)\s+(.*)/
|
146
|
-
key, value = $1.to_s.downcase, $2
|
147
|
-
|
148
|
-
@attributes[key] = @attributes[key] ?
|
149
|
-
Array(@attributes[key]) << value : value
|
150
|
-
end
|
151
|
-
|
152
|
-
# converts a string into an array with spacing offsets
|
153
|
-
# bewteen characters that need to be kerned
|
154
|
-
#
|
155
|
-
# String *must* be encoded as WinAnsi
|
156
|
-
#
|
157
|
-
def kern(string)
|
158
|
-
kerned = [[]]
|
159
|
-
last_byte = nil
|
160
|
-
|
161
|
-
kern_pairs = latin_kern_pairs_table
|
162
|
-
|
163
|
-
string.unpack("C*").each do |byte|
|
164
|
-
if k = last_byte && kern_pairs[[last_byte, byte]]
|
165
|
-
kerned << -k << [byte]
|
166
|
-
else
|
167
|
-
kerned.last << byte
|
168
|
-
end
|
169
|
-
last_byte = byte
|
170
|
-
end
|
171
|
-
|
172
|
-
kerned.map { |e|
|
173
|
-
e = (Array === e ? e.pack("C*") : e)
|
174
|
-
e.respond_to?(:force_encoding) ? e.force_encoding("Windows-1252") : e
|
175
|
-
}
|
176
|
-
end
|
177
|
-
|
178
|
-
def latin_kern_pairs_table
|
179
|
-
@kern_pairs_table ||= @kern_pairs.inject({}) do |h,p|
|
180
|
-
h[p[0].map { |n| Encoding::WinAnsi::CHARACTERS.index(n) }] = p[1]
|
181
|
-
h
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
def latin_glyphs_table
|
186
|
-
@glyphs_table ||= (0..255).map do |i|
|
187
|
-
@glyph_widths[Encoding::WinAnsi::CHARACTERS[i]].to_i
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
private
|
192
|
-
|
193
|
-
def unscaled_width_of(string)
|
194
|
-
glyph_table = latin_glyphs_table
|
195
|
-
|
196
|
-
string.unpack("C*").inject(0) do |s,r|
|
197
|
-
s + glyph_table[r]
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'prawn/font/ttf'
|
2
|
-
|
3
|
-
module Prawn
|
4
|
-
class Font
|
5
|
-
class DFont < TTF
|
6
|
-
|
7
|
-
# Returns a list of the names of all named fonts in the given dfont file.
|
8
|
-
# Note that fonts are not required to be named in a dfont file, so the
|
9
|
-
# list may be empty even if the file does contain fonts. Also, note that
|
10
|
-
# the list is returned in no particular order, so the first font in the
|
11
|
-
# list is not necessarily the font at index 0 in the file.
|
12
|
-
#
|
13
|
-
def self.named_fonts(file)
|
14
|
-
TTFunk::ResourceFile.open(file) do |file|
|
15
|
-
return file.resources_for("sfnt")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Returns the number of fonts contained in the dfont file.
|
20
|
-
#
|
21
|
-
def self.font_count(file)
|
22
|
-
TTFunk::ResourceFile.open(file) do |file|
|
23
|
-
return file.map["sfnt"][:list].length
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def read_ttf_file
|
30
|
-
TTFunk::File.from_dfont(@name, @options[:font] || 0)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,329 +0,0 @@
|
|
1
|
-
require 'ttfunk'
|
2
|
-
require 'ttfunk/subset_collection'
|
3
|
-
|
4
|
-
module Prawn
|
5
|
-
class Font
|
6
|
-
class TTF < Font
|
7
|
-
attr_reader :ttf, :subsets
|
8
|
-
|
9
|
-
def initialize(document, name, options={})
|
10
|
-
super
|
11
|
-
|
12
|
-
@ttf = read_ttf_file
|
13
|
-
@subsets = TTFunk::SubsetCollection.new(@ttf)
|
14
|
-
|
15
|
-
@attributes = {}
|
16
|
-
@bounding_boxes = {}
|
17
|
-
@char_widths = {}
|
18
|
-
@has_kerning_data = @ttf.kerning.exists? && @ttf.kerning.tables.any?
|
19
|
-
|
20
|
-
@ascender = Integer(@ttf.ascent * scale_factor)
|
21
|
-
@descender = Integer(@ttf.descent * scale_factor)
|
22
|
-
@line_gap = Integer(@ttf.line_gap * scale_factor)
|
23
|
-
end
|
24
|
-
|
25
|
-
# +string+ must be UTF8-encoded.
|
26
|
-
#
|
27
|
-
def compute_width_of(string, options={})
|
28
|
-
scale = (options[:size] || size) / 1000.0
|
29
|
-
if options[:kerning]
|
30
|
-
kern(string).inject(0) do |s,r|
|
31
|
-
if r.is_a?(Numeric)
|
32
|
-
s - r
|
33
|
-
else
|
34
|
-
r.inject(s) { |s2, u| s2 + character_width_by_code(u) }
|
35
|
-
end
|
36
|
-
end * scale
|
37
|
-
else
|
38
|
-
string.unpack("U*").inject(0) do |s,r|
|
39
|
-
s + character_width_by_code(r)
|
40
|
-
end * scale
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def bbox
|
45
|
-
@bbox ||= @ttf.bbox.map { |i| Integer(i * scale_factor) }
|
46
|
-
end
|
47
|
-
|
48
|
-
def has_kerning_data?
|
49
|
-
@has_kerning_data
|
50
|
-
end
|
51
|
-
|
52
|
-
# Perform any changes to the string that need to happen
|
53
|
-
# before it is rendered to the canvas. Returns an array of
|
54
|
-
# subset "chunks", where the even-numbered indices are the
|
55
|
-
# font subset number, and the following entry element is
|
56
|
-
# either a string or an array (for kerned text).
|
57
|
-
#
|
58
|
-
# The +text+ parameter must be UTF8-encoded.
|
59
|
-
#
|
60
|
-
def encode_text(text,options={})
|
61
|
-
text = text.chomp
|
62
|
-
|
63
|
-
if options[:kerning]
|
64
|
-
last_subset = nil
|
65
|
-
kern(text).inject([]) do |result, element|
|
66
|
-
if element.is_a?(Numeric)
|
67
|
-
result.last[1] = [result.last[1]] unless result.last[1].is_a?(Array)
|
68
|
-
result.last[1] << element
|
69
|
-
result
|
70
|
-
else
|
71
|
-
encoded = @subsets.encode(element)
|
72
|
-
|
73
|
-
if encoded.first[0] == last_subset
|
74
|
-
result.last[1] << encoded.first[1]
|
75
|
-
encoded.shift
|
76
|
-
end
|
77
|
-
|
78
|
-
if encoded.any?
|
79
|
-
last_subset = encoded.last[0]
|
80
|
-
result + encoded
|
81
|
-
else
|
82
|
-
result
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
else
|
87
|
-
@subsets.encode(text.unpack("U*"))
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def basename
|
92
|
-
@basename ||= @ttf.name.postscript_name
|
93
|
-
end
|
94
|
-
|
95
|
-
# not sure how to compute this for true-type fonts...
|
96
|
-
def stemV
|
97
|
-
0
|
98
|
-
end
|
99
|
-
|
100
|
-
def italic_angle
|
101
|
-
@italic_angle ||= if @ttf.postscript.exists?
|
102
|
-
raw = @ttf.postscript.italic_angle
|
103
|
-
hi, low = raw >> 16, raw & 0xFF
|
104
|
-
hi = -((hi ^ 0xFFFF) + 1) if hi & 0x8000 != 0
|
105
|
-
"#{hi}.#{low}".to_f
|
106
|
-
else
|
107
|
-
0
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def cap_height
|
112
|
-
@cap_height ||= begin
|
113
|
-
height = @ttf.os2.exists? && @ttf.os2.cap_height || 0
|
114
|
-
height == 0 ? ascender : height
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def x_height
|
119
|
-
# FIXME: seems like if os2 table doesn't exist, we could
|
120
|
-
# just find the height of the lower-case 'x' glyph?
|
121
|
-
@ttf.os2.exists? && @ttf.os2.x_height || 0
|
122
|
-
end
|
123
|
-
|
124
|
-
def family_class
|
125
|
-
@family_class ||= (@ttf.os2.exists? && @ttf.os2.family_class || 0) >> 8
|
126
|
-
end
|
127
|
-
|
128
|
-
def serif?
|
129
|
-
@serif ||= [1,2,3,4,5,7].include?(family_class)
|
130
|
-
end
|
131
|
-
|
132
|
-
def script?
|
133
|
-
@script ||= family_class == 10
|
134
|
-
end
|
135
|
-
|
136
|
-
def pdf_flags
|
137
|
-
@flags ||= begin
|
138
|
-
flags = 0
|
139
|
-
flags |= 0x0001 if @ttf.postscript.fixed_pitch?
|
140
|
-
flags |= 0x0002 if serif?
|
141
|
-
flags |= 0x0008 if script?
|
142
|
-
flags |= 0x0040 if italic_angle != 0
|
143
|
-
flags |= 0x0004 # assume the font contains at least some non-latin characters
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def normalize_encoding(text)
|
148
|
-
if text.respond_to?(:encode)
|
149
|
-
# if we're running under a M17n aware VM, ensure the string provided is
|
150
|
-
# UTF-8 (by converting it if necessary)
|
151
|
-
begin
|
152
|
-
text.encode("UTF-8")
|
153
|
-
rescue
|
154
|
-
raise Prawn::Errors::IncompatibleStringEncoding, "Encoding " +
|
155
|
-
"#{text.encoding} can not be transparently converted to UTF-8. " +
|
156
|
-
"Please ensure the encoding of the string you are attempting " +
|
157
|
-
"to use is set correctly"
|
158
|
-
end
|
159
|
-
else
|
160
|
-
# on a non M17N aware VM, use unpack as a hackish way to verify the
|
161
|
-
# string is valid utf-8. I thought it was better than loading iconv
|
162
|
-
# though.
|
163
|
-
begin
|
164
|
-
text.unpack("U*")
|
165
|
-
return text.dup
|
166
|
-
rescue
|
167
|
-
raise Prawn::Errors::IncompatibleStringEncoding, "The string you " +
|
168
|
-
"are attempting to render is not encoded in valid UTF-8."
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
private
|
174
|
-
|
175
|
-
def cmap
|
176
|
-
@cmap ||= @ttf.cmap.unicode.first or raise("no unicode cmap for font")
|
177
|
-
end
|
178
|
-
|
179
|
-
# +string+ must be UTF8-encoded.
|
180
|
-
#
|
181
|
-
# Returns an array. If an element is a numeric, it represents the
|
182
|
-
# kern amount to inject at that position. Otherwise, the element
|
183
|
-
# is an array of UTF-16 characters.
|
184
|
-
def kern(string)
|
185
|
-
a = []
|
186
|
-
|
187
|
-
string.unpack("U*").each do |r|
|
188
|
-
if a.empty?
|
189
|
-
a << [r]
|
190
|
-
elsif (kern = kern_pairs_table[[cmap[a.last.last], cmap[r]]])
|
191
|
-
kern *= scale_factor
|
192
|
-
a << -kern << [r]
|
193
|
-
else
|
194
|
-
a.last << r
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
a
|
199
|
-
end
|
200
|
-
|
201
|
-
def kern_pairs_table
|
202
|
-
@kerning_data ||= has_kerning_data? ? @ttf.kerning.tables.first.pairs : {}
|
203
|
-
end
|
204
|
-
|
205
|
-
def cid_to_gid_map
|
206
|
-
max = cmap.code_map.keys.max
|
207
|
-
(0..max).map { |cid| cmap[cid] }.pack("n*")
|
208
|
-
end
|
209
|
-
|
210
|
-
def hmtx
|
211
|
-
@hmtx ||= @ttf.horizontal_metrics
|
212
|
-
end
|
213
|
-
|
214
|
-
def character_width_by_code(code)
|
215
|
-
return 0 unless cmap[code]
|
216
|
-
@char_widths[code] ||= Integer(hmtx.widths[cmap[code]] * scale_factor)
|
217
|
-
end
|
218
|
-
|
219
|
-
def scale_factor
|
220
|
-
@scale ||= 1000.0 / @ttf.header.units_per_em
|
221
|
-
end
|
222
|
-
|
223
|
-
def register(subset)
|
224
|
-
temp_name = @ttf.name.postscript_name.gsub("\0","").to_sym
|
225
|
-
@document.ref!(:Type => :Font, :BaseFont => temp_name) { |ref| embed(ref, subset) }
|
226
|
-
end
|
227
|
-
|
228
|
-
def embed(reference, subset)
|
229
|
-
font_content = @subsets[subset].encode
|
230
|
-
|
231
|
-
# FIXME: we need postscript_name and glyph widths from the font
|
232
|
-
# subset. Perhaps this could be done by querying the subset,
|
233
|
-
# rather than by parsing the font that the subset produces?
|
234
|
-
font = TTFunk::File.new(font_content)
|
235
|
-
|
236
|
-
# empirically, it looks like Adobe Reader will not display fonts
|
237
|
-
# if their font name is more than 33 bytes long. Strange. But true.
|
238
|
-
basename = font.name.postscript_name[0, 33].gsub("\0","")
|
239
|
-
|
240
|
-
raise "Can't detect a postscript name for #{file}" if basename.nil?
|
241
|
-
|
242
|
-
compressed_font = Zlib::Deflate.deflate(font_content)
|
243
|
-
|
244
|
-
fontfile = @document.ref!(:Length => compressed_font.size,
|
245
|
-
:Length1 => font_content.size,
|
246
|
-
:Filter => :FlateDecode )
|
247
|
-
fontfile << compressed_font
|
248
|
-
|
249
|
-
descriptor = @document.ref!(:Type => :FontDescriptor,
|
250
|
-
:FontName => basename.to_sym,
|
251
|
-
:FontFile2 => fontfile,
|
252
|
-
:FontBBox => bbox,
|
253
|
-
:Flags => pdf_flags,
|
254
|
-
:StemV => stemV,
|
255
|
-
:ItalicAngle => italic_angle,
|
256
|
-
:Ascent => ascender,
|
257
|
-
:Descent => descender,
|
258
|
-
:CapHeight => cap_height,
|
259
|
-
:XHeight => x_height)
|
260
|
-
|
261
|
-
hmtx = font.horizontal_metrics
|
262
|
-
widths = font.cmap.tables.first.code_map.map { |gid|
|
263
|
-
Integer(hmtx.widths[gid] * scale_factor) }[32..-1]
|
264
|
-
|
265
|
-
# It would be nice to have Encoding set for the macroman subsets,
|
266
|
-
# and only do a ToUnicode cmap for non-encoded unicode subsets.
|
267
|
-
# However, apparently Adobe Reader won't render MacRoman encoded
|
268
|
-
# subsets if original font contains unicode characters. (It has to
|
269
|
-
# be some flag or something that ttfunk is simply copying over...
|
270
|
-
# but I can't figure out which flag that is.)
|
271
|
-
#
|
272
|
-
# For now, it's simplest to just create a unicode cmap for every font.
|
273
|
-
# It offends my inner purist, but it'll do.
|
274
|
-
|
275
|
-
map = @subsets[subset].to_unicode_map
|
276
|
-
|
277
|
-
ranges = [[]]
|
278
|
-
lines = map.keys.sort.inject("") do |s, code|
|
279
|
-
ranges << [] if ranges.last.length >= 100
|
280
|
-
unicode = map[code]
|
281
|
-
ranges.last << "<%02x><%04x>" % [code, unicode]
|
282
|
-
end
|
283
|
-
|
284
|
-
range_blocks = ranges.inject("") do |s, list|
|
285
|
-
s << "%d beginbfchar\n%s\nendbfchar\n" % [list.length, list.join("\n")]
|
286
|
-
end
|
287
|
-
|
288
|
-
to_unicode_cmap = UNICODE_CMAP_TEMPLATE % range_blocks.strip
|
289
|
-
|
290
|
-
cmap = @document.ref!({})
|
291
|
-
cmap << to_unicode_cmap
|
292
|
-
cmap.compress_stream
|
293
|
-
|
294
|
-
reference.data.update(:Subtype => :TrueType,
|
295
|
-
:BaseFont => basename.to_sym,
|
296
|
-
:FontDescriptor => descriptor,
|
297
|
-
:FirstChar => 32,
|
298
|
-
:LastChar => 255,
|
299
|
-
:Widths => @document.ref!(widths),
|
300
|
-
:ToUnicode => cmap)
|
301
|
-
end
|
302
|
-
|
303
|
-
UNICODE_CMAP_TEMPLATE = <<-STR.strip.gsub(/^\s*/, "")
|
304
|
-
/CIDInit /ProcSet findresource begin
|
305
|
-
12 dict begin
|
306
|
-
begincmap
|
307
|
-
/CIDSystemInfo <<
|
308
|
-
/Registry (Adobe)
|
309
|
-
/Ordering (UCS)
|
310
|
-
/Supplement 0
|
311
|
-
>> def
|
312
|
-
/CMapName /Adobe-Identity-UCS def
|
313
|
-
/CMapType 2 def
|
314
|
-
1 begincodespacerange
|
315
|
-
<00><ff>
|
316
|
-
endcodespacerange
|
317
|
-
%s
|
318
|
-
endcmap
|
319
|
-
CMapName currentdict /CMap defineresource pop
|
320
|
-
end
|
321
|
-
end
|
322
|
-
STR
|
323
|
-
|
324
|
-
def read_ttf_file
|
325
|
-
TTFunk::File.open(@name)
|
326
|
-
end
|
327
|
-
end
|
328
|
-
end
|
329
|
-
end
|