prawn-styled-text 0.1.4 → 0.1.5

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
- SHA1:
3
- metadata.gz: c73fb17ed91bd33843991a644f9c635c2d2cfaa5
4
- data.tar.gz: 57aad42cddc27f7302df26aba88ae5379a3c1f5e
2
+ SHA256:
3
+ metadata.gz: c4d9cebb86cc3f9c771ea5b309c8905cc28851eb0b3d5def9290c06050424208
4
+ data.tar.gz: a9a601e1bf00a37dcd3f5bb93d79ec09191cd91fcf1eafd664de456b3903ae92
5
5
  SHA512:
6
- metadata.gz: 1fbcaead4bdf4d53477cd4195b62032492056a29d5a33e78cf13c9c878814b2d798df50e872fdbaa29a768e5cf085bdb7592d75298ac86fd6b30914416312c87
7
- data.tar.gz: b90e425105862e661321e3dd54295d73e9cf3ba0e3cab74a41f4a4dbcb31a0c6752537cb7d31a747762b7e1c1ac3cb50a1a205e2f94b9c131fcdd9364a64552e
6
+ metadata.gz: e7ee55a9586cc519144be5576caab20f30348461dc0ff32deb15eff03a004a5d35ec13f94ab02544a54da4496e22131b81440842ca84e0c289ace2e594690e12
7
+ data.tar.gz: 12ad62b6582c0611c3be916fe56853c83d227d37a7769ea5ffa63e0014fc35a834c5d22037bbfc8718ed038ff7b1ba9c9069b78e8bfc708b3c012d6f5e3fdd04
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
data/README.md CHANGED
@@ -20,50 +20,50 @@ For more examples see this [folder](https://github.com/blocknotes/prawn-styled-t
20
20
  ## Supported tags & attributes
21
21
 
22
22
  HTML tags:
23
- - a (link)
24
- - b (bold)
25
- - br (new line)
26
- - del (strike-through)
27
- - div (block element)
28
- - em (italic)
29
- - h1 - h6 (headings)
30
- - hr (horizontal line)
31
- - i (italic)
32
- - ins (underline)
33
- - img (image)
34
- - li (list item)
35
- - mark (highlight)
36
- - p (block element)
37
- - s (strike-through)
38
- - small (smaller text)
39
- - span (inline element)
40
- - strong (bold)
41
- - u (underline)
42
- - ul (list)
23
+ - **a**: link
24
+ - **b**: bold
25
+ - **br**: new line
26
+ - **del**: strike-through
27
+ - **div**: block element
28
+ - **em**: italic
29
+ - **h1** - **h6**: headings
30
+ - **hr**: horizontal line
31
+ - **i**: italic
32
+ - **ins**: underline
33
+ - **img**: image
34
+ - **li**: list item
35
+ - **mark**: highlight
36
+ - **p**: block element
37
+ - **s**: strike-through
38
+ - **small**: smaller text
39
+ - **span**: inline element
40
+ - **strong**: bold
41
+ - **u**: underline
42
+ - **ul**: list
43
43
 
44
44
  CSS attributes:
45
- - background (for *mark* tag, only 6 hex digits format, # is ignored - ex. `style="background: #FFCC00"`)
46
- - color (only 6 hex digits format, # is ignored - ex. `style="color: #FFBB11"`)
47
- - font-family (ex. `style="font: Courier"`)
48
- - font-size (units are ignored - ex. `style="font-size: 20px"`)
49
- - font-style (*:bold*, *:bold_italic*, *:italic*, *:normal*; accepts list of values - ex. `style="font-style: bold, italic"`)
50
- - height (for *img* tag, ex. `<img src="test.jpg" style="width: 50%; height: 200"/>`)
51
- - href (for *a* tag, ex. `<a href="http://www.google.com/">Google</a>`)
52
- - letter-spacing (ex. `style="letter-spacing: 1.5"`)
53
- - line-height (heading, units are ignored - ex. `style="line-height: 10"`)
54
- - margin-left (units are ignored - ex. `style="margin-left: 15"`)
55
- - margin-top (units are ignored - ex. `style="margin-top: 20"`)
56
- - src (for *img* tag, ex. `<img src="test.jpg"/>`)
57
- - text-align (ex. `style="text-align: center"`)
58
- - width (for *img* tag, ex. `<img src="test.jpg" style="width: 50%; height: 200"/>`)
45
+ - **background**: for *mark* tag, only 6 hex digits format, # is ignored - ex. `style="background: #FFCC00"`
46
+ - **color**: only 6 hex digits format, # is ignored - ex. `style="color: #FFBB11"`
47
+ - **font-family**: font must be registered, quotes are optional, ex. `style="font: Courier"`
48
+ - **font-size**: units are ignored - ex. `style="font-size: 20px"`
49
+ - **font-style**: values: *:bold*, *:bold_italic*, *:italic*, *:normal*; string or comma separated strings - ex. `style="font-style: bold, italic"`
50
+ - **height**: for *img* tag, ex. `<img src="test.jpg" style="width: 50%; height: 200"/>`
51
+ - **href**: for *a* tag, ex. `<a href="http://www.google.com/">Google</a>`
52
+ - **letter-spacing**: ex. `style="letter-spacing: 1.5"`
53
+ - **line-height**: heading, units are ignored - ex. `style="line-height: 10"`
54
+ - **margin-left**: units are ignored - ex. `style="margin-left: 15"`
55
+ - **margin-top**: units are ignored - ex. `style="margin-top: 20"`
56
+ - **src**: for *img* tag, ex. `<img src="test.jpg"/>`
57
+ - **text-align**: ex. `style="text-align: center"`
58
+ - **width**: for *img* tag, ex. `<img src="test.jpg" style="width: 50%; height: 200"/>`
59
59
 
60
60
  Olther attributes:
61
- - dash (for *hr* tag, ex. `<hr style="dash: 4"/>`)
62
- - image-at (for *img* tag, origin (0, 0) is left bottom, ex. `<img src="image.jpg" style="image-at: 100, 600" />`)
63
- - image-position (for *img* tag, ex. `<img src="image.jpg" style="image-position: center" />`)
64
- - image-scale (for *img* tag, ex. `<img src="image.jpg" style="image-scale: 0.3" />`)
65
- - list-symbol (for *ul* tag, ex. `<ul style="list-symbol: -">`)
66
- - mode (ex. `<h3 style="mode: stroke">Stroke text</h3>`)
61
+ - **dash**: for *hr* tag, dash types, integer or comma separated integers, ex. `<hr style="dash: 4"/>`
62
+ - **image-at**: for *img* tag, origin (0, 0) is left bottom, ex. `<img src="image.jpg" style="image-at: 100, 600" />`
63
+ - **image-position**: for *img* tag, ex. `<img src="image.jpg" style="image-position: center" />`
64
+ - **image-scale**: for *img* tag, ex. `<img src="image.jpg" style="image-scale: 0.3" />`
65
+ - **list-symbol**: for *ul* tag, ex. `<ul style="list-symbol: -">`
66
+ - **mode**: text mode, values: *:clip*, *:fill*, *:fill_clip*, *:fill_stroke*, *:fill_stroke_clip*, *:invisible*, *:stroke*, *:stroke_clip*, ex. `<h3 style="mode: stroke">Stroke text</h3>`
67
67
 
68
68
  See [Prawn documentation](https://github.com/prawnpdf/prawn-table#documentation) for PDF options details.
69
69
 
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << '../lib'
4
+
1
5
  require 'prawn'
2
6
  require 'prawn-styled-text'
3
7
  require 'oga'
@@ -5,5 +9,5 @@ require 'oga'
5
9
  Prawn::Font::AFM.hide_m17n_warning = true
6
10
 
7
11
  pdf = Prawn::Document.new
8
- pdf.styled_text File.read( 'test.html' )
9
- pdf.render_file 'test.pdf'
12
+ pdf.styled_text(File.read('test.html'))
13
+ pdf.render_file('basic.pdf')
@@ -1,16 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << '../lib'
4
+
1
5
  require 'prawn'
2
6
  require 'prawn-styled-text'
3
7
  require 'oga'
4
8
 
5
- html = <<~EOL
9
+ html = <<~CONTENT
6
10
  <div style="font-size: 16px; text-align: justify">Lorem ipsum dolor sit <b>amet</b>, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud <i>exercitation</i> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in <u>reprehenderit</u> in voluptate velit esse cillum dolore eu fugiat nulla pariatur.<br/>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
7
11
  <br/>
8
12
  </div>
9
- EOL
13
+ CONTENT
10
14
 
11
15
  pdf = Prawn::Document.new
12
16
  pdf.styled_text '<h1 style="text-align: center">2 columns</h1>'
13
- pdf.column_box( [ 0, pdf.cursor ], columns: 2, width: pdf.bounds.width ) do
14
- pdf.styled_text html * 4
17
+ pdf.column_box([0, pdf.cursor], columns: 2, width: pdf.bounds.width) do
18
+ pdf.styled_text(html * 4)
15
19
  end
16
- pdf.render_file 'test.pdf'
20
+ pdf.render_file('columns.pdf')
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << '../lib'
4
+
1
5
  require 'erb'
2
6
  require 'prawn'
3
7
  require 'prawn-styled-text'
@@ -8,6 +12,6 @@ ERB_FILE = 'test.html.erb'
8
12
  Prawn::Font::AFM.hide_m17n_warning = true
9
13
 
10
14
  pdf = Prawn::Document.new
11
- pdf.text "\nA test document\n", align: :center, size: 18
12
- pdf.styled_text ERB.new( File.read( ERB_FILE ) ).result( binding )
13
- pdf.render_file 'test.pdf'
15
+ pdf.text("\nA test document\n", align: :center, size: 18)
16
+ pdf.styled_text ERB.new(File.read(ERB_FILE)).result(binding)
17
+ pdf.render_file('erb.pdf')
@@ -1,13 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << '../lib'
4
+
1
5
  require 'prawn'
2
6
  require 'prawn-styled-text'
3
7
  require 'oga'
4
8
 
5
- html = <<~EOL
9
+ html = <<~CONTENT
6
10
  <h4 style="text-align: center">Some text</h4>
7
11
  <div style="font-size: 10px; text-align: justify">Lorem ipsum dolor sit <b>amet</b>, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud <i>exercitation</i> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in <u>reprehenderit</u> in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
8
- EOL
12
+ CONTENT
9
13
 
10
- # html = <<~EOL
14
+ # html = <<~CONTENT
11
15
  # <span>span 1</span>
12
16
  # <div>div 1</div>
13
17
  # <span>span 2</span>
@@ -16,11 +20,11 @@ EOL
16
20
  # <span>span 4</span>
17
21
  # <div>div 3</div>
18
22
  # <div>div 4</div>
19
- # EOL
23
+ # CONTENT
20
24
 
21
25
  pdf = Prawn::Document.new
22
- pdf.define_grid(:columns => 3, :rows => 3, :gutter => 10)
23
- pdf.grid( 1, 1 ).bounding_box do
24
- pdf.styled_text html
26
+ pdf.define_grid(columns: 3, rows: 3, gutter: 10)
27
+ pdf.grid(1, 1).bounding_box do
28
+ pdf.styled_text(html)
25
29
  end
26
- pdf.render_file 'test.pdf'
30
+ pdf.render_file('grid.pdf')
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << '../lib'
4
+
1
5
  require 'prawn'
2
6
  require 'prawn-styled-text'
3
7
  require 'oga'
@@ -8,7 +12,7 @@ SLIM_FILE = 'test.html.slim'
8
12
  Prawn::Font::AFM.hide_m17n_warning = true
9
13
 
10
14
  pdf = Prawn::Document.new
11
- pdf.text "\nA test document\n", align: :center, size: 18
15
+ pdf.text("\nA test document\n", align: :center, size: 18)
12
16
  # Slim::Template.new{ 'h1 A test document' }.render
13
- pdf.styled_text Slim::Template.new( SLIM_FILE ).render
14
- pdf.render_file 'test.pdf'
17
+ pdf.styled_text(Slim::Template.new(SLIM_FILE).render)
18
+ pdf.render_file('slim.pdf')
@@ -36,6 +36,18 @@ Some HTML entities: &euro; &times; &divide; &half; &laquo; &raquo; &copy;
36
36
  <br/>
37
37
 
38
38
  A span with a color: <span style="color: #4488CC">this is <span style="color: #ff0000; font-family: 'Courier'; font-size: 20px">courier red 20</span>, this is <span style="color: #008800; font-style: bold, italic">green bold italic</span>, this is <span style="letter-spacing: 2">character spacing 2</span>, this is <a href="http://www.google.com">a Google link</a></span>
39
+
40
+ <br/>
41
+ Line1<br/>Line2<br/>Line3
42
+ <br />
43
+ Word1
44
+ Word2
45
+
46
+ Word3
47
+ <br/>
48
+ <br/>
49
+ Line4
50
+
39
51
  <h3 style="mode: stroke">Stroke mode</h3>
40
52
  <div style="font-size: 14px; line-height: 12px; text-align: justify">line-height test... Lorem ipsum dolor sit amet, consectetur <small>adipisicing</small> elit, sed do eiusmod <em>tempor</em> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure <strong>dolor</strong> in reprehenderit in voluptate velit.</div>
41
53
  <hr/>
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prawn-styled-text/prawn-styled-text'
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PrawnStyledText
2
4
  class HighlightCallback
3
- def initialize( pdf )
5
+ def initialize(pdf)
4
6
  @document = pdf
5
7
  end
6
8
 
7
- def set_color( color )
8
- @color = color ? color : DEF_BG_MARK
9
+ def set_color(color) # rubocop:disable Naming/AccessorMethodName
10
+ @color = color || DEF_BG_MARK
9
11
  end
10
12
 
11
- def render_behind( fragment )
13
+ def render_behind(fragment)
12
14
  original_color = @document.fill_color
13
15
  @document.fill_color = @color
14
16
  @document.fill_rectangle(fragment.top_left, fragment.width, fragment.height)
@@ -17,14 +19,14 @@ module PrawnStyledText
17
19
  end
18
20
 
19
21
  class StrikeThroughCallback
20
- def initialize( pdf )
22
+ def initialize(pdf)
21
23
  @document = pdf
22
24
  end
23
25
 
24
- def render_in_front( fragment )
25
- y = ( fragment.top_left[1] + fragment.bottom_left[1] ) / 2
26
+ def render_in_front(fragment)
27
+ y = (fragment.top_left[1] + fragment.bottom_left[1]) / 2
26
28
  @document.stroke do
27
- @document.line [ fragment.top_left[0], y ], [ fragment.top_right[0], y ]
29
+ @document.line [fragment.top_left[0], y], [fragment.top_right[0], y]
28
30
  end
29
31
  end
30
32
  end
@@ -1,18 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prawn'
2
4
 
3
5
  Prawn::Document.class_eval do
4
- def styled_text( data )
6
+ def styled_text(data)
5
7
  parts = []
6
8
  text_options = {}
7
9
  extra_options = { margin_left: 0 }
8
10
  oga = Oga.parse_html data
9
11
  PrawnStyledText::traverse oga.children do |type, text, data|
10
- context = if type == :text_node
11
- PrawnStyledText::text_node( self, data )
12
+ context =
13
+ if type == :text_node
14
+ PrawnStyledText::text_node(self, data)
12
15
  elsif type == :opening_tag
13
- PrawnStyledText::opening_tag( self, data )
16
+ PrawnStyledText::opening_tag(self, data)
14
17
  else
15
- PrawnStyledText::closing_tag( self, data )
18
+ PrawnStyledText::closing_tag(self, data)
16
19
  end
17
20
  if context[:flush] && parts.any? # flush current parts
18
21
  parts[0][:text] = parts[0][:text].lstrip
@@ -23,8 +26,8 @@ Prawn::Document.class_eval do
23
26
  end
24
27
  if parts.any?
25
28
  parts[0][:text] = extra_options[:pre] + parts[0][:text] if extra_options[:pre]
26
- self.indent( extra_options[:margin_left] ) do
27
- self.formatted_text parts, text_options
29
+ indent(extra_options[:margin_left]) do
30
+ formatted_text(parts, text_options)
28
31
  end
29
32
  end
30
33
  parts = []
@@ -34,44 +37,44 @@ Prawn::Document.class_eval do
34
37
  options = context[:options]
35
38
  if type == :text_node
36
39
  text_options[:align] = options[:'text-align'].to_sym if options[:'text-align']
37
- margin_top = options.delete( :'margin-top' ).to_i
38
- self.move_down( margin_top ) if margin_top > 0
39
- margin_left = options.delete( :'margin-left' ).to_i
40
- extra_options[:margin_left] = margin_left if margin_left > 0
41
- if !text_options[:leading] && ( leading = options.delete( :'line-height' ).to_i ) > 0
40
+ margin_top = options.delete(:'margin-top').to_i
41
+ move_down(margin_top) if margin_top.positive?
42
+ margin_left = options.delete(:'margin-left').to_i
43
+ extra_options[:margin_left] = margin_left if margin_left.positive?
44
+ if !text_options[:leading] && (leading = options.delete(:'line-height').to_i).positive?
42
45
  text_options[:leading] = leading
43
46
  end
44
47
  text_options[:mode] = options[:mode].to_sym if options[:mode]
45
48
  extra_options[:pre] = context[:pre] if context[:pre]
46
- parts << { text: text }.merge( options ) # push the data
49
+ parts << { text: text }.merge(options) # push the data
47
50
  elsif type == :closing_tag
48
- self.formatted_text( context[:text] ) if context[:text]
51
+ formatted_text(context[:text]) if context[:text]
49
52
  if context[:tag] == :hr
50
- self.dash( options[:dash].include?( ',' ) ? options[:dash].split( ',' ).map( &:to_i ) : options[:dash].to_i ) if options[:dash]
53
+ dash(options[:dash].include?(',') ? options[:dash].split(',').map(&:to_i) : options[:dash].to_i) if options[:dash]
51
54
  if options[:color]
52
- last_stroke_color = self.stroke_color
53
- self.stroke_color( options[:color] )
55
+ last_stroke_color = stroke_color
56
+ stroke_color(options[:color])
54
57
  end
55
- self.stroke_horizontal_rule
56
- self.stroke_color( last_stroke_color ) if options[:color]
57
- self.undash if options[:dash]
58
+ stroke_horizontal_rule
59
+ stroke_color(last_stroke_color) if options[:color]
60
+ undash if options[:dash]
58
61
  elsif context[:tag] == :img && context[:src]
59
62
  image_options = {}
60
63
  image_options[:scale] = options[:'image-scale'].to_f if options[:'image-scale']
61
64
  if options[:'image-at']
62
- xy = options[:'image-at'].split( ',' ).map &:to_i
65
+ xy = options[:'image-at'].split(',').map &:to_i
63
66
  image_options[:at] = xy if xy.count == 2
64
67
  end
65
68
  if options[:'image-position']
66
69
  pos = options[:'image-position'].to_i
67
- image_options[:position] = pos > 0 ? pos : options[:'image-position']
70
+ image_options[:position] = pos.positive? ? pos : options[:'image-position']
68
71
  end
69
72
  image_options[:width] = options[:width] if options[:width]
70
73
  image_options[:height] = options[:height] if options[:height]
71
- self.image context[:src], image_options
74
+ image context[:src], image_options
72
75
  end
73
76
  end
74
77
  end
75
- self.formatted_text parts, text_options
78
+ formatted_text(parts, text_options)
76
79
  end
77
80
  end
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'oga'
2
4
  require_relative 'callbacks'
3
5
  require_relative 'prawn-document'
4
6
 
5
7
  module PrawnStyledText
6
- BLOCK_TAGS = [ :br, :div, :h1, :h2, :h3, :h4, :h5, :h6, :hr, :li, :p, :ul ]
8
+ BLOCK_TAGS = [:br, :div, :h1, :h2, :h3, :h4, :h5, :h6, :hr, :li, :p, :ul].freeze
7
9
  DEF_BG_MARK = 'ffff00'
8
10
  DEF_HEADING_T = 16
9
11
  DEF_HEADING_H = 8
10
12
  DEF_MARGIN_UL = 15
11
13
  DEF_SYMBOL_UL = "\x95 "
12
- HEADINGS = { h1: 32, h2: 24, h3: 20, h4: 16, h5: 14, h6: 13 }
13
- RENAME = { 'font-family': :font, 'font-size': :size, 'font-style': :styles, 'letter-spacing': :character_spacing }
14
+ HEADINGS = { h1: 32, h2: 24, h3: 20, h4: 16, h5: 14, h6: 13 }.freeze
15
+ RENAME = { 'font-family': :font, 'font-size': :size, 'font-style': :styles, 'letter-spacing': :character_spacing }.freeze
14
16
 
15
17
  @@margin_ul = 0
16
18
  @@symbol_ul = ''
19
+ @@last_el = nil
17
20
 
18
- def self.adjust_values( pdf, values )
21
+ def self.adjust_values(pdf, values)
19
22
  ret = {}
20
23
  values.each do |k, v|
21
24
  key = k.to_sym
22
- key = RENAME[key] if RENAME.include?( key )
23
- ret[key] = case key
25
+ key = RENAME[key] if RENAME.include?(key)
26
+ ret[key] =
27
+ case key
24
28
  when :character_spacing
25
29
  v.to_f
26
30
  when :color
@@ -30,14 +34,14 @@ module PrawnStyledText
30
34
  matches[3] || matches[2] || matches[1] || ''
31
35
  when :height
32
36
  i = v.to_i
33
- v.include?( '%' ) ? ( i * pdf.bounds.height * 0.01 ) : i
37
+ v.include?('%') ? (i * pdf.bounds.height * 0.01) : i
34
38
  when :size
35
39
  v.to_i
36
40
  when :styles
37
- v.split( ',' ).map { |s| s.strip.to_sym }
41
+ v.split(',').map { |s| s.strip.to_sym }
38
42
  when :width
39
43
  i = v.to_i
40
- v.include?( '%' ) ? ( i * pdf.bounds.width * 0.01 ) : i
44
+ v.include?('%') ? (i * pdf.bounds.width * 0.01) : i
41
45
  else
42
46
  v
43
47
  end
@@ -45,13 +49,13 @@ module PrawnStyledText
45
49
  ret
46
50
  end
47
51
 
48
- def self.closing_tag( pdf, data )
52
+ def self.closing_tag(pdf, data)
49
53
  context = { tag: data[:name], options: {} }
50
54
  context[:flush] ||= true if BLOCK_TAGS.include? data[:name]
51
55
  # Evalutate tag
52
56
  case data[:name]
53
57
  when :br # new line
54
- context[:text] ||= [ { text: "\n" } ]
58
+ context[:text] ||= [ { text: "\n" } ] if @@last_el == :br
55
59
  when :img # image
56
60
  context[:flush] ||= true
57
61
  context[:src] = data[:node].get 'src'
@@ -60,29 +64,29 @@ module PrawnStyledText
60
64
  end
61
65
  # Evalutate attributes
62
66
  attributes = data[:node].get 'style'
63
- context[:options] = adjust_values( pdf, attributes.scan( /\s*([^:]+):\s*([^;]+)[;]*/ ) ) if attributes
67
+ context[:options] = adjust_values(pdf, attributes.scan(/\s*([^:]+):\s*([^;]+)[;]*/)) if attributes
64
68
  context
65
69
  end
66
70
 
67
- def self.opening_tag( pdf, data )
71
+ def self.opening_tag(pdf, data)
68
72
  context = { tag: data[:name], options: {} }
69
73
  context[:flush] ||= true if BLOCK_TAGS.include? data[:name]
70
74
  # Evalutate attributes
71
75
  attributes = data[:node].get 'style'
72
- context[:options].merge!( adjust_values( pdf, attributes.scan( /\s*([^:]+):\s*([^;]+)[;]*/ ) ) ) if attributes
76
+ context[:options].merge!(adjust_values(pdf, attributes.scan(/\s*([^:]+):\s*([^;]+)[;]*/))) if attributes
73
77
  if data[:name] == :ul
74
- @@margin_ul += ( context[:options][:'margin-left'] ? context[:options][:'margin-left'].to_i : DEF_MARGIN_UL )
78
+ @@margin_ul += (context[:options][:'margin-left'] ? context[:options][:'margin-left'].to_i : DEF_MARGIN_UL)
75
79
  @@symbol_ul = if context[:options][:'list-symbol']
76
80
  matches = context[:options][:'list-symbol'].match /'([^']*)'|"([^"]*)"|(.*)/
77
81
  matches[3] || matches[2] || matches[1] || ''
78
82
  else
79
- DEF_SYMBOL_UL
83
+ DEF_SYMBOL_UL.dup
80
84
  end
81
85
  end
82
86
  context
83
87
  end
84
88
 
85
- def self.text_node( pdf, data )
89
+ def self.text_node(pdf, data)
86
90
  context = { pre: '', options: {} }
87
91
  styles = []
88
92
  font_size = pdf.font_size
@@ -96,7 +100,7 @@ module PrawnStyledText
96
100
  when :b, :strong # bold
97
101
  styles.push :bold
98
102
  when :del, :s
99
- @@strike_through ||= StrikeThroughCallback.new( pdf )
103
+ @@strike_through ||= StrikeThroughCallback.new(pdf)
100
104
  context[:options][:callback] = @@strike_through
101
105
  when :h1, :h2, :h3, :h4, :h5, :h6
102
106
  context[:options][:size] = HEADINGS[tag]
@@ -106,9 +110,9 @@ module PrawnStyledText
106
110
  styles.push :italic
107
111
  when :li # list item
108
112
  context[:options][:'margin-left'] = @@margin_ul
109
- context[:pre] = @@symbol_ul.force_encoding( 'windows-1252' ).encode( 'UTF-8' )
113
+ context[:pre] = @@symbol_ul.force_encoding('windows-1252').encode('UTF-8')
110
114
  when :mark
111
- @@highlight ||= HighlightCallback.new( pdf )
115
+ @@highlight ||= HighlightCallback.new(pdf)
112
116
  @@highlight.set_color nil
113
117
  context[:options][:callback] = @@highlight
114
118
  when :small
@@ -120,8 +124,8 @@ module PrawnStyledText
120
124
  # Evalutate attributes
121
125
  attributes = part[:node].get 'style'
122
126
  if attributes
123
- values = adjust_values( pdf, attributes.scan( /\s*([^:]+):\s*([^;]+)[;]*/ ) )
124
- @@highlight.set_color( values[:background].delete( '#' ) ) if tag == :mark && values[:background]
127
+ values = adjust_values(pdf, attributes.scan(/\s*([^:]+):\s*([^;]+)[;]*/))
128
+ @@highlight.set_color(values[:background].delete('#')) if tag == :mark && values[:background]
125
129
  context[:options].merge! values
126
130
  end
127
131
  font_size = context[:options][:size] if font_size
@@ -129,16 +133,19 @@ module PrawnStyledText
129
133
  context
130
134
  end
131
135
 
132
- def self.traverse( nodes, context = [], &block )
136
+ def self.traverse(nodes, context = [], &block)
133
137
  nodes.each do |node|
134
138
  if node.is_a? Oga::XML::Text
135
- yield :text_node, node.text.delete( "\n\r" ), context
139
+ text = node.text.delete("\n\r")
140
+ yield :text_node, text, context
141
+ @@last_el = nil unless text.empty?
136
142
  elsif node.is_a? Oga::XML::Element
137
143
  element = { name: node.name.to_sym, node: node }
138
144
  yield :opening_tag, element[:name], element
139
- context.push( element )
140
- traverse( node.children, context, &block ) if node.children.count > 0
145
+ context.push(element)
146
+ traverse(node.children, context, &block) if node.children.count > 0
141
147
  yield :closing_tag, element[:name], context.pop
148
+ @@last_el = element[:name]
142
149
  end
143
150
  end
144
151
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PrawnStyledText
2
- VERSION = '0.1.4'
4
+ VERSION = '0.1.5'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('../lib', __FILE__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'prawn-styled-text/version'
@@ -15,6 +17,8 @@ Gem::Specification.new do |spec|
15
17
  spec.files = `git ls-files -z`.split("\x0")
16
18
  spec.require_paths = ['lib']
17
19
 
18
- spec.add_runtime_dependency 'prawn', '~> 2'
19
- spec.add_runtime_dependency 'oga', '~> 2'
20
+ spec.add_runtime_dependency 'oga', '~> 2.16'
21
+ spec.add_runtime_dependency 'prawn', '~> 2.2.2'
22
+
23
+ spec.add_development_dependency 'rubocop', '~> 0.76'
20
24
  end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn-styled-text
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Roccoberton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-19 00:00:00.000000000 Z
11
+ date: 2019-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: prawn
14
+ name: oga
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '2.16'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2'
26
+ version: '2.16'
27
27
  - !ruby/object:Gem::Dependency
28
- name: oga
28
+ name: prawn
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2'
33
+ version: 2.2.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2'
40
+ version: 2.2.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.76'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.76'
41
55
  description: A Prawn PDF component which adds basic HTML support
42
56
  email: mat@blocknot.es
43
57
  executables: []
@@ -82,8 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
96
  - !ruby/object:Gem::Version
83
97
  version: '0'
84
98
  requirements: []
85
- rubyforge_project:
86
- rubygems_version: 2.5.2
99
+ rubygems_version: 3.0.2
87
100
  signing_key:
88
101
  specification_version: 4
89
102
  summary: Prawn PDF styled text