diff --git a/ext/enchant/enchant.c b/ext/enchant/enchant.c index 8de6924b8e9cb..55a76d29dae08 100644 --- a/ext/enchant/enchant.c +++ b/ext/enchant/enchant.c @@ -22,38 +22,62 @@ #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" +#include "Zend/zend_interfaces.h" +#include "Zend/zend_exceptions.h" +#include "../spl/spl_exceptions.h" #include #include "php_enchant.h" #include "enchant_arginfo.h" -typedef EnchantBroker * EnchantBrokerPtr; -typedef struct _broker_struct enchant_broker; -typedef struct _dict_struct enchant_dict; - -typedef enchant_broker * enchant_brokerPtr; -typedef enchant_dict * enchant_dictPtr; - typedef struct _broker_struct { - EnchantBroker *pbroker; - enchant_dict **dict; - unsigned int dictcnt; - zend_resource *rsrc; -} _enchant_broker; + EnchantBroker *pbroker; + int nb_dict; + zend_object std; +} enchant_broker; typedef struct _dict_struct { - unsigned int id; - EnchantDict *pdict; - enchant_broker *pbroker; - zend_resource *rsrc; -} _enchant_dict; + EnchantDict *pdict; + zval zbroker; + zend_object std; +} enchant_dict; + +zend_class_entry *enchant_broker_ce; +static zend_object_handlers enchant_broker_handlers; + +static inline enchant_broker *enchant_broker_from_obj(zend_object *obj) { + return (enchant_broker *)((char *)(obj) - XtOffsetOf(enchant_broker, std)); +} + +#define Z_ENCHANT_BROKER_P(zv) enchant_broker_from_obj(Z_OBJ_P(zv)) +static zend_object *enchant_broker_create_object(zend_class_entry *class_type) { + enchant_broker *intern = zend_object_alloc(sizeof(enchant_broker), class_type); -/* True global resources - no need for thread safety here */ -static int le_enchant_broker; -static int le_enchant_dict; + zend_object_std_init(&intern->std, class_type); + object_properties_init(&intern->std, class_type); + intern->std.handlers = &enchant_broker_handlers; + + return &intern->std; +} -/* If you declare any globals in php_enchant.h uncomment this:*/ -/*ZEND_DECLARE_MODULE_GLOBALS(enchant)*/ +zend_class_entry *enchant_dict_ce; +static zend_object_handlers enchant_dict_handlers; + +static inline enchant_dict *enchant_dict_from_obj(zend_object *obj) { + return (enchant_dict *)((char *)(obj) - XtOffsetOf(enchant_dict, std)); +} + +#define Z_ENCHANT_DICT_P(zv) enchant_dict_from_obj(Z_OBJ_P(zv)) + +static zend_object *enchant_dict_create_object(zend_class_entry *class_type) { + enchant_dict *intern = zend_object_alloc(sizeof(enchant_dict), class_type); + + zend_object_std_init(&intern->std, class_type); + object_properties_init(&intern->std, class_type); + intern->std.handlers = &enchant_dict_handlers; + + return &intern->std; +} #define PHP_ENCHANT_MYSPELL 1 #define PHP_ENCHANT_ISPELL 2 @@ -138,54 +162,34 @@ static void php_enchant_list_dicts_fn( const char * const lang_tag, } /* }}} */ -static void php_enchant_broker_free(zend_resource *rsrc) /* {{{ */ -{ - if (rsrc->ptr) { - enchant_broker *broker = (enchant_broker *)rsrc->ptr; - if (broker) { - if (broker->pbroker) { - if (broker->dictcnt && broker->dict) { - if (broker->dict) { - int total; - total = broker->dictcnt-1; - do { - if (broker->dict[total]) { - enchant_dict *pdict = broker->dict[total]; - broker->dict[total] = NULL; - zend_list_free(pdict->rsrc); - efree(pdict); - } - total--; - } while (total>=0); - } - efree(broker->dict); - broker->dict = NULL; - } - enchant_broker_free(broker->pbroker); - } - efree(broker); - } +static void php_enchant_broker_free(zend_object *object) /* {{{ */ +{ + enchant_broker *broker = enchant_broker_from_obj(object); + + if (broker->pbroker) { /* may have been freed by enchant_broker_free */ + enchant_broker_free(broker->pbroker); + broker->pbroker = NULL; } + zend_object_std_dtor(object); } /* }}} */ -static void php_enchant_dict_free(zend_resource *rsrc) /* {{{ */ +static void php_enchant_dict_free(zend_object *object) /* {{{ */ { - if (rsrc->ptr) { - enchant_dict *pdict = (enchant_dict *)rsrc->ptr; - if (pdict) { - enchant_broker *pbroker = pdict->pbroker; + enchant_dict *dict = enchant_dict_from_obj(object); - if (pdict->pdict && pbroker) { - enchant_broker_free_dict(pbroker->pbroker, pdict->pdict); - } + if (dict->pdict) { /* may have been freed by enchant_broker_free_dict */ + enchant_broker *broker = Z_ENCHANT_BROKER_P(&dict->zbroker); - pbroker->dict[pdict->id] = NULL; - efree(pdict); - zend_list_delete(pbroker->rsrc); + if (broker && broker->pbroker) { + enchant_broker_free_dict(broker->pbroker, dict->pdict); + broker->nb_dict--; + zval_ptr_dtor(&dict->zbroker); } + dict->pdict = NULL; } + zend_object_std_dtor(object); } /* }}} */ @@ -193,10 +197,34 @@ static void php_enchant_dict_free(zend_resource *rsrc) /* {{{ */ */ PHP_MINIT_FUNCTION(enchant) { - le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant_broker", module_number); - le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant_dict", module_number); - REGISTER_LONG_CONSTANT("ENCHANT_MYSPELL", PHP_ENCHANT_MYSPELL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("ENCHANT_ISPELL", PHP_ENCHANT_ISPELL, CONST_CS | CONST_PERSISTENT); + zend_class_entry bce, dce; + + INIT_CLASS_ENTRY(bce, "EnchantBroker", class_EnchantBroker_methods); + enchant_broker_ce = zend_register_internal_class(&bce); + enchant_broker_ce->ce_flags |= ZEND_ACC_FINAL; + enchant_broker_ce->create_object = enchant_broker_create_object; + enchant_broker_ce->serialize = zend_class_serialize_deny; + enchant_broker_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&enchant_broker_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + enchant_broker_handlers.offset = XtOffsetOf(enchant_broker, std); + enchant_broker_handlers.free_obj = php_enchant_broker_free; + enchant_broker_handlers.clone_obj = NULL; + + INIT_CLASS_ENTRY(dce, "EnchantDict", class_EnchantDict_methods); + enchant_dict_ce = zend_register_internal_class(&dce); + enchant_dict_ce->ce_flags |= ZEND_ACC_FINAL; + enchant_dict_ce->create_object = enchant_dict_create_object; + enchant_dict_ce->serialize = zend_class_serialize_deny; + enchant_dict_ce->unserialize = zend_class_unserialize_deny; + + memcpy(&enchant_dict_handlers, &std_object_handlers, sizeof(zend_object_handlers)); + enchant_dict_handlers.offset = XtOffsetOf(enchant_dict, std); + enchant_dict_handlers.free_obj = php_enchant_dict_free; + enchant_dict_handlers.clone_obj = NULL; + + REGISTER_LONG_CONSTANT("ENCHANT_MYSPELL", PHP_ENCHANT_MYSPELL, CONST_CS | CONST_PERSISTENT | CONST_DEPRECATED); + REGISTER_LONG_CONSTANT("ENCHANT_ISPELL", PHP_ENCHANT_ISPELL, CONST_CS | CONST_PERSISTENT | CONST_DEPRECATED); #ifdef HAVE_ENCHANT_GET_VERSION REGISTER_STRING_CONSTANT("LIBENCHANT_VERSION", enchant_get_version(), CONST_CS | CONST_PERSISTENT); #endif @@ -245,17 +273,17 @@ PHP_MINFO_FUNCTION(enchant) /* }}} */ #define PHP_ENCHANT_GET_BROKER \ - pbroker = (enchant_broker *)zend_fetch_resource(Z_RES_P(broker), "enchant_broker", le_enchant_broker); \ - if (!pbroker || !pbroker->pbroker) { \ - php_error_docref(NULL, E_WARNING, "Resource broker invalid"); \ - RETURN_FALSE; \ + pbroker = Z_ENCHANT_BROKER_P(broker); \ + if (!pbroker->pbroker) { \ + zend_value_error("Invalid or uninitialized EnchantBroker object"); \ + RETURN_THROWS(); \ } #define PHP_ENCHANT_GET_DICT \ - pdict = (enchant_dict *)zend_fetch_resource(Z_RES_P(dict), "enchant_dict", le_enchant_dict); \ - if (!pdict || !pdict->pdict) { \ - php_error_docref(NULL, E_WARNING, "Invalid dictionary resource."); \ - RETURN_FALSE; \ + pdict = Z_ENCHANT_DICT_P(dict); \ + if (!pdict->pdict) { \ + zend_value_error("Invalid or uninitialized EnchantDict object"); \ + RETURN_THROWS(); \ } /* {{{ proto resource enchant_broker_init() @@ -264,20 +292,24 @@ PHP_FUNCTION(enchant_broker_init) { enchant_broker *broker; EnchantBroker *pbroker; + zval *this = getThis(); if (zend_parse_parameters_none() == FAILURE) { RETURN_THROWS(); } pbroker = enchant_broker_init(); - if (pbroker) { - broker = (enchant_broker *) emalloc(sizeof(enchant_broker)); + if (this) { + broker = Z_ENCHANT_BROKER_P(this); + } else { + object_init_ex(return_value, enchant_broker_ce); + broker = Z_ENCHANT_BROKER_P(return_value); + } broker->pbroker = pbroker; - broker->dict = NULL; - broker->dictcnt = 0; - broker->rsrc = zend_register_resource(broker, le_enchant_broker); - RETURN_RES(broker->rsrc); + broker->nb_dict = 0; + } else if (this) { + zend_throw_exception(spl_ce_RuntimeException, "Can't create a new EnchantBroker", 0); } else { RETURN_FALSE; } @@ -291,12 +323,19 @@ PHP_FUNCTION(enchant_broker_free) zval *broker; enchant_broker *pbroker; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &broker) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &broker, enchant_broker_ce) == FAILURE) { RETURN_THROWS(); } PHP_ENCHANT_GET_BROKER; - zend_list_close(Z_RES_P(broker)); + if (pbroker->nb_dict > 0) { + php_error_docref(NULL, E_WARNING, "Cannot free EnchantBroker object with open EnchantDict objects"); + RETURN_FALSE; + } + if (pbroker->pbroker) { + enchant_broker_free(pbroker->pbroker); + pbroker->pbroker = NULL; + } RETURN_TRUE; } /* }}} */ @@ -309,7 +348,7 @@ PHP_FUNCTION(enchant_broker_get_error) enchant_broker *pbroker; const char *msg; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &broker) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &broker, enchant_broker_ce) == FAILURE) { RETURN_THROWS(); } @@ -334,7 +373,7 @@ PHP_FUNCTION(enchant_broker_set_dict_path) char *value; size_t value_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rls", &broker, &dict_type, &value, &value_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ols", &broker, enchant_broker_ce, &dict_type, &value, &value_len) == FAILURE) { RETURN_THROWS(); } @@ -373,7 +412,7 @@ PHP_FUNCTION(enchant_broker_get_dict_path) zend_long dict_type; char *value; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &broker, &dict_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &broker, enchant_broker_ce, &dict_type) == FAILURE) { RETURN_THROWS(); } @@ -428,7 +467,7 @@ PHP_FUNCTION(enchant_broker_list_dicts) zval *broker; enchant_broker *pbroker; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &broker) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &broker, enchant_broker_ce) == FAILURE) { RETURN_THROWS(); } @@ -446,12 +485,11 @@ PHP_FUNCTION(enchant_broker_request_dict) zval *broker; enchant_broker *pbroker; enchant_dict *dict; - EnchantDict *d; + EnchantDict *pdict; char *tag; size_t taglen; - int pos; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &broker, &tag, &taglen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &broker, enchant_broker_ce, &tag, &taglen) == FAILURE) { RETURN_THROWS(); } @@ -462,27 +500,63 @@ PHP_FUNCTION(enchant_broker_request_dict) RETURN_FALSE; } - d = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag); - if (d) { - pos = pbroker->dictcnt++; - if (pbroker->dictcnt) { - pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt); - } else { - pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *)); - pos = 0; + pdict = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag); + if (pdict) { + pbroker->nb_dict++; + + object_init_ex(return_value, enchant_dict_ce); + dict = Z_ENCHANT_DICT_P(return_value); + dict->pdict =pdict; + ZVAL_COPY(&dict->zbroker, broker); + } else if (getThis()) { + const char *err = enchant_broker_get_error(pbroker->pbroker); + zend_throw_exception_ex(spl_ce_RuntimeException, 0, "%s", err ? err : "Can't create a new EnchantDict"); + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ proto resource EnchantDict::__construct(resource broker, string tag [, string pwl]) + create a new dictionary using tag or pwl */ +PHP_METHOD(EnchantDict, __construct) +{ + zval *broker; + enchant_broker *pbroker; + enchant_dict *dict; + EnchantDict *pdict; + char *tag, *pwl = NULL; + size_t taglen, pwllen = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|p", &broker, enchant_broker_ce, &tag, &taglen, &pwl, &pwllen) == FAILURE) { + RETURN_THROWS(); + } + + PHP_ENCHANT_GET_BROKER; + + if (pwllen) { + if (php_check_open_basedir_ex(pwl, 0)) { + zend_throw_exception(NULL, "Open_basedir restriction in effect", 0); + RETURN_THROWS(); } + pdict = enchant_broker_request_pwl_dict(pbroker->pbroker, pwl); + } else { + if (taglen == 0) { + zend_value_error("Tag cannot be empty"); + RETURN_THROWS(); + } + pdict = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag); + } - dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict)); - dict->id = pos; - dict->pbroker = pbroker; - dict->pdict = d; - pbroker->dict[pos] = dict; + if (pdict) { + pbroker->nb_dict++; - dict->rsrc = zend_register_resource(dict, le_enchant_dict); - GC_ADDREF(pbroker->rsrc); - RETURN_RES(dict->rsrc); + dict = Z_ENCHANT_DICT_P(ZEND_THIS); + dict->pdict =pdict; + ZVAL_COPY(&dict->zbroker, broker); } else { - RETURN_FALSE; + const char *err = enchant_broker_get_error(pbroker->pbroker); + zend_throw_exception_ex(spl_ce_RuntimeException, 0, "%s", err ? err : "Can't create a new EnchantDict"); } } /* }}} */ @@ -494,12 +568,11 @@ PHP_FUNCTION(enchant_broker_request_pwl_dict) zval *broker; enchant_broker *pbroker; enchant_dict *dict; - EnchantDict *d; - char *pwl; + EnchantDict *pdict; + const char *pwl; size_t pwllen; - int pos; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &broker, &pwl, &pwllen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Op", &broker, enchant_broker_ce, &pwl, &pwllen) == FAILURE) { RETURN_THROWS(); } @@ -509,25 +582,17 @@ PHP_FUNCTION(enchant_broker_request_pwl_dict) PHP_ENCHANT_GET_BROKER; - d = enchant_broker_request_pwl_dict(pbroker->pbroker, (const char *)pwl); - if (d) { - pos = pbroker->dictcnt++; - if (pbroker->dictcnt) { - pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt); - } else { - pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *)); - pos = 0; - } - - dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict)); - dict->id = pos; - dict->pbroker = pbroker; - dict->pdict = d; - pbroker->dict[pos] = dict; - - dict->rsrc = zend_register_resource(dict, le_enchant_dict); - GC_ADDREF(pbroker->rsrc); - RETURN_RES(dict->rsrc); + pdict = enchant_broker_request_pwl_dict(pbroker->pbroker, pwl); + if (pdict) { + pbroker->nb_dict++; + + object_init_ex(return_value, enchant_dict_ce); + dict = Z_ENCHANT_DICT_P(return_value); + dict->pdict = pdict; + ZVAL_COPY(&dict->zbroker, broker); + } else if (getThis()) { + const char *err = enchant_broker_get_error(pbroker->pbroker); + zend_throw_exception_ex(spl_ce_RuntimeException, 0, "%s", err ? err : "Can't create a new EnchantDict"); } else { RETURN_FALSE; } @@ -541,13 +606,23 @@ PHP_FUNCTION(enchant_broker_free_dict) zval *dict; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &dict) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &dict, enchant_dict_ce) == FAILURE) { RETURN_THROWS(); } PHP_ENCHANT_GET_DICT; - zend_list_close(Z_RES_P(dict)); + if (pdict->pdict) { + enchant_broker *broker = Z_ENCHANT_BROKER_P(&pdict->zbroker); + + if (broker && broker->pbroker) { + enchant_broker_free_dict(broker->pbroker, pdict->pdict); + broker->nb_dict--; + zval_ptr_dtor(&pdict->zbroker); + } + pdict->pdict = NULL; + } + RETURN_TRUE; } /* }}} */ @@ -561,7 +636,7 @@ PHP_FUNCTION(enchant_broker_dict_exists) size_t taglen; enchant_broker * pbroker; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &broker, &tag, &taglen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &broker, enchant_broker_ce, &tag, &taglen) == FAILURE) { RETURN_THROWS(); } @@ -587,7 +662,7 @@ PHP_FUNCTION(enchant_broker_set_ordering) size_t ptaglen; enchant_broker * pbroker; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &broker, &ptag, &ptaglen, &pordering, &porderinglen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &broker, enchant_broker_ce, &ptag, &ptaglen, &pordering, &porderinglen) == FAILURE) { RETURN_THROWS(); } @@ -606,7 +681,7 @@ PHP_FUNCTION(enchant_broker_describe) zval *broker; enchant_broker * pbroker; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &broker) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &broker, enchant_broker_ce) == FAILURE) { RETURN_THROWS(); } @@ -626,7 +701,7 @@ PHP_FUNCTION(enchant_dict_quick_check) size_t wordlen; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|z", &dict, &word, &wordlen, &sugg) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|z", &dict, enchant_dict_ce, &word, &wordlen, &sugg) == FAILURE) { RETURN_THROWS(); } @@ -656,9 +731,9 @@ PHP_FUNCTION(enchant_dict_quick_check) enchant_dict_free_string_list(pdict->pdict, suggs); } + RETURN_FALSE; } - RETURN_TRUE; } /* }}} */ @@ -672,7 +747,7 @@ PHP_FUNCTION(enchant_dict_check) size_t wordlen; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &dict, &word, &wordlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &dict, enchant_dict_ce, &word, &wordlen) == FAILURE) { RETURN_THROWS(); } @@ -693,7 +768,7 @@ PHP_FUNCTION(enchant_dict_suggest) enchant_dict *pdict; size_t n_sugg; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &dict, &word, &wordlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &dict, enchant_dict_ce, &word, &wordlen) == FAILURE) { RETURN_THROWS(); } @@ -722,7 +797,7 @@ PHP_FUNCTION(enchant_dict_add) size_t wordlen; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &dict, &word, &wordlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &dict, enchant_dict_ce, &word, &wordlen) == FAILURE) { RETURN_THROWS(); } @@ -741,7 +816,7 @@ PHP_FUNCTION(enchant_dict_add_to_session) size_t wordlen; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &dict, &word, &wordlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &dict, enchant_dict_ce, &word, &wordlen) == FAILURE) { RETURN_THROWS(); } @@ -760,7 +835,7 @@ PHP_FUNCTION(enchant_dict_is_added) size_t wordlen; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &dict, &word, &wordlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &dict, enchant_dict_ce, &word, &wordlen) == FAILURE) { RETURN_THROWS(); } @@ -783,7 +858,7 @@ PHP_FUNCTION(enchant_dict_store_replacement) enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &dict, &mis, &mislen, &cor, &corlen) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oss", &dict, enchant_dict_ce, &mis, &mislen, &cor, &corlen) == FAILURE) { RETURN_THROWS(); } @@ -801,7 +876,7 @@ PHP_FUNCTION(enchant_dict_get_error) enchant_dict *pdict; const char *msg; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &dict) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &dict, enchant_dict_ce) == FAILURE) { RETURN_THROWS(); } @@ -823,7 +898,7 @@ PHP_FUNCTION(enchant_dict_describe) zval *dict; enchant_dict *pdict; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &dict) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &dict, enchant_dict_ce) == FAILURE) { RETURN_THROWS(); } diff --git a/ext/enchant/enchant.stub.php b/ext/enchant/enchant.stub.php index f4bed54dc1bd8..cc1cb730fc0d9 100644 --- a/ext/enchant/enchant.stub.php +++ b/ext/enchant/enchant.stub.php @@ -2,94 +2,129 @@ /** @generate-function-entries */ -/** @return resource|false */ -function enchant_broker_init() {} +final class EnchantBroker +{ + /** @alias enchant_broker_init */ + public function __construct() {} -/** @param resource $broker */ -function enchant_broker_free($broker): bool {} + /** @alias enchant_broker_get_error */ + public function getError(): string|false {} + + /** @alias enchant_broker_list_dicts */ + public function listDicts(): ?array {} + + /** @alias enchant_broker_request_dict */ + public function requestDict(string $tag): EnchantDict|false {} + + /** @alias enchant_broker_request_pwl_dict */ + public function requestPWL(string $filename): EnchantDict|false {} + + /** @alias enchant_broker_dict_exists */ + public function isDict(string $tag): bool {} + + /** @alias enchant_broker_set_ordering */ + public function setOrdering(string $tag, string $ordering): bool {} + + /** @alias enchant_broker_describe */ + public function describe(): ?array {} +} + +final class EnchantDict +{ + public function __construct(EnchantBroker $broker, string $tag, ?string $pwl = null) {} + + /** @alias enchant_dict_quick_check */ + public function checkAndSuggest(string $word, &$suggestions = null): bool {} + + /** @alias enchant_dict_check */ + public function check(string $word): bool {} + + /** @alias enchant_dict_suggest */ + public function suggest(string $word): ?array {} + + /** @alias enchant_dict_add */ + public function add(string $word): void {} + + /** @alias enchant_dict_add_to_session */ + public function addToSession(string $word): void {} + + /** @alias enchant_dict_is_added */ + public function isAdded(string $word): bool {} + + /** @alias enchant_dict_store_replacement */ + public function storeReplacement(string $mis, string $cor): void {} + + /** @alias enchant_dict_get_error */ + public function getError(): string|false {} + + /** @alias enchant_dict_describe */ + public function describe(): array {} +} + +function enchant_broker_init(): EnchantBroker|false {} /** -* @param resource $broker -* @return string|false +* @deprecated */ -function enchant_broker_get_error($broker) {} +function enchant_broker_free(EnchantBroker $broker): bool {} + +function enchant_broker_get_error(EnchantBroker $broker): string|false {} /** -* @param resource $broker * @deprecated */ -function enchant_broker_set_dict_path($broker, int $name, string $value): bool {} +function enchant_broker_set_dict_path(EnchantBroker $broker, int $name, string $value): bool {} /** -* @param resource $broker * @deprecated */ -function enchant_broker_get_dict_path($broker, int $name): string|false {} +function enchant_broker_get_dict_path(EnchantBroker $broker, int $name): string|false {} -/** @param resource $broker */ -function enchant_broker_list_dicts($broker): ?array {} +function enchant_broker_list_dicts(EnchantBroker $broker): ?array {} -/** - * @param resource $broker - * @return resource|false - */ -function enchant_broker_request_dict($broker, string $tag) {} +function enchant_broker_request_dict(EnchantBroker $broker, string $tag): EnchantDict|false {} -/** - * @param resource $broker - * @return resource|false - */ -function enchant_broker_request_pwl_dict($broker, string $filename) {} +function enchant_broker_request_pwl_dict(EnchantBroker $broker, string $filename): EnchantDict|false {} -/** @param resource $dict */ -function enchant_broker_free_dict($dict): bool {} +/** +* @deprecated +*/ +function enchant_broker_free_dict(EnchantDict $dict): bool {} -/** @param resource $broker */ -function enchant_broker_dict_exists($broker, string $tag): bool {} +function enchant_broker_dict_exists(EnchantBroker $broker, string $tag): bool {} -/** @param resource $broker */ -function enchant_broker_set_ordering($broker, string $tag, string $ordering): bool {} +function enchant_broker_set_ordering(EnchantBroker $broker, string $tag, string $ordering): bool {} -/** @param resource $broker */ -function enchant_broker_describe($broker): ?array {} +function enchant_broker_describe(EnchantBroker $broker): ?array {} -/** @param resource $dict */ -function enchant_dict_quick_check($dict, string $word, &$suggestions = null): bool {} +function enchant_dict_quick_check(EnchantDict $dict, string $word, &$suggestions = null): bool {} -/** @param resource $dict */ -function enchant_dict_check($dict, string $word): bool {} +function enchant_dict_check(EnchantDict $dict, string $word): bool {} -/** @param resource $dict */ -function enchant_dict_suggest($dict, string $word): ?array {} +function enchant_dict_suggest(EnchantDict $dict, string $word): ?array {} -/** @param resource $dict */ -function enchant_dict_add($dict, string $word): void {} +function enchant_dict_add(EnchantDict $dict, string $word): void {} /** -* @param resource $dict * @alias enchant_dict_add * @deprecated */ -function enchant_dict_add_to_personal($dict, string $word): void {} +function enchant_dict_add_to_personal(EnchantDict $dict, string $word): void {} -/** @param resource $dict */ -function enchant_dict_add_to_session($dict, string $word): void {} +function enchant_dict_add_to_session(EnchantDict $dict, string $word): void {} -/** @param resource $dict */ -function enchant_dict_is_added($dict, string $word): bool {} +function enchant_dict_is_added(EnchantDict $dict, string $word): bool {} /** * @param resource $dict * @alias enchant_dict_is_added * @deprecated */ -function enchant_dict_is_in_session($dict, string $word): bool {} +function enchant_dict_is_in_session(EnchantDict $dict, string $word): bool {} + +function enchant_dict_store_replacement(EnchantDict $dict, string $mis, string $cor): void {} -/** @param resource $dict */ -function enchant_dict_store_replacement($dict, string $mis, string $cor): void {} +function enchant_dict_get_error(EnchantDict $dict): string|false {} -/** @param resource $dict */ -function enchant_dict_get_error($dict): string|false {} +function enchant_dict_describe(EnchantDict $dict): array {} -/** @param resource $dict */ -function enchant_dict_describe($dict): array {} diff --git a/ext/enchant/enchant_arginfo.h b/ext/enchant/enchant_arginfo.h index 07492a1cae8b3..4973d80b37497 100644 --- a/ext/enchant/enchant_arginfo.h +++ b/ext/enchant/enchant_arginfo.h @@ -1,52 +1,52 @@ /* This is a generated file, edit the .stub.php file instead. */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_enchant_broker_init, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_enchant_broker_init, 0, 0, EnchantBroker, MAY_BE_FALSE) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_free, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_enchant_broker_get_error, 0, 0, 1) - ZEND_ARG_INFO(0, broker) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_enchant_broker_get_error, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_set_dict_path, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, name, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_enchant_broker_get_dict_path, 0, 2, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, name, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_list_dicts, 0, 1, IS_ARRAY, 1) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_enchant_broker_request_dict, 0, 0, 2) - ZEND_ARG_INFO(0, broker) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_enchant_broker_request_dict, 0, 2, EnchantDict, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_enchant_broker_request_pwl_dict, 0, 0, 2) - ZEND_ARG_INFO(0, broker) +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_enchant_broker_request_pwl_dict, 0, 2, EnchantDict, MAY_BE_FALSE) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_free_dict, 0, 1, _IS_BOOL, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_dict_exists, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_broker_set_ordering, 0, 3, _IS_BOOL, 0) - ZEND_ARG_INFO(0, broker) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, ordering, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -54,23 +54,23 @@ ZEND_END_ARG_INFO() #define arginfo_enchant_broker_describe arginfo_enchant_broker_list_dicts ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_quick_check, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, suggestions, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_check, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_suggest, 0, 2, IS_ARRAY, 1) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_add, 0, 2, IS_VOID, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -83,17 +83,82 @@ ZEND_END_ARG_INFO() #define arginfo_enchant_dict_is_in_session arginfo_enchant_dict_check ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_store_replacement, 0, 3, IS_VOID, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_ARG_TYPE_INFO(0, mis, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, cor, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_enchant_dict_get_error, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_describe, 0, 1, IS_ARRAY, 0) - ZEND_ARG_INFO(0, dict) + ZEND_ARG_OBJ_INFO(0, dict, EnchantDict, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_EnchantBroker___construct, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_EnchantBroker_getError, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantBroker_listDicts, 0, 0, IS_ARRAY, 1) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_EnchantBroker_requestDict, 0, 1, EnchantDict, MAY_BE_FALSE) + ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_EnchantBroker_requestPWL, 0, 1, EnchantDict, MAY_BE_FALSE) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantBroker_isDict, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantBroker_setOrdering, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, ordering, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_EnchantBroker_describe arginfo_class_EnchantBroker_listDicts + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_EnchantDict___construct, 0, 0, 2) + ZEND_ARG_OBJ_INFO(0, broker, EnchantBroker, 0) + ZEND_ARG_TYPE_INFO(0, tag, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pwl, IS_STRING, 1, "null") +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_checkAndSuggest, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, suggestions, "null") +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_check, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_suggest, 0, 1, IS_ARRAY, 1) + ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_add, 0, 1, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_EnchantDict_addToSession arginfo_class_EnchantDict_add + +#define arginfo_class_EnchantDict_isAdded arginfo_class_EnchantDict_check + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_storeReplacement, 0, 2, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, mis, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, cor, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_EnchantDict_getError arginfo_class_EnchantBroker_getError + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_EnchantDict_describe, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() @@ -118,18 +183,19 @@ ZEND_FUNCTION(enchant_dict_is_added); ZEND_FUNCTION(enchant_dict_store_replacement); ZEND_FUNCTION(enchant_dict_get_error); ZEND_FUNCTION(enchant_dict_describe); +ZEND_METHOD(EnchantDict, __construct); static const zend_function_entry ext_functions[] = { ZEND_FE(enchant_broker_init, arginfo_enchant_broker_init) - ZEND_FE(enchant_broker_free, arginfo_enchant_broker_free) + ZEND_DEP_FE(enchant_broker_free, arginfo_enchant_broker_free) ZEND_FE(enchant_broker_get_error, arginfo_enchant_broker_get_error) ZEND_DEP_FE(enchant_broker_set_dict_path, arginfo_enchant_broker_set_dict_path) ZEND_DEP_FE(enchant_broker_get_dict_path, arginfo_enchant_broker_get_dict_path) ZEND_FE(enchant_broker_list_dicts, arginfo_enchant_broker_list_dicts) ZEND_FE(enchant_broker_request_dict, arginfo_enchant_broker_request_dict) ZEND_FE(enchant_broker_request_pwl_dict, arginfo_enchant_broker_request_pwl_dict) - ZEND_FE(enchant_broker_free_dict, arginfo_enchant_broker_free_dict) + ZEND_DEP_FE(enchant_broker_free_dict, arginfo_enchant_broker_free_dict) ZEND_FE(enchant_broker_dict_exists, arginfo_enchant_broker_dict_exists) ZEND_FE(enchant_broker_set_ordering, arginfo_enchant_broker_set_ordering) ZEND_FE(enchant_broker_describe, arginfo_enchant_broker_describe) @@ -146,3 +212,31 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(enchant_dict_describe, arginfo_enchant_dict_describe) ZEND_FE_END }; + + +static const zend_function_entry class_EnchantBroker_methods[] = { + ZEND_ME_MAPPING(__construct, enchant_broker_init, arginfo_class_EnchantBroker___construct, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(getError, enchant_broker_get_error, arginfo_class_EnchantBroker_getError, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(listDicts, enchant_broker_list_dicts, arginfo_class_EnchantBroker_listDicts, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(requestDict, enchant_broker_request_dict, arginfo_class_EnchantBroker_requestDict, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(requestPWL, enchant_broker_request_pwl_dict, arginfo_class_EnchantBroker_requestPWL, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(isDict, enchant_broker_dict_exists, arginfo_class_EnchantBroker_isDict, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(setOrdering, enchant_broker_set_ordering, arginfo_class_EnchantBroker_setOrdering, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(describe, enchant_broker_describe, arginfo_class_EnchantBroker_describe, ZEND_ACC_PUBLIC) + ZEND_FE_END +}; + + +static const zend_function_entry class_EnchantDict_methods[] = { + ZEND_ME(EnchantDict, __construct, arginfo_class_EnchantDict___construct, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(checkAndSuggest, enchant_dict_quick_check, arginfo_class_EnchantDict_checkAndSuggest, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(check, enchant_dict_check, arginfo_class_EnchantDict_check, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(suggest, enchant_dict_suggest, arginfo_class_EnchantDict_suggest, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(add, enchant_dict_add, arginfo_class_EnchantDict_add, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(addToSession, enchant_dict_add_to_session, arginfo_class_EnchantDict_addToSession, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(isAdded, enchant_dict_is_added, arginfo_class_EnchantDict_isAdded, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(storeReplacement, enchant_dict_store_replacement, arginfo_class_EnchantDict_storeReplacement, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(getError, enchant_dict_get_error, arginfo_class_EnchantDict_getError, ZEND_ACC_PUBLIC) + ZEND_ME_MAPPING(describe, enchant_dict_describe, arginfo_class_EnchantDict_describe, ZEND_ACC_PUBLIC) + ZEND_FE_END +}; diff --git a/ext/enchant/tests/broker_describe.phpt b/ext/enchant/tests/broker_describe.phpt index 11adb1397d562..07134ae50fa2b 100644 --- a/ext/enchant/tests/broker_describe.phpt +++ b/ext/enchant/tests/broker_describe.phpt @@ -17,12 +17,12 @@ if (!$broker) { } if (!enchant_broker_describe($broker)) { - enchant_broker_free($broker); + @enchant_broker_free($broker); echo "skip: No broker providers found\n"; } -enchant_broker_free($broker); +@enchant_broker_free($broker); ?> --FILE-- --SKIPIF-- --FILE-- diff --git a/ext/enchant/tests/broker_free.phpt b/ext/enchant/tests/broker_free.phpt index 6964895962d35..e816119ddf7ff 100644 --- a/ext/enchant/tests/broker_free.phpt +++ b/ext/enchant/tests/broker_free.phpt @@ -5,12 +5,12 @@ marcosptf - --SKIPIF-- --FILE-- ---EXPECT-- +--EXPECTF-- OK + +Deprecated: Function enchant_broker_free() is deprecated in %s OK diff --git a/ext/enchant/tests/broker_free_01.phpt b/ext/enchant/tests/broker_free_01.phpt index 77391cdd608f3..5b129a0b294a5 100644 --- a/ext/enchant/tests/broker_free_01.phpt +++ b/ext/enchant/tests/broker_free_01.phpt @@ -1,19 +1,19 @@ --TEST-- -enchant_broker_free() function +@enchant_broker_free() function --CREDITS-- marcosptf - --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = array("iLoveJava","iLoveJavascript","iLoveRuby","iLovePerl","iLoveAwk","iLoveC"); -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); @@ -27,10 +27,10 @@ if (is_resource($broker)) { if (NULL === $AddtoPersonalDict) { var_dump($AddtoPersonalDict); - if (enchant_broker_free_dict($requestDict)) { + if (@enchant_broker_free_dict($requestDict)) { echo("OK\n"); - if (enchant_broker_free($broker)) { + if (@enchant_broker_free($broker)) { echo("OK\n"); } else { diff --git a/ext/enchant/tests/broker_free_dict.phpt b/ext/enchant/tests/broker_free_dict.phpt index 7b37cde6a4d41..20bc66e5e9790 100644 --- a/ext/enchant/tests/broker_free_dict.phpt +++ b/ext/enchant/tests/broker_free_dict.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -13,7 +13,7 @@ if(!is_array(enchant_broker_list_dicts(enchant_broker_init()))) {die("skip, no d $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = "iLoveJava"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); @@ -44,9 +44,11 @@ if (is_resource($broker)) { } echo "OK\n"; ?> ---EXPECT-- +--EXPECTF-- OK OK NULL + +Deprecated: Function enchant_broker_free_dict() is deprecated in %s OK OK diff --git a/ext/enchant/tests/broker_get_error.phpt b/ext/enchant/tests/broker_get_error.phpt index 93f6130c249f4..ca568306a67cc 100644 --- a/ext/enchant/tests/broker_get_error.phpt +++ b/ext/enchant/tests/broker_get_error.phpt @@ -5,12 +5,12 @@ marcosptf - --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- --FILE-- --SKIPIF-- --FILE-- @@ -17,7 +17,7 @@ if (is_array($dicts)) { if (count($dicts)) { $dict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); - if (is_resource($dict)) { + if (is_object($dict)) { echo "OK\n"; } else { echo "fail to request " . $dicts[0]['lang_tag']; diff --git a/ext/enchant/tests/broker_request_dict_01.phpt b/ext/enchant/tests/broker_request_dict_01.phpt index 2c2905c959313..fad527c4c46e1 100644 --- a/ext/enchant/tests/broker_request_dict_01.phpt +++ b/ext/enchant/tests/broker_request_dict_01.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -15,7 +15,7 @@ $dicts = enchant_broker_list_dicts($broker); if (is_array($dicts)) { $dict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); - if (is_resource($dict)) { + if (is_object($dict)) { echo("OK\n"); } else { echo("fail to request " . $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/broker_request_pwl_dict.phpt b/ext/enchant/tests/broker_request_pwl_dict.phpt index a8beadba6c37f..605a019db0efa 100644 --- a/ext/enchant/tests/broker_request_pwl_dict.phpt +++ b/ext/enchant/tests/broker_request_pwl_dict.phpt @@ -5,18 +5,18 @@ marcosptf - --SKIPIF-- --FILE-- --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $comma = ";"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); if (enchant_broker_set_ordering($broker,$dicts[0]['lang_tag'],$comma)) { echo("OK\n"); diff --git a/ext/enchant/tests/bug13181.phpt b/ext/enchant/tests/bug13181.phpt index 881318cb339e1..a93f6cd266f6b 100644 --- a/ext/enchant/tests/bug13181.phpt +++ b/ext/enchant/tests/bug13181.phpt @@ -15,12 +15,12 @@ if (!$broker) { } if (!enchant_broker_list_dicts($broker)) { - enchant_broker_free($broker); + @enchant_broker_free($broker); echo "skip: No broker dicts installed\n"; } -enchant_broker_free($broker); +@enchant_broker_free($broker); ?> --FILE-- --EXPECTF-- -resource(%d) of type (enchant_dict) -resource(%d) of type (enchant_dict) -resource(%d) of type (enchant_broker) -resource(%d) of type (enchant_broker) -resource(%d) of type (enchant_dict) -resource(%d) of type (enchant_dict) +object(EnchantDict)#%d (0) { +} +object(EnchantDict)#%d (0) { +} +object(EnchantBroker)#%d (0) { +} +object(EnchantBroker)#%d (0) { +} +object(EnchantDict)#%d (0) { +} +object(EnchantDict)#%d (0) { +} + diff --git a/ext/enchant/tests/bug53070.phpt b/ext/enchant/tests/bug53070.phpt index c2ad05094ddf0..c06542e46bcab 100644 --- a/ext/enchant/tests/bug53070.phpt +++ b/ext/enchant/tests/bug53070.phpt @@ -3,7 +3,7 @@ Bug #53070 (enchant_broker_get_path crashes if no path is set) --SKIPIF-- ")) die('skip libenchant v1 only'); ?> --FILE-- @@ -13,11 +13,15 @@ var_dump(enchant_broker_get_dict_path($broker, ENCHANT_MYSPELL)); var_dump(enchant_broker_get_dict_path($broker, ENCHANT_ISPELL)); ?> --EXPECTF-- +Deprecated: Constant ENCHANT_MYSPELL is deprecated in %s + Deprecated: Function enchant_broker_get_dict_path() is deprecated in %s Warning: enchant_broker_get_dict_path(): dict_path not set in %s on line %d bool(false) +Deprecated: Constant ENCHANT_ISPELL is deprecated in %s + Deprecated: Function enchant_broker_get_dict_path() is deprecated in %s Warning: enchant_broker_get_dict_path(): dict_path not set in %s on line %d diff --git a/ext/enchant/tests/construct.phpt b/ext/enchant/tests/construct.phpt new file mode 100644 index 0000000000000..a54fe02647ce2 --- /dev/null +++ b/ext/enchant/tests/construct.phpt @@ -0,0 +1,27 @@ +--TEST-- +constructor raise exception() +--SKIPIF-- + +--INI-- +open_basedir=. +--FILE-- +getMessage()."\n"; +} +try { + new EnchantDict(new EnchantBroker, '', '../test.pwl'); +} catch (Exception $e) { + echo $e->getMessage()."\n"; +} +?> +OK +--EXPECTF-- +Tag cannot be empty +Open_basedir restriction in effect +OK diff --git a/ext/enchant/tests/dict_add_to_personal.phpt b/ext/enchant/tests/dict_add_to_personal.phpt index 0c38734c5a5a2..6e914ca9cbf70 100644 --- a/ext/enchant/tests/dict_add_to_personal.phpt +++ b/ext/enchant/tests/dict_add_to_personal.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = "iLoveJava"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_add_to_session.phpt b/ext/enchant/tests/dict_add_to_session.phpt index 49c4769fb586f..a9692beada0ae 100644 --- a/ext/enchant/tests/dict_add_to_session.phpt +++ b/ext/enchant/tests/dict_add_to_session.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = "iLoveJavaScript"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_check.phpt b/ext/enchant/tests/dict_check.phpt index ac0fc6fb4b079..dc11d5d7bcc4a 100644 --- a/ext/enchant/tests/dict_check.phpt +++ b/ext/enchant/tests/dict_check.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = "java"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_describe.phpt b/ext/enchant/tests/dict_describe.phpt index d63cfae178e56..c8215b9d95679 100644 --- a/ext/enchant/tests/dict_describe.phpt +++ b/ext/enchant/tests/dict_describe.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -13,7 +13,7 @@ if (!is_array(enchant_broker_list_dicts(enchant_broker_init()))) {die("skip, no $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_get_error.phpt b/ext/enchant/tests/dict_get_error.phpt index 340dcdd89a235..ca4ee8c138f56 100644 --- a/ext/enchant/tests/dict_get_error.phpt +++ b/ext/enchant/tests/dict_get_error.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -13,7 +13,7 @@ if (!is_array(enchant_broker_list_dicts(enchant_broker_init()))) {die("skip, no $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_is_in_session.phpt b/ext/enchant/tests/dict_is_in_session.phpt index 3084fc7122cbd..c87dbec95ea18 100644 --- a/ext/enchant/tests/dict_is_in_session.phpt +++ b/ext/enchant/tests/dict_is_in_session.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $newWord = "aspell"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_quick_check.phpt b/ext/enchant/tests/dict_quick_check.phpt index a7196b659dda5..34db0192453c1 100644 --- a/ext/enchant/tests/dict_quick_check.phpt +++ b/ext/enchant/tests/dict_quick_check.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $word = "aspell"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_store_replacement.phpt b/ext/enchant/tests/dict_store_replacement.phpt index eb01dcbc57f6b..b3a5186315415 100644 --- a/ext/enchant/tests/dict_store_replacement.phpt +++ b/ext/enchant/tests/dict_store_replacement.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -15,7 +15,7 @@ $dicts = enchant_broker_list_dicts($broker); $wrongWord = "sava"; $rightWord = "java"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/dict_suggest.phpt b/ext/enchant/tests/dict_suggest.phpt index 6854eeb65b36a..49b9dae81d83b 100644 --- a/ext/enchant/tests/dict_suggest.phpt +++ b/ext/enchant/tests/dict_suggest.phpt @@ -5,7 +5,7 @@ marcosptf - --SKIPIF-- --FILE-- @@ -14,7 +14,7 @@ $broker = enchant_broker_init(); $dicts = enchant_broker_list_dicts($broker); $sugs = "soong"; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); $requestDict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']); diff --git a/ext/enchant/tests/enchant_broker_set_dict_path.phpt b/ext/enchant/tests/enchant_broker_set_dict_path.phpt index a072c2555519e..0c9da82092f54 100644 --- a/ext/enchant/tests/enchant_broker_set_dict_path.phpt +++ b/ext/enchant/tests/enchant_broker_set_dict_path.phpt @@ -6,7 +6,7 @@ marcosptf - --SKIPIF-- ")) die('skip libenchant v1 only'); ?> @@ -18,7 +18,7 @@ $backEndDictType2 = "ISPELL"; $dictTypeValue1 = 1; $dictTypeValue2 = 2; -if (is_resource($broker)) { +if (is_object($broker)) { echo("OK\n"); if (enchant_broker_set_dict_path($broker, $dictTypeValue1, $backEndDictType1)) { diff --git a/ext/enchant/tests/invalidobj.phpt b/ext/enchant/tests/invalidobj.phpt new file mode 100644 index 0000000000000..6a96972da1676 --- /dev/null +++ b/ext/enchant/tests/invalidobj.phpt @@ -0,0 +1,27 @@ +--TEST-- +invalid object raise exception() function +--SKIPIF-- + +--FILE-- +getMessage()."\n"; + } +} else { + exit("init failed\n"); +} +echo "OK\n"; +?> +--EXPECTF-- +OK +Invalid or uninitialized EnchantBroker object +OK diff --git a/ext/enchant/tests/object.phpt b/ext/enchant/tests/object.phpt new file mode 100644 index 0000000000000..55ae67e0cde11 --- /dev/null +++ b/ext/enchant/tests/object.phpt @@ -0,0 +1,63 @@ +--TEST-- +Object API +--SKIPIF-- + +--FILE-- +describe())); +$dicts = $broker->listDicts(); +var_dump($lang = $dicts[0]['lang_tag']); + +echo "+ Dict\n"; +var_dump($dict = $broker->requestDict($lang)); +var_dump(is_array($dict->describe())); +unset($dict); + +echo "+ Check\n"; +var_dump($dict = new EnchantDict($broker, $lang)); +$w = "ElePHPant"; +var_dump($dict->check($w)); +var_dump($dict->isAdded($w)); +$dict->addToSession($w); +var_dump($dict->check($w)); +var_dump($dict->isAdded($w)); + +echo "+ Suggest\n"; +var_dump(is_array($dict->suggest("soong"))); + +echo "+ PWL\n"; +var_dump($dict = new EnchantDict($broker, '', __DIR__ . '/enchant_broker_request_pwl_dict.pwl')); +var_dump($dict->check('php')); +var_dump($dict->check('node')); +?> +OK +--EXPECTF-- ++ Broker +object(EnchantBroker)#%d (0) { +} +bool(true) +string(%d) "%s" ++ Dict +object(EnchantDict)#%d (0) { +} +bool(true) ++ Check +object(EnchantDict)#%d (0) { +} +bool(false) +bool(false) +bool(true) +bool(true) ++ Suggest +bool(true) ++ PWL +object(EnchantDict)#%d (0) { +} +bool(true) +bool(false) +OK