Fix aapt2 whitespace diffs from aapt(1)
CDATA blocks were being processed differently in aapt2 so this change
fixes aapt2 to not treat cdata blocks differently and still trime
whitespace.
Also, aapt did not process escapes when compiling xml files. This
change removes over-processing of xml text nodes.
All test strings are what aapt(1) would output.
Test: aapt2_tests
Bug: 124470332
Change-Id: I90ee0c1e5e9208f8a5c60cee93e3ba02712c9b2c
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index d0237f8..5e8d870 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -206,15 +206,6 @@
}
};
-// A chunk of text in the XML string within a CDATA tags.
-class CdataSegmentNode : public SegmentNode {
- public:
-
- void Build(StringBuilder* builder) const override {
- builder->AppendText(data, /* preserve_spaces */ true);
- }
-};
-
// A tag that will be encoded into the final flattened string. Tags like <b> or <i>.
class SpanNode : public Node {
public:
@@ -251,7 +242,6 @@
std::vector<Node*> node_stack;
node_stack.push_back(&root);
- bool cdata_block = false;
bool saw_span_node = false;
SegmentNode* first_segment = nullptr;
SegmentNode* last_segment = nullptr;
@@ -262,12 +252,9 @@
// First take care of any SegmentNodes that should be created.
if (event == xml::XmlPullParser::Event::kStartElement
- || event == xml::XmlPullParser::Event::kEndElement
- || event == xml::XmlPullParser::Event::kCdataStart
- || event == xml::XmlPullParser::Event::kCdataEnd) {
+ || event == xml::XmlPullParser::Event::kEndElement) {
if (!current_text.empty()) {
- std::unique_ptr<SegmentNode> segment_node = (cdata_block)
- ? util::make_unique<CdataSegmentNode>() : util::make_unique<SegmentNode>();
+ auto segment_node = util::make_unique<SegmentNode>();
segment_node->data = std::move(current_text);
last_segment = node_stack.back()->AddChild(std::move(segment_node));
@@ -345,16 +332,6 @@
}
} break;
- case xml::XmlPullParser::Event::kCdataStart: {
- cdata_block = true;
- break;
- }
-
- case xml::XmlPullParser::Event::kCdataEnd: {
- cdata_block = false;
- break;
- }
-
default:
// ignore.
break;