    /*
     *  call-seq:
     *     analyzer.token_stream(field_name, input) -> token_stream
     *
     *  Create a new TokenStream to tokenize +input+. The TokenStream created will
     *  also depend on the +field_name+ in the case of the PerFieldAnalyzer.
     *
     *  field_name:: name of the field to be tokenized
     *  input::      data from the field to be tokenized
     */
    static VALUE
    frt_pfa_analyzer_token_stream(VALUE self, VALUE rfield, VALUE rstring)
    {
        Analyzer *pfa, *a;
        char *field = frt_field(rfield);
        GET_A(pfa, self);

        StringValue(rstring);
        a = (Analyzer *)h_get(PFA(pfa)->dict, field);
        if (a == NULL) {
            a = PFA(pfa)->default_a;
        }
        if (a->get_ts == cwa_get_ts) {
            return rb_funcall(CWA(a)->ranalyzer, id_token_stream, 2,
                              ID2SYM(rb_intern(field)), rb_str_new2(rs2s(rstring)));
        }
        else {
            return get_rb_ts_from_a(a, rfield, rstring);
        }
    }