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,
      '&lt;\1')
  else
    str
  end
end