summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-10-19 15:38:10 +0000
committerarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-10-19 15:38:10 +0000
commita18385e1e09794f8ed46d99883e1e00bf554f69a (patch)
tree4439a55ad6ee9fdd258c9832b813ca9db276f804
parentb979d4c2bd1e8f445befd53ea8357b594f1ca3b2 (diff)
If an element node has the only child, and it is of CDATA type, then the extra indentation is omitted (previously this behavior only held for PCDATA children)
git-svn-id: http://pugixml.googlecode.com/svn/trunk@770 99668b35-9821-0410-8761-19e4c4f06640
-rw-r--r--src/pugixml.cpp7
-rw-r--r--tests/test_write.cpp7
2 files changed, 12 insertions, 2 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 241eaed..e24ba3c 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -2920,11 +2920,14 @@ namespace
}
else if (!node.first_child())
writer.write(' ', '/', '>', '\n');
- else if (node.first_child() == node.last_child() && node.first_child().type() == node_pcdata)
+ else if (node.first_child() == node.last_child() && (node.first_child().type() == node_pcdata || node.first_child().type() == node_cdata))
{
writer.write('>');
- text_output_escaped(writer, node.first_child().value(), ctx_special_pcdata);
+ if (node.first_child().type() == node_pcdata)
+ text_output_escaped(writer, node.first_child().value(), ctx_special_pcdata);
+ else
+ text_output_cdata(writer, node.first_child().value());
writer.write('<', '/');
writer.write(name);
diff --git a/tests/test_write.cpp b/tests/test_write.cpp
index 0904b21..3871bf6 100644
--- a/tests/test_write.cpp
+++ b/tests/test_write.cpp
@@ -45,6 +45,13 @@ TEST_XML(write_cdata_escape, "<![CDATA[value]]>")
CHECK_NODE(doc, STR("<![CDATA[1]]]]><![CDATA[>2]]]]><![CDATA[>3]]>"));
}
+TEST_XML(write_cdata_inner, "<node><![CDATA[value]]></node>")
+{
+ CHECK_NODE(doc, STR("<node><![CDATA[value]]></node>"));
+ CHECK_NODE_EX(doc, STR("<node><![CDATA[value]]></node>\n"), STR(""), 0);
+}
+
+
TEST_XML_FLAGS(write_comment, "<!--text-->", parse_default | parse_comments)
{
CHECK_NODE(doc, STR("<!--text-->"));