Class: Markbridge::Renderers::Discourse::Renderer
- Inherits:
-
Object
- Object
- Markbridge::Renderers::Discourse::Renderer
- Defined in:
- lib/markbridge/renderers/discourse/renderer.rb
Overview
Renders AST to Discourse-flavored Markdown in-memory.
Instance Method Summary collapse
-
#initialize(tag_library: nil, escaper: nil) ⇒ Renderer
constructor
A new instance of Renderer.
-
#render(node, context: RenderContext.new) ⇒ String
Render a node to Markdown.
-
#render_children(node, context:) ⇒ String
Render all children of a node.
Constructor Details
#initialize(tag_library: nil, escaper: nil) ⇒ Renderer
Returns a new instance of Renderer.
8 9 10 11 12 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 8 def initialize(tag_library: nil, escaper: nil) @tag_library = tag_library || TagLibrary.default @escaper = escaper || MarkdownEscaper.new @interface_cache = nil end |
Instance Method Details
#render(node, context: RenderContext.new) ⇒ String
Render a node to Markdown
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 18 def render(node, context: RenderContext.new) root_call = @interface_cache.nil? @interface_cache ||= {} tag = @tag_library[node.class] if tag interface = interface_for(context) return tag.render(node, interface) end case node when AST::Document, AST::Element render_children(node, context:) when AST::MarkdownText # Pass through markdown text as-is (already formatted) node.text when AST::Text # Escape plain text unless we're inside a code block if context.has_parent?(AST::Code) node.text else @escaper.escape(node.text) end else "" end ensure @interface_cache = nil if root_call end |
#render_children(node, context:) ⇒ String
Render all children of a node
52 53 54 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 52 def render_children(node, context:) node.children.map { |child| render(child, context:) }.join end |