prawn-html 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4593c000107eaa95af317e336d16e34a7cfcffadef95e736eedaebce1c1723f0
4
- data.tar.gz: da05881be31d5a4058b41176336d72cd1c1e190a1a1fd59b36f671f6a7e5c98e
3
+ metadata.gz: 6d7b30ab7d50313d9b5f16fd37bba84207725c8368ba3370a2ef037bdf871f27
4
+ data.tar.gz: 730c56224e0961d707db073b550f605e4dd4f39d6a902cbb2af5e9f4533e4785
5
5
  SHA512:
6
- metadata.gz: a8061299f670a1b0f895ac521e4bb6f242125830152bd3eaccb0c33dee3d6aaa1ad2ad179197a2d1ad3cb9aad28fe38aefdc18db1fd55d4148f7870e5b68038a
7
- data.tar.gz: ab1e8d1c552f6d105ddd9ffbd565b3d1f816857d48649b5dbc89e18495e4257175d0047a7dea1be1974b26ee81e085254c37e9aa84b0da253667a159ea772bda
6
+ metadata.gz: 790833d6338e59019751025c38a1b37ffa44ff583dd3f23771bc1015754cc1f047a6da9aa2d28c975191de8451ecc164d7dda412c2df15ca779c27b5aa1bc27a
7
+ data.tar.gz: 3ad2faf9178136a477fa4c0952410593219f85e6cacfbc88d1d504fbbe70388184ee62d3a4e84844eb0a8f225ba04845214d41beff68aa665bed12b03f563547
data/README.md CHANGED
@@ -35,6 +35,23 @@ pdf.render_file('test.pdf')
35
35
 
36
36
  To check some examples with the PDF output see [examples](examples/) folder.
37
37
 
38
+ Alternative form using _PrawnHtml::Instance_ to preserve the context:
39
+
40
+ ```rb
41
+ require 'prawn-html'
42
+ pdf = Prawn::Document.new(page_size: 'A4')
43
+ phtml = PrawnHtml::Instance.new(pdf)
44
+ css = <<~CSS
45
+ h1 { color: green }
46
+ i { color: red }
47
+ CSS
48
+ phtml.append(css: css)
49
+ phtml.append(html: '<h1>Some <i>HTML</i> before</h1>')
50
+ pdf.text 'Some Prawn text'
51
+ phtml.append(html: '<h1>Some <i>HTML</i> after</h1>')
52
+ pdf.render_file('test.pdf')
53
+ ```
54
+
38
55
  ## Supported tags & attributes
39
56
 
40
57
  HTML tags (using MDN definitions):
data/lib/prawn-html.rb CHANGED
@@ -156,10 +156,7 @@ module PrawnHtml
156
156
  }.freeze
157
157
 
158
158
  def append_html(pdf, html)
159
- pdf_wrapper = PdfWrapper.new(pdf)
160
- renderer = DocumentRenderer.new(pdf_wrapper)
161
- html_parser = PrawnHtml::HtmlParser.new(renderer)
162
- html_parser.process(html)
159
+ PrawnHtml::Instance.new(pdf).append(html: html)
163
160
  end
164
161
 
165
162
  module_function :append_html
@@ -179,3 +176,4 @@ require 'prawn_html/context'
179
176
  require 'prawn_html/pdf_wrapper'
180
177
  require 'prawn_html/document_renderer'
181
178
  require 'prawn_html/html_parser'
179
+ require 'prawn_html/instance'
@@ -15,19 +15,28 @@ module PrawnHtml
15
15
  @ignore = false
16
16
  @ignore_content_tags = ignore_content_tags
17
17
  @renderer = renderer
18
- @styles = {}
18
+ @raw_styles = {}
19
19
  end
20
20
 
21
21
  # Processes HTML and renders it
22
22
  #
23
23
  # @param html [String] The HTML content to process
24
24
  def process(html)
25
+ @styles = {}
25
26
  @processing = !html.include?('<body')
26
27
  @document = Oga.parse_html(html)
28
+ process_styles # apply previously loaded styles
27
29
  traverse_nodes(document.children)
28
30
  renderer.flush
29
31
  end
30
32
 
33
+ # Parses CSS styles
34
+ #
35
+ # @param text_styles [String] The CSS styles to evaluate
36
+ def parse_styles(text_styles)
37
+ @raw_styles = text_styles.scan(REGEXP_STYLES).to_h
38
+ end
39
+
31
40
  private
32
41
 
33
42
  attr_reader :document, :ignore, :processing, :renderer, :styles
@@ -59,9 +68,9 @@ module PrawnHtml
59
68
  end
60
69
  end
61
70
 
62
- def process_styles(text_styles)
63
- hash_styles = text_styles.scan(REGEXP_STYLES).to_h
64
- hash_styles.each do |selector, rule|
71
+ def process_styles(text_styles = nil)
72
+ parse_styles(text_styles) if text_styles
73
+ @raw_styles.each do |selector, rule|
65
74
  document.css(selector).each do |node|
66
75
  styles[node] = rule
67
76
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrawnHtml
4
+ class Instance
5
+ attr_reader :html_parser, :pdf_wrapper, :renderer
6
+
7
+ def initialize(pdf)
8
+ @pdf_wrapper = PrawnHtml::PdfWrapper.new(pdf)
9
+ @renderer = PrawnHtml::DocumentRenderer.new(@pdf_wrapper)
10
+ @html_parser = PrawnHtml::HtmlParser.new(@renderer)
11
+ end
12
+
13
+ def append(css: nil, html: nil)
14
+ html_parser.parse_styles(css) if css
15
+ html_parser.process(html) if html
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PrawnHtml # :nodoc:
4
- VERSION = '0.6.5'
4
+ VERSION = '0.7.0'
5
5
  end
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.6.5
4
+ version: 0.7.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: 2022-06-07 00:00:00.000000000 Z
11
+ date: 2022-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oga
@@ -53,6 +53,7 @@ files:
53
53
  - lib/prawn_html/context.rb
54
54
  - lib/prawn_html/document_renderer.rb
55
55
  - lib/prawn_html/html_parser.rb
56
+ - lib/prawn_html/instance.rb
56
57
  - lib/prawn_html/pdf_wrapper.rb
57
58
  - lib/prawn_html/tag.rb
58
59
  - lib/prawn_html/tags/a.rb