diff options
author | Rob Richards <rrichard@src.gnome.org> | 2005-09-12 12:16:35 +0000 |
---|---|---|
committer | Rob Richards <rrichard@src.gnome.org> | 2005-09-12 12:16:35 +0000 |
commit | 2ce51c0646dd499b260f4f647169680634998244 (patch) | |
tree | 45a1fcd72d39fa9afbe60531df4f55a6590183c8 /xmlsave.c | |
parent | 602434dee543b1d7a0473881469032a05e43106e (diff) | |
download | android_external_libxml2-2ce51c0646dd499b260f4f647169680634998244.tar.gz android_external_libxml2-2ce51c0646dd499b260f4f647169680634998244.tar.bz2 android_external_libxml2-2ce51c0646dd499b260f4f647169680634998244.zip |
add XML_SAVE_NO_EMPTY save option and use option from xmlSaveCtxtPtr
* include/libxml/xmlsave.h xmlsave.c: add XML_SAVE_NO_EMPTY save option
and use option from xmlSaveCtxtPtr rather than global during output.
* xmlsave.c: fix some output formatting for meta element under XHTML.
Diffstat (limited to 'xmlsave.c')
-rw-r--r-- | xmlsave.c | 48 |
1 files changed, 38 insertions, 10 deletions
@@ -343,6 +343,10 @@ xmlSaveCtxtInit(xmlSaveCtxtPtr ctxt) ctxt->indent_size); ctxt->indent[ctxt->indent_nr * ctxt->indent_size] = 0; } + + if (xmlSaveNoEmptyTags) { + ctxt->options |= XML_SAVE_NO_EMPTY; + } } /** @@ -380,13 +384,6 @@ xmlNewSaveCtxt(const char *encoding, int options) } memset(ret, 0, sizeof(xmlSaveCtxt)); - /* - * Use the options - */ - ret->options = options; - if (options & XML_SAVE_FORMAT) - ret->format = 1; - if (encoding != NULL) { ret->handler = xmlFindCharEncodingHandler(encoding); if (ret->handler == NULL) { @@ -399,6 +396,19 @@ xmlNewSaveCtxt(const char *encoding, int options) } xmlSaveCtxtInit(ret); + /* + * Use the options + */ + + /* Re-check this option as it may already have been set */ + if ((ret->options & XML_SAVE_NO_EMPTY) && ! (options & XML_SAVE_NO_EMPTY)) { + options |= XML_SAVE_NO_EMPTY; + } + + ret->options = options; + if (options & XML_SAVE_FORMAT) + ret->format = 1; + return(ret); } @@ -773,7 +783,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlAttrListDumpOutput(ctxt, cur->properties); if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) && - (cur->children == NULL) && (!xmlSaveNoEmptyTags)) { + (cur->children == NULL) && ((ctxt->options & XML_SAVE_NO_EMPTY) == 0)) { xmlOutputBufferWrite(buf, 2, "/>"); ctxt->format = format; return; @@ -1245,6 +1255,13 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } else { if (addmeta == 1) { xmlOutputBufferWrite(buf, 1, ">"); + if (ctxt->format) { + xmlOutputBufferWrite(buf, 1, "\n"); + if (xmlIndentTreeOutput) + xmlOutputBufferWrite(buf, ctxt->indent_size * + (ctxt->level + 1 > ctxt->indent_nr ? + ctxt->indent_nr : ctxt->level + 1), ctxt->indent); + } xmlOutputBufferWriteString(buf, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset="); if (ctxt->encoding) { @@ -1252,12 +1269,16 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } else { xmlOutputBufferWrite(buf, 5, "UTF-8"); } - xmlOutputBufferWrite(buf, 3, "\" /"); + xmlOutputBufferWrite(buf, 4, "\" />"); + if (ctxt->format) + xmlOutputBufferWrite(buf, 1, "\n"); + } else { + xmlOutputBufferWrite(buf, 1, ">"); } /* * C.3. Element Minimization and Empty Element Content */ - xmlOutputBufferWrite(buf, 3, "></"); + xmlOutputBufferWrite(buf, 2, "</"); if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix); xmlOutputBufferWrite(buf, 1, ":"); @@ -1269,6 +1290,13 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } xmlOutputBufferWrite(buf, 1, ">"); if (addmeta == 1) { + if (ctxt->format) { + xmlOutputBufferWrite(buf, 1, "\n"); + if (xmlIndentTreeOutput) + xmlOutputBufferWrite(buf, ctxt->indent_size * + (ctxt->level + 1 > ctxt->indent_nr ? + ctxt->indent_nr : ctxt->level + 1), ctxt->indent); + } xmlOutputBufferWriteString(buf, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset="); if (ctxt->encoding) { |