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 Attribute Summary collapse
-
#postprocessor ⇒ Object
readonly
Returns the value of attribute postprocessor.
Instance Method Summary collapse
-
#initialize(tag_library: nil, escaper: nil, html_escaper: nil, postprocessor: 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, html_escaper: nil, postprocessor: nil) ⇒ Renderer
Returns a new instance of Renderer.
10 11 12 13 14 15 16 17 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 10 def initialize(tag_library: nil, escaper: nil, html_escaper: nil, postprocessor: nil) @tag_library = tag_library || TagLibrary.default @escaper = escaper || MarkdownEscaper.new @html_escaper = html_escaper || HtmlEscaper @postprocessor = postprocessor || Postprocessor::DEFAULT # @interface_cache is lazily initialized in #render's top-level # call and reset to nil after the call completes. end |
Instance Attribute Details
#postprocessor ⇒ Object (readonly)
Returns the value of attribute postprocessor.
8 9 10 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 8 def postprocessor @postprocessor end |
Instance Method Details
#render(node, context: RenderContext.new) ⇒ String
Render a node to Markdown
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 23 def render(node, context: RenderContext.new) root_call = @interface_cache.nil? @interface_cache = {} if root_call tag = @tag_library[node.class] if tag interface = interface_for(context) return tag.render(node, interface) end case node when AST::Element # Document is an Element subclass render_children(node, context:) when AST::MarkdownText render_markdown_text(node, context) when AST::Text render_text(node, context) else "" end ensure @interface_cache = nil if root_call end |
#render_children(node, context:) ⇒ String
Render all children of a node
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/markbridge/renderers/discourse/renderer.rb', line 51 def render_children(node, context:) result = +"" node.children.each do |child| part = render(child, context:) next if part.empty? # Integer-byte check avoids allocating substrings for the # per-child adjacency probe. EMPHASIS_DELIMITER_BYTES.include? # over a 4-element Set is O(1). if !result.empty? && (last_byte = result.getbyte(-1)) == part.getbyte(0) && EMPHASIS_DELIMITER_BYTES.include?(last_byte) result << EMPHASIS_BOUNDARY end result << part end result end |