トップ «前の日記(2008-01-17) 最新 次の日記(2008-01-19)» 編集

Route 477



2008-01-18

[ruby] シンタックスハイライトを行うライブラリ、Text::VimColorがRubyに移植されたようです

Ruby-VimColorキター!

誰か移植しないかなーと思ってたところだったので嬉しい。CodeReposにリポジトリがあったので、 とりあえずREADMEに使い方とかを追記してみた。

で、ソース見たんだけど、これvimをforkで起動してるのなwww てっきりシンタックスファイルをパーズしてるのかと思っていた。

元となったPerl版はこちら。

シンタックスハイライトを行うライブラリっていろいろあるんだけど、 対応フォーマットの数では多分これより多いものって無いんじゃないかな。 Vimをインストールすると分かるんだけど、 RubyやPerlはもちろん、Haskell, OCamlからZ80に至るまで、実に400を越えるシンタックスファイル(*.vim)が 同梱されてるんですな。 はてなダイアリーで使ってるのも多分これじゃないかと 思われ。

まぁ各言語の厳密なパーザを使うわけじゃないんで、専用のライブラリと比べれば精度は落ちると思うけど、 「多言語」と「手軽さ」がVimColorファミリーの一番の魅力かなと思います。

試してみよう

とりあえずチェックアウト。(svnない人はhttp://svn.coderepos.org/share/lang/ruby/vimcolor から)

svn co http://svn.coderepos.org/share/lang/ruby/vimcolor ruby-vimcolor

まず、同梱のコマンドラインツールを試してみる。

$ ruby -Ilib vimcolor-embed lib/vimcolor.rb -f html > a.html

とするとHTMLの断片が出力されます。

これに、適当なCSSを加え、全体を<pre>でくくってやると…

vimcolor

おおお。こいつ、動くぞ!

使ってみよう

Rubyから使うにはこんな感じ。

$LOAD_PATH << "./lib"
require 'vimcolor'

vc = VimColor.new
html = vc.run_file("lib/vimcolor/mark.vim", {}, :html)
puts <<EOD
<html>
        <head>
                <link rel="stylesheet" href="light.css" type="text/css"><link>
        </head>
        <body>
                <pre>
#{html}
</pre></body></html>
EOD

非常に簡単なのです。

Rubyでシンタックスハイライトしたくなったら、ぜひ一度お試しください。

余談

コード書いてみて思ったんだけど、run_fileの3つめの引数はいらなくね?

vc.run_file("foo.rb", {:format => :html})

とか書きたいです(><)

(こういうときに、「じゃあコミットしといて下さい」という返しができるのがCodeReposの良いところですね:-)