diff --git a/ChangeLog b/ChangeLog index 2618d4ad..6088f43c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard + + * HTMLparser.c HTMLtree.c: applied part of the patches provided + by P C Chow and William M. Brack for XSLT HTML output + Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard * xmlversion.h.in win32config.h win32/libxml2/*: applied diff --git a/HTMLparser.c b/HTMLparser.c index 4b3bac86..5f8f187d 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -616,7 +616,7 @@ htmlTagLookup(const xmlChar *tag) { for (i = 0; i < (sizeof(html40ElementTable) / sizeof(html40ElementTable[0]));i++) { - if (xmlStrEqual(tag, BAD_CAST html40ElementTable[i].name)) + if (!xmlStrcasecmp(tag, BAD_CAST html40ElementTable[i].name)) return(&html40ElementTable[i]); } return(NULL); diff --git a/HTMLtree.c b/HTMLtree.c index 66ccdca3..9c1804bc 100644 --- a/HTMLtree.c +++ b/HTMLtree.c @@ -189,6 +189,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { */ while (cur != NULL) { if (cur->name != NULL) { +/* if (xmlStrEqual(cur->name, BAD_CAST"html")) break; if (xmlStrEqual(cur->name, BAD_CAST"body")) { @@ -207,6 +208,13 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { goto found_head; if (xmlStrEqual(cur->name, BAD_CAST"meta")) goto found_meta; +*/ + if (xmlStrcasecmp(cur->name, BAD_CAST"html") == 0) + break; + if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) + goto found_head; + if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) + goto found_meta; } cur = cur->next; } @@ -219,6 +227,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { */ while (cur != NULL) { if (cur->name != NULL) { +/* if (xmlStrEqual(cur->name, BAD_CAST"head")) break; if (xmlStrEqual(cur->name, BAD_CAST"body")) { @@ -235,6 +244,11 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { } if (xmlStrEqual(cur->name, BAD_CAST"meta")) goto found_meta; +*/ + if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0) + break; + if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) + goto found_meta; } cur = cur->next; } @@ -246,8 +260,8 @@ found_head: return(0); meta = xmlNewDocNode(doc, NULL, BAD_CAST"meta", NULL); xmlAddChild(cur, meta); - xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type"); xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent); + xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type"); return(0); } cur = cur->children; @@ -260,8 +274,8 @@ found_meta: meta = xmlNewDocNode(doc, NULL, BAD_CAST"meta", NULL); xmlAddPrevSibling(cur, meta); - xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type"); xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent); + xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type"); } /* @@ -270,13 +284,15 @@ found_meta: */ while (cur != NULL) { if (cur->name != NULL) { - if (xmlStrEqual(cur->name, BAD_CAST"meta")) { + if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) { xmlAttrPtr attr = cur->properties; int http; const xmlChar *value; + int same_charset; content = NULL; http = 0; + same_charset = 0; while (attr != NULL) { if ((attr->children != NULL) && (attr->children->type == XML_TEXT_NODE) && @@ -289,15 +305,22 @@ found_meta: if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv")) && (!xmlStrcasecmp(value, BAD_CAST"Content-Type"))) http = 1; - else if ((value != NULL) - && (!xmlStrcasecmp(attr->name, BAD_CAST"content"))) - content = value; - if ((http != 0) && (content != NULL)) + else + { + if ((value != NULL) && + (!xmlStrcasecmp(attr->name, BAD_CAST"content"))) + content = value; + else + if ((!xmlStrcasecmp(attr->name, BAD_CAST"charset")) + && (!xmlStrcasecmp(value, encoding))) + same_charset = 1; + } + if ((http != 0) && (content != NULL) && (same_charset != 0)) break; } attr = attr->next; } - if ((http != 0) && (content != NULL)) { + if ((http != 0) && (content != NULL) && (same_charset != 0)) { meta = cur; cur = cur->next; xmlUnlinkNode(meta); @@ -796,7 +819,8 @@ htmlNodeListDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, co * Dump an HTML node, recursive behaviour,children are printed too. */ void -htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, const char *encoding) { +htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, + xmlNodePtr cur, const char *encoding) { htmlElemDescPtr info; if (cur == NULL) { @@ -867,7 +891,7 @@ htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, const } /* - * Get specific HTmL info for taht node. + * Get specific HTML info for taht node. */ info = htmlTagLookup(cur->name); @@ -887,6 +911,10 @@ htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, const } if ((cur->content == NULL) && (cur->children == NULL)) { if ((info != NULL) && (info->saveEndTag != 0) && +/* + (xmlStrcasecmp(BAD_CAST info->name, BAD_CAST "html")) && + (xmlStrcasecmp(BAD_CAST info->name, BAD_CAST "body"))) { +*/ (strcmp(info->name, "html")) && (strcmp(info->name, "body"))) { xmlOutputBufferWriteString(buf, ">"); } else {