diff options
author | Adam Lesinski <adamlesinski@google.com> | 2016-08-25 12:26:56 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2016-08-31 18:32:34 -0700 |
commit | 5eeaaddffd23d8d85aeb321e3ceea626e42cf9de (patch) | |
tree | dcd102c0f14825c34c2251427db84e48cb11d8a7 /tools/aapt2/ResourceUtils.cpp | |
parent | 79758c8e7706f3cce265a881cc66df8771d3c456 (diff) |
AAPT2: Add Inline Complex XML support
See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html
Change-Id: I8274c85e25cabf90423141c228697e873167d136
Diffstat (limited to 'tools/aapt2/ResourceUtils.cpp')
-rw-r--r-- | tools/aapt2/ResourceUtils.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp index 11619fa9c67d..73a194e90ea2 100644 --- a/tools/aapt2/ResourceUtils.cpp +++ b/tools/aapt2/ResourceUtils.cpp @@ -268,6 +268,35 @@ Maybe<Reference> parseStyleParentReference(const StringPiece& str, std::string* return result; } +Maybe<Reference> parseXmlAttributeName(const StringPiece& str) { + StringPiece trimmedStr = util::trimWhitespace(str); + const char* start = trimmedStr.data(); + const char* const end = start + trimmedStr.size(); + const char* p = start; + + Reference ref; + if (p != end && *p == '*') { + ref.privateReference = true; + start++; + p++; + } + + StringPiece package; + StringPiece name; + while (p != end) { + if (*p == ':') { + package = StringPiece(start, p - start); + name = StringPiece(p + 1, end - (p + 1)); + break; + } + p++; + } + + ref.name = ResourceName(package.toString(), ResourceType::kAttr, + name.empty() ? trimmedStr.toString() : name.toString()); + return Maybe<Reference>(std::move(ref)); +} + std::unique_ptr<Reference> tryParseReference(const StringPiece& str, bool* outCreate) { ResourceNameRef ref; bool privateRef = false; |