aboutsummaryrefslogblamecommitdiff
path: root/references/trac-wiki-to-markdown.rb
blob: f7d41ae96796445009f283a551bf796709cfdebf (plain) (tree)


















































                                                                                            
# Untested code snippet from https://gist.github.com/somebox/619537

class String
  def trac_to_markdown!
    gsub!(/\{\{\{([^\n]+?)\}\}\}/, '`\1`')
    gsub!(/\{\{\{(.+?)\}\}\}/m){|m| m.each_line.map{|x| "\t#{x}".gsub(/[\{\}]{3}/,'')}.join}
    gsub!(/\=\=\=\=\s(.+?)\s\=\=\=\=/, '### \1')
    gsub!(/\=\=\=\s(.+?)\s\=\=\=/, '## \1')
    gsub!(/\=\=\s(.+?)\s\=\=/, '# \1')
    gsub!(/\=\s(.+?)\s\=[\s\n]*/, '')
    gsub!(/\[(http[^\s\[\]]+)\s([^\[\]]+)\]/, '[\2](\1)')
    gsub!(/\!(([A-Z][a-z0-9]+){2,})/, '\1')
    gsub!(/'''(.+)'''/, '*\1*')
    gsub!(/''(.+)''/, '_\1_')
    gsub!(/^\s\*/, '*')
    gsub!(/^\s\d\./, '1.')

    gsub!(/\{\{\{([^\n]+?)\}\}\}/, '`\1`')
    gsub!(/'''(.+?)'''/, '**\1**')
    gsub!(/''(.+?)''/, '*\1*')
    gsub!(/((^\|\|[^\n\r]+\|\|[ \t]*\r?(\n|$))+)/m) do |m|
      m = m.each_line.map do |x|
        x.gsub(/\t/, ' ')
          .gsub(/(\|\|){2,}/){|k| k.gsub(/\|\|/, '||   ')}
        .gsub(/ {3,}/, '   ')
      end.join
      lines = m.each_line.to_a
      line1 = lines.shift
      line2 = line1.dup.gsub(/[^\n\r\|]/, '-')
      lines.unshift(line1, line2)
      c = lines.join
      c = c.each_line.map do |x|
        x.gsub(/\=\s?(.+?)\s?=/, ' \1 ')
          .gsub(/\|\|/, '|')
      end.join
    end
    gsub!(/^\{\{\{(.+?)^\}\}\}/m, '```\1```')
    gsub!(/\=\=\=\=\s(.+?)\s\=\=\=\=/, '### \1')
    gsub!(/\=\=\=\s(.+?)\s\=\=\=/, '## \1')
    gsub!(/\=\=\s(.+?)\s\=\=/, '# \1')
    gsub!(/\=\s(.+?)\s\=[\s\n]*/, '')
    gsub!(/\[(http[^\s\[\]]+)\s([^\[\]]+)\]/, '[\2](\1)')
    gsub!(/\!(([A-Z][a-z0-9]+){2,})/, '\1')
    gsub!(/^\s\*/, '*')
    gsub!(/^\s\d\./, '1.')
  end
end

some_trac = 'my document'

puts some_trac.trac_to_markdown!