href

via. http://d.hatena.ne.jp/nskj77/20060401

コマンドラインから使えるリファレンス。Refe の Haskell 版。バージョンは 0.3.1。

http://i.loveruby.net/w/href.html

インストールは README.jp に書いてあるとおりにすれば簡単……とはいかない。Windows だから。
仕方がないので Makefile をながめて次のように書き換えた。換えたところだけ示す。

bindir = c:\usr\local\bin
EXEEXT = .exe
# mkdir -p $(bindir)

1行目はコマンドのインストール先,c:\usr\local\bin にインストールすることにした。
2行目は実行ファイルの拡張子。3行目は今回はすでにフォルダがあるので全体をコメントアウトした。もしないなら -p オプションだけ削除する。
これで良し。make はないので nmake を使う。

>nmake
Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
ghc -cpp --make -package network href.hs -o href.exe
Chasing modules from: href.hs
(以下略)
>nmake install
Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
ghc -cpp --make -package network href.hs -o href.exe
Chasing modules from: href.hs
(以下略)

次,データベースの準備。
c:\usr\share\href にインストールするので c:\usr\share を先に作っておく。href はなくてもいい。

>set HREF_DATADIR=c:\usr\share\href
>mkhref ref/*.*

これでOK。あとはコントロールパネルで環境変数 HREF_DATADIR を設定しておけば普通に使える。

>href filter
Data.List.filter
filter :: (a -> Bool) -> [a] -> [a]    PRELUDE
filter f xs
・・ケ・ネ xs 、ホ、ヲ、チ f 、ャ True 、ヒ、ハ、・ラチヌ、タ、ア、・
スク、皃ソ・・ケ・ネ、ヨ、ケ。」

って,文字化けしてる!……EUCかぁ。

追記:
ref 以下のファイルを ShiftJIS に変換してからインストールしたら直った。
変換に使った Ruby のスクリプト。

require 'find'
require 'fileutils'
require 'nkf'

src = ARGV.shift
dest = ARGV.shift

Find.find(src) do |f|
  case File.ftype(f)
  when "directory"
    FileUtils.mkdir_p(f.sub(src, dest))
  when "file"
    File.open(f, "r") do |infile|
      File.open(f.sub(src,dest), "w") do |outfile|
        outfile.write NKF.nkf("-E -s", infile.read)
      end
    end
  end
end

さらに追記:
むぅ,こうすればコマンド2つですんだ。

>mkdir ref.sjis
>for %X in (ref/*) do nkf -E -s ref/%X > ref.sjis/%X