Class: EPUB::Parser
- Inherits:
-
Object
- Object
- EPUB::Parser
- Defined in:
- lib/epub/parser.rb,
lib/epub/parser/ocf.rb,
lib/epub/parser/version.rb,
lib/epub/parser/metadata.rb,
lib/epub/parser/publication.rb,
lib/epub/parser/xml_document.rb,
lib/epub/parser/content_document.rb,
lib/epub/parser/xml_document/refinements/oga.rb,
lib/epub/parser/xml_document/refinements/rexml.rb,
lib/epub/parser/xml_document/refinements/nokogiri.rb
Defined Under Namespace
Modules: Metadata Classes: ContentDocument, OCF, Publication, XMLDocument
Constant Summary collapse
- VERSION =
"0.4.8"
Class Method Summary collapse
-
.parse(filepath, container_adapter: nil, book: nil, initialize_with: nil, **options) ⇒ EPUB
Parse an EPUB file.
Instance Method Summary collapse
-
#initialize(filepath, container_adapter: nil, book: nil, initialize_with: nil, **options) ⇒ Parser
constructor
A new instance of Parser.
- #parse ⇒ Object
Constructor Details
#initialize(filepath, container_adapter: nil, book: nil, initialize_with: nil, **options) ⇒ Parser
Returns a new instance of Parser.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/epub/parser.rb', line 43 def initialize(filepath, container_adapter: nil, book: nil, initialize_with: nil, **) if filepath.to_s.encoding == Encoding::ASCII_8BIT # On Windows and macOS, encoding of file name is set by Ruby, # but on UNIX, always is ASCII-8BIT # See https://docs.ruby-lang.org/ja/2.7.0/class/IO.html filepath = filepath.to_s.dup require "nkf" filepath.force_encoding NKF.guess(filepath) end path_is_uri = (container_adapter == EPUB::OCF::PhysicalContainer::UnpackedURI or container_adapter == :UnpackedURI or EPUB::OCF::PhysicalContainer.adapter == EPUB::OCF::PhysicalContainer::UnpackedURI) raise "File #{filepath} not found" if !path_is_uri and !File.exist?(filepath) @filepath = path_is_uri ? filepath : File.realpath(filepath) @book = create_book(book: book, initialize_with: initialize_with, **) if path_is_uri @book.container_adapter = :UnpackedURI elsif File.directory? @filepath @book.container_adapter = :UnpackedDirectory end @book.epub_file = @filepath if [:container_adapter] @book.container_adapter = [:container_adapter] end end |
Class Method Details
.parse(filepath, container_adapter: nil, book: nil, initialize_with: nil, **options) ⇒ EPUB
Parse an EPUB file
38 39 40 |
# File 'lib/epub/parser.rb', line 38 def parse(filepath, container_adapter: nil, book: nil, initialize_with: nil, **) new(filepath, container_adapter: container_adapter, book: book, initialize_with: initialize_with, **).parse end |
Instance Method Details
#parse ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/epub/parser.rb', line 72 def parse @book.container_adapter.open @filepath do |container| @book.ocf = OCF.parse(container) @book.ocf.container.rootfiles.each {|rootfile| package = Publication.parse(container, rootfile.full_path.to_s) rootfile.package = package @book.packages << package package.book = @book } end @book end |