CPPFLAGS=$old_CPPFLAGS
])
+AC_DEFUN(PHP_DOM_EXSLT_CHECK_VERSION,[
+ old_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS=-I$DOMEXSLT_DIR/include
+ AC_MSG_CHECKING(for libexslt version)
+ AC_EGREP_CPP(yes,[
+ #include <libexslt/exsltconfig.h>
+ #if LIBEXSLT_VERSION >= 600
+ yes
+ #endif
+ ],[
+ AC_MSG_RESULT(>= 1.0.3)
+ ],[
+ AC_MSG_ERROR(libxslt version 1.0.3 or greater required.)
+ ])
+ CPPFLAGS=$old_CPPFLAGS
+])
+
PHP_ARG_WITH(dom-xslt, for DOM XSLT support,
[ --with-dom-xslt[=DIR] Include DOM XSLT support (requires libxslt >= 1.0.3).
DIR is the libxslt install directory.])
+PHP_ARG_WITH(dom-exslt, for DOM EXSLT support,
+[ --with-dom-exslt[=DIR] Include DOM EXSLT support (requires libxslt >= 1.0.3).
+ DIR is the libexslt install directory.])
+
if test "$PHP_DOM_XSLT" != "no"; then
if test -r $PHP_DOM_XSLT/include/libxslt/transform.h; then
PHP_DOM_XSLT_CHECK_VERSION
PHP_ADD_LIBRARY_WITH_PATH(xslt, $DOMXSLT_DIR/lib, DOMXML_SHARED_LIBADD)
+
PHP_ADD_INCLUDE($DOMXSLT_DIR/include)
- if test "$DOMXML_DIR" = "no"; then
+ if test "$PHP_DOM" = "no"; then
AC_MSG_ERROR(DOMXSLT requires DOMXML. Use --with-dom=<DIR>)
fi
AC_DEFINE(HAVE_DOMXSLT,1,[ ])
+
+ PHP_SUBST(DOMXML_SHARED_LIBADD)
+fi
+
+if test "$PHP_DOM_EXSLT" != "no"; then
+ if test "$PHP_DOM" = "no"; then
+ AC_MSG_ERROR(DOMEXSLT requires DOMXML. Use --with-dom=<DIR>)
+ fi
+
+ if test "$PHP_DOM_XSLT" = "no"; then
+ AC_MSG_ERROR(DOMEXSLT requires DOMXSLT. Use --with-dom-xslt=<DIR>)
+ fi
+
+ if test -r $PHP_DOM_EXSLT/include/libexslt/exslt.h; then
+ DOMEXSLT_DIR=$PHP_DOM_EXSLT
+ else
+ for i in /usr/local /usr; do
+ test -r $i/include/libexslt/exslt.h && DOMEXSLT_DIR=$i
+ done
+ fi
+
+ if test -z "$DOMEXSLT_DIR"; then
+ AC_MSG_RESULT(not found)
+ AC_MSG_ERROR(Please reinstall the libxslt >= 1.0.3 distribution)
+ fi
+
+ PHP_DOM_EXSLT_CHECK_VERSION
+
+ PHP_ADD_LIBRARY_WITH_PATH(exslt, $DOMEXSLT_DIR/lib, DOMXML_SHARED_LIBADD)
+
+ PHP_ADD_INCLUDE($DOMEXSLT_DIR/include)
+
+ AC_DEFINE(HAVE_DOMEXSLT,1,[ ])
+
PHP_SUBST(DOMXML_SHARED_LIBADD)
+
fi
} \
DOMXML_GET_OBJ(ret, zval, le);
+#define DOMXML_PARAM_THREE(ret, zval, le, s, p1, p2, p3) if (NULL == (zval = getThis())) { \
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3) == FAILURE) { \
+ return; \
+ } \
+ } else { \
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, p1, p2, p3) == FAILURE) { \
+ return; \
+ } \
+ } \
+ DOMXML_GET_OBJ(ret, zval, le);
+
+
#define DOMXML_PARAM_FOUR(ret, zval, le, s, p1, p2, p3, p4) if (NULL == (zval = getThis())) { \
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o"s, &zval, p1, p2, p3, p4) == FAILURE) { \
return; \
} \
DOMXML_GET_OBJ(ret, zval, le);
+
static int le_domxmldocp;
static int le_domxmldoctypep;
static int le_domxmldtdp;
#endif
PHP_FE(xmltree, NULL)
PHP_FE(domxml_add_root, NULL)
- PHP_FE(domxml_dumpmem, NULL)
+ PHP_FE(domxml_dump_mem, NULL)
+ PHP_FE(domxml_dump_mem_file, NULL)
#if defined(LIBXML_HTML_ENABLED)
PHP_FE(domxml_html_dump_mem, NULL)
#endif
PHP_FE(domxml_elem_get_attribute, NULL)
PHP_FE(domxml_elem_set_attribute, NULL)
PHP_FE(domxml_node_children, NULL)
+ PHP_FE(domxml_node_has_attributes, NULL)
+
PHP_FE(domxml_node_new_child, NULL)
PHP_FE(domxml_node, NULL)
PHP_FE(domxml_node_unlink_node, NULL)
PHP_FALIAS(domxml_unlink_node, domxml_node_unlink_node, NULL)
PHP_FALIAS(set_content, domxml_node_set_content, NULL)
PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL)
+ PHP_FALIAS(domxml_dumpmem, domxml_dump_mem, NULL)
+
{NULL, NULL, NULL}
};
PHP_FALIAS(add_root, domxml_add_root, NULL)
PHP_FALIAS(imported_node, domxml_doc_imported_node, NULL)
PHP_FALIAS(dtd, domxml_intdtd, NULL)
- PHP_FALIAS(dumpmem, domxml_dumpmem, NULL)
+ PHP_FALIAS(dumpmem, domxml_dump_mem, NULL)
+ PHP_FALIAS(dump_mem, domxml_dump_mem, NULL)
+ PHP_FALIAS(dump_mem_file, domxml_dump_mem_file, NULL)
#if defined(LIBXML_HTML_ENABLED)
PHP_FALIAS(html_dump_mem, domxml_html_dump_mem, NULL)
#endif
static function_entry php_domxmldoctype_class_functions[] = {
PHP_FALIAS(name, domxml_doctype_name, NULL)
-/*
+/*
PHP_FALIAS(entities, domxml_doctype_entities, NULL)
PHP_FALIAS(notations, domxml_doctype_notations, NULL)
PHP_FALIAS(system_id, domxml_doctype_system_id, NULL)
PHP_FALIAS(public_id, domxml_doctype_public_id, NULL)
PHP_FALIAS(internal_subset, domxml_doctype_internal_subset, NULL)
-*/
+*/
{NULL, NULL, NULL}
};
PHP_FALIAS(owner_document, domxml_node_owner_document, NULL)
PHP_FALIAS(new_child, domxml_node_new_child, NULL)
PHP_FALIAS(attributes, domxml_node_attributes, NULL)
+ PHP_FALIAS(has_attributes, domxml_node_has_attributes, NULL)
PHP_FALIAS(node, domxml_node, NULL)
PHP_FALIAS(unlink, domxml_node_unlink_node, NULL)
PHP_FALIAS(replace_node, domxml_node_replace_node, NULL)
};
static zend_function_entry php_domxmlentity_class_functions[] = {
-/*
+/*
PHP_FALIAS(public_id, domxml_entity_public_id, NULL)
PHP_FALIAS(system_id, domxml_entity_system_id, NULL)
PHP_FALIAS(notation_name, domxml_entity_notation_name, NULL)
PHP_FALIAS(name, domxml_attr_name, NULL)
PHP_FALIAS(value, domxml_attr_value, NULL)
PHP_FALIAS(specified, domxml_attr_specified, NULL)
-/*
+/*
PHP_FALIAS(owner_element, domxml_attr_owner_element, NULL)
*/
{NULL, NULL, NULL}
static zval *dom_object_get_data(void *obj)
{
-/*
+/*
char tmp[20];
sprintf(tmp, "%08X", obj);
fprintf(stderr, "Trying getting %s from object ...", tmp);
if(((xmlNodePtr) obj)->_private)
fprintf(stderr, " found\n");
else
- fprintf(stderr, " not found\n");
+ fprintf(stderr, " not found\n");
*/
return ((zval *) (((xmlNodePtr) obj)->_private));
}
static zval *xsltstylesheet_get_data(void *obj)
{
-/*
+/*
char tmp[20];
sprintf(tmp, "%08X", obj);
fprintf(stderr, "Trying getting %s from object ...", tmp);
if(((xmlNodePtr) obj)->_private)
fprintf(stderr, " found\n");
else
- fprintf(stderr, " not found\n");
+ fprintf(stderr, " not found\n");
*/
return ((zval *) (((xsltStylesheetPtr) obj)->_private));
}
static void xpath_object_set_data(void *obj, zval *wrapper)
{
-/*
+/*
char tmp[20];
sprintf(tmp, "%08X", obj);
fprintf(stderr, "Adding %s to hash\n", tmp);
static zval *xpath_object_get_data(void *obj)
{
-/*
+/*
char tmp[20];
sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from hash ...", tmp);
+ fprintf(stderr, "Trying getting %s from hash ...", tmp);
if(((xmlXPathObjectPtr) obj)->user)
- fprintf(stderr, " found\n");
+ fprintf(stderr, " found\n");
else
fprintf(stderr, " not found\n");
*/
/*
rsrc_type = le_xpathobjectp;
- php_xpath_set_object(wrapper, (void *) obj, rsrc_type);
+ php_xpath_set_object(wrapper, (void *) obj, rsrc_type);
*/
php_xpath_set_object(wrapper, (void *) obj, le_xpathobjectp);
/*
char tmp[20];
sprintf(tmp, "%08X", obj);
- fprintf(stderr, "Trying getting %s from hash ...", tmp);
+ fprintf(stderr, "Trying getting %s from hash ...", tmp);
if(((xmlXPathContextPtr) obj)->user)
- fprintf(stderr, " found\n");
+ fprintf(stderr, " found\n");
else
fprintf(stderr, " not found\n");
*/
}
MAKE_STD_ZVAL(wrapper);
-/*
- fprintf(stderr, "Adding new XPath Context\n");
+/*
+ fprintf(stderr, "Adding new XPath Context\n");
*/
object_init_ex(wrapper, xpathctx_class_entry);
rsrc_type = le_xpathctxp;
break;
}
- default:
+ default:
php_error(E_WARNING, "%s(): unsupported node type: %d\n", get_active_function_name(TSRMLS_C), Z_TYPE_P(obj));
FREE_ZVAL(wrapper);
return NULL;
xmlSetGenericErrorFunc(xmlGenericErrorContext, (xmlGenericErrorFunc)domxml_error);
#if HAVE_DOMXSLT
xsltSetGenericErrorFunc(xsltGenericErrorContext, (xmlGenericErrorFunc)domxml_error);
+#if HAVE_DOMEXSLT
+ exsltRegisterAll();
+#endif
#endif
+
return SUCCESS;
}
#if HAVE_DOMXSLT
php_info_print_table_row(2, "DOM/XSLT", "enabled");
php_info_print_table_row(2, "libxslt Version", LIBXSLT_DOTTED_VERSION);
+#if HAVE_DOMEXSLT
+ php_info_print_table_row(2, "DOM/EXSLT", "enabled");
+ php_info_print_table_row(2, "libexslt Version", LIBEXSLT_DOTTED_VERSION);
+#endif
#endif
+
php_info_print_table_end();
}
int ret;
DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
-
+
DOMXML_NO_ARGS();
last = nodep->parent;
xmlAttr *attrp;
DOMXML_NOT_IMPLEMENTED();
-
+
if ((ZEND_NUM_ARGS() == 1) && getParameters(ht, 1, &arg1) == SUCCESS) {
id = getThis();
nodep = php_dom_get_object(id, le_domxmlelementp, 0 TSRMLS_CC);
}
/* }}} */
-/* {{{ proto string domxml_dumpmem([object doc_handle])
+/* {{{ proto string domxml_dump_mem([object doc_handle])
Dumps document into string */
-PHP_FUNCTION(domxml_dumpmem)
+PHP_FUNCTION(domxml_dump_mem)
{
zval *id;
xmlDoc *docp;
int size;
DOMXML_PARAM_NONE(docp, id, le_domxmldocp);
-
xmlDocDumpMemory(docp, &mem, &size);
if (!size) {
RETURN_FALSE;
}
/* }}} */
+/* {{{ proto int domxml_dump_mem_file([object doc_handle],filename,compressmode)
+ Dumps document into file and uses compression if specified
+ Returns false on error, otherwise the length of the xml-document (uncompressed)
+ */
+PHP_FUNCTION(domxml_dump_mem_file)
+{
+ zval *id;
+ xmlDoc *docp;
+ int file_len, bytes;
+ int compressmode = 0;
+ char *file;
+ DOMXML_PARAM_THREE(docp, id, le_domxmldocp, "s|l", &file, &file_len, &compressmode);
+
+ xmlSetCompressMode (compressmode);
+ bytes = xmlSaveFile(file,docp);
+ if (bytes == -1)
+ {
+ RETURN_FALSE;
+ }
+ RETURN_LONG(bytes);
+}
+/* }}} */
+
+
/* {{{ proto object xmldoc(string xmldoc [, bool from_file])
Creates DOM object of XML document */
PHP_FUNCTION(xmldoc)
xmlNode *nodep;
char *content;
int content_len;
-
+
DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &content, &content_len) == FAILURE) {
/* Get the namespace of the current node and add it as a property */
/* XXX FIXME XXX */
-/*
+/*
if(!node_namespace(&namespace, last))
zend_hash_update(Z_OBJPROP_P(child), "namespace", sizeof("namespace"), (void *) &namespace, sizeof(zval *), NULL);
*/
xmlNode *root;
int ret, buf_len;
char *buf;
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) {
return;
}
Translates a PHP array to a libxslt character array */
static void _php_libxslt_ht_char(HashTable *php, char **arr)
{
-/* TODO:
+/* TODO:
- make parameters array('key'=>'string',...) instead of array('key'=>'XPathExpression')
- change error reporting
*/
char *string_key = NULL;
ulong num_key;
int i = 0;
-
+
for (zend_hash_internal_pointer_reset(php);
zend_hash_get_current_data(php, (void **)&value) == SUCCESS;
zend_hash_move_forward(php)) {
/* ???: */
efree(params);
-
+
if (!docp) {
RETURN_FALSE;
}