Class: Markly::Renderer::Generic
- Inherits:
-
Object
- Object
- Markly::Renderer::Generic
- Defined in:
- lib/markly/renderer/generic.rb
Overview
Base class for renderers implemented in Ruby.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#in_plain ⇒ Object
Returns the value of attribute in_plain.
-
#in_tight ⇒ Object
Returns the value of attribute in_tight.
Instance Method Summary collapse
-
#block ⇒ Object
Renders a block surrounded by normalized newlines.
-
#code_block(_node) ⇒ Object
Renders a code block node.
-
#container(starter, ender) ⇒ Object
Renders content between opening and closing strings.
-
#cr ⇒ Object
Writes a newline unless the output is empty or already ends with one.
-
#document(_node) ⇒ Object
Renders a document node and all of its children.
-
#initialize(flags: DEFAULT, extensions: []) ⇒ Generic
constructor
Initializes a renderer with rendering flags and extensions.
-
#out(*args) ⇒ Object
Writes strings, nodes, arrays of nodes, or child-node markers to the output.
-
#plain ⇒ Object
Renders a block in plain-text mode, suppressing structural markup.
-
#reference_def(_node) ⇒ Object
Ignores reference-definition nodes, which have no direct output.
-
#render(node) ⇒ Object
Renders a node and returns the completed output for document nodes.
- #Whether the renderer is emitting plain text.=(therendererisemittingplaintext. = (value)) ⇒ Object
- #Whether the renderer is inside a tight container.=(therendererisinsideatightcontainer. = (value)) ⇒ Object
Constructor Details
#initialize(flags: DEFAULT, extensions: []) ⇒ Generic
Initializes a renderer with rendering flags and extensions.
20 21 22 23 24 25 26 |
# File 'lib/markly/renderer/generic.rb', line 20 def initialize(flags: DEFAULT, extensions: []) @flags = flags @stream = StringIO.new(+"") @in_tight = false @in_plain = false @tagfilter = extensions.include?(:tagfilter) end |
Instance Attribute Details
#in_plain ⇒ Object
Returns the value of attribute in_plain.
32 33 34 |
# File 'lib/markly/renderer/generic.rb', line 32 def in_plain @in_plain end |
#in_tight ⇒ Object
Returns the value of attribute in_tight.
29 30 31 |
# File 'lib/markly/renderer/generic.rb', line 29 def in_tight @in_tight end |
Instance Method Details
#block ⇒ Object
Renders a block surrounded by normalized newlines.
98 99 100 101 102 |
# File 'lib/markly/renderer/generic.rb', line 98 def block cr yield cr end |
#code_block(_node) ⇒ Object
Renders a code block node.
Subclasses should override this callback.
78 79 80 |
# File 'lib/markly/renderer/generic.rb', line 78 def code_block(_node) raise NotImplementedError, "#{self.class} must implement #code_block" end |
#container(starter, ender) ⇒ Object
Renders content between opening and closing strings.
109 110 111 112 113 |
# File 'lib/markly/renderer/generic.rb', line 109 def container(starter, ender) out(starter) yield out(ender) end |
#cr ⇒ Object
Writes a newline unless the output is empty or already ends with one.
89 90 91 92 93 |
# File 'lib/markly/renderer/generic.rb', line 89 def cr return if @stream.string.empty? || @stream.string[-1] == "\n" out("\n") end |
#document(_node) ⇒ Object
Renders a document node and all of its children.
70 71 72 |
# File 'lib/markly/renderer/generic.rb', line 70 def document(_node) out(:children) end |
#out(*args) ⇒ Object
Writes strings, nodes, arrays of nodes, or child-node markers to the output.
37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/markly/renderer/generic.rb', line 37 def out(*args) args.each do |arg| if arg == :children @node.each{|child| out(child)} elsif arg.is_a?(Array) arg.each{|x| render(x)} elsif arg.is_a?(Node) render(arg) else @stream.write(arg) end end end |
#plain ⇒ Object
Renders a block in plain-text mode, suppressing structural markup.
118 119 120 121 122 123 |
# File 'lib/markly/renderer/generic.rb', line 118 def plain old_in_plain = @in_plain @in_plain = true yield @in_plain = old_in_plain end |
#reference_def(_node) ⇒ Object
Ignores reference-definition nodes, which have no direct output.
85 |
# File 'lib/markly/renderer/generic.rb', line 85 def reference_def(_node); end |
#render(node) ⇒ Object
Renders a node and returns the completed output for document nodes.
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/markly/renderer/generic.rb', line 55 def render(node) @node = node if node.type == :document document(node) @stream.string elsif @in_plain && node.type != :text && node.type != :softbreak node.each{|child| render(child)} else send(node.type, node) end end |
#Whether the renderer is emitting plain text.=(therendererisemittingplaintext. = (value)) ⇒ Object
32 |
# File 'lib/markly/renderer/generic.rb', line 32 attr_accessor :in_plain |
#Whether the renderer is inside a tight container.=(therendererisinsideatightcontainer. = (value)) ⇒ Object
29 |
# File 'lib/markly/renderer/generic.rb', line 29 attr_accessor :in_tight |