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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17739952ee2010c4787bc33475552edf2f4a4053
4
- data.tar.gz: 3e5140a764870fe43268d1089cb926315f8cfc85
3
+ metadata.gz: f516bc8a83378731a7fa9962c56543784bbaf8d9
4
+ data.tar.gz: 9851cb1589a9cb5b30aed2061b38c8686202b02e
5
5
  SHA512:
6
- metadata.gz: 8b2d33e402c811c8b0705e90f914e40bb5cdcecb21dadc15af0b49fdccdeeb21a3a2afb4c35be7f66f91c09155d65e7c245e3729fa99d4d9cfcf766f115c17f3
7
- data.tar.gz: 1f0bbca292059d5f856c5460ad4819f7dd4ee830f28fc8e1efd301fa65d5ba050d16d03a6c229564d1a2e5234c082a66c6ad222e2a5f12142708adccf6638578
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.0.0
4
- - 2.1.9
5
- - 2.2.5
6
- - 2.3.1
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
- - gem install bundler
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", "~> 1.3.0"
23
- spec.add_dependency "nokogiri", "~> 1.7.1"
24
- spec.add_dependency "rubyzip", "~> 1.0"
22
+ spec.add_dependency "dimensions"
23
+ spec.add_dependency "nokogiri"
24
+ spec.add_dependency "rubyzip"
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.12"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "minitest", "~> 5.0"
29
- spec.add_development_dependency "fakeweb", "~> 1.3"
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
@@ -13,6 +13,7 @@ module Html2Odt
13
13
  ODT_TEMPLATE = File.join(File.dirname(__FILE__), "..", "odt", "template.odt")
14
14
  end
15
15
 
16
+ require "html2odt/dimensions_patches"
16
17
  require "html2odt/document"
17
18
  require "html2odt/image"
18
19
  require "html2odt/version"
@@ -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
@@ -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, xml)
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
 
@@ -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
- @width = reader.width
38
+
39
+ @width = reader.width
38
40
  @height = reader.height
39
- @angle = reader.angle
41
+ @angle = reader.angle
40
42
 
41
43
  @valid = true
42
44
  else
@@ -1,3 +1,3 @@
1
1
  module Html2Odt
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.6"
3
3
  end
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.0
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: 2017-03-30 00:00:00.000000000 Z
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: 1.3.0
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: 1.3.0
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: 1.7.1
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: 1.7.1
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: '1.0'
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: '1.0'
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: '1.12'
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: '1.12'
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: '10.0'
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: '10.0'
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: '5.0'
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: '5.0'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: fakeweb
98
+ name: webmock
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '1.3'
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: '1.3'
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.5.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