class Koara::Xml::XmlRenderer

Attributes

declaration_tag[RW]
hard_wrap[RW]

Public Instance Methods

escape(text) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 200
def escape(text)
  text.gsub('&', '&')
      .gsub('<', '&lt;')
      .gsub('>', '&gt;')
      .gsub('"', '&quot;')
end
escape_url(text) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 182
def escape_url(text)
  return text.gsub(' ', '%20')
             .gsub("\"", '%22')
             .gsub('`', '%60')
             .gsub('<', '%3C')
             .gsub('>', '%3E')
             .gsub('[', '%5B')
             .gsub(']', '%5D')
             .gsub("\\", '%5C')
end
indent() click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 193
def indent
  repeat = @level * 2
  repeat.times {
    @out << ' '
  }
end
output() click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 207
def output
  @out.string
end
visit_block_element(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 116
def visit_block_element(node)
end
visit_blockquote(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 40
def visit_blockquote(node)
  @level+=1
  indent
  @out << '<blockquote'
  if node.children && node.children.length > 0
    @out << ">\n"
    @level+=1
    node.children_accept(self)
    @level-=1
    indent
    @out << "</blockquote>\n"
    @level-=1
  else
    @out << " />\n"
  end
end
visit_code(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 166
def visit_code(node)
  indent
  @out << "<code>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</code>\n"
end
visit_codeblock(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 85
def visit_codeblock(node)
  @level += 1
  indent
  @out << "<codeblock"
  if node.language
    @out << " language=\"#{escape(node.language)}\""
  end
  if node.value && node.value.length > 0
    @out << ">"
    @level += 1
    @out << escape(node.value)
    @level -= 1
    @out << "</codeblock>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end
visit_document(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 8
def visit_document(node)
  @level = 0
  @out = StringIO.new
  if @declaration_tag
    @out << @declaration_tag + "\n"
  end
  if node.children && node.children.length > 0
    @out << "<document>\n"
    node.children_accept(self)
    @out << '</document>'
  else
    @out << '<document />'
  end
end
visit_em(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 156
def visit_em(node)
  indent
  @out << "<em>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</em>\n"
end
visit_heading(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 23
def visit_heading(node)
  @level += 1
  indent
  @out << "<heading level=\"#{node.value}\""
  if node.children && node.children.length > 0
    @out << ">\n"
    @level += 1
    node.children_accept(self)
    @level -= 1
    indent
    @out << "</heading>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end
visit_image(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 119
def visit_image(node)
  indent
  @out << "<image url=\"" + escape_url(node.value) + "\">\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent()
  @out << "</image>\n"
end
visit_linebreak(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 176
def visit_linebreak(node)
  hard = @hard_wrap || node.explicit
  indent
  @out << "<linebreak explicit=\"#{hard}\"/>\n"
end
visit_list_block(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 57
def visit_list_block(node)
  @level += 1
  indent
  @out << "<list ordered=\"#{node.ordered}\">\n"
  node.children_accept(self)
  indent
  @out << "</list>\n"
  @level -= 1
end
visit_list_item(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 67
def visit_list_item(node)
  @level += 1
  indent
  @out << "<listitem"
  if node.number
    @out << " number=\"#{node.number}\"";
  end
  if node.children && node.children.length > 0
    @out << ">\n"
    node.children_accept(self)
    indent
    @out << "</listitem>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end
visit_paragraph(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 104
def visit_paragraph(node)
  @level += 1
  indent
  @out << "<paragraph>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</paragraph>\n"
  @level -= 1
end
visit_strong(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 146
def visit_strong(node)
  indent
  @out << "<strong>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</strong>\n"
end
visit_text(node) click to toggle source
# File lib/koara/xml/xmlrenderer.rb, line 139
def visit_text(node)
  indent()
  @out << '<text>'
  @out << escape(node.value)
  @out << "</text>\n"
end