summaryrefslogtreecommitdiff
path: root/ext/tidy/php_tidy.h
diff options
context:
space:
mode:
authorJohn Coggeshall <john@php.net>2003-09-22 00:12:54 +0000
committerJohn Coggeshall <john@php.net>2003-09-22 00:12:54 +0000
commita7b75e2054767b440e798b839bef4000ed1f8bb4 (patch)
treea913475349a85625f409b59756d62ee00fae7ab3 /ext/tidy/php_tidy.h
parent5927b5086968681b690040e650e95a6e276ccb29 (diff)
downloadphp-git-a7b75e2054767b440e798b839bef4000ed1f8bb4.tar.gz
Complete refactoring of the OO support in tidy. Although currently
incomplete, it is a good start.
Diffstat (limited to 'ext/tidy/php_tidy.h')
-rw-r--r--ext/tidy/php_tidy.h93
1 files changed, 46 insertions, 47 deletions
diff --git a/ext/tidy/php_tidy.h b/ext/tidy/php_tidy.h
index 92deabb17b..7817aa6aec 100644
--- a/ext/tidy/php_tidy.h
+++ b/ext/tidy/php_tidy.h
@@ -59,10 +59,38 @@ extern zend_module_entry tidy_module_entry;
#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)
-#define PHP_IS_TIDYUNDEF 0
-#define PHP_IS_TIDYNODE 1
-#define PHP_IS_TIDYATTR 2
-
+#define PHP_ME_MAPPING(name, func_name, arg_types) \
+ ZEND_NAMED_FE(name, ZEND_FN(func_name), arg_types)
+
+#define PHP_NODE_METHOD(name) PHP_FUNCTION(tnm_ ##name)
+#define PHP_ATTR_METHOD(name) PHP_FUNCTION(tam_ ##name)
+#define PHP_NODE_ME(name, param) PHP_ME_MAPPING(name, tnm_ ##name, param)
+#define PHP_ATTR_ME(name, param) PHP_ME_MAPPING(name, tam_ ##name, param)
+
+
+
+#define TIDY_REGISTER_OBJECT(_type, _object, _ptr) \
+ { \
+ tidy_object *obj; \
+ obj = (tidy_object*)zend_object_store_get_object(_object TSRMLS_CC); \
+ obj->type = is_ ## _type; \
+ obj->u._type = _ptr; \
+ }
+
+#define REGISTER_TIDY_CLASS(name, parent) \
+ { \
+ zend_class_entry ce; \
+ INIT_CLASS_ENTRY(ce, "tidy_" # name, tidy_funcs_ ## name); \
+ ce.create_object = tidy_object_new_ ## name; \
+ tidy_ce_ ## name = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
+ memcpy(&tidy_object_handlers_ ## name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
+ tidy_object_handlers_ ## name.clone_obj = NULL; \
+ }
+
+typedef enum {
+ is_node,
+ is_attr
+} tidy_obj_type;
struct _PHPTidyDoc {
@@ -75,12 +103,10 @@ typedef struct _PHPTidyDoc PHPTidyDoc;
typedef struct _PHPTidyObj PHPTidyObj;
struct _PHPTidyObj {
- zend_object obj;
+ zend_object std;
TidyNode node;
TidyAttr attr;
- unsigned int type;
- PHPTidyObj *parent;
- unsigned int refcount;
+ tidy_obj_type type;
};
@@ -116,51 +142,21 @@ PHP_FUNCTION(tidy_load_config_enc);
PHP_FUNCTION(tidy_set_encoding);
PHP_FUNCTION(tidy_save_config);
-#ifdef ZEND_ENGINE_2
-
PHP_FUNCTION(tidy_get_root);
PHP_FUNCTION(tidy_get_html);
PHP_FUNCTION(tidy_get_head);
PHP_FUNCTION(tidy_get_body);
-void php_tidy_obj_clone(void *, void ** TSRMLS_DC);
-void php_tidy_obj_dtor(void *, zend_object_handle TSRMLS_DC);
-
-zend_object_value php_tidy_create_obj(zend_class_entry * TSRMLS_DC);
-zend_object_value php_tidy_register_object(PHPTidyObj *intern TSRMLS_DC);
-zval *_php_tidy_create_obj_zval(unsigned int objtype,
- PHPTidyObj *parent,
- void *data
- TSRMLS_DC);
-
-void _php_tidy_create_obj(zval *return_value,
- unsigned int objtype,
- PHPTidyObj *parent,
- void *data
- TSRMLS_DC);
-/* object handlers */
-zval * tidy_property_read(zval *object, zval *member, zend_bool silent TSRMLS_DC);
-void tidy_property_write(zval *obj, zval *member, zval *value TSRMLS_DC);
-zval ** tidy_property_get_ptr(zval *obj, zval *member TSRMLS_DC);
-int tidy_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC);
-void tidy_property_delete(zval *obj, zval *member TSRMLS_DC);
-HashTable * tidy_get_properties(zval *object TSRMLS_DC);
-union _zend_function * tidy_get_method(zval *obj, char *method, int method_len TSRMLS_DC);
-int tidy_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS);
-union _zend_function * tidy_get_constructor(zval *obj TSRMLS_DC);
-zend_class_entry * tidy_get_class_entry(zval *obj TSRMLS_DC);
-int tidy_get_class_name(zval *obj, char **class_name, zend_uint *name_len, int parent TSRMLS_DC);
-int tidy_objects_compare(zval *obj_one, zval *obj_two TSRMLS_DC);
-void tidy_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC);
-void tidy_write_dim(zval *object, zval *offset, zval *value TSRMLS_DC);
-void tidy_del_dim(zval *object, zval *offset TSRMLS_DC);
-zval *tidy_read_dim(zval *object, zval *offset TSRMLS_DC);
-
-zend_bool _php_tidy_attr_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS);
-zend_bool _php_tidy_node_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS);
-void _php_tidy_init_prop_hashtables();
+PHP_NODE_METHOD(type);
+PHP_NODE_METHOD(name);
+PHP_NODE_METHOD(value);
+PHP_NODE_METHOD(id);
+PHP_NODE_METHOD(attributes);
+PHP_NODE_METHOD(children);
-#endif
+PHP_ATTR_METHOD(name);
+PHP_ATTR_METHOD(value);
+PHP_ATTR_METHOD(id);
/* resource dtor */
void dtor_TidyDoc(zend_rsrc_list_entry * TSRMLS_DC);
@@ -182,6 +178,9 @@ ZEND_END_MODULE_GLOBALS(tidy)
#define TG(v) (tidy_globals.v)
#endif
+
+
+
#endif