From 499cc9204f8facf8c33fe8de63216460aaf93b2a Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 18 Jan 2006 17:22:35 +0000 Subject: [PATCH] try to fix xmlParseInNodeContext when operating on an HTML document. * HTMLparser.c libxml.h parser.c: try to fix xmlParseInNodeContext when operating on an HTML document. Daniel --- ChangeLog | 5 +++++ HTMLparser.c | 15 +++++++++++++-- libxml.h | 8 ++++++++ parser.c | 8 +++++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94ce6421..bd2753b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jan 18 18:21:15 CET 2006 Daniel Veillard + + * HTMLparser.c libxml.h parser.c: try to fix xmlParseInNodeContext + when operating on an HTML document. + Mon Jan 9 17:27:15 CET 2006 Kasimier Buchcik * relaxng.c include/libxml/relaxng.h: Added diff --git a/HTMLparser.c b/HTMLparser.c index 12afdd85..5cbc9040 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -3753,10 +3753,8 @@ htmlParseReference(htmlParserCtxtPtr ctxt) { /** * htmlParseContent: * @ctxt: an HTML parser context - * @name: the node name * * Parse a content: comment, sub-element, reference or text. - * */ static void @@ -3874,6 +3872,19 @@ htmlParseContent(htmlParserCtxtPtr ctxt) { if (currentNode != NULL) xmlFree(currentNode); } +/** + * htmlParseContent: + * @ctxt: an HTML parser context + * + * Parse a content: comment, sub-element, reference or text. + */ + +void +__htmlParseContent(void *ctxt) { + if (ctxt != NULL) + htmlParseContent((htmlParserCtxtPtr) ctxt); +} + /** * htmlParseElement: * @ctxt: an HTML parser context diff --git a/libxml.h b/libxml.h index 89ec5955..56e03202 100644 --- a/libxml.h +++ b/libxml.h @@ -49,6 +49,14 @@ extern int __xmlRegisterCallbacks; */ void __xmlIOErr(int domain, int code, const char *extra); void __xmlLoaderErr(void *ctx, const char *msg, const char *filename); +#ifdef LIBXML_HTML_ENABLED +/* + * internal function of HTML parser needed for xmlParseInNodeContext + * but not part of the API + */ +void __htmlParseContent(void *ctx); +#endif + #ifdef IN_LIBXML #ifdef __GNUC__ diff --git a/parser.c b/parser.c index 8c2fed3c..4c996dd3 100644 --- a/parser.c +++ b/parser.c @@ -11709,7 +11709,13 @@ xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen, ctxt->loadsubset |= XML_SKIP_IDS; } - xmlParseContent(ctxt); +#ifdef LIBXML_HTML_ENABLED + if (doc->type == XML_HTML_DOCUMENT_NODE) + __htmlParseContent(ctxt); + else +#endif + xmlParseContent(ctxt); + nsPop(ctxt, nsnr); if ((RAW == '<') && (NXT(1) == '/')) { xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);