gluke Fri Feb 23 02:34:49 2001 EDT Modified files: /php4/ext/mnogosearch php_mnogo.c php_mnogo.h Log: Added ispell loading routines and date search limits in mnogosearch module.
Index: php4/ext/mnogosearch/php_mnogo.c diff -u php4/ext/mnogosearch/php_mnogo.c:1.17 php4/ext/mnogosearch/php_mnogo.c:1.18 --- php4/ext/mnogosearch/php_mnogo.c:1.17 Thu Feb 22 02:40:43 2001 +++ php4/ext/mnogosearch/php_mnogo.c Fri Feb 23 02:34:49 2001 @@ -1,5 +1,5 @@ /* $Source: /local/repository/php4/ext/mnogosearch/php_mnogo.c,v $ */ -/* $Id: php_mnogo.c,v 1.17 2001/02/22 10:40:43 gluke Exp $ */ +/* $Id: php_mnogo.c,v 1.18 2001/02/23 10:34:49 gluke Exp $ */ /* +----------------------------------------------------------------------+ @@ -44,26 +44,27 @@ #define UDM_FIELD_CRC 12 /* udm_set_agent_param constants */ -#define UDM_PARAM_PAGE_SIZE 1 -#define UDM_PARAM_PAGE_NUM 2 -#define UDM_PARAM_SEARCH_MODE 3 -#define UDM_PARAM_CACHE_MODE 4 -#define UDM_PARAM_TRACK_MODE 5 -#define UDM_PARAM_CHARSET 6 -#define UDM_PARAM_STOPTABLE 7 -#define UDM_PARAM_STOPFILE 8 -#define UDM_PARAM_WEIGHT_FACTOR 9 -#define UDM_PARAM_WORD_MATCH 10 -#define UDM_PARAM_PHRASE_MODE 11 -#define UDM_PARAM_MIN_WORD_LEN 12 -#define UDM_PARAM_MAX_WORD_LEN 13 -#define UDM_PARAM_ISPELL_MODE 14 +#define UDM_PARAM_PAGE_SIZE 1 +#define UDM_PARAM_PAGE_NUM 2 +#define UDM_PARAM_SEARCH_MODE 3 +#define UDM_PARAM_CACHE_MODE 4 +#define UDM_PARAM_TRACK_MODE 5 +#define UDM_PARAM_CHARSET 6 +#define UDM_PARAM_STOPTABLE 7 +#define UDM_PARAM_STOPFILE 8 +#define UDM_PARAM_WEIGHT_FACTOR 9 +#define UDM_PARAM_WORD_MATCH 10 +#define UDM_PARAM_PHRASE_MODE 11 +#define UDM_PARAM_MIN_WORD_LEN 12 +#define UDM_PARAM_MAX_WORD_LEN 13 +#define UDM_PARAM_ISPELL_PREFIXES 14 /* udm_add_search_limit constants */ #define UDM_LIMIT_URL 1 #define UDM_LIMIT_TAG 2 #define UDM_LIMIT_LANG 3 #define UDM_LIMIT_CAT 4 +#define UDM_LIMIT_DATE 5 /* track modes */ #define UDM_TRACK_ENABLED 1 @@ -73,6 +74,10 @@ #define UDM_PHRASE_ENABLED 1 #define UDM_PHRASE_DISABLED 0 +/* prefix modes */ +#define UDM_PREFIXES_ENABLED 1 +#define UDM_PREFIXES_DISABLED 0 + /* udm_get_res_param constants */ #define UDM_PARAM_NUM_ROWS 256 #define UDM_PARAM_FOUND 257 @@ -81,6 +86,12 @@ #define UDM_PARAM_FIRST_DOC 260 #define UDM_PARAM_LAST_DOC 261 +/* udm_load_ispell_data constants */ +#define UDM_ISPELL_TYPE_AFFIX 1 +#define UDM_ISPELL_TYPE_SPELL 2 +#define UDM_ISPELL_TYPE_DB 3 +#define UDM_ISPELL_TYPE_SERVER 4 + /* True globals, no need for thread safety */ static int le_link,le_res; @@ -91,6 +102,9 @@ PHP_FE(udm_alloc_agent, NULL) PHP_FE(udm_set_agent_param, NULL) + PHP_FE(udm_load_ispell_data, NULL) + PHP_FE(udm_free_ispell_data, NULL) + PHP_FE(udm_add_search_limit, NULL) PHP_FE(udm_clear_search_limits, NULL) @@ -158,28 +172,38 @@ /* udm_set_agent_param constants */ REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_SIZE", UDM_PARAM_PAGE_SIZE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_PAGE_NUM", UDM_PARAM_PAGE_NUM,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_SEARCH_MODE", UDM_PARAM_SEARCH_MODE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_CACHE_MODE", UDM_PARAM_CACHE_MODE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_TRACK_MODE", UDM_PARAM_TRACK_MODE,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_PHRASE_MODE", UDM_PARAM_PHRASE_MODE,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_CHARSET", UDM_PARAM_CHARSET,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_STOPTABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_TABLE", UDM_PARAM_STOPTABLE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_STOPFILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_STOP_FILE", UDM_PARAM_STOPFILE,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_WEIGHT_FACTOR",UDM_PARAM_WEIGHT_FACTOR,CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_MATCH", UDM_PARAM_WORD_MATCH,CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("UDM_PARAM_PHRASE_MODE", UDM_PARAM_PHRASE_MODE,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_WORD_MATCH", UDM_PARAM_WORD_MATCH,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORD_LEN",UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_MAX_WORDLEN", UDM_PARAM_MAX_WORD_LEN,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORD_LEN",UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PARAM_MIN_WORDLEN", UDM_PARAM_MIN_WORD_LEN,CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_MODE", UDM_PARAM_ISPELL_MODE,CONST_CS | CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIXES",UDM_PARAM_ISPELL_PREFIXES,CONST_CS +| CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_PARAM_ISPELL_PREFIX",UDM_PARAM_ISPELL_PREFIXES,CONST_CS | +CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIXES", +UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PARAM_PREFIX", +UDM_PARAM_ISPELL_PREFIXES,CONST_CS | CONST_PERSISTENT); + /* udm_add_search_limit constants */ REGISTER_LONG_CONSTANT("UDM_LIMIT_CAT", UDM_LIMIT_CAT,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_LIMIT_URL", UDM_LIMIT_URL,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_LIMIT_TAG", UDM_LIMIT_TAG,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_LIMIT_LANG", UDM_LIMIT_LANG,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_LIMIT_DATE", UDM_LIMIT_DATE,CONST_CS | +CONST_PERSISTENT); /* udm_get_res_param constants */ REGISTER_LONG_CONSTANT("UDM_PARAM_FOUND", UDM_PARAM_FOUND,CONST_CS | CONST_PERSISTENT); @@ -209,16 +233,29 @@ REGISTER_LONG_CONSTANT("UDM_PHRASE_ENABLED", UDM_PHRASE_ENABLED,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_PHRASE_DISABLED", UDM_PHRASE_DISABLED,CONST_CS | CONST_PERSISTENT); - /* ispell mode params */ - REGISTER_LONG_CONSTANT("UDM_ISPELL_MODE_DB", UDM_ISPELL_MODE_DB,CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("UDM_ISPELL_USE_PREFIXES",UDM_ISPELL_USE_PREFIXES,CONST_CS | CONST_PERSISTENT); + /* prefixes mode params */ + REGISTER_LONG_CONSTANT("UDM_PREFIXES_ENABLED", UDM_PREFIXES_ENABLED,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PREFIX_ENABLED", UDM_PREFIXES_ENABLED,CONST_CS +| CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_ENABLED",UDM_PREFIXES_ENABLED,CONST_CS | +CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_ENABLED",UDM_PREFIXES_ENABLED,CONST_CS | +CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("UDM_PREFIXES_DISABLED", UDM_PREFIXES_DISABLED,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_PREFIX_DISABLED", UDM_PREFIXES_DISABLED,CONST_CS +| CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIXES_DISABLED",UDM_PREFIXES_DISABLED,CONST_CS +| CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_ISPELL_PREFIX_DISABLED",UDM_PREFIXES_DISABLED,CONST_CS | +CONST_PERSISTENT); + + /* ispell type params */ + REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_AFFIX", UDM_ISPELL_TYPE_AFFIX,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SPELL", UDM_ISPELL_TYPE_SPELL,CONST_CS +| CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_DB", UDM_ISPELL_TYPE_DB,CONST_CS | +CONST_PERSISTENT); + +REGISTER_LONG_CONSTANT("UDM_ISPELL_TYPE_SERVER",UDM_ISPELL_TYPE_SERVER,CONST_CS | +CONST_PERSISTENT); /* word match mode params */ REGISTER_LONG_CONSTANT("UDM_MATCH_WORD", UDM_MATCH_WORD,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_MATCH_BEGIN", UDM_MATCH_BEGIN,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_MATCH_SUBSTR", UDM_MATCH_SUBSTR,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("UDM_MATCH_END", UDM_MATCH_END,CONST_CS | CONST_PERSISTENT); - + return SUCCESS; } @@ -450,19 +487,20 @@ break; - case UDM_PARAM_ISPELL_MODE: - Agent->Conf->ispell_mode = atoi(val) & (UDM_ISPELL_MODE_DB | UDM_ISPELL_USE_PREFIXES); - - if (Agent->Conf->ispell_mode & UDM_ISPELL_MODE_DB) { - if (UdmDBImportAffixes(Agent,Agent->charset) || - UdmImportDictionaryFromDB(Agent)) { - RETURN_FALSE; - } else { - if(Agent->Conf->nspell) { - UdmSortDictionary(Agent->Conf); - UdmSortAffixes(Agent->Conf); - } - } + case UDM_PARAM_ISPELL_PREFIXES: + switch (atoi(val)){ + case UDM_PREFIXES_ENABLED: + Agent->Conf->ispell_mode |= +UDM_ISPELL_USE_PREFIXES; + break; + + case UDM_PREFIXES_DISABLED: + Agent->Conf->ispell_mode &= +~UDM_ISPELL_USE_PREFIXES; + break; + + default: + php_error(E_WARNING,"Udm_Set_Agent_Param: +Unknown ispell prefixes mode"); + RETURN_FALSE; + break; } break; @@ -512,6 +550,117 @@ /* }}} */ +/* {{{ proto int udm_load_ispell_data(int agent, int var, string val1, string val2, +int flag) + Load ispell data */ +DLEXPORT PHP_FUNCTION(udm_load_ispell_data) +{ + pval **yyagent, **yyvar, **yyval1, **yyval2, **yyflag; + char *val1, *val2; + int var, flag; + UDM_AGENT * Agent; + + switch(ZEND_NUM_ARGS()){ + + case 5: + +if(zend_get_parameters_ex(5,&yyagent,&yyvar,&yyval1,&yyval2,&yyflag)==FAILURE){ + RETURN_FALSE; + } + convert_to_long_ex(yyvar); + convert_to_long_ex(yyflag); + convert_to_string_ex(yyval1); + convert_to_string_ex(yyval2); + ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, +"mnoGoSearch-agent", le_link); + var = (*yyvar)->value.lval; + flag = (*yyflag)->value.lval; + val1 = (*yyval1)->value.str.val; + val2 = (*yyval2)->value.str.val; + + break; + + default: + WRONG_PARAM_COUNT; + break; + } + + switch(var){ + case UDM_ISPELL_TYPE_DB: + Agent->Conf->ispell_mode |= UDM_ISPELL_MODE_DB; + + if (UdmDBImportAffixes(Agent,Agent->charset) || + UdmImportDictionaryFromDB(Agent)) { + RETURN_FALSE; + } + + break; + + case UDM_ISPELL_TYPE_AFFIX: + Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB; + + if (UdmImportAffixes(Agent->Conf,val1,val2,NULL,0)) { + php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load +affix file %s",val2); + RETURN_FALSE; + } + + break; + + case UDM_ISPELL_TYPE_SPELL: + Agent->Conf->ispell_mode &= ~UDM_ISPELL_MODE_DB; + + if (UdmImportDictionary(Agent->Conf,val1,val2,1,"")) { + php_error(E_WARNING,"Udm_Load_Ispell_Data: Cannot load +spell file %s",val2); + RETURN_FALSE; + } + + break; + + case UDM_ISPELL_TYPE_SERVER: + + break; + + default: + php_error(E_WARNING,"Udm_Load_Ispell_Data: Unknown ispell type +parameter"); + RETURN_FALSE; + break; + } + + if (flag) { + if(Agent->Conf->nspell) { + UdmSortDictionary(Agent->Conf); + UdmSortAffixes(Agent->Conf); + } + } + + RETURN_TRUE; +} +/* }}} */ + + +/* {{{ proto int udm_free_ispell_data(int agent) + Free memory allocated for ispell data */ +DLEXPORT PHP_FUNCTION(udm_free_ispell_data) +{ + pval ** yyagent; + UDM_AGENT * Agent; + switch(ZEND_NUM_ARGS()){ + case 1: { + if (zend_get_parameters_ex(1, &yyagent)==FAILURE) { + RETURN_FALSE; + } + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, -1, "mnoGoSearch-Agent", +le_link); + + /* UdmClearIspellData(Agent->Conf); */ + + RETURN_TRUE; +} +/* }}} */ + + /* {{{ proto int udm_add_search_limit(int agent, int var, string val) Add mnoGoSearch search restrictions */ DLEXPORT PHP_FUNCTION(udm_add_search_limit) @@ -561,6 +710,23 @@ break; + case UDM_LIMIT_DATE: { + struct udm_stl_info_t stl_info = { 0, 0, 0 }; + + if (val[0] == '>') { + stl_info.type=1; + } else if (val[0] == '<') { + stl_info.type=-1; + } else { + php_error(E_WARNING,"Udm_Add_Search_Limit: Incorrect +date limit format"); + RETURN_FALSE; + } + + stl_info.t1=(time_t)(atol(val+1)); + UdmAddTimeLimit(Agent->Conf,&stl_info); + + break; + } default: php_error(E_WARNING,"Udm_Add_Search_Limit: Unknown search limit parameter"); RETURN_FALSE; @@ -620,7 +786,7 @@ ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link); convert_to_string_ex(yyquery); - if (Res=UdmFind(Agent,UdmTolower((*yyquery)->value.str.val,Agent->charset))) { + if ((Res=UdmFind(Agent,UdmTolower((*yyquery)->value.str.val,Agent->charset)))) +{ ZEND_REGISTER_RESOURCE(return_value,Res,le_res); } else { RETURN_FALSE; Index: php4/ext/mnogosearch/php_mnogo.h diff -u php4/ext/mnogosearch/php_mnogo.h:1.5 php4/ext/mnogosearch/php_mnogo.h:1.6 --- php4/ext/mnogosearch/php_mnogo.h:1.5 Mon Feb 5 07:15:08 2001 +++ php4/ext/mnogosearch/php_mnogo.h Fri Feb 23 02:34:49 2001 @@ -1,5 +1,5 @@ /* $Source: /local/repository/php4/ext/mnogosearch/php_mnogo.h,v $ */ -/* $Id: php_mnogo.h,v 1.5 2001/02/05 15:15:08 gluke Exp $ */ +/* $Id: php_mnogo.h,v 1.6 2001/02/23 10:34:49 gluke Exp $ */ /* +----------------------------------------------------------------------+ @@ -48,6 +48,9 @@ DLEXPORT PHP_FUNCTION(udm_alloc_agent); DLEXPORT PHP_FUNCTION(udm_set_agent_param); + +DLEXPORT PHP_FUNCTION(udm_load_ispell_data); +DLEXPORT PHP_FUNCTION(udm_free_ispell_data); DLEXPORT PHP_FUNCTION(udm_add_search_limit); DLEXPORT PHP_FUNCTION(udm_clear_search_limits);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]