Class: Markbridge::Renderers::Discourse::Tag

Inherits:
Object
  • Object
show all
Defined in:
lib/markbridge/renderers/discourse/tag.rb

Overview

Base class for rendering tags Can be subclassed for complex tags or initialized with a block for simple tags

Direct Known Subclasses

Markbridge::Renderers::Discourse::Tags::AlignTag, Markbridge::Renderers::Discourse::Tags::AttachmentTag, Markbridge::Renderers::Discourse::Tags::BoldTag, Markbridge::Renderers::Discourse::Tags::CodeTag, Markbridge::Renderers::Discourse::Tags::ColorTag, Markbridge::Renderers::Discourse::Tags::EmailTag, Markbridge::Renderers::Discourse::Tags::EventTag, Markbridge::Renderers::Discourse::Tags::HeadingTag, Markbridge::Renderers::Discourse::Tags::HorizontalRuleTag, Markbridge::Renderers::Discourse::Tags::ImageTag, Markbridge::Renderers::Discourse::Tags::ItalicTag, Markbridge::Renderers::Discourse::Tags::LineBreakTag, Markbridge::Renderers::Discourse::Tags::ListItemTag, Markbridge::Renderers::Discourse::Tags::ListTag, Markbridge::Renderers::Discourse::Tags::MentionTag, Markbridge::Renderers::Discourse::Tags::ParagraphTag, Markbridge::Renderers::Discourse::Tags::PollTag, Markbridge::Renderers::Discourse::Tags::QuoteTag, Markbridge::Renderers::Discourse::Tags::SizeTag, Markbridge::Renderers::Discourse::Tags::SpoilerTag, Markbridge::Renderers::Discourse::Tags::StrikethroughTag, Markbridge::Renderers::Discourse::Tags::SubscriptTag, Markbridge::Renderers::Discourse::Tags::SuperscriptTag, Markbridge::Renderers::Discourse::Tags::TableCellTag, Markbridge::Renderers::Discourse::Tags::TableRowTag, Markbridge::Renderers::Discourse::Tags::TableTag, Markbridge::Renderers::Discourse::Tags::UnderlineTag, Markbridge::Renderers::Discourse::Tags::UploadTag, Markbridge::Renderers::Discourse::Tags::UrlTag

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Tag

Initialize a tag

Parameters:

  • block (Proc, nil)

    optional block for rendering



11
12
13
# File 'lib/markbridge/renderers/discourse/tag.rb', line 11

def initialize(&block)
  @render_block = block
end

Instance Method Details

#render(element, interface) ⇒ String

Render a node to Discourse Markdown.

When ‘interface.html_mode?` is true the surrounding output is a CommonMark HTML block (§4.6): content is treated as raw HTML and is not re-parsed for Markdown except across blank lines. Every tag must pick one of two contracts:

  1. Emit raw HTML (e.g. ‘<strong>` for `**`).

  2. Wrap Markdown output in ‘nn…nn` so the blank lines close the HTML block, CommonMark parses the content as a Markdown island, then re-opens. Visible: blank-line wrapping forces a `<p>` margin around inline content, so prefer (1) when the tag has an HTML form.

Parameters:

Returns:

  • (String)

    the rendered markdown



32
33
34
35
36
37
38
# File 'lib/markbridge/renderers/discourse/tag.rb', line 32

def render(element, interface)
  if @render_block
    @render_block.call(element, interface)
  else
    raise NotImplementedError, "#{self.class} must implement #render or provide a block"
  end
end