1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# 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!
|