Conversion between textile and markdown

Differences

element textile markdown
headers h1. header # header #
inline code @printf()@ `printf()`
links "link":URL [link](URL)
bold bold bold

Tables

Textile

|_. h1 |_. h2 |
|   i1 |   i2 |

Markdown

| h1 | h2 |
| -- | -- |
| c1 | c2 |

Code

Textile

<pre><code>
    printf();
</code></pre>

Markdown

<4 spaces>printf();

Conversion script (Ruby)

#!/usr/local/bin/ruby -w

@code = false

STDIN.each { |line|

  # h3. xxx => ### xxx ###
  re = /^(h|H)[0-9]. /
  if line =~ re then
    hn =line.match(re)[0].match(/[0-9]/)[0].to_i
    rs = ""
    hn.times { |i| rs << "#" }
    line.sub!(/^(h|H)[0-9]\./, rs)
    line.strip!
    line = line << " #{rs}"
  end

  # ... "link":URL ... => ... [link](URL) ...
  re = /"(\w|\s)+":(http(s)?:\/\/)(\w|\.|\/|-|:|\?|=|\+|&)+/
  if line =~ re then
    line.gsub!(re) { |s|
      s.sub(s) {
        s.sub!(/"/,'[')
        s.sub!(/":/,'](')
        s << ')'
        s
      }
    }
  end

  if line =~ /.*<code>/ then @code = true
  elsif line =~ /.*<\/code>/ then @code = false
  else
    line.strip!
    if @code then line = "    " << line end
    puts line
  end

}

wiki-textile-2007-11-28-20-10-34.zip