prawn-svg 0.9.1.5 → 0.9.1.6
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 +8 -1
- data/lib/prawn/svg/parser.rb +34 -4
- data/lib/prawn/svg/svg.rb +8 -7
- data/lib/prawn/svg_document.rb +1 -1
- metadata +2 -2
data/README
CHANGED
@@ -40,7 +40,14 @@ prawn-svg is in its infancy and does not support the full SVG specifications. I
|
|
40
40
|
|
41
41
|
- colors: html standard names, #xxx, #xxxxxx, rgb(1, 2, 3), rgb(1%, 2%, 3%)
|
42
42
|
|
43
|
-
- measurements specified in pt, cm, dm, ft, in, m, mm, yd
|
43
|
+
- measurements specified in pt, cm, dm, ft, in, m, mm, yd, %
|
44
|
+
|
45
|
+
- fonts: generic CSS fonts, built in PDF fonts, and any TTF fonts in your fonts path
|
46
|
+
|
47
|
+
By default, prawn-svg has a fonts path of ["/Library/Fonts", "/usr/share/fonts/truetype/**"] to catch
|
48
|
+
Mac OS X and Debian Linux users. You can add to the font path:
|
49
|
+
|
50
|
+
Prawn::Svg.font_path << "/my/font/directory"
|
44
51
|
|
45
52
|
prawn-svg does NOT support named elements, external references, the tspan tag, gradients/patterns or markers.
|
46
53
|
|
data/lib/prawn/svg/parser.rb
CHANGED
@@ -124,11 +124,12 @@ class Prawn::Svg::Parser
|
|
124
124
|
# Very primitive support for font-family; it won't work in most cases because
|
125
125
|
# PDF only has a few built-in fonts, and they're not the same as the names
|
126
126
|
# used typically with the web fonts.
|
127
|
-
if
|
128
|
-
|
129
|
-
|
130
|
-
calls << ['font', [font], []]
|
127
|
+
if font_family = style_attrs["font-family"]
|
128
|
+
if font_family != "" && pdf_font = map_font_family_to_pdf_font(font_family)
|
129
|
+
calls << ['font', [pdf_font], []]
|
131
130
|
calls = calls.last.last
|
131
|
+
else
|
132
|
+
@warnings << "#{font_family} is not a known font."
|
132
133
|
end
|
133
134
|
end
|
134
135
|
|
@@ -336,6 +337,35 @@ class Prawn::Svg::Parser
|
|
336
337
|
[name, arguments]
|
337
338
|
end
|
338
339
|
end
|
340
|
+
|
341
|
+
BUILT_IN_FONTS = ["Courier", "Helvetica", "Times-Roman", "Symbol", "ZapfDingbats"]
|
342
|
+
GENERIC_CSS_FONT_MAPPING = {
|
343
|
+
"serif" => "Times-Roman",
|
344
|
+
"sans-serif" => "Helvetica",
|
345
|
+
"cursive" => "Times-Roman",
|
346
|
+
"fantasy" => "Times-Roman",
|
347
|
+
"monospace" => "Courier"}
|
348
|
+
|
349
|
+
def installed_fonts
|
350
|
+
@installed_fonts ||= Prawn::Svg.font_path.uniq.collect {|path| Dir["#{path}/*"]}.flatten
|
351
|
+
end
|
352
|
+
|
353
|
+
def map_font_family_to_pdf_font(font_family)
|
354
|
+
font_family.split(",").detect do |font|
|
355
|
+
font = font.gsub(/['"]/, '').gsub(/\s{2,}/, ' ').strip.downcase
|
356
|
+
|
357
|
+
built_in_font = BUILT_IN_FONTS.detect {|f| f.downcase == font}
|
358
|
+
break built_in_font if built_in_font
|
359
|
+
|
360
|
+
generic_font = GENERIC_CSS_FONT_MAPPING[font]
|
361
|
+
break generic_font if generic_font
|
362
|
+
|
363
|
+
installed_font = installed_fonts.detect do |file|
|
364
|
+
(matches = File.basename(file).match(/(.+)\./)) && matches[1].downcase == font
|
365
|
+
end
|
366
|
+
break installed_font if installed_font
|
367
|
+
end
|
368
|
+
end
|
339
369
|
|
340
370
|
# TODO : use http://www.w3.org/TR/SVG11/types.html#ColorKeywords
|
341
371
|
HTML_COLORS = {
|
data/lib/prawn/svg/svg.rb
CHANGED
@@ -3,7 +3,14 @@
|
|
3
3
|
# SVG into Prawn-compatible method calls, and then calls the Prawn methods.
|
4
4
|
#
|
5
5
|
class Prawn::Svg
|
6
|
-
|
6
|
+
DEFAULT_FONT_PATHS = ["/Library/Fonts", "/usr/share/fonts/truetype/**"]
|
7
|
+
|
8
|
+
@font_path = []
|
9
|
+
DEFAULT_FONT_PATHS.each {|path| @font_path << path if File.exists?(path)}
|
10
|
+
|
11
|
+
class << self; attr_accessor :font_path; end
|
12
|
+
|
13
|
+
attr_reader :data, :prawn, :parser, :options
|
7
14
|
|
8
15
|
# An +Array+ of warnings that occurred while parsing the SVG data. If this array is non-empty,
|
9
16
|
# it's likely that the SVG failed to render correctly.
|
@@ -71,12 +78,6 @@ class Prawn::Svg
|
|
71
78
|
end
|
72
79
|
|
73
80
|
arguments.last[:at][1] += prawn.height_of(*arguments) / 3 * 2
|
74
|
-
|
75
|
-
when 'font'
|
76
|
-
unless prawn.font_families.member?(arguments.first)
|
77
|
-
@parser_warnings << "#{arguments.first} is not a known font."
|
78
|
-
false
|
79
|
-
end
|
80
81
|
end
|
81
82
|
end
|
82
83
|
end
|
data/lib/prawn/svg_document.rb
CHANGED