Sha256: fefce47e91473a41f2b8ca2398d76f5d7f66190b8900070822977a737376b322

Contents?: true

Size: 1.42 KB

Versions: 5

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

module Kitabu
  module Footnotes
    class PDF < Base
      def process
        remove_duplicated_attributes
        html.css(".chapter").each(&method(:process_chapter))
      end

      def remove_duplicated_attributes
        # https://github.com/sparklemotion/nokogiri/issues/339
        html.css("html").first.tap do |element|
          next unless element

          element.delete("xmlns")
          element.delete("xml:lang")
        end
      end

      def process_chapter(chapter)
        chapter.css(".footnotes li").each do |footnote|
          process_footnote(chapter, footnote)
          increment_footnote_index!
        end

        chapter.css(".footnotes").each(&:remove)
      end

      def process_footnote(chapter, footnote)
        # Remove rev links
        footnote.css("[rev=footnote]").map(&:remove)

        # Create an element for storing the footnote description
        description = Nokogiri::XML::Node.new(
          "span",
          Nokogiri::HTML::DocumentFragment.parse("")
        )
        description.set_attribute "class", "footnote"
        description.inner_html = footnote.css("p").map(&:inner_html).join("\n")

        # Find ref based on footnote's id
        fn_id = footnote.get_attribute("id")

        chapter.css("a[href='##{fn_id}']").each do |ref|
          sup = ref.parent
          sup.after(description)
          sup.remove
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kitabu-3.1.0 lib/kitabu/footnotes/pdf.rb
kitabu-3.0.3 lib/kitabu/footnotes/pdf.rb
kitabu-3.0.2 lib/kitabu/footnotes/pdf.rb
kitabu-3.0.1 lib/kitabu/footnotes/pdf.rb
kitabu-3.0.0 lib/kitabu/footnotes/pdf.rb