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
- .default_converter(tag_name) ⇒ Object
-
.ensure_converters_loaded ⇒ Object
Ensure all converters are loaded and registered before first use.
- .lookup(tag_name) ⇒ Object
-
.process(node, state) ⇒ Object
NOTE: process won’t run plugin hooks.
- .process_coradoc(node, state) ⇒ Object
-
.register(tag_name, converter) ⇒ Object
Define class methods.
- .unregister(tag_name) ⇒ Object
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..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..inspect} for Coradoc::Input::Html.config.unknown_tags" end end |
.ensure_converters_loaded ⇒ Object
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 |