From 5eeaaddffd23d8d85aeb321e3ceea626e42cf9de Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Thu, 25 Aug 2016 12:26:56 -0700 Subject: AAPT2: Add Inline Complex XML support See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html Change-Id: I8274c85e25cabf90423141c228697e873167d136 --- tools/aapt2/Debug.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tools/aapt2/Debug.cpp') diff --git a/tools/aapt2/Debug.cpp b/tools/aapt2/Debug.cpp index 19bd5210c840..304e571832f4 100644 --- a/tools/aapt2/Debug.cpp +++ b/tools/aapt2/Debug.cpp @@ -247,5 +247,59 @@ void Debug::dumpHex(const void* data, size_t len) { } } +namespace { + +class XmlPrinter : public xml::Visitor { +public: + using xml::Visitor::visit; + + void visit(xml::Element* el) override { + std::cerr << mPrefix; + std::cerr << "E: "; + if (!el->namespaceUri.empty()) { + std::cerr << el->namespaceUri << ":"; + } + std::cerr << el->name << " (line=" << el->lineNumber << ")\n"; + + for (const xml::Attribute& attr : el->attributes) { + std::cerr << mPrefix << " A: "; + if (!attr.namespaceUri.empty()) { + std::cerr << attr.namespaceUri << ":"; + } + std::cerr << attr.name << "=" << attr.value << "\n"; + } + + const size_t previousSize = mPrefix.size(); + mPrefix += " "; + xml::Visitor::visit(el); + mPrefix.resize(previousSize); + } + + void visit(xml::Namespace* ns) override { + std::cerr << mPrefix; + std::cerr << "N: " << ns->namespacePrefix << "=" << ns->namespaceUri + << " (line=" << ns->lineNumber << ")\n"; + + const size_t previousSize = mPrefix.size(); + mPrefix += " "; + xml::Visitor::visit(ns); + mPrefix.resize(previousSize); + } + + void visit(xml::Text* text) override { + std::cerr << mPrefix; + std::cerr << "T: '" << text->text << "'\n"; + } + +private: + std::string mPrefix; +}; + +} // namespace + +void Debug::dumpXml(xml::XmlResource* doc) { + XmlPrinter printer; + doc->root->accept(&printer); +} } // namespace aapt -- cgit v1.2.3-59-g8ed1b