/* * call-seq: * RegExpAnalyzer.new(reg_exp, lower = true) -> analyzer * * Create a new RegExpAnalyzer which will create tokenizers based on the * regular expression and lowercasing if required. * * reg_exp:: the token matcher for the tokenizer to use * lower:: set to false if you don't want to downcase the tokens */ static VALUE frt_re_analyzer_init(int argc, VALUE *argv, VALUE self) { VALUE lower, rets, regex, proc; Analyzer *a; TokenStream *ts; rb_scan_args(argc, argv, "02&", ®ex, &lower, &proc); ts = rets_new(Qnil, regex, proc); rets = Data_Wrap_Struct(cRegExpTokenizer, &frt_rets_mark, &frt_rets_free, ts); /* rb_hash_aset(object_space, LONG2NUM((long)rets), rets); */ object_add(ts, rets); if (lower != Qfalse) { rets = frt_lowercase_filter_init(frt_data_alloc(cLowerCaseFilter), rets); ts = DATA_PTR(rets); } REF(ts); a = analyzer_new(ts, &re_analyzer_destroy_i, NULL); Frt_Wrap_Struct(self, &frt_re_analyzer_mark, &frt_analyzer_free, a); object_add(a, self); return self; }