#!/usr/bin/env ruby
require 'tempfile'
def vimcolour(datum, filetype, title)
tempfile = Tempfile.new('vimcolour')
tempfile << datum
tempfile.close
%x{vim -n -e \
-c 'set t_Co=88' \
-c 'set filetype=#{filetype}' \
-c 'syntax on' \
-c 'set number' \
-c 'colorscheme inkpot' \
-c 'let html_use_css = 1' \
-c 'let use_xhtml = 1' \
-c 'run syntax/2html.vim' \
-c 'bdelete 1' \
-c 'wq! #{tempfile.path}' \
#{tempfile.path} }
datum = File.read(tempfile.path)
datum = datum.split(/<pre>\n/, 2)
datum = [ datum[0],
datum[1].reverse.split(/\n>erp\/</, 2)[1].reverse,
datum[1].reverse.split(/\n>erp\/</, 2)[0].reverse]
datum[0].sub!(/^<\?xml.*\?>$\n/, '')
datum[0].sub!(/^(<title>).*(<\/title>)/, "\\1#{title} (VimColour)\\2")
datum[0].sub!(/^(pre \{).*;/, '\1 margin: 0;')
datum[0].sub!(/^(body \{.*background-color: #)....../,
'\1000000; margin: 0; font-size: 1.2em')
datum[0].sub!(/^\.lnr( \{.*;)/,
"div#container { display: table-row; }\n" +
"div#ln\\1 }\ndiv#ln, div#code { display: table-cell;")
datum[0].gsub!(/ text-decoration: underline;/, '')
datum[0] += "<div id=\"container\">\n"
ln = "<div id=\"ln\">\n"
code = "<div id=\"code\">\n<pre>\n"
datum[1] = datum[1].each_line { |str|
if str =~ /^<span class="lnr">( *\d+ )<\/span>/
ln += $1.gsub(' ', ' ') + "<br />\n"
code += str.gsub(/^<span class="lnr"> *\d+ <\/span>/, '')
end
}
ln += "</div>\n"
code += "</pre>\n</div>\n"
datum[1] = ln + code
datum[2] = "</div>\n" + datum[2]
return datum.join
end
puts vimcolour(File.read(ARGV[0]), ARGV[1], ARGV[0])