Tasuku SUENAGA
a****@razil*****
2007年 1月 23日 (火) 14:05:44 JST
末永です。
確かに、クエリ式に含まれる単語の一覧があると便利ですね!!
snippetのタグ付け対象に指定したりできると思います。
APIの実装例ありがとうございます!ステキです!
導入を検討します!!
Yoshihiro Oyama wrote:
> はじめまして。
>
> sen_queryからクエリ式に含まれる単語の一覧を取得したいです。
> こんな感じのAPIがあるといいなと思うんですが
> いかがでしょうか?
>
> --------------------------
> senna.h に追加
>
> typedef int(*query_term_callback)(const char*,size_t,void*);
>
> void sen_query_term(sen_query *q,query_term_callback func,void* func_arg );
>
> --------------------------
> query.c に追加
>
> static int query_term_rec( sen_query* q,cons* c,query_term_callback func,void* func_arg ){
> cons *token;
> if( c->type == cons_token ){
> return func(c->u.token.start,c->u.token.len,func_arg);
> }
> for( token = c->u.expr.car; token; token = token->cdr ){
> if(!query_term_rec(q,token,func,func_arg)){
> return 0; /* abort */
> }
> }
> return 1; /* continue */
> }
> void sen_query_term(sen_query *q,query_term_callback func,void* func_arg ){
> query_term_rec( q,q->expr,func,func_arg);
> }
>
> --------------------------
> 使用例
>
> int my_query_term_callback(const char* term,size_t len,void* func_arg){
> int& n = *(int*)func_arg;
> printf("term[%d]=%.*s\n",n++,len,term);
> return 1;
> /* if return 0,abort enum */
> }
>
> int n=0;
> sen_query_term(sq,&my_query_term_callback,&n);
>
> --------------------------
>
>
> Yoshihiro Oyama yos-o****@smile*****
---
Tasuku SUENAGA <a****@razil*****>