Skip to content

Commit

Permalink
resolves #276 try to use KindleGen/EPUBCheck binary from $PATH
Browse files Browse the repository at this point in the history
  • Loading branch information
slonopotamus committed Jan 27, 2020
1 parent ccd90e5 commit 88c1c63
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 21 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ For a detailed view of what has changed, refer to the {uri-repo}/commits/master[
* make `KINDLEGEN` env var work again (#269)
* enable Pygments on non-Windows JRuby platforms (#264)
* provide a human-readable error message when we fail to find KindleGen (#268)
* try to use KindleGen/EPUBCheck binary from `$PATH` (#276)

== 1.5.0.alpha.11 (2020-01-26) - @slonopotamus

Expand Down
67 changes: 46 additions & 21 deletions lib/asciidoctor-epub3/packager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -615,24 +615,35 @@ def package options = {}
end
end

def distill_epub_to_mobi epub_file, target, compress
if !(kindlegen_cmd = ENV['KINDLEGEN']).nil?
argv = [kindlegen_cmd]
else
begin
require 'kindlegen' unless defined? ::Kindlegen
rescue LoadError => e
raise 'Unable to find KindleGen. Either install the kindlegen gem or set KINDLEGEN environment variable with path to KindleGen executable', cause: e
end
argv = [::Kindlegen.command.to_s]
def get_kindlegen_command
unless (result = ENV['KINDLEGEN']).nil?
logger.debug %(Using KINDLEGEN env variable: #{result})
return [result]
end

begin
require 'kindlegen' unless defined? ::Kindlegen
result = ::Kindlegen.command.to_s
logger.debug %(Using KindleGen from gem: #{result})
[result]
rescue LoadError => e
logger.debug %(#{e}; Using KindleGen from PATH)
['kindlegen']
end
end

def distill_epub_to_mobi epub_file, target, compress
mobi_file = ::File.basename target.sub(EpubExtensionRx, '.mobi')
compress_flag = KindlegenCompression[compress ? (compress.empty? ? '1' : compress.to_s) : '0']
argv += ['-dont_append_source', compress_flag, '-o', mobi_file, epub_file].compact

# This duplicates Kindlegen.run, but we want to override executable
out, err, res = Open3.capture3(*argv) do |r|
r.force_encoding 'UTF-8' if windows? && r.respond_to?(:force_encoding)
argv = get_kindlegen_command + ['-dont_append_source', compress_flag, '-o', mobi_file, epub_file].compact
begin
# This duplicates Kindlegen.run, but we want to override executable
out, err, res = Open3.capture3(*argv) do |r|
r.force_encoding 'UTF-8' if windows? && r.respond_to?(:force_encoding)
end
rescue Errno::ENOENT => e
raise 'Unable to run KindleGen. Either install the kindlegen gem or set KINDLEGEN environment variable with path to KindleGen executable', cause: e
end

out.each_line do |line|
Expand All @@ -650,15 +661,29 @@ def distill_epub_to_mobi epub_file, target, compress
end
end

def validate_epub epub_file
if !(epubcheck = ENV['EPUBCHECK']).nil?
argv = [epubcheck]
else
argv = [::Gem.ruby, ::Gem.bin_path('epubcheck-ruby', 'epubcheck')]
def get_epubcheck_command
unless (result = ENV['EPUBCHECK']).nil?
logger.debug %(Using EPUBCHECK env variable: #{result})
return [result]
end

begin
result = ::Gem.bin_path 'epubcheck-ruby', 'epubcheck'
logger.debug %(Using EPUBCheck from gem: #{result})
[::Gem.ruby, result]
rescue ::Gem::Exception => e
logger.debug %(#{e}; Using EPUBCheck from PATH)
['epubcheck']
end
end

argv += ['-w', epub_file]
out, err, res = Open3.capture3(*argv)
def validate_epub epub_file
argv = get_epubcheck_command + ['-w', epub_file]
begin
out, err, res = Open3.capture3(*argv)
rescue Errno::ENOENT => e
raise 'Unable to run EPUBCheck. Either install epubcheck-ruby gem or set EPUBCHECK environment variable with path to EPUBCheck executable', cause: e
end

out.each_line do |line|
logger.info line
Expand Down

0 comments on commit 88c1c63

Please sign in to comment.