prawn-table-html 0.0.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +236 -0
- data/lib/prawn-html.rb +180 -0
- data/lib/prawn_html/attributes.rb +166 -0
- data/lib/prawn_html/callbacks/background.rb +19 -0
- data/lib/prawn_html/callbacks/strike_through.rb +18 -0
- data/lib/prawn_html/context.rb +100 -0
- data/lib/prawn_html/document_renderer.rb +172 -0
- data/lib/prawn_html/html_parser.rb +104 -0
- data/lib/prawn_html/instance.rb +18 -0
- data/lib/prawn_html/pdf_wrapper.rb +145 -0
- data/lib/prawn_html/tag.rb +93 -0
- data/lib/prawn_html/tags/a.rb +20 -0
- data/lib/prawn_html/tags/b.rb +13 -0
- data/lib/prawn_html/tags/blockquote.rb +25 -0
- data/lib/prawn_html/tags/body.rb +13 -0
- data/lib/prawn_html/tags/br.rb +21 -0
- data/lib/prawn_html/tags/code.rb +13 -0
- data/lib/prawn_html/tags/col.rb +37 -0
- data/lib/prawn_html/tags/colgroup.rb +13 -0
- data/lib/prawn_html/tags/del.rb +13 -0
- data/lib/prawn_html/tags/div.rb +13 -0
- data/lib/prawn_html/tags/h.rb +49 -0
- data/lib/prawn_html/tags/hr.rb +39 -0
- data/lib/prawn_html/tags/i.rb +13 -0
- data/lib/prawn_html/tags/img.rb +31 -0
- data/lib/prawn_html/tags/li.rb +39 -0
- data/lib/prawn_html/tags/mark.rb +13 -0
- data/lib/prawn_html/tags/ol.rb +43 -0
- data/lib/prawn_html/tags/p.rb +23 -0
- data/lib/prawn_html/tags/pre.rb +25 -0
- data/lib/prawn_html/tags/small.rb +15 -0
- data/lib/prawn_html/tags/span.rb +9 -0
- data/lib/prawn_html/tags/sub.rb +13 -0
- data/lib/prawn_html/tags/sup.rb +13 -0
- data/lib/prawn_html/tags/table.rb +53 -0
- data/lib/prawn_html/tags/tbody.rb +13 -0
- data/lib/prawn_html/tags/td.rb +43 -0
- data/lib/prawn_html/tags/th.rb +43 -0
- data/lib/prawn_html/tags/tr.rb +37 -0
- data/lib/prawn_html/tags/u.rb +13 -0
- data/lib/prawn_html/tags/ul.rb +40 -0
- data/lib/prawn_html/utils.rb +139 -0
- data/lib/prawn_html/version.rb +5 -0
- metadata +131 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrawnHtml
|
4
|
+
module Tags
|
5
|
+
class Ul < Tag
|
6
|
+
ELEMENTS = [:ul].freeze
|
7
|
+
|
8
|
+
MARGIN_TOP = 15
|
9
|
+
MARGIN_LEFT = 40
|
10
|
+
MARGIN_BOTTOM = 15
|
11
|
+
|
12
|
+
def initialize(tag, attributes: {}, options: {})
|
13
|
+
super
|
14
|
+
@first_level = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def block?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def on_context_add(context)
|
22
|
+
return if context.map(&:tag).count { |el| el == :ul } > 1
|
23
|
+
|
24
|
+
@first_level = true
|
25
|
+
end
|
26
|
+
|
27
|
+
def tag_styles
|
28
|
+
if @first_level
|
29
|
+
<<~STYLES
|
30
|
+
margin-top: #{MARGIN_TOP}px;
|
31
|
+
margin-left: #{MARGIN_LEFT}px;
|
32
|
+
margin-bottom: #{MARGIN_BOTTOM}px;
|
33
|
+
STYLES
|
34
|
+
else
|
35
|
+
"margin-left: #{MARGIN_LEFT}px"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrawnHtml
|
4
|
+
module Utils
|
5
|
+
NORMALIZE_STYLES = {
|
6
|
+
'bold' => :bold,
|
7
|
+
'italic' => :italic,
|
8
|
+
'sub' => :subscript,
|
9
|
+
'super' => :superscript,
|
10
|
+
'underline' => :underline
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
# Setup a background callback
|
14
|
+
#
|
15
|
+
# @param value [String] HTML string color
|
16
|
+
#
|
17
|
+
# @return [Array] callback name and argument value
|
18
|
+
def callback_background(value, options: nil)
|
19
|
+
['Background', convert_color(value, options: options)]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Setup a strike through callback
|
23
|
+
#
|
24
|
+
# @param value [String] unused
|
25
|
+
#
|
26
|
+
# @return [Array] callback name and argument value
|
27
|
+
def callback_strike_through(value, options: nil)
|
28
|
+
['StrikeThrough', nil]
|
29
|
+
end
|
30
|
+
|
31
|
+
# Converts a color string
|
32
|
+
#
|
33
|
+
# Supported formats:
|
34
|
+
# - 3 hex digits, ex. `color: #FB1`;
|
35
|
+
# - 6 hex digits, ex. `color: #abcdef`;
|
36
|
+
# - RGB, ex. `color: RGB(64, 0, 128)`;
|
37
|
+
# - color name, ex. `color: red`.
|
38
|
+
#
|
39
|
+
# @param value [String] HTML string color
|
40
|
+
#
|
41
|
+
# @return [String] adjusted string color or nil if value is invalid
|
42
|
+
def convert_color(value, options: nil)
|
43
|
+
val = value.to_s.strip.downcase
|
44
|
+
return Regexp.last_match[1] if val.match /\A#([a-f0-9]{6})\Z/ # rubocop:disable Performance/RedundantMatch
|
45
|
+
|
46
|
+
if val.match /\A#([a-f0-9]{3})\Z/ # rubocop:disable Performance/RedundantMatch
|
47
|
+
r, g, b = Regexp.last_match[1].chars
|
48
|
+
return (r * 2) + (g * 2) + (b * 2)
|
49
|
+
end
|
50
|
+
if val.match /\Argb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\Z/ # rubocop:disable Performance/RedundantMatch
|
51
|
+
r, g, b = Regexp.last_match[1..3].map { |v| v.to_i.to_s(16) }
|
52
|
+
return "#{r.rjust(2, '0')}#{g.rjust(2, '0')}#{b.rjust(2, '0')}"
|
53
|
+
end
|
54
|
+
|
55
|
+
COLORS[val]
|
56
|
+
end
|
57
|
+
|
58
|
+
# Converts a decimal number string
|
59
|
+
#
|
60
|
+
# @param value [String] string decimal
|
61
|
+
#
|
62
|
+
# @return [Float] converted and rounded float number
|
63
|
+
def convert_float(value, options: nil)
|
64
|
+
val = value&.gsub(/[^0-9.]/, '') || ''
|
65
|
+
val.to_f.round(4)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Converts a size string
|
69
|
+
#
|
70
|
+
# @param value [String] size string
|
71
|
+
# @param options [Numeric] container size
|
72
|
+
#
|
73
|
+
# @return [Float] converted and rounded size
|
74
|
+
def convert_size(value, options: nil)
|
75
|
+
val = value&.gsub(/[^0-9.]/, '') || ''
|
76
|
+
val =
|
77
|
+
if options && value&.include?('%')
|
78
|
+
val.to_f * options * 0.01
|
79
|
+
else
|
80
|
+
val.to_f * PrawnHtml::PX
|
81
|
+
end
|
82
|
+
val.round(4)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Converts a string to symbol
|
86
|
+
#
|
87
|
+
# @param value [String] string
|
88
|
+
#
|
89
|
+
# @return [Symbol] symbol
|
90
|
+
def convert_symbol(value, options: nil)
|
91
|
+
value.to_sym if value && !value.match?(/\A\s*\Z/)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Copy a value without conversion
|
95
|
+
#
|
96
|
+
# @param value
|
97
|
+
#
|
98
|
+
# @return value
|
99
|
+
def copy_value(value, options: nil)
|
100
|
+
value
|
101
|
+
end
|
102
|
+
|
103
|
+
# Filter font family
|
104
|
+
#
|
105
|
+
# @param value [String] string value
|
106
|
+
#
|
107
|
+
# @return [Symbol] unquoted font family or nil if the input value is 'inherit'
|
108
|
+
def filter_font_family(value, options: nil)
|
109
|
+
result = unquote(value, options: options)
|
110
|
+
result == 'inherit' ? nil : result
|
111
|
+
end
|
112
|
+
|
113
|
+
# Normalize a style value
|
114
|
+
#
|
115
|
+
# @param value [String] string value
|
116
|
+
# @param accepted_values [Array] allowlist of valid values (symbols)
|
117
|
+
#
|
118
|
+
# @return [Symbol] style value or nil
|
119
|
+
def normalize_style(value, accepted_values)
|
120
|
+
val = value&.strip&.downcase
|
121
|
+
ret = NORMALIZE_STYLES[val]
|
122
|
+
accepted_values.include?(ret) ? ret : nil
|
123
|
+
end
|
124
|
+
|
125
|
+
# Unquotes a string
|
126
|
+
#
|
127
|
+
# @param value [String] string
|
128
|
+
#
|
129
|
+
# @return [String] string without quotes at the beginning/ending
|
130
|
+
def unquote(value, options: nil)
|
131
|
+
(value&.strip || +'').tap do |val|
|
132
|
+
val.gsub!(/\A['"]|["']\Z/, '')
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
module_function :callback_background, :callback_strike_through, :convert_color, :convert_float, :convert_size,
|
137
|
+
:convert_symbol, :copy_value, :filter_font_family, :normalize_style, :unquote
|
138
|
+
end
|
139
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: prawn-table-html
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mattia Roccoberton
|
8
|
+
- Anthony Amar
|
9
|
+
- Nerya
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2025-01-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: oga
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.3'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '3.3'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: prawn
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '2.4'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.4'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: prawn-table
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.2'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.2'
|
57
|
+
description: HTML renderer for Prawn PDF with table support, forked from Prawn HTML
|
58
|
+
email: a.amar@nerya.fr
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- LICENSE.txt
|
64
|
+
- README.md
|
65
|
+
- lib/prawn-html.rb
|
66
|
+
- lib/prawn_html/attributes.rb
|
67
|
+
- lib/prawn_html/callbacks/background.rb
|
68
|
+
- lib/prawn_html/callbacks/strike_through.rb
|
69
|
+
- lib/prawn_html/context.rb
|
70
|
+
- lib/prawn_html/document_renderer.rb
|
71
|
+
- lib/prawn_html/html_parser.rb
|
72
|
+
- lib/prawn_html/instance.rb
|
73
|
+
- lib/prawn_html/pdf_wrapper.rb
|
74
|
+
- lib/prawn_html/tag.rb
|
75
|
+
- lib/prawn_html/tags/a.rb
|
76
|
+
- lib/prawn_html/tags/b.rb
|
77
|
+
- lib/prawn_html/tags/blockquote.rb
|
78
|
+
- lib/prawn_html/tags/body.rb
|
79
|
+
- lib/prawn_html/tags/br.rb
|
80
|
+
- lib/prawn_html/tags/code.rb
|
81
|
+
- lib/prawn_html/tags/col.rb
|
82
|
+
- lib/prawn_html/tags/colgroup.rb
|
83
|
+
- lib/prawn_html/tags/del.rb
|
84
|
+
- lib/prawn_html/tags/div.rb
|
85
|
+
- lib/prawn_html/tags/h.rb
|
86
|
+
- lib/prawn_html/tags/hr.rb
|
87
|
+
- lib/prawn_html/tags/i.rb
|
88
|
+
- lib/prawn_html/tags/img.rb
|
89
|
+
- lib/prawn_html/tags/li.rb
|
90
|
+
- lib/prawn_html/tags/mark.rb
|
91
|
+
- lib/prawn_html/tags/ol.rb
|
92
|
+
- lib/prawn_html/tags/p.rb
|
93
|
+
- lib/prawn_html/tags/pre.rb
|
94
|
+
- lib/prawn_html/tags/small.rb
|
95
|
+
- lib/prawn_html/tags/span.rb
|
96
|
+
- lib/prawn_html/tags/sub.rb
|
97
|
+
- lib/prawn_html/tags/sup.rb
|
98
|
+
- lib/prawn_html/tags/table.rb
|
99
|
+
- lib/prawn_html/tags/tbody.rb
|
100
|
+
- lib/prawn_html/tags/td.rb
|
101
|
+
- lib/prawn_html/tags/th.rb
|
102
|
+
- lib/prawn_html/tags/tr.rb
|
103
|
+
- lib/prawn_html/tags/u.rb
|
104
|
+
- lib/prawn_html/tags/ul.rb
|
105
|
+
- lib/prawn_html/utils.rb
|
106
|
+
- lib/prawn_html/version.rb
|
107
|
+
homepage:
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata:
|
111
|
+
rubygems_mfa_required: 'true'
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 2.5.0
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubygems_version: 3.5.22
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Prawn Table PDF - HTML renderer, forked from Prawn HTML
|
131
|
+
test_files: []
|