ghostwriter 1.3.0 → 1.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/.ruby-version +1 -1
- data/Gemfile +4 -4
- data/RELEASE_NOTES.md +15 -0
- data/Rakefile +4 -0
- data/ghostwriter.gemspec +1 -1
- data/lib/ghostwriter/version.rb +1 -1
- data/lib/ghostwriter/writer.rb +27 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2bacc9e2d98409f7220a3b21d0cc57f18ff9c6768fb3175c0f06fdbef767e95
|
4
|
+
data.tar.gz: 5dba28996b1589fb94c0edbf7b3897a7610267438389ed57dbb009377544be93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 101966376b10eec407d0a5b98bdb11ddfa3830c4532bc77b5e4ad4aeba41e05925c72dd78d25b6fc34f507f7ea9a32809757f735f8d6b6aa15d079a436c0db9b
|
7
|
+
data.tar.gz: dc870788a2971023a8276369d2953aa68f801edf31eeefd7bd6513400d453cf6e02fa728856f67a892e91fd8535c5607cca1cb244302d18e76bdc1c089b208e3
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-3.
|
1
|
+
ruby-3.3.0
|
data/Gemfile
CHANGED
@@ -7,12 +7,12 @@ gemspec
|
|
7
7
|
|
8
8
|
group :development do
|
9
9
|
gem 'bundler', '~> 2.4'
|
10
|
-
gem 'rake', '~> 13.
|
11
|
-
gem 'rubocop', '~> 1.
|
12
|
-
gem 'rubocop-performance', '~> 1.
|
10
|
+
gem 'rake', '~> 13.2'
|
11
|
+
gem 'rubocop', '~> 1.69'
|
12
|
+
gem 'rubocop-performance', '~> 1.23'
|
13
13
|
end
|
14
14
|
|
15
15
|
group :test do
|
16
|
-
gem 'rspec', '~> 3.
|
16
|
+
gem 'rspec', '~> 3.13'
|
17
17
|
gem 'simplecov', '~> 0.22'
|
18
18
|
end
|
data/RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
+
## 1.4.0 (2023-09-13)
|
4
|
+
|
5
|
+
### Major
|
6
|
+
|
7
|
+
* none
|
8
|
+
|
9
|
+
### Minor
|
10
|
+
|
11
|
+
* Support for graceful handling of nested tables
|
12
|
+
* Increased minimum ruby to 3.3
|
13
|
+
|
14
|
+
### Bugfixes
|
15
|
+
|
16
|
+
* none
|
17
|
+
|
3
18
|
## 1.3.0 (2023-09-13)
|
4
19
|
|
5
20
|
### Major
|
data/Rakefile
CHANGED
data/ghostwriter.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
32
|
spec.require_paths = ['lib']
|
33
33
|
|
34
|
-
spec.required_ruby_version = '>= 3.
|
34
|
+
spec.required_ruby_version = '>= 3.3'
|
35
35
|
|
36
36
|
spec.add_dependency 'nokogiri', '>= 1.12'
|
37
37
|
end
|
data/lib/ghostwriter/version.rb
CHANGED
data/lib/ghostwriter/writer.rb
CHANGED
@@ -149,21 +149,43 @@ module Ghostwriter
|
|
149
149
|
module TableWriter
|
150
150
|
def replace_tables(doc)
|
151
151
|
doc.css('table').each do |table|
|
152
|
+
# TODO: nokogiri chokes on table:not(table table), but support may come later https://github.com/sparklemotion/nokogiri/issues/3207
|
153
|
+
next if complex? table
|
154
|
+
|
152
155
|
# remove whitespace between nodes
|
153
156
|
table.search('//text()[normalize-space()=""]').remove
|
154
157
|
|
155
158
|
column_sizes = calculate_column_sizes(table)
|
156
159
|
|
157
|
-
table
|
158
|
-
replace_table_nodes(row, column_sizes)
|
159
|
-
|
160
|
-
row.replace("#{ row.inner_html }#{ @table_column }\n")
|
161
|
-
end
|
160
|
+
fancy_rows! table, column_sizes
|
162
161
|
|
163
162
|
add_table_header_underline(table, column_sizes)
|
164
163
|
|
165
164
|
table.replace("\n#{ table.inner_html }\n")
|
166
165
|
end
|
166
|
+
|
167
|
+
doc.css('table table').each do |table|
|
168
|
+
simple_rows! table
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# complex just means it contains a table or is itself nested
|
173
|
+
def complex?(table)
|
174
|
+
!table.css('table').empty? || !table.ancestors('table').empty?
|
175
|
+
end
|
176
|
+
|
177
|
+
def fancy_rows!(table, column_sizes)
|
178
|
+
table.search('./thead/tr', './tbody/tr', './tr').each do |row|
|
179
|
+
replace_table_nodes(row, column_sizes)
|
180
|
+
|
181
|
+
row.replace("#{ row.inner_html }#{ @table_column }\n")
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def simple_rows!(table)
|
186
|
+
table.search('./thead/tr', './tbody/tr', './tr').each do |row|
|
187
|
+
row.replace("\n#{ row.inner_html }\n")
|
188
|
+
end
|
167
189
|
end
|
168
190
|
|
169
191
|
def calculate_column_sizes(table)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ghostwriter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Miller
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -65,14 +65,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.3'
|
69
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
71
|
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '0'
|
74
74
|
requirements: []
|
75
|
-
rubygems_version: 3.
|
75
|
+
rubygems_version: 3.5.3
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: Converts HTML to plain text
|