14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/markdownator/converters/epub.rb', line 14
def convert(io, _stream_info, **_options)
Markdownator.require_optional("zip", feature: "EPUB conversion")
Markdownator.require_optional("nokogiri", feature: "EPUB conversion")
::Zip::File.open_buffer(io) do |zip|
opf_path = locate_opf(zip)
raise FileConversionError, "EPUB is missing its OPF package document" if opf_path.nil?
opf = Nokogiri::XML(read(zip, opf_path))
opf.remove_namespaces!
base = File.dirname(opf_path)
title = opf.at_xpath("//metadata/title")&.text&.strip
chapters = spine_documents(zip, opf, base)
return Result.new(markdown: chapters.join("\n\n"), title: title)
end
end
|