Class: Markbridge::Parsers::MediaWiki::InlineTagRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/markbridge/parsers/media_wiki/inline_tag_registry.rb

Overview

Registry of inline HTML-like tag handlers for the MediaWiki parser.

Supports three tag types:

  • :raw - content is preserved verbatim (e.g., <code>, <nowiki>)

  • :formatting - content is parsed for inline wiki markup (e.g., <s>, <u>)

  • :self_closing - no content, produces a leaf AST node (e.g.,
    )

Examples:

Default usage

registry = InlineTagRegistry.default
entry = registry["s"]
entry.type           # => :formatting
entry.element_class  # => AST::Strikethrough

Custom registration

registry = InlineTagRegistry.build_from_default do |r|
  r.register("mark", :formatting, AST::Bold)
end

Defined Under Namespace

Classes: Entry

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInlineTagRegistry

Returns a new instance of InlineTagRegistry.



26
27
28
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 26

def initialize
  @entries = {}
end

Class Method Details

.build_from_default {|InlineTagRegistry| ... } ⇒ InlineTagRegistry

Build a registry from the default with optional customization.

Yields:

Returns:



85
86
87
88
89
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 85

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

.defaultInlineTagRegistry

Create the default registry with standard MediaWiki inline tags.

Returns:



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 61

def self.default
  registry = new

  # Raw tags -content preserved verbatim, not parsed for wiki markup
  registry.register("nowiki", :raw, nil)
  registry.register("code", :raw, AST::Code)
  registry.register("pre", :raw, AST::Code)

  # Formatting tags -content parsed for inline wiki markup
  registry.register("s", :formatting, AST::Strikethrough)
  registry.register("del", :formatting, AST::Strikethrough)
  registry.register("u", :formatting, AST::Underline)
  registry.register("ins", :formatting, AST::Underline)
  registry.register("sup", :formatting, AST::Superscript)
  registry.register("sub", :formatting, AST::Subscript)

  # Self-closing tags -produce a leaf node, no content
  registry.register("br", :self_closing, AST::LineBreak)
end

Instance Method Details

#[](tag_name) ⇒ Entry?

Look up a tag entry by name.

Parameters:

  • tag_name (String)

Returns:



46
47
48
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 46

def [](tag_name)
  @entries[tag_name.downcase]
end

#known?(tag_name) ⇒ Boolean

Check if a tag name is registered.

Parameters:

  • tag_name (String)

Returns:

  • (Boolean)


54
55
56
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 54

def known?(tag_name)
  @entries.key?(tag_name.downcase)
end

#register(tag_name, type, element_class) ⇒ self

Register a handler for an inline HTML-like tag.

Parameters:

  • tag_name (String)

    the tag name (case-insensitive)

  • type (:raw, :formatting, :self_closing)

    how the tag content is handled

  • element_class (Class)

    the AST node class to create

Returns:

  • (self)


36
37
38
39
40
# File 'lib/markbridge/parsers/media_wiki/inline_tag_registry.rb', line 36

def register(tag_name, type, element_class)
  validate_type!(type)
  @entries[tag_name.downcase] = Entry.new(type:, element_class:)
  self
end