Sha256: ea193d23713499d11eeb06b6eb9184bc1126113e167dbf63965bf513ac15860c

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

module Coradoc
  module Input::HTML
    module Converters
      def self.register(tag_name, converter)
        @@converters ||= {}
        @@converters[tag_name.to_sym] = converter
      end

      def self.unregister(tag_name)
        @@converters.delete(tag_name.to_sym)
      end

      def self.lookup(tag_name)
        converter = @@converters[tag_name.to_sym] || default_converter(tag_name)
        converter = converter.new if converter.respond_to? :new
        converter
      end

      # Note: process won't run plugin hooks
      def self.process(node, state)
        node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
        return node.map { |i| process(i, state) }.join if node.is_a? Array

        lookup(node.name).convert(node, state)
      end

      def self.process_coradoc(node, state)
        node = node.to_a if node.is_a? Nokogiri::XML::NodeSet
        return node.map { |i| process_coradoc(i, state) } if node.is_a? Array

        plugins = state[:plugin_instances] || {}
        process = proc { lookup(node.name).to_coradoc(node, state) }
        plugins.each do |i|
          prev_process = process
          process = proc { i.html_tree_run_hooks(node, state, &prev_process) }
        end
        process.(node, state)
      end

      def self.default_converter(tag_name)
        case Coradoc::Input::HTML.config.unknown_tags.to_sym
        when :pass_through
          Coradoc::Input::HTML::Converters::PassThrough.new
        when :drop
          Coradoc::Input::HTML::Converters::Drop.new
        when :bypass
          Coradoc::Input::HTML::Converters::Bypass.new
        when :raise
          raise UnknownTagError, "unknown tag: #{tag_name}"
        else
          raise InvalidConfigurationError,
                "unknown value #{Coradoc::Input::HTML.config.unknown_tags.inspect} for Coradoc::Input::HTML.config.unknown_tags"
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
coradoc-1.1.6 lib/coradoc/input/html/converters.rb
coradoc-1.1.5 lib/coradoc/input/html/converters.rb
coradoc-1.1.4 lib/coradoc/input/html/converters.rb
coradoc-1.1.3 lib/coradoc/input/html/converters.rb
coradoc-1.1.2 lib/coradoc/input/html/converters.rb
coradoc-1.1.1 lib/coradoc/input/html/converters.rb