📄 pspell.c
字号:
if(argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(word); PSPELL_FETCH_MANAGER; array_init(return_value); wl = pspell_manager_suggest(manager, Z_STRVAL_PP(word)); if(wl){ PspellStringEmulation *els = pspell_word_list_elements(wl); while((sug = pspell_string_emulation_next(els)) != 0){ add_next_index_string(return_value,(char *)sug,1); } delete_pspell_string_emulation(els); }else{ php_error(E_WARNING, "PSPELL had a problem. details: %s ", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_store_replacement(int pspell, string misspell, string correct) Notify the dictionary of a user-selected replacement */PHP_FUNCTION(pspell_store_replacement){ int type; zval **scin,**miss,**corr; PspellManager *manager; int argc; argc = ZEND_NUM_ARGS(); if (argc != 3 || zend_get_parameters_ex(argc, &scin,&miss,&corr) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(miss); convert_to_string_ex(corr); PSPELL_FETCH_MANAGER; pspell_manager_store_replacement(manager, Z_STRVAL_PP(miss), Z_STRVAL_PP(corr)); if(pspell_manager_error_number(manager) == 0){ RETURN_TRUE; }else{ php_error(E_WARNING, "pspell_store_replacement() gave error: %s", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_add_to_personal(int pspell, string word) Adds a word to a personal list */PHP_FUNCTION(pspell_add_to_personal){ int type; zval **scin,**word; PspellManager *manager; int argc; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(word); PSPELL_FETCH_MANAGER; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ if(Z_STRLEN_PP(word) == 0){ RETURN_FALSE; } pspell_manager_add_to_personal(manager, Z_STRVAL_PP(word)); if(pspell_manager_error_number(manager) == 0){ RETURN_TRUE; }else{ php_error(E_WARNING, "pspell_add_to_personal() gave error: %s", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_add_to_session(int pspell, string word) Adds a word to the current session */PHP_FUNCTION(pspell_add_to_session){ int type; zval **scin,**word; PspellManager *manager; int argc; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc, &scin,&word) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(word); PSPELL_FETCH_MANAGER; /*If the word is empty, we have to return; otherwise we'll segfault! ouch!*/ if(Z_STRLEN_PP(word) == 0){ RETURN_FALSE; } pspell_manager_add_to_session(manager, Z_STRVAL_PP(word)); if(pspell_manager_error_number(manager) == 0){ RETURN_TRUE; }else{ php_error(E_WARNING, "pspell_add_to_session() gave error: %s", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_clear_session(int pspell) Clears the current session */PHP_FUNCTION(pspell_clear_session){ int type; zval **scin; PspellManager *manager; int argc; argc = ZEND_NUM_ARGS(); if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_MANAGER; pspell_manager_clear_session(manager); if(pspell_manager_error_number(manager) == 0){ RETURN_TRUE; }else{ php_error(E_WARNING, "pspell_clear_session() gave error: %s", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_save_wordlist(int pspell) Saves the current (personal) wordlist */PHP_FUNCTION(pspell_save_wordlist){ int type; zval **scin; PspellManager *manager; int argc; argc = ZEND_NUM_ARGS(); if (argc != 1 || zend_get_parameters_ex(argc, &scin) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_MANAGER; pspell_manager_save_all_word_lists(manager); if(pspell_manager_error_number(manager) == 0){ RETURN_TRUE; }else{ php_error(E_WARNING, "pspell_save_wordlist() gave error: %s", pspell_manager_error_message(manager)); RETURN_FALSE; }}/* }}} *//* {{{ proto int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]]) Create a new config to be used later to create a manager */PHP_FUNCTION(pspell_config_create){ zval **language,**spelling,**jargon,**encoding; int argc; int ind; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc < 1 || argc > 4 || zend_get_parameters_ex(argc,&language,&spelling,&jargon,&encoding) == FAILURE) { WRONG_PARAM_COUNT; } config = new_pspell_config(); convert_to_string_ex(language); pspell_config_replace(config, "language-tag", Z_STRVAL_PP(language)); if(argc > 1){ convert_to_string_ex(spelling); if(Z_STRLEN_PP(spelling) > 0){ pspell_config_replace(config, "spelling", Z_STRVAL_PP(spelling)); } } if(argc > 2){ convert_to_string_ex(jargon); if(Z_STRLEN_PP(jargon) > 0){ pspell_config_replace(config, "jargon", Z_STRVAL_PP(jargon)); } } if(argc > 3){ convert_to_string_ex(encoding); if(Z_STRLEN_PP(encoding) > 0){ pspell_config_replace(config, "encoding", Z_STRVAL_PP(encoding)); } } /* By default I do not want to write anything anywhere because it'll try to write to $HOME which is not what we want */ pspell_config_replace(config, "save-repl", "false"); ind = zend_list_insert(config, le_pspell_config); RETURN_LONG(ind);}/* }}} *//* {{{ proto int pspell_config_runtogether(int conf, bool runtogether) Consider run-together words as valid components */PHP_FUNCTION(pspell_config_runtogether){ int type; zval **conf, **runtogether; int argc; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&runtogether) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; convert_to_boolean_ex(runtogether); pspell_config_replace(config, "run-together", Z_LVAL_PP(runtogether) ? "true" : "false"); RETURN_TRUE;}/* }}} *//* {{{ proto int pspell_config_mode(int conf, long mode) Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS) */PHP_FUNCTION(pspell_config_mode){ int type; zval **conf, **mode; int argc; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&mode) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; convert_to_long_ex(mode); /* First check what mode we want (how many suggestions) */ if(Z_LVAL_PP(mode) == PSPELL_FAST){ pspell_config_replace(config, "sug-mode", "fast"); }else if(Z_LVAL_PP(mode) == PSPELL_NORMAL){ pspell_config_replace(config, "sug-mode", "normal"); }else if(Z_LVAL_PP(mode) == PSPELL_BAD_SPELLERS){ pspell_config_replace(config, "sug-mode", "bad-spellers"); } RETURN_TRUE;}/* }}} *//* {{{ proto int pspell_config_ignore(int conf, int ignore) Ignore words <= n chars */PHP_FUNCTION(pspell_config_ignore){ int type; zval **conf, **pignore; int argc; char ignore_str[MAX_LENGTH_OF_LONG + 1]; long ignore = 0L; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&pignore) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; convert_to_long_ex(pignore); ignore = Z_LVAL_PP(pignore); sprintf(ignore_str, "%ld", ignore); pspell_config_replace(config, "ignore", ignore_str); RETURN_TRUE;}/* }}} *//* {{{ proto int pspell_config_personal(int conf, string personal) Use a personal dictionary for this config */PHP_FUNCTION(pspell_config_personal){ int type; zval **conf, **personal; int argc; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&personal) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; convert_to_string_ex(personal); if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(personal), NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(Z_STRVAL_PP(personal) TSRMLS_CC)) { RETURN_FALSE; } pspell_config_replace(config, "personal", Z_STRVAL_PP(personal)); RETURN_TRUE;}/* }}} *//* {{{ proto int pspell_config_repl(int conf, string repl) Use a personal dictionary with replacement pairs for this config */PHP_FUNCTION(pspell_config_repl){ int type; zval **conf, **repl; int argc; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&repl) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; pspell_config_replace(config, "save-repl", "true"); convert_to_string_ex(repl); if (PG(safe_mode) && (!php_checkuid(Z_STRVAL_PP(repl), NULL, CHECKUID_CHECK_FILE_AND_DIR))) { RETURN_FALSE; } if (php_check_open_basedir(Z_STRVAL_PP(repl) TSRMLS_CC)) { RETURN_FALSE; } pspell_config_replace(config, "repl", Z_STRVAL_PP(repl)); RETURN_TRUE;}/* }}} *//* {{{ proto int pspell_config_save_repl(int conf, bool save) Save replacement pairs when personal list is saved for this config */PHP_FUNCTION(pspell_config_save_repl){ int type; zval **conf, **save; int argc; PspellConfig *config; argc = ZEND_NUM_ARGS(); if (argc != 2 || zend_get_parameters_ex(argc,&conf,&save) == FAILURE) { WRONG_PARAM_COUNT; } PSPELL_FETCH_CONFIG; convert_to_boolean_ex(save); pspell_config_replace(config, "save-repl", Z_LVAL_PP(save) ? "true" : "false"); RETURN_TRUE;}/* }}} *//* {{{ PHP_MINFO_FUNCTION */PHP_MINFO_FUNCTION(pspell){ php_info_print_table_start(); php_info_print_table_row(2, "PSpell Support", "enabled"); php_info_print_table_end();}/* }}} */#endif/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -