html2odt 0.4.0 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +16 -5
- data/CHANGELOG.md +25 -0
- data/README.md +1 -1
- data/html2odt.gemspec +7 -7
- data/lib/html2odt.rb +1 -0
- data/lib/html2odt/dimensions_patches.rb +28 -0
- data/lib/html2odt/document.rb +7 -4
- data/lib/html2odt/image.rb +6 -4
- data/lib/html2odt/version.rb +1 -1
- metadata +33 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f516bc8a83378731a7fa9962c56543784bbaf8d9
|
4
|
+
data.tar.gz: 9851cb1589a9cb5b30aed2061b38c8686202b02e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f28b6b63b34290a0eaff83ed813ca0b7add7f57911bf89e965073b1fec4ea745c575f0f49ab0cf67a596090b444411d3507e5699279d74241164b65db08e792e
|
7
|
+
data.tar.gz: 55f00819a1e29f07a3de4a239c579cd7c7e33703ae948f8aec9ee56ea96666941b818e7e44395207887af5caac20f3ca8a5e145c8c6ec6b6168bb03f9e173d2f
|
data/.travis.yml
CHANGED
@@ -1,12 +1,23 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.
|
3
|
+
- 2.1.10
|
4
|
+
- 2.2.10
|
5
|
+
- 2.3.7
|
6
|
+
- 2.4.9
|
7
|
+
- 2.5.7
|
8
|
+
- 2.6.5
|
9
|
+
- 2.7.0
|
7
10
|
|
8
11
|
before_install:
|
9
|
-
|
12
|
+
# Bundler 2.0 requires at least Ruby 2.3. We need to explicitly install an
|
13
|
+
# older version of bundler for older Ruby versions since they can't / won't
|
14
|
+
# check their required versions on their own.
|
15
|
+
- |
|
16
|
+
if [[ "$(rvm current)" =~ ^ruby-2\.[012] ]]; then
|
17
|
+
gem install bundler -v '< 2.0'
|
18
|
+
else
|
19
|
+
gem install bundler
|
20
|
+
fi
|
10
21
|
|
11
22
|
cache: bundler
|
12
23
|
sudo: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
# v0.4.6 - 2021-03-23
|
2
|
+
|
3
|
+
Support resources behind redirects.
|
4
|
+
Check for source being a file before trying to read it
|
5
|
+
|
6
|
+
# v0.4.5 - 2021-01-06
|
7
|
+
|
8
|
+
Force binmode when writing out the ODT
|
9
|
+
|
10
|
+
# v0.4.4 - 2020-01-06
|
11
|
+
|
12
|
+
Fix exception occurring with some document contents
|
13
|
+
|
14
|
+
# v0.4.3 - 2017-12-15
|
15
|
+
|
16
|
+
Handle files smaller than 6144 bytes. Relaxed version requirements.
|
17
|
+
|
18
|
+
# v0.4.2 - 2017-12-15
|
19
|
+
|
20
|
+
Try harder to determine image dimensions.
|
21
|
+
|
22
|
+
# v0.4.1 - 2017-09-19
|
23
|
+
|
24
|
+
Add support for nokogiri 1.8 in adition to the currently supported versions
|
25
|
+
|
1
26
|
# v0.4.0 - 2017-03-30
|
2
27
|
|
3
28
|
Bump required nokogiri version
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ line tools by Aurélien Bompard are called **`x`**`html2odt`?
|
|
12
12
|
|
13
13
|
This project uses [nokogiri](http://www.nokogiri.org) to parse the HTML and
|
14
14
|
apply the XSLT transformations. Nokogiri implements a forgiving HTML parser and
|
15
|
-
tries be as forgiving as possible. Furthermore, the basic API expects HTML
|
15
|
+
tries to be as forgiving as possible. Furthermore, the basic API expects HTML
|
16
16
|
fragments, not full documents. We are not expecting the users of this library to
|
17
17
|
pass in a complete, valid XHTML document. A reasonably good piece of HTML should
|
18
18
|
be good enough. Therefore we skipped the `X` in the name as well.
|
data/html2odt.gemspec
CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
spec.executables << "html2odt.rb"
|
21
21
|
|
22
|
-
spec.add_dependency "dimensions"
|
23
|
-
spec.add_dependency "nokogiri"
|
24
|
-
spec.add_dependency "rubyzip"
|
22
|
+
spec.add_dependency "dimensions"
|
23
|
+
spec.add_dependency "nokogiri"
|
24
|
+
spec.add_dependency "rubyzip"
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler"
|
27
|
-
spec.add_development_dependency "rake"
|
28
|
-
spec.add_development_dependency "minitest"
|
29
|
-
spec.add_development_dependency "
|
26
|
+
spec.add_development_dependency "bundler"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "minitest"
|
29
|
+
spec.add_development_dependency "webmock"
|
30
30
|
end
|
data/lib/html2odt.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Html2Odt::DimensionsPatches
|
2
|
+
# Default implemenation of IO#peek from GEM_PATH/dimensions-1.3.0/lib/dimensions/io.rb:
|
3
|
+
#
|
4
|
+
# def peek
|
5
|
+
# unless no_peeking?
|
6
|
+
# read(pos + 1024) while @reader.width.nil? && pos < 6144
|
7
|
+
# rewind
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# It had two problems:
|
12
|
+
#
|
13
|
+
# a) if the file is shorter than 6144 bytes, it would keep reading infinitely
|
14
|
+
# b) if the width can only be detected after the 6144 limit, it would not work
|
15
|
+
# as expected
|
16
|
+
#
|
17
|
+
# Now we keep reading the file, until we can determine a width or until
|
18
|
+
# there's nothing left to read.
|
19
|
+
#
|
20
|
+
def peek
|
21
|
+
return if no_peeking?
|
22
|
+
|
23
|
+
while read(pos + 1024) && @reader.width.nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
rewind
|
27
|
+
end
|
28
|
+
end
|
data/lib/html2odt/document.rb
CHANGED
@@ -58,7 +58,7 @@ class Html2Odt::Document
|
|
58
58
|
xml = xslt_tranform(html, Html2Odt::XHTML2ODT_XSL)
|
59
59
|
|
60
60
|
xml = xml.sub('<?xml version="1.0" encoding="utf-8"?>', '')
|
61
|
-
xml = @tpl_content_xml.sub(CONTENT_REGEX
|
61
|
+
xml = @tpl_content_xml.sub(CONTENT_REGEX) { xml }
|
62
62
|
|
63
63
|
xml = xslt_tranform(xml, Html2Odt::XHTML2ODT_STYLES_XSL)
|
64
64
|
|
@@ -174,7 +174,7 @@ class Html2Odt::Document
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def write_to(path)
|
177
|
-
File.write(path, data)
|
177
|
+
File.write(path, data, mode: 'wb')
|
178
178
|
end
|
179
179
|
|
180
180
|
protected
|
@@ -363,8 +363,8 @@ class Html2Odt::Document
|
|
363
363
|
height = img["height"].to_i
|
364
364
|
width = height * image.height / image.width
|
365
365
|
else
|
366
|
-
width = image.width
|
367
|
-
height = image.height
|
366
|
+
width = image.width.to_i
|
367
|
+
height = image.height.to_i
|
368
368
|
end
|
369
369
|
|
370
370
|
img["width"] = "#{(width / DPI * INCH_TO_CM).round(2)}cm"
|
@@ -399,6 +399,9 @@ class Html2Odt::Document
|
|
399
399
|
def uri_to_file(uri)
|
400
400
|
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
|
401
401
|
resp = http.get(uri.path)
|
402
|
+
if resp.is_a?(Net::HTTPRedirection) and redirect_uri = URI.parse(resp['location'])
|
403
|
+
resp = http.get(redirect_uri)
|
404
|
+
end
|
402
405
|
|
403
406
|
return nil unless resp.is_a?(Net::HTTPSuccess)
|
404
407
|
|
data/lib/html2odt/image.rb
CHANGED
@@ -18,11 +18,12 @@ class Html2Odt::Image
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def valid?
|
21
|
-
return false if source.nil? or !File.readable?(source)
|
21
|
+
return false if source.nil? or !File.readable?(source) or !File.file?(source)
|
22
22
|
|
23
23
|
if @valid.nil?
|
24
24
|
File.open(source, "rb") do |io|
|
25
25
|
Dimensions(io)
|
26
|
+
io.extend Html2Odt::DimensionsPatches
|
26
27
|
|
27
28
|
# Interacting with Dimensions::Reader directly to
|
28
29
|
#
|
@@ -32,11 +33,12 @@ class Html2Odt::Image
|
|
32
33
|
io.send :peek
|
33
34
|
reader = io.instance_variable_get :@reader
|
34
35
|
|
35
|
-
if reader.type
|
36
|
+
if reader.type && reader.width && reader.height
|
36
37
|
@type = reader.type
|
37
|
-
|
38
|
+
|
39
|
+
@width = reader.width
|
38
40
|
@height = reader.height
|
39
|
-
@angle
|
41
|
+
@angle = reader.angle
|
40
42
|
|
41
43
|
@valid = true
|
42
44
|
else
|
data/lib/html2odt/version.rb
CHANGED
metadata
CHANGED
@@ -1,113 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html2odt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregor Schmidt (Planio)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dimensions
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
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:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
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:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubyzip
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: minitest
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '0'
|
111
111
|
description: html2odt generates ODT documents based on HTML fragments using xhtml2odt
|
112
112
|
email:
|
113
113
|
- gregor@plan.io
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- bin/html2odt.rb
|
130
130
|
- html2odt.gemspec
|
131
131
|
- lib/html2odt.rb
|
132
|
+
- lib/html2odt/dimensions_patches.rb
|
132
133
|
- lib/html2odt/document.rb
|
133
134
|
- lib/html2odt/image.rb
|
134
135
|
- lib/html2odt/version.rb
|
@@ -180,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
181
|
version: '0'
|
181
182
|
requirements: []
|
182
183
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.6.14.4
|
184
185
|
signing_key:
|
185
186
|
specification_version: 4
|
186
187
|
summary: html2odt generates ODT documents based on HTML fragments
|