module MaRuKu::Out::Markdown

Functions for exporting to MarkDown.

Constants

DefaultLineLength

Public Instance Methods

add_indent(s,char=" ") click to toggle source
# File lib/maruku/output/to_markdown.rb, line 85
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 127
        def array_to_md(array, context, join_char='')
                e = []
                array.each do |c|
                        method = c.kind_of?(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
                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 92
def children_to_md(context)
        array_to_md(@children, context)
end
to_md(context={}) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 39
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 55
def to_md_abbr_def(context)
        "*[#{self.abbr}]: #{self.text}\n"
end
to_md_li_span(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 48
def to_md_li_span(context)
        len = (context[:line_length] || DefaultLineLength) - 2
        s = add_tabs(wrap(@children, len-2, context), 1, '  ')
        s[0] = ?*
        s + "\n"
end
to_md_ol(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 59
        def to_md_ol(context)
                len = (context[:line_length] || DefaultLineLength) - 2
                md = ""
                self.children.each_with_index do |li, i|
                        s = add_tabs(w=wrap(li.children, len-2, context), 1, '    ')+"\n"
                        s[0,4] = "#{i+1}.  "[0,4]
#                       puts w.inspect
                        md += s
                end
                md + "\n"
        end
to_md_paragraph(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 43
def to_md_paragraph(context)
        line_length = context[:line_length] || DefaultLineLength
        wrap(@children, line_length, context)+"\n"
end
to_md_ul(context) click to toggle source
# File lib/maruku/output/to_markdown.rb, line 71
        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)
#                       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 96
def wrap(array, line_length, context)
        out = ""
        line = ""
        array.each do |c|
                if c.kind_of?(MDElement) &&  c.node_type == :linebreak
                        out << line.strip << "  \n"; line="";
                        next
                end
        
                pieces =
                if c.kind_of? String
                        c.to_md.mysplit
                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