chregu          Sun Oct 26 19:01:40 2003 EDT

  Modified files:              
    /php-src/ext/dom    document.c 
  Log:
  - Make distinction in error-reporting between Warnings and Errors from libxml2
  - Use internal error_handlers during html-parsing as well
  
  
Index: php-src/ext/dom/document.c
diff -u php-src/ext/dom/document.c:1.32 php-src/ext/dom/document.c:1.33
--- php-src/ext/dom/document.c:1.32     Sun Oct 26 10:57:01 2003
+++ php-src/ext/dom/document.c  Sun Oct 26 19:01:39 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: document.c,v 1.32 2003/10/26 15:57:01 rrichards Exp $ */
+/* $Id: document.c,v 1.33 2003/10/27 00:01:39 chregu Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -115,15 +115,43 @@
        efree(buf);
 }
 
+/* {{{ static void php_dom_ctx_error_level(int level, void *ctx, const char *msg, 
...) */
+static void php_dom_ctx_error_level(int level, void *ctx, const char *msg)
+{
+       xmlParserCtxtPtr parser;
+
+       parser = (xmlParserCtxtPtr) ctx;
+       php_error(level, "%s in %s, line: %d", msg, parser->input->filename, 
parser->input->line);
+
+}
+/* }}} end php_dom_ctx_error */
+
 /* {{{ static void php_dom_ctx_error(void *ctx, const char *msg, ...) */
 static void php_dom_ctx_error(void *ctx, const char *msg, ...)
 {
        va_list ap;
        char *buf;
        int len;
-       xmlParserCtxtPtr parser;
 
-       parser = (xmlParserCtxtPtr) ctx;
+       va_start(ap, msg);
+       len = vspprintf(&buf, 0, msg, ap);
+       va_end(ap);
+       
+       /* remove any trailing \n */
+       while (len && buf[--len] == '\n') {
+               buf[len] = '\0';
+       }
+
+       php_dom_ctx_error_level(E_WARNING, ctx, buf);
+       efree(buf);
+}
+/* }}} end php_dom_ctx_error */
+
+static void php_dom_ctx_warning(void *ctx, const char *msg, ...)
+{
+       va_list ap;
+       char *buf;
+       int len;
 
        va_start(ap, msg);
        len = vspprintf(&buf, 0, msg, ap);
@@ -134,11 +162,12 @@
                buf[len] = '\0';
        }
 
-       php_error(E_WARNING, "%s in %s, line: %d", buf, parser->input->filename, 
parser->input->line);
+       php_dom_ctx_error_level(E_NOTICE, ctx, buf);
        efree(buf);
 }
 /* }}} end php_dom_ctx_error */
 
+
 /* {{{ proto doctype   documenttype    
 readonly=yes 
 URL: 
http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-B63ED1A31
@@ -1299,10 +1328,11 @@
        ctxt->replaceEntities = substitute_ent;
 
        ctxt->vctxt.error = php_dom_ctx_error;
-       ctxt->vctxt.warning = php_dom_ctx_error;
+       ctxt->vctxt.warning = php_dom_ctx_warning;
 
        if (ctxt->sax != NULL) {
                ctxt->sax->error = php_dom_ctx_error;
+               ctxt->sax->warning = php_dom_ctx_warning;
        }
 
        xmlParseDocument(ctxt);
@@ -1687,7 +1717,8 @@
        dom_doc_props *doc_prop;
        char *source;
        int source_len, refcount, ret;
-
+       htmlParserCtxtPtr ctxt;
+       
        id = getThis();
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, 
&source_len) == FAILURE) {
@@ -1695,11 +1726,21 @@
        }
 
        if (mode == DOM_LOAD_FILE) {
-               newdoc = htmlParseFile(source, NULL);
+               ctxt = htmlCreateFileParserCtxt(source, NULL);
        } else {
-               newdoc = htmlParseDoc(source, NULL);
+               source_len = xmlStrlen(source);
+               ctxt = htmlCreateMemoryParserCtxt(source, source_len);
        }
-
+       ctxt->vctxt.error = php_dom_ctx_warning;
+       ctxt->vctxt.warning = php_dom_ctx_warning;
+       if (ctxt->sax != NULL) {
+               ctxt->sax->error = php_dom_ctx_error;
+               ctxt->sax->warning = php_dom_ctx_warning;
+       }
+       htmlParseDocument(ctxt);
+       newdoc = ctxt->myDoc;
+       htmlFreeParserCtxt(ctxt);
+       
        if (!newdoc)
                RETURN_FALSE;
 

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

Reply via email to