chregu          Fri Nov 29 06:22:07 2002 EDT

  Modified files:              
    /php4/ext/domxml    php_domxml.c php_domxml.h 
  Log:
  @- Added xpath_register_ns_auto([contextnode]) for automatically registering
  @  namespace definitions (chregu)
  
  changed my mind. Automatic namesapce registration is not done within
  xpath_eval() anymore, but in a seperate function. 
  
  
Index: php4/ext/domxml/php_domxml.c
diff -u php4/ext/domxml/php_domxml.c:1.222 php4/ext/domxml/php_domxml.c:1.223
--- php4/ext/domxml/php_domxml.c:1.222  Fri Nov 29 05:24:44 2002
+++ php4/ext/domxml/php_domxml.c        Fri Nov 29 06:22:06 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_domxml.c,v 1.222 2002/11/29 10:24:44 chregu Exp $ */
+/* $Id: php_domxml.c,v 1.223 2002/11/29 11:22:06 chregu Exp $ */
 
 /* TODO
  * - Support Notation Nodes
@@ -264,6 +264,7 @@
        PHP_FE(xpath_eval,                                                             
                                         NULL)
        PHP_FE(xpath_eval_expression,                                                  
                         NULL)
        PHP_FE(xpath_register_ns,                                                      
                                 NULL)
+       PHP_FE(xpath_register_ns_auto,                                                 
+                         NULL)   
        PHP_FE(domxml_doc_get_elements_by_tagname,                                     
                 NULL)
 #endif
 
@@ -489,6 +490,7 @@
        PHP_FALIAS(xpath_eval,                          xpath_eval,                    
                         NULL)
        PHP_FALIAS(xpath_eval_expression,       xpath_eval_expression,                 
 NULL)
        PHP_FALIAS(xpath_register_ns,           xpath_register_ns,                     
         NULL)
+       PHP_FALIAS(xpath_register_ns_auto,      xpath_register_ns_auto,                
+         NULL)                   
        {NULL, NULL, NULL}
 };
 
@@ -4737,7 +4739,6 @@
        xmlNode *contextnodep;
        int ret, str_len, nsNr;
        char *str;
-       xmlNsPtr *namespaces;
        contextnode = NULL;
        contextnodep = NULL;
 
@@ -4762,26 +4763,6 @@
        }
        ctxp->node = contextnodep;
   
-       /* automatic namespace definitions registration.
-               it's only done for the context node
-               if you need namespaces defined in other nodes, 
-               you have to specify them explicitely with
-               xpath_register_ns();
-       */
-       if (contextnodep) {
-               namespaces = xmlGetNsList(ctxp->doc, contextnodep);
-       } else {
-               namespaces = xmlGetNsList(ctxp->doc, xmlDocGetRootElement(ctxp->doc));
-       }
-
-       nsNr = 0;
-       if (namespaces != NULL) {
-               while (namespaces[nsNr] != NULL) {
-                       xmlXPathRegisterNs(ctxp, namespaces[nsNr]->prefix, 
namespaces[nsNr]->href); 
-                       nsNr++;
-               }
-       }
-
 #if defined(LIBXML_XPTR_ENABLED)
        if (mode == PHP_XPTR) {
                xpathobjp = xmlXPtrEval(BAD_CAST str, ctxp);
@@ -4897,11 +4878,6 @@
        Registeres the given namespace in the passed XPath context */
 PHP_FUNCTION(xpath_register_ns)
 {
-       /*
-       TODO:
-       - automagically register all namespaces when creating a new context
-       */
-
        int prefix_len, uri_len, result;
        xmlXPathContextPtr ctxp;
        char *prefix, *uri;
@@ -4930,6 +4906,45 @@
        RETURN_FALSE;
 }
 /* }}} */
+
+/* {{{ proto bool xpath_register_ns_auto([object xpathctx_handle,] [object 
+contextnode])
+       Registeres the given namespace in the passed XPath context */
+PHP_FUNCTION(xpath_register_ns_auto)
+{
+       /* automatic namespace definitions registration.
+       it's only done for the context node
+       if you need namespaces defined in other nodes, 
+       you have to specify them explicitely with
+       xpath_register_ns();
+       */
+
+       zval *contextnode = NULL, *id;
+       xmlXPathContextPtr ctxp;
+       xmlNodePtr contextnodep;
+       xmlNsPtr *namespaces;   
+       int nsNr;
+                       
+       DOMXML_PARAM_ONE(ctxp, id, le_xpathctxp, "|o", &contextnode);
+
+       if (contextnode == NULL) {
+               namespaces = xmlGetNsList(ctxp->doc, xmlDocGetRootElement(ctxp->doc));
+       } else {
+               DOMXML_GET_OBJ(contextnodep, contextnode, le_domxmlnodep);
+               namespaces = xmlGetNsList(ctxp->doc, contextnodep);
+       }
+                               
+       nsNr = 0;
+       if (namespaces != NULL) {
+               while (namespaces[nsNr] != NULL) {
+                       xmlXPathRegisterNs(ctxp, namespaces[nsNr]->prefix, 
+namespaces[nsNr]->href); 
+                       nsNr++;
+               }
+       }
+
+       RETURN_TRUE;
+}
+/* }}} */
+
 #endif /* defined(LIBXML_XPATH_ENABLED) */
 
 #if defined(LIBXML_XPTR_ENABLED)
Index: php4/ext/domxml/php_domxml.h
diff -u php4/ext/domxml/php_domxml.h:1.72 php4/ext/domxml/php_domxml.h:1.73
--- php4/ext/domxml/php_domxml.h:1.72   Fri Aug 23 11:26:19 2002
+++ php4/ext/domxml/php_domxml.h        Fri Nov 29 06:22:06 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_domxml.h,v 1.72 2002/08/23 15:26:19 chregu Exp $ */
+/* $Id: php_domxml.h,v 1.73 2002/11/29 11:22:06 chregu Exp $ */
 
 #ifndef PHP_DOMXML_H
 #define PHP_DOMXML_H
@@ -214,6 +214,7 @@
 PHP_FUNCTION(xpath_eval);
 PHP_FUNCTION(xpath_eval_expression);
 PHP_FUNCTION(xpath_register_ns);
+PHP_FUNCTION(xpath_register_ns_auto);
 PHP_FUNCTION(domxml_doc_get_elements_by_tagname);
 PHP_FUNCTION(domxml_doc_get_element_by_id);
 #endif



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to