Module: Coradoc::Input::Html::Converters

Defined in:
lib/coradoc/html/input/converters.rb,
lib/coradoc/html/input/converters/a.rb,
lib/coradoc/html/input/converters/h.rb,
lib/coradoc/html/input/converters/p.rb,
lib/coradoc/html/input/converters/q.rb,
lib/coradoc/html/input/converters/br.rb,
lib/coradoc/html/input/converters/dl.rb,
lib/coradoc/html/input/converters/em.rb,
lib/coradoc/html/input/converters/hr.rb,
lib/coradoc/html/input/converters/li.rb,
lib/coradoc/html/input/converters/ol.rb,
lib/coradoc/html/input/converters/td.rb,
lib/coradoc/html/input/converters/th.rb,
lib/coradoc/html/input/converters/tr.rb,
lib/coradoc/html/input/converters/div.rb,
lib/coradoc/html/input/converters/img.rb,
lib/coradoc/html/input/converters/pre.rb,
lib/coradoc/html/input/converters/sub.rb,
lib/coradoc/html/input/converters/sup.rb,
lib/coradoc/html/input/converters/base.rb,
lib/coradoc/html/input/converters/code.rb,
lib/coradoc/html/input/converters/drop.rb,
lib/coradoc/html/input/converters/head.rb,
lib/coradoc/html/input/converters/mark.rb,
lib/coradoc/html/input/converters/math.rb,
lib/coradoc/html/input/converters/text.rb,
lib/coradoc/html/input/converters/aside.rb,
lib/coradoc/html/input/converters/audio.rb,
lib/coradoc/html/input/converters/table.rb,
lib/coradoc/html/input/converters/video.rb,
lib/coradoc/html/input/converters/bypass.rb,
lib/coradoc/html/input/converters/figure.rb,
lib/coradoc/html/input/converters/ignore.rb,
lib/coradoc/html/input/converters/markup.rb,
lib/coradoc/html/input/converters/strong.rb,
lib/coradoc/html/input/converters/blockquote.rb,
lib/coradoc/html/input/converters/pass_through.rb

Defined Under Namespace

Classes: A, Aside, Audio, Base, Blockquote, Br, Bypass, Code, Div, Dl, Drop, Em, Figure, H, Head, Hr, Ignore, Img, Li, Mark, Markup, Math, Ol, P, PassThrough, Pre, Q, Strong, Sub, Sup, Table, Td, Text, Th, Tr, Video

Class Method Summary collapse

Class Method Details

.default_converter(tag_name) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/coradoc/html/input/converters.rb', line 104

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

.ensure_converters_loadedObject

Ensure all converters are loaded and registered before first use



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/coradoc/html/input/converters.rb', line 56

def self.ensure_converters_loaded
  return if @converters_loaded

  @converters_loaded = true

  # Access each autoloaded constant to trigger file load + registration
  # Only load converters that register HTML tag handlers
  # Note: Some converters may have gem dependencies (e.g., Img requires marcel)
  # so we only load the essential ones here
  [
    Base, Markup, A, Aside, Blockquote, Br, Bypass, Code, Div, Dl,
    Drop, Em, Figure, H, Head, Hr, Ignore, Li, Mark, Ol, P,
    PassThrough, Pre, Q, Strong, Sup, Sub, Table, Td, Text, Th, Tr
  ].each do |converter|
    # Just accessing the constant triggers autoload
  end
end

.lookup(tag_name) ⇒ Object



74
75
76
77
78
# File 'lib/coradoc/html/input/converters.rb', line 74

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

.process(node, state) ⇒ Object

NOTE: process won’t run plugin hooks



81
82
83
84
85
86
87
88
89
# File 'lib/coradoc/html/input/converters.rb', line 81

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

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

.process_coradoc(node, state) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/coradoc/html/input/converters.rb', line 91

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.call(node, state)
end

.register(tag_name, converter) ⇒ Object

Define class methods



46
47
48
49
# File 'lib/coradoc/html/input/converters.rb', line 46

def self.register(tag_name, converter)
  @@converters ||= {}
  @@converters[tag_name.to_sym] = converter
end

.unregister(tag_name) ⇒ Object



51
52
53
# File 'lib/coradoc/html/input/converters.rb', line 51

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