prawnx 0.1.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 (160) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +2 -0
  3. data/GPLv2 +339 -0
  4. data/GPLv3 +674 -0
  5. data/LICENSE +65 -0
  6. data/LICENSE-prawn-svg +21 -0
  7. data/README.md +107 -0
  8. data/data/fonts/Courier-Bold.afm +342 -0
  9. data/data/fonts/Courier-BoldOblique.afm +342 -0
  10. data/data/fonts/Courier-Oblique.afm +342 -0
  11. data/data/fonts/Courier.afm +342 -0
  12. data/data/fonts/Helvetica-Bold.afm +2827 -0
  13. data/data/fonts/Helvetica-BoldOblique.afm +2827 -0
  14. data/data/fonts/Helvetica-Oblique.afm +3051 -0
  15. data/data/fonts/Helvetica.afm +3051 -0
  16. data/data/fonts/MustRead.html +19 -0
  17. data/data/fonts/Symbol.afm +213 -0
  18. data/data/fonts/Times-Bold.afm +2588 -0
  19. data/data/fonts/Times-BoldItalic.afm +2384 -0
  20. data/data/fonts/Times-Italic.afm +2667 -0
  21. data/data/fonts/Times-Roman.afm +2419 -0
  22. data/data/fonts/ZapfDingbats.afm +225 -0
  23. data/lib/pdf/core.rb +4 -0
  24. data/lib/prawn/measurement_extensions.rb +4 -0
  25. data/lib/prawn/svg/attributes/clip_path.rb +46 -0
  26. data/lib/prawn/svg/attributes/mask.rb +16 -0
  27. data/lib/prawn/svg/attributes/opacity.rb +30 -0
  28. data/lib/prawn/svg/attributes/space.rb +10 -0
  29. data/lib/prawn/svg/attributes/stroke.rb +50 -0
  30. data/lib/prawn/svg/attributes/transform.rb +10 -0
  31. data/lib/prawn/svg/attributes.rb +6 -0
  32. data/lib/prawn/svg/calculators/arc_to_bezier_curve.rb +57 -0
  33. data/lib/prawn/svg/calculators/aspect_ratio.rb +60 -0
  34. data/lib/prawn/svg/calculators/document_sizing.rb +103 -0
  35. data/lib/prawn/svg/calculators/path_length.rb +168 -0
  36. data/lib/prawn/svg/calculators/pixels.rb +57 -0
  37. data/lib/prawn/svg/color.rb +240 -0
  38. data/lib/prawn/svg/css/font_face_parser.rb +72 -0
  39. data/lib/prawn/svg/css/font_family_parser.rb +39 -0
  40. data/lib/prawn/svg/css/font_parser.rb +46 -0
  41. data/lib/prawn/svg/css/selector_parser.rb +178 -0
  42. data/lib/prawn/svg/css/stylesheets.rb +233 -0
  43. data/lib/prawn/svg/css/values_parser.rb +68 -0
  44. data/lib/prawn/svg/document.rb +170 -0
  45. data/lib/prawn/svg/elements/anchor.rb +10 -0
  46. data/lib/prawn/svg/elements/base.rb +312 -0
  47. data/lib/prawn/svg/elements/bbox_scaling.rb +78 -0
  48. data/lib/prawn/svg/elements/call_duplicator.rb +37 -0
  49. data/lib/prawn/svg/elements/circle.rb +25 -0
  50. data/lib/prawn/svg/elements/clip_path.rb +26 -0
  51. data/lib/prawn/svg/elements/container.rb +10 -0
  52. data/lib/prawn/svg/elements/direct_render_base.rb +27 -0
  53. data/lib/prawn/svg/elements/ellipse.rb +22 -0
  54. data/lib/prawn/svg/elements/gradient.rb +184 -0
  55. data/lib/prawn/svg/elements/ignored.rb +5 -0
  56. data/lib/prawn/svg/elements/image.rb +177 -0
  57. data/lib/prawn/svg/elements/line.rb +27 -0
  58. data/lib/prawn/svg/elements/marker.rb +72 -0
  59. data/lib/prawn/svg/elements/mask.rb +65 -0
  60. data/lib/prawn/svg/elements/path.rb +294 -0
  61. data/lib/prawn/svg/elements/pattern.rb +150 -0
  62. data/lib/prawn/svg/elements/polygon.rb +25 -0
  63. data/lib/prawn/svg/elements/polyline.rb +23 -0
  64. data/lib/prawn/svg/elements/rect.rb +64 -0
  65. data/lib/prawn/svg/elements/root.rb +22 -0
  66. data/lib/prawn/svg/elements/switch.rb +92 -0
  67. data/lib/prawn/svg/elements/text.rb +99 -0
  68. data/lib/prawn/svg/elements/text_component.rb +346 -0
  69. data/lib/prawn/svg/elements/text_node.rb +308 -0
  70. data/lib/prawn/svg/elements/text_path.rb +153 -0
  71. data/lib/prawn/svg/elements/use.rb +142 -0
  72. data/lib/prawn/svg/elements/viewport.rb +29 -0
  73. data/lib/prawn/svg/elements.rb +46 -0
  74. data/lib/prawn/svg/extension.rb +25 -0
  75. data/lib/prawn/svg/font.rb +20 -0
  76. data/lib/prawn/svg/font_metrics.rb +144 -0
  77. data/lib/prawn/svg/font_registry.rb +315 -0
  78. data/lib/prawn/svg/funciri.rb +14 -0
  79. data/lib/prawn/svg/gradient_renderer.rb +332 -0
  80. data/lib/prawn/svg/gradients.rb +53 -0
  81. data/lib/prawn/svg/interface.rb +72 -0
  82. data/lib/prawn/svg/length.rb +43 -0
  83. data/lib/prawn/svg/link_renderer.rb +40 -0
  84. data/lib/prawn/svg/loaders/data.rb +17 -0
  85. data/lib/prawn/svg/loaders/file.rb +111 -0
  86. data/lib/prawn/svg/loaders/web.rb +24 -0
  87. data/lib/prawn/svg/paint.rb +67 -0
  88. data/lib/prawn/svg/pathable.rb +153 -0
  89. data/lib/prawn/svg/pattern_renderer.rb +112 -0
  90. data/lib/prawn/svg/pdfmatrix.rb +37 -0
  91. data/lib/prawn/svg/percentage.rb +24 -0
  92. data/lib/prawn/svg/properties.rb +329 -0
  93. data/lib/prawn/svg/renderer.rb +249 -0
  94. data/lib/prawn/svg/state.rb +24 -0
  95. data/lib/prawn/svg/transform_parser.rb +78 -0
  96. data/lib/prawn/svg/ttc.rb +35 -0
  97. data/lib/prawn/svg/ttf.rb +95 -0
  98. data/lib/prawn/svg/url_loader.rb +46 -0
  99. data/lib/prawn/svg/version.rb +5 -0
  100. data/lib/prawn/table.rb +4 -0
  101. data/lib/prawn-svg.rb +53 -0
  102. data/lib/prawn.rb +10 -0
  103. data/lib/prawnx/annotations.rb +21 -0
  104. data/lib/prawnx/document/bounding_box.rb +193 -0
  105. data/lib/prawnx/document/column_box.rb +91 -0
  106. data/lib/prawnx/document/internals.rb +144 -0
  107. data/lib/prawnx/document/span.rb +25 -0
  108. data/lib/prawnx/document.rb +253 -0
  109. data/lib/prawnx/encoding.rb +29 -0
  110. data/lib/prawnx/errors.rb +37 -0
  111. data/lib/prawnx/font.rb +214 -0
  112. data/lib/prawnx/fonts/afm.rb +171 -0
  113. data/lib/prawnx/fonts/otf.rb +50 -0
  114. data/lib/prawnx/fonts/ttf.rb +410 -0
  115. data/lib/prawnx/graphic_state.rb +41 -0
  116. data/lib/prawnx/graphics/color.rb +148 -0
  117. data/lib/prawnx/graphics/patterns.rb +100 -0
  118. data/lib/prawnx/graphics/style.rb +171 -0
  119. data/lib/prawnx/graphics.rb +208 -0
  120. data/lib/prawnx/grid.rb +216 -0
  121. data/lib/prawnx/images/image.rb +244 -0
  122. data/lib/prawnx/images/png_decoder.rb +65 -0
  123. data/lib/prawnx/images.rb +115 -0
  124. data/lib/prawnx/measurement_extensions.rb +40 -0
  125. data/lib/prawnx/measurements.rb +62 -0
  126. data/lib/prawnx/outline.rb +146 -0
  127. data/lib/prawnx/page.rb +125 -0
  128. data/lib/prawnx/page_geometry.rb +27 -0
  129. data/lib/prawnx/pdf/outline_node.rb +53 -0
  130. data/lib/prawnx/pdf/reference.rb +31 -0
  131. data/lib/prawnx/pdf/writer.rb +105 -0
  132. data/lib/prawnx/pdf.rb +66 -0
  133. data/lib/prawnx/pdf_a/srgb_profile.rb +61 -0
  134. data/lib/prawnx/pdf_a.rb +130 -0
  135. data/lib/prawnx/pdf_core.rb +25 -0
  136. data/lib/prawnx/repeater.rb +79 -0
  137. data/lib/prawnx/security.rb +108 -0
  138. data/lib/prawnx/stamp.rb +74 -0
  139. data/lib/prawnx/table/cell/kinds.rb +246 -0
  140. data/lib/prawnx/table/cell.rb +331 -0
  141. data/lib/prawnx/table/cells.rb +208 -0
  142. data/lib/prawnx/table.rb +296 -0
  143. data/lib/prawnx/text/box.rb +16 -0
  144. data/lib/prawnx/text/formatted/arranger.rb +217 -0
  145. data/lib/prawnx/text/formatted/box.rb +312 -0
  146. data/lib/prawnx/text/formatted/fragment.rb +205 -0
  147. data/lib/prawnx/text/formatted/line_wrap.rb +204 -0
  148. data/lib/prawnx/text/formatted/parser.rb +149 -0
  149. data/lib/prawnx/text/formatted/wrap.rb +103 -0
  150. data/lib/prawnx/text.rb +281 -0
  151. data/lib/prawnx/transformation_stack.rb +43 -0
  152. data/lib/prawnx/true_type/cff_subset.rb +157 -0
  153. data/lib/prawnx/true_type/file.rb +371 -0
  154. data/lib/prawnx/true_type/open_type_layout.rb +189 -0
  155. data/lib/prawnx/true_type/simple_subsets.rb +94 -0
  156. data/lib/prawnx/true_type/subset.rb +187 -0
  157. data/lib/prawnx/version.rb +7 -0
  158. data/lib/prawnx/view.rb +28 -0
  159. data/lib/prawnx.rb +102 -0
  160. metadata +251 -0
@@ -0,0 +1,187 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrawnX
4
+ module TrueType
5
+ # A new TrueType font holding only the glyphs a document uses, numbered in the order it first used them
6
+ # (glyph 0, .notdef, stays first). Composite glyphs bring their components along.
7
+ class Subset
8
+ # Tables ISO 32000-1 §9.9 requires in an embedded TrueType font, plus OS/2 and post for strict readers, and
9
+ # gasp, which tells rasterizers like Poppler at which sizes to hint and smooth glyphs.
10
+ COPIED_TABLES = %w[cvt\ fpgm prep OS/2 gasp].freeze
11
+ # Composite glyph flags (OpenType 'glyf' table).
12
+ ARGUMENTS_ARE_WORDS = 0x0001
13
+ HAS_SCALE = 0x0008
14
+ MORE_COMPONENTS = 0x0020
15
+ HAS_X_AND_Y_SCALE = 0x0040
16
+ HAS_TWO_BY_TWO = 0x0080
17
+ CHECKSUM_MAGIC = 0xB1B0AFBA
18
+
19
+ def initialize(file)
20
+ @file = file
21
+ @new_glyph_by_original = {0 => 0}
22
+ end
23
+
24
+ def glyph_for(original_glyph)
25
+ @new_glyph_by_original[original_glyph] ||= @new_glyph_by_original.size
26
+ end
27
+
28
+ def original_glyphs
29
+ @new_glyph_by_original.keys
30
+ end
31
+
32
+ # Numbers the components of composite glyphs, level by level, in the order of their composites' indices.
33
+ def add_components(originals)
34
+ level = originals
35
+ loop do
36
+ components = level.flat_map { component_glyphs(@file.glyph_data(it)) }
37
+ break if components.empty?
38
+
39
+ components.each { glyph_for(it) }
40
+ level = components
41
+ end
42
+ end
43
+
44
+ def bytes(extra_tables = {})
45
+ glyphs = glyph_data_including_components
46
+ offsets = [0]
47
+ glyf = glyphs.each_with_object(+"".b) do |data, table|
48
+ table << data << ("\x00" * ((4 - (data.bytesize % 4)) % 4))
49
+ offsets << table.bytesize
50
+ end
51
+ glyph_count = glyphs.size
52
+ widths = @file.advance_widths
53
+ left_side_bearings = original_glyphs.map { left_side_bearing(it) }
54
+
55
+ bounds = glyphs.filter_map { it.unpack("s>5") if it.bytesize >= 10 }
56
+ advances = original_glyphs.map { widths[it] }
57
+ tables = {
58
+ "head" => head_table(bounds),
59
+ "hhea" => horizontal_header(bounds, advances, left_side_bearings, glyph_count),
60
+ "maxp" => maximum_profile(bounds, glyphs, glyph_count),
61
+ "hmtx" => original_glyphs.zip(left_side_bearings).map { |glyph, bearing| [widths[glyph], bearing] }.flatten.pack("n*"),
62
+ "loca" => offsets.pack("N*"),
63
+ "glyf" => glyf,
64
+ "post" => @file.table("post").byteslice(0, 32).dup.tap { it[0, 4] = "\x00\x03\x00\x00".b },
65
+ }
66
+ COPIED_TABLES.each { tables[it] = @file.table(it) if @file.table?(it) }
67
+ Subset.assemble(tables.merge(extra_tables))
68
+ end
69
+
70
+ # An sfnt file of these tables, with its directory and checksums (OpenType specification, "Font file").
71
+ def self.assemble(tables, sfnt_version: 0x00010000)
72
+ tags = tables.keys.sort
73
+ table_count = tags.size
74
+ search_range = (2**Math.log2(table_count).floor) * 16
75
+ directory = [sfnt_version, table_count, search_range, Math.log2(search_range / 16).to_i, (table_count * 16) - search_range].pack("Nn4")
76
+ body = +"".b
77
+ offset = 12 + (table_count * 16)
78
+ tags.each do |tag|
79
+ data = tables[tag]
80
+ directory << [tag, Subset.checksum(data), offset + body.bytesize, data.bytesize].pack("a4N3")
81
+ body << data << ("\x00" * ((4 - (data.bytesize % 4)) % 4))
82
+ end
83
+ font = directory << body
84
+ head_offset = 12 + (table_count * 16) + tags.take_while { it != "head" }.sum { (tables[it].bytesize + 3) & ~3 }
85
+ font[head_offset + 8, 4] = [(CHECKSUM_MAGIC - Subset.checksum(font)) & 0xFFFFFFFF].pack("N")
86
+ font
87
+ end
88
+
89
+ def self.checksum(data)
90
+ padded = data + ("\x00" * ((4 - (data.bytesize % 4)) % 4))
91
+ padded.unpack("N*").sum & 0xFFFFFFFF
92
+ end
93
+
94
+ private
95
+
96
+ def glyph_data_including_components
97
+ glyphs = []
98
+ index = 0
99
+ while index < original_glyphs.size
100
+ glyphs << remap_components(@file.glyph_data(original_glyphs[index]))
101
+ index += 1
102
+ end
103
+ glyphs
104
+ end
105
+
106
+ def component_glyphs(data)
107
+ return [] if data.bytesize < 10 || data.unpack1("s>") >= 0
108
+
109
+ glyphs = []
110
+ position = 10
111
+ loop do
112
+ break if position + 4 > data.bytesize
113
+
114
+ flags, original = data.unpack("@#{position} n2")
115
+ glyphs << original if original < @file.glyph_count
116
+ position += 4 + ((flags & ARGUMENTS_ARE_WORDS).zero? ? 2 : 4)
117
+ position += 2 if (flags & HAS_SCALE).nonzero?
118
+ position += 4 if (flags & HAS_X_AND_Y_SCALE).nonzero?
119
+ position += 8 if (flags & HAS_TWO_BY_TWO).nonzero?
120
+ break if (flags & MORE_COMPONENTS).zero?
121
+ end
122
+ glyphs
123
+ end
124
+
125
+ def remap_components(data)
126
+ return data if data.bytesize < 10 || data.unpack1("s>") >= 0
127
+
128
+ data = data.dup
129
+ position = 10
130
+ loop do
131
+ raise Error, "Truncated composite glyph" if position + 4 > data.bytesize
132
+
133
+ flags, original = data.unpack("@#{position} n2")
134
+ raise Error, "Composite glyph component #{original} beyond the font's #{@file.glyph_count} glyphs" if original >= @file.glyph_count
135
+
136
+ data[position + 2, 2] = [glyph_for(original)].pack("n")
137
+ position += 4 + ((flags & ARGUMENTS_ARE_WORDS).zero? ? 2 : 4)
138
+ position += 2 if (flags & HAS_SCALE).nonzero?
139
+ position += 4 if (flags & HAS_X_AND_Y_SCALE).nonzero?
140
+ position += 8 if (flags & HAS_TWO_BY_TWO).nonzero?
141
+ break if (flags & MORE_COMPONENTS).zero?
142
+ end
143
+ data
144
+ end
145
+
146
+ def left_side_bearing(glyph)
147
+ metric_count = @file.table("hhea").unpack1("@34 n")
148
+ hmtx = @file.table("hmtx")
149
+ raw = glyph < metric_count ? hmtx.unpack1("@#{(glyph * 4) + 2} n") : hmtx.unpack1("@#{(metric_count * 4) + ((glyph - metric_count) * 2)} n")
150
+ raw.to_i
151
+ end
152
+
153
+ # The subset's own extremes, as the OpenType specification defines them: readers like Poppler size their
154
+ # glyph caches from the font's bounding box.
155
+ def head_table(bounds)
156
+ head = @file.table("head").dup
157
+ head[8, 4] = "\x00\x00\x00\x00".b
158
+ head[36, 8] = [bounds.map { it[1] }.min || 0, bounds.map { it[2] }.min || 0, bounds.map { it[3] }.max || 0, bounds.map { it[4] }.max || 0].pack("s>4")
159
+ head[50, 2] = [1].pack("n")
160
+ head
161
+ end
162
+
163
+ def horizontal_header(bounds, advances, left_side_bearings, glyph_count)
164
+ hhea = @file.table("hhea").dup
165
+ right_side_bearings = bounds.zip(advances).filter_map { |bound, advance| advance - (bound[3] - bound[1]) - bound[1] if bound && advance }
166
+ extents = bounds.map { it[3] }
167
+ hhea[10, 8] = [advances.compact.max || 0, left_side_bearings.min || 0, right_side_bearings.min || 0, extents.max || 0].pack("n s>3")
168
+ hhea[34, 2] = [glyph_count].pack("n")
169
+ hhea
170
+ end
171
+
172
+ # Largest simple glyph, in points and contours; composite figures stay those of the whole font.
173
+ def maximum_profile(bounds, glyphs, glyph_count)
174
+ maxp = @file.table("maxp").dup
175
+ maxp[4, 2] = [glyph_count].pack("n")
176
+ return maxp if maxp.bytesize < 10
177
+
178
+ simple = glyphs.select { it.bytesize >= 10 && it.unpack1("s>") >= 0 }
179
+ contours = simple.map { it.unpack1("s>") }
180
+ points = simple.zip(contours).map { |glyph, count| count.zero? ? 0 : glyph.unpack1("@#{10 + ((count - 1) * 2)} n") + 1 }
181
+ maxp[6, 4] = [points.max || 0, contours.max || 0].pack("n2")
182
+ maxp
183
+ end
184
+
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrawnX
4
+ # The Prawn API PrawnX reproduces. Prawn is PrawnX, so this is also Prawn::VERSION, which prawn-svg and others check.
5
+ VERSION = "2.5.0"
6
+ GEM_VERSION = "0.1.1"
7
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrawnX
4
+ # Mixed into a class, turns it into a document: Prawn's methods are called on an implicit Prawn::Document.
5
+ module View
6
+ def document
7
+ @document ||= Document.new
8
+ end
9
+
10
+ def method_missing(method_name, *arguments, **options, &)
11
+ return super unless document.respond_to?(method_name)
12
+
13
+ document.public_send(method_name, *arguments, **options, &)
14
+ end
15
+
16
+ def respond_to_missing?(method_name, include_all = false)
17
+ document.respond_to?(method_name) || super
18
+ end
19
+
20
+ def update(&)
21
+ instance_eval(&)
22
+ end
23
+
24
+ def save_as(filename)
25
+ document.render_file(filename)
26
+ end
27
+ end
28
+ end
data/lib/prawnx.rb ADDED
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+ require_relative "prawnx/version"
5
+
6
+ module PrawnX
7
+ BASEDIR = File.expand_path("..", __dir__)
8
+ DATADIR = File.join(BASEDIR, "data")
9
+ FLOAT_PRECISION = 1.0e-9
10
+
11
+ class << self
12
+ attr_accessor :debug
13
+
14
+ def verify_options(accepted, actual)
15
+ return unless debug || $DEBUG
16
+
17
+ unknown = actual.keys - Array(accepted)
18
+ raise Errors::UnknownOption, "\nDetected unknown option(s): #{unknown.inspect}\nAccepted options are: #{Array(accepted).inspect}" unless unknown.empty?
19
+
20
+ yield if block_given?
21
+ end
22
+ end
23
+ end
24
+
25
+ require_relative "prawnx/errors"
26
+ require_relative "prawnx/pdf"
27
+ require_relative "prawnx/pdf/reference"
28
+ require_relative "prawnx/pdf/writer"
29
+ require_relative "prawnx/pdf/outline_node"
30
+ require_relative "prawnx/page_geometry"
31
+ require_relative "prawnx/pdf_core"
32
+ require_relative "prawnx/encoding"
33
+ require_relative "prawnx/graphic_state"
34
+ require_relative "prawnx/page"
35
+ require_relative "prawnx/transformation_stack"
36
+ require_relative "prawnx/graphics/color"
37
+ require_relative "prawnx/graphics/style"
38
+ require_relative "prawnx/graphics/patterns"
39
+ require_relative "prawnx/graphics"
40
+ require_relative "prawnx/text"
41
+ require_relative "prawnx/text/formatted/parser"
42
+ require_relative "prawnx/text/formatted/fragment"
43
+ require_relative "prawnx/text/formatted/arranger"
44
+ require_relative "prawnx/text/formatted/line_wrap"
45
+ require_relative "prawnx/text/formatted/wrap"
46
+ require_relative "prawnx/text/formatted/box"
47
+ require_relative "prawnx/text/box"
48
+ require_relative "prawnx/annotations"
49
+ require_relative "prawnx/stamp"
50
+ require_relative "prawnx/measurements"
51
+ require_relative "prawnx/view"
52
+ require_relative "prawnx/images"
53
+ require_relative "prawnx/images/png_decoder"
54
+ require_relative "prawnx/images/image"
55
+ require_relative "prawnx/repeater"
56
+ require_relative "prawnx/grid"
57
+ require_relative "prawnx/outline"
58
+ require_relative "prawnx/table"
59
+ require_relative "prawnx/table/cells"
60
+ require_relative "prawnx/table/cell"
61
+ require_relative "prawnx/table/cell/kinds"
62
+ require_relative "prawnx/security"
63
+ require_relative "prawnx/pdf_a"
64
+ require_relative "prawnx/pdf_a/srgb_profile"
65
+ require_relative "prawnx/document/internals"
66
+ require_relative "prawnx/document/bounding_box"
67
+ require_relative "prawnx/document/span"
68
+ require_relative "prawnx/document/column_box"
69
+ require_relative "prawnx/document"
70
+ require_relative "prawnx/font"
71
+ require_relative "prawnx/fonts/afm"
72
+
73
+ # TrueType fonts load on first use: a document of standard fonts never needs them.
74
+ module PrawnX
75
+ module TrueType
76
+ autoload :Error, ::File.expand_path("prawnx/true_type/file", __dir__)
77
+ autoload :File, ::File.expand_path("prawnx/true_type/file", __dir__)
78
+ autoload :Subset, ::File.expand_path("prawnx/true_type/subset", __dir__)
79
+ autoload :SimpleSubsets, ::File.expand_path("prawnx/true_type/simple_subsets", __dir__)
80
+ autoload :CffSubset, ::File.expand_path("prawnx/true_type/cff_subset", __dir__)
81
+ autoload :OpenTypeLayout, ::File.expand_path("prawnx/true_type/open_type_layout", __dir__)
82
+ end
83
+
84
+ module Fonts
85
+ %i[TTF TTC DFont].each { autoload it, ::File.expand_path("prawnx/fonts/ttf", __dir__) }
86
+ autoload :OTF, ::File.expand_path("prawnx/fonts/otf", __dir__)
87
+ end
88
+
89
+ class Font
90
+ %i[TTF TTC DFont].each { autoload it, ::File.expand_path("prawnx/fonts/ttf", __dir__) }
91
+ end
92
+
93
+ # Loads what PrawnX otherwise loads on first use, SVG support included: call it before a server forks its
94
+ # workers, so they share that memory instead of each loading its own copy.
95
+ def self.eager_load!
96
+ [TrueType::File, TrueType::Subset, Fonts::TTF]
97
+ require "prawn-svg"
98
+ end
99
+ end
100
+
101
+ PrawnX.image_handler.register(PrawnX::Images::JPG)
102
+ PrawnX.image_handler.register(PrawnX::Images::PNG)
metadata ADDED
@@ -0,0 +1,251 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prawnx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Clément Joubert
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: css_parser
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.17.1
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '4'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 1.17.1
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '4'
32
+ - !ruby/object:Gem::Dependency
33
+ name: matrix
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '0.4'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '0.4'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rexml
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.4.2
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: '4'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 3.4.2
63
+ - - "<"
64
+ - !ruby/object:Gem::Version
65
+ version: '4'
66
+ executables: []
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - COPYING
71
+ - GPLv2
72
+ - GPLv3
73
+ - LICENSE
74
+ - LICENSE-prawn-svg
75
+ - README.md
76
+ - data/fonts/Courier-Bold.afm
77
+ - data/fonts/Courier-BoldOblique.afm
78
+ - data/fonts/Courier-Oblique.afm
79
+ - data/fonts/Courier.afm
80
+ - data/fonts/Helvetica-Bold.afm
81
+ - data/fonts/Helvetica-BoldOblique.afm
82
+ - data/fonts/Helvetica-Oblique.afm
83
+ - data/fonts/Helvetica.afm
84
+ - data/fonts/MustRead.html
85
+ - data/fonts/Symbol.afm
86
+ - data/fonts/Times-Bold.afm
87
+ - data/fonts/Times-BoldItalic.afm
88
+ - data/fonts/Times-Italic.afm
89
+ - data/fonts/Times-Roman.afm
90
+ - data/fonts/ZapfDingbats.afm
91
+ - lib/pdf/core.rb
92
+ - lib/prawn-svg.rb
93
+ - lib/prawn.rb
94
+ - lib/prawn/measurement_extensions.rb
95
+ - lib/prawn/svg/attributes.rb
96
+ - lib/prawn/svg/attributes/clip_path.rb
97
+ - lib/prawn/svg/attributes/mask.rb
98
+ - lib/prawn/svg/attributes/opacity.rb
99
+ - lib/prawn/svg/attributes/space.rb
100
+ - lib/prawn/svg/attributes/stroke.rb
101
+ - lib/prawn/svg/attributes/transform.rb
102
+ - lib/prawn/svg/calculators/arc_to_bezier_curve.rb
103
+ - lib/prawn/svg/calculators/aspect_ratio.rb
104
+ - lib/prawn/svg/calculators/document_sizing.rb
105
+ - lib/prawn/svg/calculators/path_length.rb
106
+ - lib/prawn/svg/calculators/pixels.rb
107
+ - lib/prawn/svg/color.rb
108
+ - lib/prawn/svg/css/font_face_parser.rb
109
+ - lib/prawn/svg/css/font_family_parser.rb
110
+ - lib/prawn/svg/css/font_parser.rb
111
+ - lib/prawn/svg/css/selector_parser.rb
112
+ - lib/prawn/svg/css/stylesheets.rb
113
+ - lib/prawn/svg/css/values_parser.rb
114
+ - lib/prawn/svg/document.rb
115
+ - lib/prawn/svg/elements.rb
116
+ - lib/prawn/svg/elements/anchor.rb
117
+ - lib/prawn/svg/elements/base.rb
118
+ - lib/prawn/svg/elements/bbox_scaling.rb
119
+ - lib/prawn/svg/elements/call_duplicator.rb
120
+ - lib/prawn/svg/elements/circle.rb
121
+ - lib/prawn/svg/elements/clip_path.rb
122
+ - lib/prawn/svg/elements/container.rb
123
+ - lib/prawn/svg/elements/direct_render_base.rb
124
+ - lib/prawn/svg/elements/ellipse.rb
125
+ - lib/prawn/svg/elements/gradient.rb
126
+ - lib/prawn/svg/elements/ignored.rb
127
+ - lib/prawn/svg/elements/image.rb
128
+ - lib/prawn/svg/elements/line.rb
129
+ - lib/prawn/svg/elements/marker.rb
130
+ - lib/prawn/svg/elements/mask.rb
131
+ - lib/prawn/svg/elements/path.rb
132
+ - lib/prawn/svg/elements/pattern.rb
133
+ - lib/prawn/svg/elements/polygon.rb
134
+ - lib/prawn/svg/elements/polyline.rb
135
+ - lib/prawn/svg/elements/rect.rb
136
+ - lib/prawn/svg/elements/root.rb
137
+ - lib/prawn/svg/elements/switch.rb
138
+ - lib/prawn/svg/elements/text.rb
139
+ - lib/prawn/svg/elements/text_component.rb
140
+ - lib/prawn/svg/elements/text_node.rb
141
+ - lib/prawn/svg/elements/text_path.rb
142
+ - lib/prawn/svg/elements/use.rb
143
+ - lib/prawn/svg/elements/viewport.rb
144
+ - lib/prawn/svg/extension.rb
145
+ - lib/prawn/svg/font.rb
146
+ - lib/prawn/svg/font_metrics.rb
147
+ - lib/prawn/svg/font_registry.rb
148
+ - lib/prawn/svg/funciri.rb
149
+ - lib/prawn/svg/gradient_renderer.rb
150
+ - lib/prawn/svg/gradients.rb
151
+ - lib/prawn/svg/interface.rb
152
+ - lib/prawn/svg/length.rb
153
+ - lib/prawn/svg/link_renderer.rb
154
+ - lib/prawn/svg/loaders/data.rb
155
+ - lib/prawn/svg/loaders/file.rb
156
+ - lib/prawn/svg/loaders/web.rb
157
+ - lib/prawn/svg/paint.rb
158
+ - lib/prawn/svg/pathable.rb
159
+ - lib/prawn/svg/pattern_renderer.rb
160
+ - lib/prawn/svg/pdfmatrix.rb
161
+ - lib/prawn/svg/percentage.rb
162
+ - lib/prawn/svg/properties.rb
163
+ - lib/prawn/svg/renderer.rb
164
+ - lib/prawn/svg/state.rb
165
+ - lib/prawn/svg/transform_parser.rb
166
+ - lib/prawn/svg/ttc.rb
167
+ - lib/prawn/svg/ttf.rb
168
+ - lib/prawn/svg/url_loader.rb
169
+ - lib/prawn/svg/version.rb
170
+ - lib/prawn/table.rb
171
+ - lib/prawnx.rb
172
+ - lib/prawnx/annotations.rb
173
+ - lib/prawnx/document.rb
174
+ - lib/prawnx/document/bounding_box.rb
175
+ - lib/prawnx/document/column_box.rb
176
+ - lib/prawnx/document/internals.rb
177
+ - lib/prawnx/document/span.rb
178
+ - lib/prawnx/encoding.rb
179
+ - lib/prawnx/errors.rb
180
+ - lib/prawnx/font.rb
181
+ - lib/prawnx/fonts/afm.rb
182
+ - lib/prawnx/fonts/otf.rb
183
+ - lib/prawnx/fonts/ttf.rb
184
+ - lib/prawnx/graphic_state.rb
185
+ - lib/prawnx/graphics.rb
186
+ - lib/prawnx/graphics/color.rb
187
+ - lib/prawnx/graphics/patterns.rb
188
+ - lib/prawnx/graphics/style.rb
189
+ - lib/prawnx/grid.rb
190
+ - lib/prawnx/images.rb
191
+ - lib/prawnx/images/image.rb
192
+ - lib/prawnx/images/png_decoder.rb
193
+ - lib/prawnx/measurement_extensions.rb
194
+ - lib/prawnx/measurements.rb
195
+ - lib/prawnx/outline.rb
196
+ - lib/prawnx/page.rb
197
+ - lib/prawnx/page_geometry.rb
198
+ - lib/prawnx/pdf.rb
199
+ - lib/prawnx/pdf/outline_node.rb
200
+ - lib/prawnx/pdf/reference.rb
201
+ - lib/prawnx/pdf/writer.rb
202
+ - lib/prawnx/pdf_a.rb
203
+ - lib/prawnx/pdf_a/srgb_profile.rb
204
+ - lib/prawnx/pdf_core.rb
205
+ - lib/prawnx/repeater.rb
206
+ - lib/prawnx/security.rb
207
+ - lib/prawnx/stamp.rb
208
+ - lib/prawnx/table.rb
209
+ - lib/prawnx/table/cell.rb
210
+ - lib/prawnx/table/cell/kinds.rb
211
+ - lib/prawnx/table/cells.rb
212
+ - lib/prawnx/text.rb
213
+ - lib/prawnx/text/box.rb
214
+ - lib/prawnx/text/formatted/arranger.rb
215
+ - lib/prawnx/text/formatted/box.rb
216
+ - lib/prawnx/text/formatted/fragment.rb
217
+ - lib/prawnx/text/formatted/line_wrap.rb
218
+ - lib/prawnx/text/formatted/parser.rb
219
+ - lib/prawnx/text/formatted/wrap.rb
220
+ - lib/prawnx/transformation_stack.rb
221
+ - lib/prawnx/true_type/cff_subset.rb
222
+ - lib/prawnx/true_type/file.rb
223
+ - lib/prawnx/true_type/open_type_layout.rb
224
+ - lib/prawnx/true_type/simple_subsets.rb
225
+ - lib/prawnx/true_type/subset.rb
226
+ - lib/prawnx/version.rb
227
+ - lib/prawnx/view.rb
228
+ homepage: https://github.com/levups/prawnx
229
+ licenses:
230
+ - Nonstandard
231
+ - GPL-2.0-only
232
+ - GPL-3.0-only
233
+ metadata: {}
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '3.4'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ requirements: []
248
+ rubygems_version: 4.0.23
249
+ specification_version: 4
250
+ summary: 'Prawn''s API, rewritten for speed: same pages, lighter files'
251
+ test_files: []