やっつけで作ってみた。
ソース全体をHTMLエスケープしてから、コメントはライム色でハイライトをつけて、
各行の先頭に行番号をつける。
1:	# coding: utf-8
2:
3: require "cgi"
4:
5: def source2blog(line, line_num)
6: line = CGI.escapeHTML(line)
7: line = line.gsub(/^(\s*)#(.*)/, "\\1<font color=\"lime\">#\\2</font>")
8: line = line.gsub(/^(.*)/, "#{line_num}:\t\\1")
9: end
10:
11: in_file = ARGV[0]
12: out_file = ARGV[1]
13: line_num = 0
14:
15: File.open(out_file, "w:UTF-8") {|wf|
16: File.open(in_file, "r:UTF-8") {|rf|
17: rf.each {|line|
18: line_num += 1
19: wf.puts(source2blog(line, line_num))
20: }
21: }
22: }

putsとwriteとprintと:
putsは改行をつける。(やってみたらCRLFがついていた)
writeは改行をつけない。
printは改行をつけるらしいが、putsとどこが違うんだろう。。?
少なくとも、上の例では、putsとprintを置き換えても同じ結果になった。(CRLFがつく)
今度、調べてみる。