class CommonMarker::Renderer
Attributes
in_plain[RW]
in_tight[RW]
warnings[RW]
Public Class Methods
new(options: :DEFAULT, extensions: [])
click to toggle source
# File lib/commonmarker/renderer.rb, line 7 def initialize(options: :DEFAULT, extensions: []) @opts = Config.process_options(options, :render) @stream = StringIO.new("".force_encoding("utf-8")) @need_blocksep = false @warnings = Set.new [] @in_tight = false @in_plain = false @tagfilter = extensions.include?(:tagfilter) end
Public Instance Methods
block() { || ... }
click to toggle source
# File lib/commonmarker/renderer.rb, line 72 def block cr yield cr end
blocksep()
click to toggle source
# File lib/commonmarker/renderer.rb, line 64 def blocksep out("\n") end
code_block(node)
click to toggle source
# File lib/commonmarker/renderer.rb, line 52 def code_block(node) code_block(node) end
container(starter, ender) { || ... }
click to toggle source
# File lib/commonmarker/renderer.rb, line 78 def container(starter, ender) out(starter) yield out(ender) end
containersep()
click to toggle source
# File lib/commonmarker/renderer.rb, line 68 def containersep cr unless @in_tight end
cr()
click to toggle source
# File lib/commonmarker/renderer.rb, line 59 def cr return if @stream.string.empty? || @stream.string[-1] == "\n" out("\n") end
document(_node)
click to toggle source
# File lib/commonmarker/renderer.rb, line 48 def document(_node) out(:children) end
out(*args)
click to toggle source
# File lib/commonmarker/renderer.rb, line 17 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() { || ... }
click to toggle source
# File lib/commonmarker/renderer.rb, line 84 def plain old_in_plain = @in_plain @in_plain = true yield @in_plain = old_in_plain end
reference_def(_node)
click to toggle source
# File lib/commonmarker/renderer.rb, line 56 def reference_def(_node) end
render(node)
click to toggle source
# File lib/commonmarker/renderer.rb, line 31 def render(node) @node = node if node.type == :document document(node) return @stream.string elsif @in_plain && node.type != :text && node.type != :softbreak node.each { |child| render(child) } else begin send(node.type, node) rescue NoMethodError => e @warnings.add("WARNING: #{node.type} not implemented.") raise e end end end
Private Instance Methods
escape_href(str)
click to toggle source
# File lib/commonmarker/renderer.rb, line 93 def escape_href(str) @node.html_escape_href(str) end
escape_html(str)
click to toggle source
# File lib/commonmarker/renderer.rb, line 97 def escape_html(str) @node.html_escape_html(str) end
option_enabled?(opt)
click to toggle source
# File lib/commonmarker/renderer.rb, line 125 def option_enabled?(opt) (@opts & CommonMarker::Config::Render.value(opt)) != 0 end
sourcepos(node)
click to toggle source
# File lib/commonmarker/renderer.rb, line 118 def sourcepos(node) return "" unless option_enabled?(:SOURCEPOS) s = node.sourcepos " data-sourcepos=\"#{s[:start_line]}:#{s[:start_column]}-" "#{s[:end_line]}:#{s[:end_column]}\"" end
tagfilter(str)
click to toggle source
# File lib/commonmarker/renderer.rb, line 101 def tagfilter(str) if @tagfilter str.gsub( %r{ < ( title|textarea|style|xmp|iframe| noembed|noframes|script|plaintext ) (?=\s|>|/>) }xi, '<\1') else str end end