prawn-html 0.3.2 → 0.4.0
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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/prawn-html.rb +2 -1
- data/lib/prawn_html/attributes.rb +17 -23
- data/lib/prawn_html/context.rb +1 -3
- data/lib/prawn_html/document_renderer.rb +12 -16
- data/lib/prawn_html/html_parser.rb +35 -10
- data/lib/prawn_html/tag.rb +12 -22
- data/lib/prawn_html/tags/a.rb +1 -1
- data/lib/prawn_html/tags/b.rb +1 -3
- data/lib/prawn_html/tags/blockquote.rb +25 -0
- data/lib/prawn_html/tags/del.rb +1 -3
- data/lib/prawn_html/tags/h.rb +6 -6
- data/lib/prawn_html/tags/hr.rb +4 -4
- data/lib/prawn_html/tags/i.rb +1 -3
- data/lib/prawn_html/tags/li.rb +4 -6
- data/lib/prawn_html/tags/mark.rb +1 -3
- data/lib/prawn_html/tags/ol.rb +2 -4
- data/lib/prawn_html/tags/p.rb +4 -4
- data/lib/prawn_html/tags/u.rb +1 -3
- data/lib/prawn_html/tags/ul.rb +1 -3
- data/lib/prawn_html/utils.rb +18 -1
- data/lib/prawn_html/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dec0bd9a3746705bdaca34d49c8a8eff5700fd8a5feebc3b3452001cd239b0b
|
4
|
+
data.tar.gz: 74b5e31d3056560435ea939f50f713f11c44ad4c1f584873203b910754e1f782
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 814c481a5fce1da43dcb04254ed97f76f234fbdcaa6826070b00594f80cd3b4396c190a2972c0f6f72e00d35e5fd1b534cf22c9ef932b8ee308562de7c6bc854
|
7
|
+
data.tar.gz: f99ce1543d1b28689b19ceddd8e86a73fae8e204bc98270e6a422dd93e44d89ff50366969b67e0fb2a9a4e91d03367981ab5c0f9481b91378df57e2304358f40
|
data/README.md
CHANGED
@@ -39,6 +39,7 @@ HTML tags:
|
|
39
39
|
|
40
40
|
- **a**: link
|
41
41
|
- **b**: bold
|
42
|
+
- **blockquote**: block quotation element
|
42
43
|
- **br**: new line
|
43
44
|
- **del**: strike-through
|
44
45
|
- **div**: block element
|
@@ -100,8 +101,7 @@ Some custom data attributes are used to pass options:
|
|
100
101
|
|
101
102
|
## Document styles
|
102
103
|
|
103
|
-
|
104
|
-
Only single CSS selectors and basic ones are supported. Example:
|
104
|
+
You can define document CSS rules inside an _head_ tag. Example:
|
105
105
|
|
106
106
|
```html
|
107
107
|
<!DOCTYPE html>
|
data/lib/prawn-html.rb
CHANGED
@@ -168,9 +168,10 @@ require 'prawn'
|
|
168
168
|
|
169
169
|
require 'prawn_html/utils'
|
170
170
|
|
171
|
+
Dir["#{__dir__}/prawn_html/callbacks/*.rb"].sort.each { |f| require f }
|
172
|
+
|
171
173
|
require 'prawn_html/tag'
|
172
174
|
Dir["#{__dir__}/prawn_html/tags/*.rb"].sort.each { |f| require f }
|
173
|
-
Dir["#{__dir__}/prawn_html/callbacks/*.rb"].sort.each { |f| require f }
|
174
175
|
|
175
176
|
require 'prawn_html/attributes'
|
176
177
|
require 'prawn_html/context'
|
@@ -20,12 +20,12 @@ module PrawnHtml
|
|
20
20
|
'color' => { key: :color, set: :convert_color },
|
21
21
|
'font-family' => { key: :font, set: :unquote },
|
22
22
|
'font-size' => { key: :size, set: :convert_size },
|
23
|
-
'font-style' => { key: :styles, set: :
|
24
|
-
'font-weight' => { key: :styles, set: :
|
23
|
+
'font-style' => { key: :styles, set: :append_styles },
|
24
|
+
'font-weight' => { key: :styles, set: :append_styles },
|
25
25
|
'href' => { key: :link, set: :copy_value },
|
26
26
|
'letter-spacing' => { key: :character_spacing, set: :convert_float },
|
27
27
|
'list-style-type' => { key: :list_style_type, set: :unquote },
|
28
|
-
'text-decoration' => { key: :styles, set: :
|
28
|
+
'text-decoration' => { key: :styles, set: :append_styles },
|
29
29
|
# tag opening styles
|
30
30
|
'break-before' => { key: :break_before, set: :convert_symbol },
|
31
31
|
'margin-top' => { key: :margin_top, set: :convert_size },
|
@@ -50,10 +50,6 @@ module PrawnHtml
|
|
50
50
|
def initialize(attributes = {})
|
51
51
|
super
|
52
52
|
@styles = {} # result styles
|
53
|
-
return unless style
|
54
|
-
|
55
|
-
styles_hash = Attributes.parse_styles(style)
|
56
|
-
process_styles(styles_hash)
|
57
53
|
end
|
58
54
|
|
59
55
|
# Processes the data attributes
|
@@ -66,21 +62,12 @@ module PrawnHtml
|
|
66
62
|
end
|
67
63
|
end
|
68
64
|
|
69
|
-
# Merge
|
70
|
-
#
|
71
|
-
# @param parsed_styles [Hash] hash of parsed styles
|
72
|
-
def merge_styles!(parsed_styles)
|
73
|
-
@styles.merge!(parsed_styles)
|
74
|
-
end
|
75
|
-
|
76
|
-
# Processes the styles attributes
|
65
|
+
# Merge text styles
|
77
66
|
#
|
78
|
-
# @param
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
@styles
|
67
|
+
# @param text_styles [String] styles to parse and process
|
68
|
+
def merge_text_styles!(text_styles)
|
69
|
+
hash_styles = Attributes.parse_styles(text_styles)
|
70
|
+
process_styles(hash_styles) unless hash_styles.empty?
|
84
71
|
end
|
85
72
|
|
86
73
|
class << self
|
@@ -114,11 +101,18 @@ module PrawnHtml
|
|
114
101
|
def apply_rule!(result, rule, value)
|
115
102
|
return unless rule
|
116
103
|
|
117
|
-
if rule[:set] == :
|
118
|
-
(result[rule[:key]] ||= []) << Utils.
|
104
|
+
if rule[:set] == :append_styles
|
105
|
+
(result[rule[:key]] ||= []) << Utils.normalize_style(value)
|
119
106
|
else
|
120
107
|
result[rule[:key]] = Utils.send(rule[:set], value)
|
121
108
|
end
|
122
109
|
end
|
110
|
+
|
111
|
+
def process_styles(hash_styles)
|
112
|
+
hash_styles.each do |key, value|
|
113
|
+
apply_rule!(@styles, STYLES_LIST[key], value)
|
114
|
+
end
|
115
|
+
@styles
|
116
|
+
end
|
123
117
|
end
|
124
118
|
end
|
data/lib/prawn_html/context.rb
CHANGED
@@ -32,9 +32,7 @@ module PrawnHtml
|
|
32
32
|
#
|
33
33
|
# @return [String] before content string
|
34
34
|
def before_content
|
35
|
-
|
36
|
-
|
37
|
-
last.tag_styles[:before_content].to_s
|
35
|
+
(last.respond_to?(:before_content) && last.before_content) || ''
|
38
36
|
end
|
39
37
|
|
40
38
|
# Merges the context block styles
|
@@ -11,21 +11,9 @@ module PrawnHtml
|
|
11
11
|
def initialize(pdf)
|
12
12
|
@buffer = []
|
13
13
|
@context = Context.new
|
14
|
-
@document_styles = {}
|
15
14
|
@pdf = pdf
|
16
15
|
end
|
17
16
|
|
18
|
-
# Evaluate the document styles and store the internally
|
19
|
-
#
|
20
|
-
# @param styles [Hash] styles hash with CSS selectors as keys and rules as values
|
21
|
-
def assign_document_styles(styles)
|
22
|
-
@document_styles.merge!(
|
23
|
-
styles.transform_values do |style_rules|
|
24
|
-
Attributes.new(style: style_rules).styles
|
25
|
-
end
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
17
|
# On tag close callback
|
30
18
|
#
|
31
19
|
# @param element [Tag] closing element wrapper
|
@@ -40,13 +28,14 @@ module PrawnHtml
|
|
40
28
|
#
|
41
29
|
# @param tag_name [String] the tag name of the opening element
|
42
30
|
# @param attributes [Hash] an hash of the element attributes
|
31
|
+
# @param element_styles [String] document styles to apply to the element
|
43
32
|
#
|
44
33
|
# @return [Tag] the opening element wrapper
|
45
|
-
def on_tag_open(tag_name, attributes)
|
34
|
+
def on_tag_open(tag_name, attributes:, element_styles: '')
|
46
35
|
tag_class = Tag.class_for(tag_name)
|
47
36
|
return unless tag_class
|
48
37
|
|
49
|
-
tag_class.new(tag_name, attributes,
|
38
|
+
tag_class.new(tag_name, attributes: attributes, element_styles: element_styles).tap do |element|
|
50
39
|
setup_element(element)
|
51
40
|
end
|
52
41
|
end
|
@@ -79,7 +68,7 @@ module PrawnHtml
|
|
79
68
|
|
80
69
|
private
|
81
70
|
|
82
|
-
attr_reader :buffer, :context, :
|
71
|
+
attr_reader :buffer, :context, :pdf
|
83
72
|
|
84
73
|
def setup_element(element)
|
85
74
|
add_space_if_needed unless render_if_needed(element)
|
@@ -115,13 +104,20 @@ module PrawnHtml
|
|
115
104
|
end
|
116
105
|
|
117
106
|
def output_content(buffer, block_styles)
|
118
|
-
buffer
|
107
|
+
apply_callbacks(buffer)
|
119
108
|
left_indent = block_styles[:margin_left].to_f + block_styles[:padding_left].to_f
|
120
109
|
options = block_styles.slice(:align, :leading, :mode, :padding_left)
|
121
110
|
options[:indent_paragraphs] = left_indent if left_indent > 0
|
122
111
|
pdf.puts(buffer, options, bounding_box: bounds(block_styles))
|
123
112
|
end
|
124
113
|
|
114
|
+
def apply_callbacks(buffer)
|
115
|
+
buffer.select { |item| item[:callback] }.each do |item|
|
116
|
+
callback = Tag::CALLBACKS[item[:callback]]
|
117
|
+
item[:callback] = callback.new(pdf, item)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
125
121
|
def bounds(block_styles)
|
126
122
|
return unless block_styles[:position] == :absolute
|
127
123
|
|
@@ -4,12 +4,18 @@ require 'oga'
|
|
4
4
|
|
5
5
|
module PrawnHtml
|
6
6
|
class HtmlParser
|
7
|
+
REGEXP_STYLES = /\s*([^{\s]+)\s*{\s*([^}]*?)\s*}/m.freeze
|
8
|
+
|
7
9
|
# Init the HtmlParser
|
8
10
|
#
|
9
11
|
# @param renderer [DocumentRenderer] document renderer
|
10
|
-
|
12
|
+
# @param ignore_content_tags [Array] array of tags (symbols) to skip their contents while preparing the PDF document
|
13
|
+
def initialize(renderer, ignore_content_tags: %i[script style])
|
11
14
|
@processing = false
|
15
|
+
@ignore = false
|
16
|
+
@ignore_content_tags = ignore_content_tags
|
12
17
|
@renderer = renderer
|
18
|
+
@styles = {}
|
13
19
|
end
|
14
20
|
|
15
21
|
# Processes HTML and renders it
|
@@ -17,17 +23,19 @@ module PrawnHtml
|
|
17
23
|
# @param html [String] The HTML content to process
|
18
24
|
def process(html)
|
19
25
|
@processing = !html.include?('<body')
|
20
|
-
|
21
|
-
traverse_nodes(
|
26
|
+
@document = Oga.parse_html(html)
|
27
|
+
traverse_nodes(document.children)
|
22
28
|
renderer.flush
|
23
29
|
end
|
24
30
|
|
25
31
|
private
|
26
32
|
|
27
|
-
attr_reader :processing, :renderer
|
33
|
+
attr_reader :document, :ignore, :processing, :renderer, :styles
|
28
34
|
|
29
35
|
def traverse_nodes(nodes)
|
30
36
|
nodes.each do |node|
|
37
|
+
next if node.is_a?(Oga::XML::Comment)
|
38
|
+
|
31
39
|
element = node_open(node)
|
32
40
|
traverse_nodes(node.children) if node.children.any?
|
33
41
|
node_close(element) if element
|
@@ -37,21 +45,27 @@ module PrawnHtml
|
|
37
45
|
def node_open(node)
|
38
46
|
tag = node.is_a?(Oga::XML::Element) && init_element(node)
|
39
47
|
return unless processing
|
48
|
+
return IgnoredTag.new(tag) if ignore
|
40
49
|
return renderer.on_text_node(node.text) unless tag
|
41
50
|
|
42
|
-
attributes
|
43
|
-
renderer.on_tag_open(tag, attributes)
|
51
|
+
renderer.on_tag_open(tag, attributes: prepare_attributes(node), element_styles: styles[node])
|
44
52
|
end
|
45
53
|
|
46
54
|
def init_element(node)
|
47
55
|
node.name.downcase.to_sym.tap do |tag_name|
|
48
56
|
@processing = true if tag_name == :body
|
49
|
-
|
57
|
+
@ignore = true if @processing && @ignore_content_tags.include?(tag_name)
|
58
|
+
process_styles(node.text) if tag_name == :style
|
50
59
|
end
|
51
60
|
end
|
52
61
|
|
53
|
-
def
|
54
|
-
|
62
|
+
def process_styles(text_styles)
|
63
|
+
hash_styles = text_styles.scan(REGEXP_STYLES).to_h
|
64
|
+
hash_styles.each do |selector, rule|
|
65
|
+
document.css(selector).each do |node|
|
66
|
+
styles[node] = rule
|
67
|
+
end
|
68
|
+
end
|
55
69
|
end
|
56
70
|
|
57
71
|
def prepare_attributes(node)
|
@@ -61,10 +75,21 @@ module PrawnHtml
|
|
61
75
|
end
|
62
76
|
|
63
77
|
def node_close(element)
|
64
|
-
|
78
|
+
if processing
|
79
|
+
renderer.on_tag_close(element) unless ignore
|
80
|
+
@ignore = false if ignore && @ignore_content_tags.include?(element.tag)
|
81
|
+
end
|
65
82
|
@processing = false if element.tag == :body
|
66
83
|
end
|
67
84
|
end
|
68
85
|
|
86
|
+
class IgnoredTag
|
87
|
+
attr_accessor :tag
|
88
|
+
|
89
|
+
def initialize(tag_name)
|
90
|
+
@tag = tag_name
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
69
94
|
HtmlHandler = HtmlParser
|
70
95
|
end
|
data/lib/prawn_html/tag.rb
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
|
3
3
|
module PrawnHtml
|
4
4
|
class Tag
|
5
|
-
|
5
|
+
CALLBACKS = {
|
6
|
+
'Highlight' => Callbacks::Highlight,
|
7
|
+
'StrikeThrough' => Callbacks::StrikeThrough
|
8
|
+
}.freeze
|
9
|
+
TAG_CLASSES = %w[A B Blockquote Body Br Del Div H Hr I Img Li Mark Ol P Small Span U Ul].freeze
|
6
10
|
|
7
11
|
attr_accessor :parent
|
8
12
|
attr_reader :attrs, :tag
|
@@ -11,12 +15,11 @@ module PrawnHtml
|
|
11
15
|
#
|
12
16
|
# @param tag [Symbol] tag name
|
13
17
|
# @param attributes [Hash] hash of element attributes
|
14
|
-
# @param
|
15
|
-
def initialize(tag, attributes
|
18
|
+
# @param element_styles [String] document styles tp apply to the element
|
19
|
+
def initialize(tag, attributes: {}, element_styles: '')
|
16
20
|
@tag = tag
|
17
|
-
element_styles = attributes.delete(:style)
|
18
21
|
@attrs = Attributes.new(attributes)
|
19
|
-
process_styles(
|
22
|
+
process_styles(element_styles, attributes['style'])
|
20
23
|
end
|
21
24
|
|
22
25
|
# Is a block tag?
|
@@ -74,23 +77,10 @@ module PrawnHtml
|
|
74
77
|
|
75
78
|
private
|
76
79
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
attrs['id'] ? "##{attrs['id']}" : nil
|
82
|
-
].compact!
|
83
|
-
document_styles.each_with_object({}) do |(sel, attributes), res|
|
84
|
-
res.merge!(attributes) if selectors.include?(sel)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def process_styles(document_styles, element_styles)
|
89
|
-
attrs.merge_styles!(attrs.process_styles(tag_styles)) if respond_to?(:tag_styles)
|
90
|
-
doc_styles = evaluate_document_styles(document_styles)
|
91
|
-
attrs.merge_styles!(doc_styles)
|
92
|
-
el_styles = Attributes.parse_styles(element_styles)
|
93
|
-
attrs.merge_styles!(attrs.process_styles(el_styles)) if el_styles
|
80
|
+
def process_styles(element_styles, inline_styles)
|
81
|
+
attrs.merge_text_styles!(tag_styles) if respond_to?(:tag_styles)
|
82
|
+
attrs.merge_text_styles!(element_styles)
|
83
|
+
attrs.merge_text_styles!(inline_styles)
|
94
84
|
end
|
95
85
|
end
|
96
86
|
end
|
data/lib/prawn_html/tags/a.rb
CHANGED
data/lib/prawn_html/tags/b.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrawnHtml
|
4
|
+
module Tags
|
5
|
+
class Blockquote < Tag
|
6
|
+
ELEMENTS = [:blockquote].freeze
|
7
|
+
|
8
|
+
MARGIN_BOTTOM = 10
|
9
|
+
MARGIN_LEFT = 25
|
10
|
+
MARGIN_TOP = 10
|
11
|
+
|
12
|
+
def block?
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def tag_styles
|
17
|
+
<<~STYLES
|
18
|
+
margin-bottom: #{MARGIN_BOTTOM}px;
|
19
|
+
margin-left: #{MARGIN_LEFT}px;
|
20
|
+
margin-top: #{MARGIN_TOP}px;
|
21
|
+
STYLES
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/prawn_html/tags/del.rb
CHANGED
data/lib/prawn_html/tags/h.rb
CHANGED
@@ -37,12 +37,12 @@ module PrawnHtml
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def tag_styles
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
<<~STYLES
|
41
|
+
font-size: #{SIZES[tag]}px;
|
42
|
+
font-weight: bold;
|
43
|
+
margin-bottom: #{MARGINS_BOTTOM[tag]}px;
|
44
|
+
margin-top: #{MARGINS_TOP[tag]}px;
|
45
|
+
STYLES
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
data/lib/prawn_html/tags/hr.rb
CHANGED
@@ -18,10 +18,10 @@ module PrawnHtml
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def tag_styles
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
<<~STYLES
|
22
|
+
margin-bottom: #{MARGIN_BOTTOM}px;
|
23
|
+
margin-top: #{MARGIN_TOP}px;
|
24
|
+
STYLES
|
25
25
|
end
|
26
26
|
|
27
27
|
private
|
data/lib/prawn_html/tags/i.rb
CHANGED
data/lib/prawn_html/tags/li.rb
CHANGED
@@ -9,16 +9,14 @@ module PrawnHtml
|
|
9
9
|
true
|
10
10
|
end
|
11
11
|
|
12
|
+
def before_content
|
13
|
+
@counter ? "#{@counter}. " : "#{@symbol} "
|
14
|
+
end
|
15
|
+
|
12
16
|
def on_context_add(_context)
|
13
17
|
@counter = (parent.counter += 1) if parent.is_a? Ol
|
14
18
|
@symbol = parent.styles[:list_style_type] || '•' if parent.is_a? Ul
|
15
19
|
end
|
16
|
-
|
17
|
-
def tag_styles
|
18
|
-
{
|
19
|
-
before_content: @counter ? "#{@counter}. " : "#{@symbol} "
|
20
|
-
}
|
21
|
-
end
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
data/lib/prawn_html/tags/mark.rb
CHANGED
data/lib/prawn_html/tags/ol.rb
CHANGED
@@ -9,7 +9,7 @@ module PrawnHtml
|
|
9
9
|
|
10
10
|
attr_accessor :counter
|
11
11
|
|
12
|
-
def initialize(
|
12
|
+
def initialize(tag, attributes: {}, element_styles: '')
|
13
13
|
super
|
14
14
|
@counter = 0
|
15
15
|
end
|
@@ -19,9 +19,7 @@ module PrawnHtml
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def tag_styles
|
22
|
-
|
23
|
-
'margin-left' => MARGIN_LEFT.to_s,
|
24
|
-
}
|
22
|
+
"margin-left: #{MARGIN_LEFT}px"
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
data/lib/prawn_html/tags/p.rb
CHANGED
@@ -13,10 +13,10 @@ module PrawnHtml
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def tag_styles
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
<<~STYLES
|
17
|
+
margin-bottom: #{MARGIN_BOTTOM}px;
|
18
|
+
margin-top: #{MARGIN_TOP}px;
|
19
|
+
STYLES
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/prawn_html/tags/u.rb
CHANGED
data/lib/prawn_html/tags/ul.rb
CHANGED
data/lib/prawn_html/utils.rb
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
module PrawnHtml
|
4
4
|
module Utils
|
5
|
+
NORMALIZE_STYLES = {
|
6
|
+
'bold' => :bold,
|
7
|
+
'italic' => :italic,
|
8
|
+
'underline' => :underline
|
9
|
+
}.freeze
|
10
|
+
|
5
11
|
# Converts a color string
|
6
12
|
#
|
7
13
|
# Supported formats:
|
@@ -74,6 +80,16 @@ module PrawnHtml
|
|
74
80
|
value
|
75
81
|
end
|
76
82
|
|
83
|
+
# Normalize a style value
|
84
|
+
#
|
85
|
+
# @param value [String] string value
|
86
|
+
#
|
87
|
+
# @return [Symbol] style value or nil
|
88
|
+
def normalize_style(value)
|
89
|
+
val = value&.strip&.downcase
|
90
|
+
NORMALIZE_STYLES[val]
|
91
|
+
end
|
92
|
+
|
77
93
|
# Unquotes a string
|
78
94
|
#
|
79
95
|
# @param value [String] string
|
@@ -85,6 +101,7 @@ module PrawnHtml
|
|
85
101
|
end
|
86
102
|
end
|
87
103
|
|
88
|
-
module_function :convert_color, :convert_float, :convert_size, :convert_symbol, :copy_value, :
|
104
|
+
module_function :convert_color, :convert_float, :convert_size, :convert_symbol, :copy_value, :normalize_style,
|
105
|
+
:unquote
|
89
106
|
end
|
90
107
|
end
|
data/lib/prawn_html/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mattia Roccoberton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/prawn_html/tag.rb
|
58
58
|
- lib/prawn_html/tags/a.rb
|
59
59
|
- lib/prawn_html/tags/b.rb
|
60
|
+
- lib/prawn_html/tags/blockquote.rb
|
60
61
|
- lib/prawn_html/tags/body.rb
|
61
62
|
- lib/prawn_html/tags/br.rb
|
62
63
|
- lib/prawn_html/tags/del.rb
|