sniper Sun Feb 22 19:59:30 2004 EDT Modified files: /php-src/ext/tidy php_tidy.h tidy.c Log: - Moved internally used includes/macros/structs/etc. into tidy.c to prevent any conflicts with any other library/header/extension. # Never EVER put this stuff in extension's php_*.h file if possible!
http://cvs.php.net/diff.php/php-src/ext/tidy/php_tidy.h?r1=1.20&r2=1.21&ty=u Index: php-src/ext/tidy/php_tidy.h diff -u php-src/ext/tidy/php_tidy.h:1.20 php-src/ext/tidy/php_tidy.h:1.21 --- php-src/ext/tidy/php_tidy.h:1.20 Wed Feb 4 06:14:46 2004 +++ php-src/ext/tidy/php_tidy.h Sun Feb 22 19:59:29 2004 @@ -16,15 +16,11 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_tidy.h,v 1.20 2004/02/04 11:14:46 zeev Exp $ */ +/* $Id: php_tidy.h,v 1.21 2004/02/23 00:59:29 sniper Exp $ */ #ifndef PHP_TIDY_H #define PHP_TIDY_H -#include "tidyenum.h" -#include "tidy.h" -#include "buffio.h" - extern zend_module_entry tidy_module_entry; #define phpext_tidy_ptr &tidy_module_entry @@ -34,191 +30,15 @@ #define PHP_TIDY_API #endif -#ifdef ZTS -#include "TSRM.h" -#endif - -#define PHP_TIDY_MODULE_VERSION "2.0-dev" - - -#define REMOVE_NEWLINE(_z) _z->value.str.val[_z->value.str.len-1] = '\0'; _z->value.str.len--; - -#define TIDYDOC_FROM_OBJECT(tdoc, object) \ - { \ - PHPTidyObj *obj = (PHPTidyObj*) zend_object_store_get_object(object TSRMLS_CC); \ - tdoc = obj->ptdoc; \ - } - -#define TIDY_FETCH_OBJECT \ - zval *object = getThis(); \ - PHPTidyObj *obj; \ - if (object) { \ - if (ZEND_NUM_ARGS()) { \ - WRONG_PARAM_COUNT; \ - } \ - } else { \ - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "O", &object, tidy_ce_doc) == FAILURE) { \ - RETURN_FALSE; \ - } \ - } \ - obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \ - -#define TIDY_FETCH_ONLY_OBJECT \ - zval *object = getThis(); \ - PHPTidyObj *obj; \ - if (ZEND_NUM_ARGS()) { \ - WRONG_PARAM_COUNT; \ - } \ - obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \ - - -#define Z_OBJ_P(zval_p) zend_objects_get_address(zval_p TSRMLS_CC) - #define TIDY_METHOD_MAP(name, func_name, arg_types) \ ZEND_NAMED_FE(name, ZEND_FN(func_name), arg_types) - -#define TIDY_APPLY_CONFIG_ZVAL(_doc, _val) \ - if(_val) { \ - if(Z_TYPE_P(_val) == IS_ARRAY) { \ - _php_tidy_apply_config_array(_doc, HASH_OF(_val) TSRMLS_CC); \ - } else { \ - convert_to_string_ex(&_val); \ - TIDY_SAFE_MODE_CHECK(Z_STRVAL_P(_val)); \ - if (tidyLoadConfig(_doc, Z_STRVAL_P(_val)) < 0) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load configuration file '%s'", Z_STRVAL_P(_val)); \ - RETURN_FALSE; \ - } \ - } \ - } - - -/* This is necessary, as apparently some Win32 compilers aren't C99 - compliant. When that isn't the case we can't use variable arg preprocessor - macros and need to instead call a wrapper function */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define TIDY_THROW(...) zend_throw_exception_ex(tidy_ce_exception, 0 TSRMLS_CC, __VA_ARGS__) -#else -#define TIDY_THROW _php_tidy_throw_exception -#endif - #define TIDY_NODE_METHOD(name) PHP_FUNCTION(tnm_ ##name) -#define TIDY_NODE_ME(name, param) TIDY_METHOD_MAP(name, tnm_ ##name, param) +#define TIDY_NODE_ME(name, param) TIDY_METHOD_MAP(name, tnm_ ##name, param) #define TIDY_DOC_METHOD(name) PHP_FUNCTION(tdm_ ##name) #define TIDY_DOC_ME(name, param) TIDY_METHOD_MAP(name, tdm_ ##name, param) #define TIDY_ATTR_METHOD(name) PHP_FUNCTION(tam_ ##name) #define TIDY_ATTR_ME(name, param) TIDY_METHOD_MAP(name, tam_ ##name, param) -#define REGISTER_TIDY_CLASS(classname, name, parent) \ - { \ - zend_class_entry ce; \ - INIT_CLASS_ENTRY(ce, # classname, tidy_funcs_ ## name); \ - ce.create_object = tidy_object_new_ ## name; \ - tidy_ce_ ## name = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \ - tidy_ce_ ## name->ce_flags |= ZEND_ACC_FINAL_CLASS; \ - memcpy(&tidy_object_handlers_ ## name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \ - tidy_object_handlers_ ## name.clone_obj = NULL; \ - } - -#define TIDY_TAG_CONST(tag) REGISTER_LONG_CONSTANT("TIDY_TAG_" #tag, TidyTag_##tag, CONST_CS | CONST_PERSISTENT) -#define TIDY_ATTR_CONST(attr) REGISTER_LONG_CONSTANT("TIDY_ATTR_" #attr, TidyAttr_##attr, CONST_CS | CONST_PERSISTENT) -#define TIDY_NODE_CONST(name, type) REGISTER_LONG_CONSTANT("TIDY_NODETYPE_" #name, TidyNode_##type, CONST_CS | CONST_PERSISTENT) - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - -#define ADD_PROPERTY_STRING(_table, _key, _string) \ - { \ - zval *tmp; \ - MAKE_STD_ZVAL(tmp); \ - if (_string) { \ - ZVAL_STRING(tmp, (char *)_string, 1); \ - } else { \ - ZVAL_EMPTY_STRING(tmp); \ - } \ - zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ - } - -#define ADD_PROPERTY_LONG(_table, _key, _long) \ - { \ - zval *tmp; \ - MAKE_STD_ZVAL(tmp); \ - ZVAL_LONG(tmp, _long); \ - zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ - } - -#define ADD_PROPERTY_NULL(_table, _key) \ - { \ - zval *tmp; \ - MAKE_STD_ZVAL(tmp); \ - ZVAL_NULL(tmp); \ - zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ - } - -#define TIDY_SAFE_MODE_CHECK(filename) \ -if ((PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(filename TSRMLS_CC)) { \ - RETURN_FALSE; \ -} \ - -#define TIDY_SET_DEFAULT_CONFIG(_doc) \ - if (TG(default_config) && TG(default_config)[0]) { \ - if (tidyLoadConfig(_doc, TG(default_config)) < 0) { \ - zend_error(E_ERROR, "Unable to load Tidy configuration file at '%s'.", TG(default_config)); \ - } \ - } - - -typedef struct _PHPTidyDoc PHPTidyDoc; -typedef struct _PHPTidyObj PHPTidyObj; - -typedef enum { - is_node, - is_attr, - is_doc, - is_exception -} tidy_obj_type; - -typedef enum { - is_root_node, - is_html_node, - is_head_node, - is_body_node -} tidy_base_nodetypes; - -struct _PHPTidyDoc { - TidyDoc doc; - TidyBuffer *errbuf; - unsigned int ref_count; -}; - -struct _PHPTidyObj { - zend_object std; - TidyNode node; - tidy_obj_type type; - PHPTidyDoc *ptdoc; -}; - -static char *php_tidy_file_to_mem(char *, zend_bool TSRMLS_DC); -static void tidy_object_free_storage(void * TSRMLS_DC); -static zend_object_value tidy_object_new_node(zend_class_entry * TSRMLS_DC); -static zend_object_value tidy_object_new_doc(zend_class_entry * TSRMLS_DC); -static zend_object_value tidy_object_new_exception(zend_class_entry * TSRMLS_DC); -static zend_class_entry *tidy_get_ce_node(zval * TSRMLS_DC); -static zend_class_entry *tidy_get_ce_doc(zval * TSRMLS_DC); -static zval * tidy_instanciate(zend_class_entry *, zval * TSRMLS_DC); -static int tidy_doc_cast_handler(zval *, zval *, int, int TSRMLS_DC); -static int tidy_node_cast_handler(zval *, zval *, int, int TSRMLS_DC); -static void tidy_doc_update_properties(PHPTidyObj * TSRMLS_DC); -static void tidy_add_default_properties(PHPTidyObj *, tidy_obj_type TSRMLS_DC); -static void *php_tidy_get_opt_val(PHPTidyDoc *, TidyOption, TidyOptionType * TSRMLS_DC); -static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes); -static int _php_tidy_set_tidy_opt(TidyDoc, char *, zval * TSRMLS_DC); -static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options TSRMLS_DC); - -void _php_tidy_register_nodetypes(INIT_FUNC_ARGS); -void _php_tidy_register_tags(INIT_FUNC_ARGS); - PHP_MINIT_FUNCTION(tidy); PHP_MSHUTDOWN_FUNCTION(tidy); PHP_RINIT_FUNCTION(tidy); http://cvs.php.net/diff.php/php-src/ext/tidy/tidy.c?r1=1.39&r2=1.40&ty=u Index: php-src/ext/tidy/tidy.c diff -u php-src/ext/tidy/tidy.c:1.39 php-src/ext/tidy/tidy.c:1.40 --- php-src/ext/tidy/tidy.c:1.39 Sat Feb 14 12:31:00 2004 +++ php-src/ext/tidy/tidy.c Sun Feb 22 19:59:29 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tidy.c,v 1.39 2004/02/14 17:31:00 jan Exp $ */ +/* $Id: tidy.c,v 1.40 2004/02/23 00:59:29 sniper Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -30,11 +30,192 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "safe_mode.h" -#include "Zend/zend_API.h" -#include "Zend/zend_hash.h" + #include "Zend/zend_exceptions.h" #include "Zend/zend_object_handlers.h" +#include "tidy/tidy.h" +#include "tidy/buffio.h" + +#define PHP_TIDY_MODULE_VERSION "2.0-dev" + +/* {{{ ext/tidy macros +*/ +#define REMOVE_NEWLINE(_z) _z->value.str.val[_z->value.str.len-1] = '\0'; _z->value.str.len--; + +#define TIDYDOC_FROM_OBJECT(tdoc, object) \ + { \ + PHPTidyObj *obj = (PHPTidyObj*) zend_object_store_get_object(object TSRMLS_CC); \ + tdoc = obj->ptdoc; \ + } + +#define TIDY_FETCH_OBJECT \ + zval *object = getThis(); \ + PHPTidyObj *obj; \ + if (object) { \ + if (ZEND_NUM_ARGS()) { \ + WRONG_PARAM_COUNT; \ + } \ + } else { \ + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "O", &object, tidy_ce_doc) == FAILURE) { \ + RETURN_FALSE; \ + } \ + } \ + obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \ + +#define TIDY_FETCH_ONLY_OBJECT \ + zval *object = getThis(); \ + PHPTidyObj *obj; \ + if (ZEND_NUM_ARGS()) { \ + WRONG_PARAM_COUNT; \ + } \ + obj = (PHPTidyObj *) zend_object_store_get_object(object TSRMLS_CC); \ + + +#define Z_OBJ_P(zval_p) zend_objects_get_address(zval_p TSRMLS_CC) + +#define TIDY_APPLY_CONFIG_ZVAL(_doc, _val) \ + if(_val) { \ + if(Z_TYPE_P(_val) == IS_ARRAY) { \ + _php_tidy_apply_config_array(_doc, HASH_OF(_val) TSRMLS_CC); \ + } else { \ + convert_to_string_ex(&_val); \ + TIDY_SAFE_MODE_CHECK(Z_STRVAL_P(_val)); \ + if (tidyLoadConfig(_doc, Z_STRVAL_P(_val)) < 0) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load configuration file '%s'", Z_STRVAL_P(_val)); \ + RETURN_FALSE; \ + } \ + } \ + } + +/* This is necessary, as apparently some Win32 compilers aren't C99 + compliant. When that isn't the case we can't use variable arg preprocessor + macros and need to instead call a wrapper function */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define TIDY_THROW(...) zend_throw_exception_ex(tidy_ce_exception, 0 TSRMLS_CC, __VA_ARGS__) +#else +#define TIDY_THROW _php_tidy_throw_exception +#endif + +#define REGISTER_TIDY_CLASS(classname, name, parent) \ + { \ + zend_class_entry ce; \ + INIT_CLASS_ENTRY(ce, # classname, tidy_funcs_ ## name); \ + ce.create_object = tidy_object_new_ ## name; \ + tidy_ce_ ## name = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \ + tidy_ce_ ## name->ce_flags |= ZEND_ACC_FINAL_CLASS; \ + memcpy(&tidy_object_handlers_ ## name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \ + tidy_object_handlers_ ## name.clone_obj = NULL; \ + } + +#define TIDY_TAG_CONST(tag) REGISTER_LONG_CONSTANT("TIDY_TAG_" #tag, TidyTag_##tag, CONST_CS | CONST_PERSISTENT) +#define TIDY_ATTR_CONST(attr) REGISTER_LONG_CONSTANT("TIDY_ATTR_" #attr, TidyAttr_##attr, CONST_CS | CONST_PERSISTENT) +#define TIDY_NODE_CONST(name, type) REGISTER_LONG_CONSTANT("TIDY_NODETYPE_" #name, TidyNode_##type, CONST_CS | CONST_PERSISTENT) + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#define ADD_PROPERTY_STRING(_table, _key, _string) \ + { \ + zval *tmp; \ + MAKE_STD_ZVAL(tmp); \ + if (_string) { \ + ZVAL_STRING(tmp, (char *)_string, 1); \ + } else { \ + ZVAL_EMPTY_STRING(tmp); \ + } \ + zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ + } + +#define ADD_PROPERTY_LONG(_table, _key, _long) \ + { \ + zval *tmp; \ + MAKE_STD_ZVAL(tmp); \ + ZVAL_LONG(tmp, _long); \ + zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ + } + +#define ADD_PROPERTY_NULL(_table, _key) \ + { \ + zval *tmp; \ + MAKE_STD_ZVAL(tmp); \ + ZVAL_NULL(tmp); \ + zend_hash_update(_table, #_key, sizeof(#_key), (void *)&tmp, sizeof(zval *), NULL); \ + } + +#define TIDY_SAFE_MODE_CHECK(filename) \ +if ((PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(filename TSRMLS_CC)) { \ + RETURN_FALSE; \ +} \ + +#define TIDY_SET_DEFAULT_CONFIG(_doc) \ + if (TG(default_config) && TG(default_config)[0]) { \ + if (tidyLoadConfig(_doc, TG(default_config)) < 0) { \ + zend_error(E_ERROR, "Unable to load Tidy configuration file at '%s'.", TG(default_config)); \ + } \ + } +/* }}} */ + +/* {{{ ext/tidy structs +*/ +typedef struct _PHPTidyDoc PHPTidyDoc; +typedef struct _PHPTidyObj PHPTidyObj; + +typedef enum { + is_node, + is_attr, + is_doc, + is_exception +} tidy_obj_type; + +typedef enum { + is_root_node, + is_html_node, + is_head_node, + is_body_node +} tidy_base_nodetypes; + +struct _PHPTidyDoc { + TidyDoc doc; + TidyBuffer *errbuf; + unsigned int ref_count; +}; + +struct _PHPTidyObj { + zend_object std; + TidyNode node; + tidy_obj_type type; + PHPTidyDoc *ptdoc; +}; +/* }}} */ + +/* {{{ ext/tidy prototypes +*/ +static char *php_tidy_file_to_mem(char *, zend_bool TSRMLS_DC); +static void tidy_object_free_storage(void * TSRMLS_DC); +static zend_object_value tidy_object_new_node(zend_class_entry * TSRMLS_DC); +static zend_object_value tidy_object_new_doc(zend_class_entry * TSRMLS_DC); +static zend_object_value tidy_object_new_exception(zend_class_entry * TSRMLS_DC); +static zend_class_entry *tidy_get_ce_node(zval * TSRMLS_DC); +static zend_class_entry *tidy_get_ce_doc(zval * TSRMLS_DC); +static zval * tidy_instanciate(zend_class_entry *, zval * TSRMLS_DC); +static int tidy_doc_cast_handler(zval *, zval *, int, int TSRMLS_DC); +static int tidy_node_cast_handler(zval *, zval *, int, int TSRMLS_DC); +static void tidy_doc_update_properties(PHPTidyObj * TSRMLS_DC); +static void tidy_add_default_properties(PHPTidyObj *, tidy_obj_type TSRMLS_DC); +static void *php_tidy_get_opt_val(PHPTidyDoc *, TidyOption, TidyOptionType * TSRMLS_DC); +static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes); +static int _php_tidy_set_tidy_opt(TidyDoc, char *, zval * TSRMLS_DC); +static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options TSRMLS_DC); +static void _php_tidy_register_nodetypes(INIT_FUNC_ARGS); +static void _php_tidy_register_tags(INIT_FUNC_ARGS); +/* }}} */ + ZEND_DECLARE_MODULE_GLOBALS(tidy) PHP_INI_BEGIN() @@ -93,7 +274,6 @@ }; function_entry tidy_funcs_node[] = { - TIDY_NODE_ME(__construct, NULL) TIDY_NODE_ME(hasChildren, NULL) TIDY_NODE_ME(hasSiblings, NULL) @@ -768,7 +948,7 @@ php_info_print_table_start(); php_info_print_table_header(2, "Tidy support", "enabled"); php_info_print_table_row(2, "libTidy Release", (char *)tidyReleaseDate()); - php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.39 2004/02/14 17:31:00 jan Exp $)"); + php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.40 2004/02/23 00:59:29 sniper Exp $)"); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); @@ -1413,7 +1593,7 @@ } /* }}} */ -void _php_tidy_register_nodetypes(INIT_FUNC_ARGS) +static void _php_tidy_register_nodetypes(INIT_FUNC_ARGS) { TIDY_NODE_CONST(ROOT, Root); TIDY_NODE_CONST(DOCTYPE, DocType); @@ -1431,7 +1611,7 @@ TIDY_NODE_CONST(XMLDECL, XmlDecl); } -void _php_tidy_register_tags(INIT_FUNC_ARGS) +static void _php_tidy_register_tags(INIT_FUNC_ARGS) { TIDY_TAG_CONST(UNKNOWN); TIDY_TAG_CONST(A);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php