Class: Markbridge::Parsers::HTML::HandlerRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/markbridge/parsers/html/handler_registry.rb

Overview

Registry of HTML tag handlers

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeHandlerRegistry

Returns a new instance of HandlerRegistry.



8
9
10
# File 'lib/markbridge/parsers/html/handler_registry.rb', line 8

def initialize
  @handlers = {}
end

Class Method Details

.build_from_default {|HandlerRegistry| ... } ⇒ HandlerRegistry

Build a registry from the default configuration with optional customization

Yields:

Returns:



67
68
69
70
71
# File 'lib/markbridge/parsers/html/handler_registry.rb', line 67

def self.build_from_default
  registry = default
  yield(registry) if block_given?
  registry
end

.defaultHandlerRegistry

Create the default handler registry with common HTML tags

Returns:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/markbridge/parsers/html/handler_registry.rb', line 29

def self.default
  new.tap do |registry|
    registry.register(%w[b strong], Handlers::SimpleHandler.new(AST::Bold))
    registry.register(%w[i em], Handlers::SimpleHandler.new(AST::Italic))
    registry.register(%w[s strike del], Handlers::SimpleHandler.new(AST::Strikethrough))
    registry.register("u", Handlers::SimpleHandler.new(AST::Underline))
    registry.register("sup", Handlers::SimpleHandler.new(AST::Superscript))
    registry.register("sub", Handlers::SimpleHandler.new(AST::Subscript))
    registry.register(%w[code pre tt], Handlers::RawHandler.new(AST::Code))
    registry.register("a", Handlers::UrlHandler.new)
    registry.register("img", Handlers::ImageHandler.new)
    registry.register("blockquote", Handlers::QuoteHandler.new)
    registry.register(
      "br",
      lambda do |element:, parent:|
        parent << AST::LineBreak.new
        nil
      end,
    )
    registry.register(
      "hr",
      lambda do |element:, parent:|
        parent << AST::HorizontalRule.new
        nil
      end,
    )
    registry.register(%w[ul ol], Handlers::ListHandler.new)
    registry.register("li", Handlers::ListItemHandler.new)
    registry.register("table", Handlers::TableHandler.new)
    registry.register("tr", Handlers::TableRowHandler.new)
    registry.register(%w[td th], Handlers::TableCellHandler.new)
    registry.register("p", Handlers::ParagraphHandler.new)
  end
end

Instance Method Details

#[](tag_name) ⇒ BaseHandler, ...

Get handler for a tag name

Parameters:

  • tag_name (String)

Returns:

  • (BaseHandler, Proc, nil)


23
24
25
# File 'lib/markbridge/parsers/html/handler_registry.rb', line 23

def [](tag_name)
  @handlers[tag_name.to_s.downcase]
end

#register(tag_names, handler) ⇒ Object

Register a handler for one or more tag names

Parameters:

  • tag_names (String, Array<String>)

    tag name(s) to register

  • handler (BaseHandler, Proc)

    the handler instance or proc



15
16
17
18
# File 'lib/markbridge/parsers/html/handler_registry.rb', line 15

def register(tag_names, handler)
  Array(tag_names).each { |tag_name| @handlers[tag_name.to_s.downcase] = handler }
  self
end