古い記事
ランダムジャンプ
新しい記事
自分用メモ。
SUFARYガイドにあるやつを改訂。
UTF-8 が対象。正規表現部分は[2006-03-09-1]のそのまま。
Index point (バイナリ) を吐き出した後、 mkary -so する (sort only)。

my $ip = 0;
while (<>) {
    my $idxstr = $_;
    my $start = 0;
    while ($idxstr =~ m{([\x00-\x7f]|[\xC0-\xDF][\x80-\xBF]|
                         [\xE0-\xEF][\x80-\xBF]{2}|
                         [\xF0-\xF7][\x80-\xBF]{3})}gsx){
        my $c = $1;
        last if $c =~ /[\t\n]/;
        #printf  "[%s] %d %d\n", $c, $start, $ip + $start;
        print pack("N", $ip + $start);
        $start += length($c);
    }
    $ip += length($idxstr);
}

使い方:
% mkipu8.pl text-utf8.txt > text-utf8.txt.ary
% mkary -so text-utf8.txt
...
% sass 'ほげ' text-utf8.txt
...

メモ:
- SUFARY の mkary -c (文字単位インデックス作成)は、
  日本語は EUC-JP のみ対応。
- そこで、UTF-8 単位でのインデックスポイント(ip)を
  別プログラム(mkipu8.pl)で出力し、
  mkary の ip のソートだけするオプション(-so)を使って
  最終的に *.ary を仕上げる。
- UTF-8 のマッチは下記を参照:
  [を] UTF-8 の文字にマッチする正規表現[2006-03-09-1]
- SUFARY ガイドに載っているip出力サンプルプログラムは obsolete。