module MaRuKu::Out::Markdown

Constants

DefaultLineLength

Public Instance Methods

add_indent(s,char=" ") click to toggle source
# File lib/maruku/output/to_markdown.rb, line 121
def add_indent(s,char="    ")
  t = s.split("\n").map{|x| char+x }.join("\n")
  s << ?\n if t[-1] == ?\n
  s
end
array_to_md(array, context, join_char='') click to toggle source
# File lib/maruku/output/to_markdown.rb, line 167
def array_to_md(array, context, join_char='')
  e = []
  array.each do |c|
    if c.is_a?(String)
      e << c
    else
      method = c.kind_of?(MaRuKu::MDElement) ?
      "to_md_#{c.node_type}" : "to_md"

      if not c.respond_to?(method)
        #raise "Object does not answer to #{method}: #{c.class} #{c.inspect[0,100]}"
        #       tell_user "Using default for #{c.node_type}"
        method = 'to_md'
      end

      #     puts "#{c.inspect} created with method #{method}"
      h =  c.send(method, context)

      if h.nil?
        raise "Nil md for #{c.inspect} created with method #{method}"
      end

      if h.kind_of?Array
        e = e + h
      else
        e << h
      end
    end
  end
  e.join(join_char)
end
children_to_md(context) click to toggle source

Convert each child to html

# File lib/maruku/output/to_markdown.rb, line 128
def children_to_md(context)
  array_to_md(@children, context)
end
mysplit(c) click to toggle source

“ andrea censi ” => [“ andrea ”, “censi ”]

# File lib/maruku/output/to_markdown.rb, line 10
def mysplit(c)
  res = c.split.map {|x| x + " " }
  if c[0] == ' ' && res[0]
    res[0] = " " + res[0]
  end
  res
end
to_md(context={}) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 5
def to_md(context={})
  children_to_md(context)
end
to_md_abbr_def(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 89
def to_md_abbr_def(context)
  "*[#{self.abbr}]: #{self.text}\n"
end
to_md_code(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 27
def to_md_code(context)
  @raw_code.split("\n").collect { |line| "     " + line}.join("\n") + "\n\n"
end
to_md_email_address(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 52
def to_md_email_address(context)
  "<#{@email}>"
end
to_md_emphasis(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 40
def to_md_emphasis(context)
  "*#{children_to_md(context)}*"
end
to_md_entity(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 56
def to_md_entity(context)
  "&#{@entity_name};"
end
to_md_header(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 18
def to_md_header(context)
  pounds = "#" * @level
  "#{pounds} #{children_to_md(context)} #{pounds}\n\n"
end
to_md_hrule(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 36
def to_md_hrule(context)
  "* * *\n"
end
to_md_im_image(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 77
def to_md_im_image(context)
  "![#{children_to_md(context)}](#{@url}#{" \"#{@title}\"" if @title})"
end
to_md_image(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 81
def to_md_image(context)
  "![#{children_to_md(context)}][#{@ref_id}]"
end
to_md_inline_code(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 23
def to_md_inline_code(context)
  "`#{@raw_code}`"
end
to_md_linebreak(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 60
def to_md_linebreak(context)
  "\n"
end
to_md_ol(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 93
def to_md_ol(context)
  len = (context[:line_length] || DefaultLineLength) - 2
  md = ""
  self.children.each_with_index do |li, i|
    #     s = (w=wrap(li.children, len-2, context)).rstrip.gsub(/^/, '    ')+"\n"
    #     s[0,4] = "#{i+1}.  "[0,4]
    #     puts w.inspect
    s = "#{i+1}. " + wrap(li.children, len-2, context).rstrip + "\n"
    md += s
  end
  md + "\n"
end
to_md_paragraph(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 64
def to_md_paragraph(context)
  line_length = context[:line_length] || DefaultLineLength
  wrap(@children, line_length, context)+"\n"
end
to_md_quote(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 31
def to_md_quote(context)
  line_length = (context[:line_length] || DefaultLineLength) - 2
  wrap(@children, line_length, context).split(/\n/).collect { |line| "> " + line}.join("\n") + "\n"
end
to_md_ref_definition(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 85
def to_md_ref_definition(context)
  "[#{@ref_id}] #{@url}#{" \"#{@title}\"" if @title}"
end
to_md_strong(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 44
def to_md_strong(context)
  "**#{children_to_md(context)}**"
end
to_md_ul(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 106
def to_md_ul(context)
  len = (context[:line_length] || DefaultLineLength) - 2
  md = ""
  self.children.each_with_index do |li, i|
    w = wrap(li.children, len-2, context)
    s = "- " + w
    #     puts "W: "+ w.inspect
    #   s = add_indent(w)
    #     puts "S: " +s.inspect
    #   s[0,1] = "-"
    md += s
  end
  md + "\n"
end
wrap(array, line_length, context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 132
def wrap(array, line_length, context)
  out = ""
  line = ""
  array.each do |c|
    if c.kind_of?(MaRuKu::MDElement) &&  c.node_type == :linebreak
      out << line.strip << "  \n"; line="";
      next
    end

    pieces =
      if c.kind_of? String
        mysplit(c)
      elsif c.kind_of?(MaRuKu::MDElement)
        method = "to_md_#{c.node_type}"
        method = "to_md" unless c.respond_to?(method)
        [c.send(method, context)].flatten
      else
        [c.to_md(context)].flatten
      end

    #     puts "Pieces: #{pieces.inspect}"
    pieces.each do |p|
      if p.size + line.size > line_length
        out << line.strip << "\n";
        line = ""
      end
      line << p
    end
  end
  out << line.strip << "\n" if line.size > 0
  out << ?\n if not out[-1] == ?\n
  out
end