class Epuber::Compiler::FileTypes::XHTMLFile
Attributes
toc_item[RW]
@return [Epuber::Book::TocItem]
Public Instance Methods
common_process(content, compilation_context)
click to toggle source
@param [String] content xhtml in string @param [Compiler::CompilationContext] compilation_context
@return [String] new xhtml string
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 84 def common_process(content, compilation_context) target = compilation_context.target book = compilation_context.book file_resolver = compilation_context.file_resolver xhtml_doc, errors = UI.print_step_processing_time('parsing XHTML file') do XHTMLProcessor.xml_doc_from_str_with_errors(content, source_path) end if compilation_context.release_build && xhtml_doc.errors.count > 0 process_nokogiri_errors(errors) end UI.print_step_processing_time('adding missing elements') do XHTMLProcessor.add_missing_root_elements(xhtml_doc, book.title, target.epub_version) end # resolve links to files, add other linked resources and compute correct path UI.print_step_processing_time('resolving links') do XHTMLProcessor.resolve_links(xhtml_doc, destination_path, file_resolver.dest_finder) end UI.print_step_processing_time('resolving image resources') do XHTMLProcessor.resolve_images(xhtml_doc, destination_path, file_resolver) end UI.print_step_processing_time('resolving scripts') do XHTMLProcessor.resolve_scripts(xhtml_doc, destination_path, file_resolver) end UI.print_step_processing_time('resolving stylesheets') do XHTMLProcessor.resolve_stylesheets(xhtml_doc, destination_path, file_resolver) end UI.print_step_processing_time('adding default things') do XHTMLProcessor.add_styles(xhtml_doc, default_styles(target, file_resolver)) XHTMLProcessor.add_scripts(xhtml_doc, default_scripts(target, file_resolver)) XHTMLProcessor.add_viewport(xhtml_doc, target.default_viewport) unless target.default_viewport.nil? end XHTMLProcessor.resolve_mathml_namespace(xhtml_doc) UI.print_step_processing_time('investigating properties') do self.properties << :remote_resources if XHTMLProcessor.using_remote_resources?(xhtml_doc) self.properties << :scripted if XHTMLProcessor.using_javascript?(xhtml_doc) self.properties << :mathml if XHTMLProcessor.using_mathml?(xhtml_doc) end xhtml_string = UI.print_step_processing_time('converting to XHTML') do xhtml_doc.to_s end # perform transformations UI.print_step_processing_time('performing final transformations') do compilation_context.perform_plugin_things(Transformer, :result_text_xhtml_string) do |transformer| xhtml_string = transformer.call(final_destination_path, xhtml_string, compilation_context) end end # perform custom validation if compilation_context.should_check UI.print_step_processing_time('performing final validations') do compilation_context.perform_plugin_things(Checker, :result_text_xhtml_string) do |checker| checker.call(final_destination_path, xhtml_string, compilation_context) end end end xhtml_string end
default_scripts(target, file_resolver)
click to toggle source
@param [Book::Target] target @param [FileResolver] file_resolver
@return [Array<String>] list of paths to styles relative to this file
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 37 def default_scripts(target, file_resolver) default_scripts = target.default_scripts.map do |default_style_request| Array(file_resolver.file_from_request(default_style_request)) end.flatten default_scripts.map do |style| Pathname.new(style.final_destination_path).relative_path_from(Pathname.new(File.dirname(final_destination_path))).to_s end end
default_styles(target, file_resolver)
click to toggle source
@param [Book::Target] target @param [FileResolver] file_resolver
@return [Array<String>] list of paths to styles relative to this file
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 22 def default_styles(target, file_resolver) default_styles = target.default_styles.map do |default_style_request| Array(file_resolver.file_from_request(default_style_request)) end.flatten default_styles.map do |style| Pathname.new(style.final_destination_path).relative_path_from(Pathname.new(File.dirname(final_destination_path))).to_s end end
load_source(compilation_context)
click to toggle source
@param [Compiler::CompilationContext] compilation_context
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 49 def load_source(compilation_context) xhtml_content = File.read(abs_source_path) compilation_context.perform_plugin_things(Transformer, :source_text_file) do |transformer| xhtml_content = transformer.call(abs_source_path, xhtml_content, compilation_context) end # perform custom validation if compilation_context.should_check compilation_context.perform_plugin_things(Checker, :source_text_file) do |checker| checker.call(abs_source_path, xhtml_content, compilation_context) end end if compilation_context.should_write self.class.write_to_file(xhtml_content, abs_source_path) end xhtml_content end
process(compilation_context)
click to toggle source
@param [Compiler::CompilationContext]
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 155 def process(compilation_context) write_processed(common_process(load_source(compilation_context), compilation_context)) end
process_nokogiri_errors(errors)
click to toggle source
@param [Array<Epuber::Compiler::Problem>] errors
# File lib/epuber/compiler/file_types/xhtml_file.rb, line 73 def process_nokogiri_errors(errors) errors.each do |problem| UI.warning(problem, location: self) end end