Class: Markbridge::Parsers::MediaWiki::Parser

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

Overview

Parses MediaWiki wikitext into an AST.

Supports:

  • Bold (”‘), italic (”), bold italic (””’)

  • Headings (= through ======)

  • Unordered lists (* / ** / ***)

  • Ordered lists (# / ## / ###)

  • Horizontal rules (—-)

  • Internal links ([[target]] / [[target|display]])

  • External links ([url text])

  • Preformatted text (lines starting with a space)

  • Tables ({| … |})

  • HTML tags: <nowiki>, <code>, <pre>,
    , <s>, <del>, <u>, <ins>, <sup>, <sub>

Examples:

Basic usage

parser = Markbridge::Parsers::MediaWiki::Parser.new
ast = parser.parse("'''bold''' and ''italic''")

Instance Method Summary collapse

Constructor Details

#initialize(inline_tag_registry: nil) {|InlineTagRegistry| ... } ⇒ Parser

Returns a new instance of Parser.

Parameters:

  • inline_tag_registry (InlineTagRegistry, nil) (defaults to: nil)

    custom registry or use default

Yields:



26
27
28
29
30
31
# File 'lib/markbridge/parsers/media_wiki/parser.rb', line 26

def initialize(inline_tag_registry: nil, &block)
  # InlineParser falls back to InlineTagRegistry.default when this is
  # nil, so we don't need to materialise it here.
  @inline_tag_registry =
    block_given? ? InlineTagRegistry.build_from_default(&block) : inline_tag_registry
end

Instance Method Details

#parse(input) ⇒ AST::Document

Parse MediaWiki wikitext into an AST Document.

Parameters:

  • input (String)

    MediaWiki source

Returns:



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/markbridge/parsers/media_wiki/parser.rb', line 37

def parse(input)
  normalized = normalize_line_endings(input)
  lines = normalized.split("\n")

  @document = AST::Document.new
  @inline_parser = InlineParser.new(inline_tag_registry: @inline_tag_registry)
  @list_stack = []

  process_lines(lines)
  @document
end