Module: Markbridge

Defined in:
lib/markbridge.rb,
lib/markbridge/ast.rb,
lib/markbridge/ast/url.rb,
lib/markbridge/version.rb,
lib/markbridge/ast/bold.rb,
lib/markbridge/ast/code.rb,
lib/markbridge/ast/list.rb,
lib/markbridge/ast/node.rb,
lib/markbridge/ast/poll.rb,
lib/markbridge/ast/size.rb,
lib/markbridge/ast/text.rb,
lib/markbridge/ast/align.rb,
lib/markbridge/ast/color.rb,
lib/markbridge/ast/email.rb,
lib/markbridge/ast/event.rb,
lib/markbridge/ast/image.rb,
lib/markbridge/ast/quote.rb,
lib/markbridge/ast/table.rb,
lib/markbridge/ast/italic.rb,
lib/markbridge/ast/upload.rb,
lib/markbridge/gem_loader.rb,
lib/markbridge/processors.rb,
lib/markbridge/ast/element.rb,
lib/markbridge/ast/heading.rb,
lib/markbridge/ast/mention.rb,
lib/markbridge/ast/spoiler.rb,
lib/markbridge/ast/document.rb,
lib/markbridge/parsers/html.rb,
lib/markbridge/ast/list_item.rb,
lib/markbridge/ast/paragraph.rb,
lib/markbridge/ast/subscript.rb,
lib/markbridge/ast/underline.rb,
lib/markbridge/configuration.rb,
lib/markbridge/ast/attachment.rb,
lib/markbridge/ast/line_break.rb,
lib/markbridge/parsers/bbcode.rb,
lib/markbridge/ast/superscript.rb,
lib/markbridge/ast/markdown_text.rb,
lib/markbridge/ast/strikethrough.rb,
lib/markbridge/parsers/media_wiki.rb,
lib/markbridge/ast/horizontal_rule.rb,
lib/markbridge/parsers/html/parser.rb,
lib/markbridge/renderers/discourse.rb,
lib/markbridge/parsers/bbcode/parser.rb,
lib/markbridge/parsers/bbcode/scanner.rb,
lib/markbridge/parsers/text_formatter.rb,
lib/markbridge/renderers/discourse/tag.rb,
lib/markbridge/parsers/media_wiki/parser.rb,
lib/markbridge/parsers/bbcode/parser_state.rb,
lib/markbridge/parsers/bbcode/tokens/token.rb,
lib/markbridge/renderers/discourse/renderer.rb,
lib/markbridge/parsers/html/handler_registry.rb,
lib/markbridge/parsers/text_formatter/parser.rb,
lib/markbridge/processors/discourse_markdown.rb,
lib/markbridge/parsers/bbcode/handler_registry.rb,
lib/markbridge/renderers/discourse/tag_library.rb,
lib/markbridge/parsers/bbcode/tokens/text_token.rb,
lib/markbridge/parsers/media_wiki/inline_parser.rb,
lib/markbridge/renderers/discourse/tags/url_tag.rb,
lib/markbridge/parsers/bbcode/raw_content_result.rb,
lib/markbridge/parsers/html/handlers/raw_handler.rb,
lib/markbridge/parsers/html/handlers/url_handler.rb,
lib/markbridge/renderers/discourse/tags/bold_tag.rb,
lib/markbridge/renderers/discourse/tags/code_tag.rb,
lib/markbridge/renderers/discourse/tags/list_tag.rb,
lib/markbridge/renderers/discourse/tags/poll_tag.rb,
lib/markbridge/renderers/discourse/tags/size_tag.rb,
lib/markbridge/parsers/bbcode/peekable_enumerator.rb,
lib/markbridge/parsers/html/handlers/base_handler.rb,
lib/markbridge/parsers/html/handlers/list_handler.rb,
lib/markbridge/renderers/discourse/render_context.rb,
lib/markbridge/renderers/discourse/tags/align_tag.rb,
lib/markbridge/renderers/discourse/tags/color_tag.rb,
lib/markbridge/renderers/discourse/tags/email_tag.rb,
lib/markbridge/renderers/discourse/tags/event_tag.rb,
lib/markbridge/renderers/discourse/tags/image_tag.rb,
lib/markbridge/renderers/discourse/tags/quote_tag.rb,
lib/markbridge/renderers/discourse/tags/table_tag.rb,
lib/markbridge/parsers/bbcode/handlers/raw_handler.rb,
lib/markbridge/parsers/bbcode/handlers/url_handler.rb,
lib/markbridge/parsers/bbcode/tokens/tag_end_token.rb,
lib/markbridge/parsers/html/handlers/image_handler.rb,
lib/markbridge/parsers/html/handlers/quote_handler.rb,
lib/markbridge/parsers/html/handlers/table_handler.rb,
lib/markbridge/renderers/discourse/tags/italic_tag.rb,
lib/markbridge/renderers/discourse/tags/upload_tag.rb,
lib/markbridge/parsers/bbcode/handlers/base_handler.rb,
lib/markbridge/parsers/bbcode/handlers/code_handler.rb,
lib/markbridge/parsers/bbcode/handlers/list_handler.rb,
lib/markbridge/parsers/bbcode/handlers/size_handler.rb,
lib/markbridge/parsers/bbcode/raw_content_collector.rb,
lib/markbridge/parsers/html/handlers/simple_handler.rb,
lib/markbridge/renderers/discourse/markdown_escaper.rb,
lib/markbridge/renderers/discourse/tags/heading_tag.rb,
lib/markbridge/renderers/discourse/tags/mention_tag.rb,
lib/markbridge/renderers/discourse/tags/spoiler_tag.rb,
lib/markbridge/parsers/bbcode/handlers/align_handler.rb,
lib/markbridge/parsers/bbcode/handlers/color_handler.rb,
lib/markbridge/parsers/bbcode/handlers/email_handler.rb,
lib/markbridge/parsers/bbcode/handlers/image_handler.rb,
lib/markbridge/parsers/bbcode/handlers/quote_handler.rb,
lib/markbridge/parsers/bbcode/handlers/table_handler.rb,
lib/markbridge/parsers/bbcode/tokens/tag_start_token.rb,
lib/markbridge/processors/discourse_markdown/scanner.rb,
lib/markbridge/parsers/bbcode/closing_strategies/base.rb,
lib/markbridge/parsers/bbcode/handlers/simple_handler.rb,
lib/markbridge/renderers/discourse/tags/list_item_tag.rb,
lib/markbridge/renderers/discourse/tags/paragraph_tag.rb,
lib/markbridge/renderers/discourse/tags/subscript_tag.rb,
lib/markbridge/renderers/discourse/tags/table_row_tag.rb,
lib/markbridge/renderers/discourse/tags/underline_tag.rb,
lib/markbridge/parsers/bbcode/handlers/spoiler_handler.rb,
lib/markbridge/parsers/html/handlers/list_item_handler.rb,
lib/markbridge/parsers/html/handlers/paragraph_handler.rb,
lib/markbridge/parsers/html/handlers/table_row_handler.rb,
lib/markbridge/parsers/text_formatter/handler_registry.rb,
lib/markbridge/renderers/discourse/rendering_interface.rb,
lib/markbridge/renderers/discourse/tags/attachment_tag.rb,
lib/markbridge/renderers/discourse/tags/line_break_tag.rb,
lib/markbridge/renderers/discourse/tags/table_cell_tag.rb,
lib/markbridge/parsers/bbcode/closing_strategies/strict.rb,
lib/markbridge/parsers/html/handlers/table_cell_handler.rb,
lib/markbridge/renderers/discourse/tags/superscript_tag.rb,
lib/markbridge/parsers/bbcode/handlers/list_item_handler.rb,
lib/markbridge/parsers/bbcode/handlers/table_row_handler.rb,
lib/markbridge/parsers/bbcode/handlers/attachment_handler.rb,
lib/markbridge/parsers/bbcode/handlers/table_cell_handler.rb,
lib/markbridge/renderers/discourse/tags/strikethrough_tag.rb,
lib/markbridge/parsers/text_formatter/handlers/url_handler.rb,
lib/markbridge/parsers/bbcode/closing_strategies/reordering.rb,
lib/markbridge/parsers/bbcode/handlers/self_closing_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/base_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/code_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/list_handler.rb,
lib/markbridge/processors/discourse_markdown/detectors/base.rb,
lib/markbridge/processors/discourse_markdown/detectors/poll.rb,
lib/markbridge/renderers/discourse/tags/horizontal_rule_tag.rb,
lib/markbridge/parsers/text_formatter/handlers/email_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/image_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/quote_handler.rb,
lib/markbridge/processors/discourse_markdown/detectors/event.rb,
lib/markbridge/parsers/bbcode/errors/max_depth_exceeded_error.rb,
lib/markbridge/parsers/text_formatter/handlers/simple_handler.rb,
lib/markbridge/processors/discourse_markdown/detectors/upload.rb,
lib/markbridge/renderers/discourse/builders/list_item_builder.rb,
lib/markbridge/processors/discourse_markdown/detectors/mention.rb,
lib/markbridge/parsers/bbcode/closing_strategies/tag_reconciler.rb,
lib/markbridge/processors/discourse_markdown/code_block_tracker.rb,
lib/markbridge/parsers/text_formatter/handlers/attribute_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/attachment_handler.rb,
lib/markbridge/parsers/text_formatter/handlers/table_cell_handler.rb

Defined Under Namespace

Modules: AST, GemLoader, Parsers, Processors, Renderers Classes: Configuration

Constant Summary collapse

VERSION =
"0.1.1"

Class Method Summary collapse

Class Method Details

.bbcode_to_markdown(input, handlers: nil, tag_library: nil) ⇒ String

Convert BBCode to Discourse Markdown

Parameters:

  • input (String)

    BBCode source

  • handlers (HandlerRegistry, nil) (defaults to: nil)

    custom handler registry or use default

  • tag_library (TagLibrary, nil) (defaults to: nil)

    custom tag library or use default

Returns:

  • (String)

    Markdown output



28
29
30
31
# File 'lib/markbridge.rb', line 28

def bbcode_to_markdown(input, handlers: nil, tag_library: nil)
  ast = parse_bbcode(input, handlers:)
  render_to_markdown(ast, tag_library:)
end

.configurationConfiguration

Get the global configuration

Returns:



117
118
119
# File 'lib/markbridge.rb', line 117

def configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Object

Configure Markbridge with a block

Yields:



123
124
125
# File 'lib/markbridge.rb', line 123

def configure
  yield configuration
end

.default_handlersParsers::BBCode::HandlerRegistry

Get default handler registry



93
94
95
# File 'lib/markbridge.rb', line 93

def default_handlers
  @default_handlers ||= Parsers::BBCode::HandlerRegistry.default
end

.default_html_handlersParsers::HTML::HandlerRegistry

Get default HTML handler registry



99
100
101
# File 'lib/markbridge.rb', line 99

def default_html_handlers
  @default_html_handlers ||= Parsers::HTML::HandlerRegistry.default
end

.default_tag_libraryRenderers::Discourse::TagLibrary

Get default tag library



105
106
107
# File 'lib/markbridge.rb', line 105

def default_tag_library
  @default_tag_library ||= Renderers::Discourse::TagLibrary.default
end

.default_text_formatter_handlersParsers::TextFormatter::HandlerRegistry

Get default s9e/TextFormatter handler registry



111
112
113
# File 'lib/markbridge.rb', line 111

def default_text_formatter_handlers
  @default_text_formatter_handlers ||= Parsers::TextFormatter::HandlerRegistry.default
end

.html_to_markdown(input, handlers: nil, tag_library: nil) ⇒ String

Convert HTML to Discourse Markdown

Parameters:

  • input (String)

    HTML source

  • handlers (HandlerRegistry, nil) (defaults to: nil)

    custom handler registry or use default

  • tag_library (TagLibrary, nil) (defaults to: nil)

    custom tag library or use default

Returns:

  • (String)

    Markdown output



47
48
49
50
# File 'lib/markbridge.rb', line 47

def html_to_markdown(input, handlers: nil, tag_library: nil)
  ast = parse_html(input, handlers:)
  render_to_markdown(ast, tag_library:)
end

.mediawiki_to_markdown(input, tag_library: nil) ⇒ String

Convert MediaWiki wikitext to Discourse Markdown

Parameters:

  • input (String)

    MediaWiki source

  • tag_library (TagLibrary, nil) (defaults to: nil)

    custom tag library or use default

Returns:

  • (String)

    Markdown output



86
87
88
89
# File 'lib/markbridge.rb', line 86

def mediawiki_to_markdown(input, tag_library: nil)
  ast = parse_mediawiki(input)
  render_to_markdown(ast, tag_library:)
end

.parse_bbcode(input, handlers: nil) ⇒ AST::Document

Parse BBCode to AST

Parameters:

  • input (String)

    BBCode source

  • handlers (HandlerRegistry, nil) (defaults to: nil)

    custom handler registry or use default

Returns:



18
19
20
21
# File 'lib/markbridge.rb', line 18

def parse_bbcode(input, handlers: nil)
  handlers ||= default_handlers
  parse_with(Parsers::BBCode::Parser, input, handlers:)
end

.parse_html(input, handlers: nil) ⇒ AST::Document

Parse HTML to AST

Parameters:

  • input (String)

    HTML source

  • handlers (HandlerRegistry, nil) (defaults to: nil)

    custom handler registry or use default

Returns:



37
38
39
40
# File 'lib/markbridge.rb', line 37

def parse_html(input, handlers: nil)
  handlers ||= default_html_handlers
  parse_with(Parsers::HTML::Parser, input, handlers:)
end

.parse_mediawiki(input) ⇒ AST::Document

Parse MediaWiki wikitext to AST

Parameters:

  • input (String)

    MediaWiki source

Returns:

Raises:

  • (ArgumentError)


74
75
76
77
78
79
80
# File 'lib/markbridge.rb', line 74

def parse_mediawiki(input)
  raise ArgumentError, "input cannot be nil" if input.nil?

  input = input.to_s
  parser = Parsers::MediaWiki::Parser.new
  parser.parse(input)
end

.parse_text_formatter_xml(input, handlers: nil) ⇒ AST::Document

Parse s9e/TextFormatter XML to AST

Parameters:

Returns:



56
57
58
59
# File 'lib/markbridge.rb', line 56

def parse_text_formatter_xml(input, handlers: nil)
  handlers ||= default_text_formatter_handlers
  parse_with(Parsers::TextFormatter::Parser, input, handlers:)
end

.reset_defaults!Object

Reset defaults (useful for testing)



128
129
130
131
132
133
134
# File 'lib/markbridge.rb', line 128

def reset_defaults!
  @default_handlers = nil
  @default_html_handlers = nil
  @default_tag_library = nil
  @default_text_formatter_handlers = nil
  @configuration = nil
end

.text_formatter_xml_to_markdown(input, handlers: nil, tag_library: nil) ⇒ String

Convert s9e/TextFormatter XML to Discourse Markdown

Parameters:

  • input (String)

    XML source in s9e/TextFormatter format

  • handlers (Parsers::TextFormatter::HandlerRegistry, nil) (defaults to: nil)

    custom handler registry or use default

  • tag_library (TagLibrary, nil) (defaults to: nil)

    custom tag library or use default

Returns:

  • (String)

    Markdown output



66
67
68
69
# File 'lib/markbridge.rb', line 66

def text_formatter_xml_to_markdown(input, handlers: nil, tag_library: nil)
  ast = parse_text_formatter_xml(input, handlers:)
  render_to_markdown(ast, tag_library:)
end