西@九大です。

chasen をちょこっと使ってみたのですが、fparse(file を解析)がうまく動か
ないようです。あと、"Fail" という関数はもう obsolete なんですよね?

ついでに気分で、文字列 or ファイルのどちらでも引数に取る parse という
メソッドも追加しちゃいました。1.5(最新?)への以上のパッチを添付します。

なお、当方、バージョン等はいじっていませんので、よろしくお願いします。
(意訳:RCS の使い方がわからないらしい)

------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori / swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------

diff -cr chasen.old/chasen.c chasen/chasen.c *** chasen.old/chasen.c Thu Sep 9 21:36:54 1999 --- chasen/chasen.c Tue Dec 28 01:18:59 1999 *************** *** 29,35 **** opt[argc + 1] = NULL; if (chasen_getopt_argv(opt, stdout) != 0){ ! Fail("chasen_getopt_argv"); } } --- 29,35 ---- opt[argc + 1] = NULL; if (chasen_getopt_argv(opt, stdout) != 0){ ! rb_raise(rb_eRuntimeError, "chasen_getopt_argv"); } } *************** *** 42,59 **** static VALUE f_chasen_fparse_tostr(VALUE obj, VALUE io){ OpenFile *fp; ! char *ret; ! if (!rb_obj_is_kind_of(io, rb_cIO)){ ! TypeError("instance of IO needed."); ! } GetOpenFile(io, fp); rb_io_check_readable(fp); ! if (ret = (char*)chasen_fparse_tostr(fp->f)){ ! return rb_str_new2(ret); ! }else{ ! return Qnil; } } VALUE mChasen; --- 42,70 ---- static VALUE f_chasen_fparse_tostr(VALUE obj, VALUE io){ OpenFile *fp; ! char *buf; ! VALUE dst = Qnil; ! Check_Type(io, T_FILE); GetOpenFile(io, fp); rb_io_check_readable(fp); ! dst = rb_str_new(NULL, 0); ! ! while ((buf = (char*)chasen_fparse_tostr(fp->f)) != NULL) { ! rb_str_cat(dst, buf, strlen(buf)); } + return dst; + } + + static VALUE + f_chasen_parse(VALUE obj, VALUE src){ + if (rb_obj_is_kind_of(src, rb_cIO)) + return f_chasen_fparse_tostr(obj, src); + + if (rb_obj_is_kind_of(src, rb_cString)) + return f_chasen_sparse_tostr(obj, src); + + rb_raise(rb_eTypeError, "wrong argument type (expected String or IO)"); } VALUE mChasen; *************** *** 64,67 **** --- 75,79 ---- rb_define_module_function(mChasen, "getopt", f_chasen_getopt, -1); rb_define_module_function(mChasen, "sparse", f_chasen_sparse_tostr, 1); rb_define_module_function(mChasen, "fparse", f_chasen_fparse_tostr, 1); + rb_define_module_function(mChasen, "parse", f_chasen_parse, 1); } diff -cr chasen.old/chasen.html chasen/chasen.html *** chasen.old/chasen.html Thu Sep 9 21:36:54 1999 --- chasen/chasen.html Tue Dec 28 01:24:50 1999 *************** *** 49,54 **** --- 49,62 ---- File <VAR>file</VAR>を解析して、結果を String として返します。 </p> + <DT> + <A NAME="parse"><CODE>parse(<VAR>str_or_file</VAR>)</CODE></A> + <DD> + <p> + <VAR>str_or_file</VAR>のタイプに応じてそれぞれ sparse または fparse を実行し、 + その結果を String として返します。 + </p> + </DL> <HR>