static void ef_set(cst_features *f,const char *fv,const char *type) { /* set feature from fv (F=V), guesses type if not explicit type given */ const char *val; char *feat; if ((val = strchr(fv,'=')) == 0) { fprintf(stderr, "flite: can't find '=' in featval \"%s\", ignoring it\n", fv); } else { feat = cst_strdup(fv); feat[strlen(fv)-strlen(val)] = '\0'; val = val+1; if ((type && cst_streq("int",type)) || ((type == 0) && (cst_regex_match(cst_rx_int,val)))) feat_set_int(f,feat,atoi(val)); else if ((type && cst_streq("float",type)) || ((type == 0) && (cst_regex_match(cst_rx_double,val)))) feat_set_float(f,feat,atof(val)); else feat_set_string(f,feat,val); /* I don't free feat, because feats think featnames are const */ /* which is true except in this particular case */ } }
static void ef_set(cst_features *f,const char *fv,const char *type) { /* set feature from fv (F=V), guesses type if not explicit type given */ const char *val; char *feat; if ((val = strchr(fv,'=')) == 0) { fprintf(stderr, "flite: can't find '=' in featval \"%s\", ignoring it\n", fv); } else { feat = cst_strdup(fv); feat[cst_strlen(fv)-cst_strlen(val)] = '\0'; val = val+1; if ((type && cst_streq("int",type)) || ((type == 0) && (cst_regex_match(cst_rx_int,val)))) feat_set_int(f,feat,atoi(val)); else if ((type && cst_streq("float",type)) || ((type == 0) && (cst_regex_match(cst_rx_double,val)))) feat_set_float(f,feat,atof(val)); else feat_set_string(f,feat,val); cst_free(feat); } }
int main(int argc, char **argv) { cst_voice *v; char thetime[1024]; char b[3]; int hour, min; cst_regex *timex; char *output = "play"; if (argc != 2) { fprintf(stderr,"usage: flite_time HH:MM\n"); exit(-1); } timex = new_cst_regex("[012][0-9]:[0-5][0-9]"); if (!cst_regex_match(timex,argv[1])) { fprintf(stderr,"not a valid time\n"); fprintf(stderr,"usage: flite_time HH:MM\n"); exit(-1); } delete_cst_regex(timex); b[2] = '\0'; b[0] = argv[1][0]; b[1] = argv[1][1]; hour = atoi(b); b[0] = argv[1][3]; b[1] = argv[1][4]; min = atoi(b); flite_init(); v = register_cmu_time_awb(NULL); sprintf(thetime, "The time is now, %s %s %s, %s.", time_approx(hour,min), time_min(hour,min), time_hour(hour,min), time_tod(hour,min)); printf("%s\n",thetime); flite_text_to_speech(thetime,v,output); return 0; }
const cst_val *cart_interpret(cst_item *item, const cst_cart *tree) { /* Tree interpretation */ const cst_val *v=0; const cst_val *tree_val; const char *tree_feat = ""; cst_features *fcache; int r=0; int node=0; fcache = new_features_local(item_utt(item)->ctx); while (cst_cart_node_op(node,tree) != CST_CART_OP_LEAF) { #if CART_DEBUG cart_print_node(node,tree); #endif tree_feat = cst_cart_node_feat(node,tree); v = get_param_val(fcache,tree_feat,0); if (v == 0) { v = ffeature(item,tree_feat); feat_set(fcache,tree_feat,v); } #if CART_DEBUG val_print(stdout,v); printf("\n"); #endif tree_val = cst_cart_node_val(node,tree); if (cst_cart_node_op(node,tree) == CST_CART_OP_IS) r = val_equal(v,tree_val); else if (cst_cart_node_op(node,tree) == CST_CART_OP_LESS) r = val_less(v,tree_val); else if (cst_cart_node_op(node,tree) == CST_CART_OP_GREATER) r = val_greater(v,tree_val); else if (cst_cart_node_op(node,tree) == CST_CART_OP_IN) r = val_member(v,tree_val); else if (cst_cart_node_op(node,tree) == CST_CART_OP_MATCHES) r = cst_regex_match(cst_regex_table[val_int(tree_val)], val_string(v)); else { cst_errmsg("cart_interpret_question: unknown op type %d\n", cst_cart_node_op(node,tree)); cst_error(); } if (r) { /* Oh yes it is */ #if CART_DEBUG printf(" YES\n"); #endif node = cst_cart_node_yes(node,tree); } else { /* Oh no it isn't */ #if CART_DEBUG printf(" NO\n"); #endif node = cst_cart_node_no(node,tree); } } delete_features(fcache); return cst_cart_node_val(node,tree); }
static const cst_val *token_pos_guess(const cst_item *token) { const char *name = item_feat_string(token,"name"); char *dc = cst_downcase(name); const cst_val *r; if (cst_regex_match(cst_rx_digits,dc)) r = &val_string_numeric; else if ((cst_regex_match(cst_rx_double,dc)) || (cst_regex_match(cst_rx_double,dc))) r = &val_string_number; else if (cst_streq(dc,"jan") || cst_streq(dc,"january") || cst_streq(dc,"feb") || cst_streq(dc,"february") || cst_streq(dc,"mar") || cst_streq(dc,"march") || cst_streq(dc,"apr") || cst_streq(dc,"april") || cst_streq(dc,"may") || cst_streq(dc,"jun") || cst_streq(dc,"june") || cst_streq(dc,"jul") || cst_streq(dc,"july") || cst_streq(dc,"aug") || cst_streq(dc,"august") || cst_streq(dc,"sep") || cst_streq(dc,"sept") || cst_streq(dc,"september") || cst_streq(dc,"oct") || cst_streq(dc,"october") || cst_streq(dc,"nov") || cst_streq(dc,"november") || cst_streq(dc,"dec") || cst_streq(dc,"december")) r = &val_string_month; else if (cst_streq(dc,"sun") || cst_streq(dc,"sunday") || cst_streq(dc,"mon") || cst_streq(dc,"monday") || cst_streq(dc,"tue") || cst_streq(dc,"tues") || cst_streq(dc,"tuesday") || cst_streq(dc,"wed") || cst_streq(dc,"wednesday") || cst_streq(dc,"thu") || cst_streq(dc,"thurs") || cst_streq(dc,"thursday") || cst_streq(dc,"fri") || cst_streq(dc,"friday") || cst_streq(dc,"sat") || cst_streq(dc,"saturday")) r = &val_string_day; /* ignoring the "token_most_common" condition, does get used */ else if (cst_streq(dc,"a")) r = &val_string_a; else if (cst_streq(dc,"flight")) r = &val_string_flight; else if (cst_streq(dc,"to")) r = &val_string_to; else r = &val_string_other; cst_free(dc); return r; }