| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef AAPT_XML_XMLUTIL_H |
| #define AAPT_XML_XMLUTIL_H |
| |
| #include "ResourceValues.h" |
| #include "util/Maybe.h" |
| |
| #include <string> |
| |
| namespace aapt { |
| namespace xml { |
| |
| constexpr const char16_t* kSchemaAuto = u"http://schemas.android.com/apk/res-auto"; |
| constexpr const char16_t* kSchemaPublicPrefix = u"http://schemas.android.com/apk/res/"; |
| constexpr const char16_t* kSchemaPrivatePrefix = u"http://schemas.android.com/apk/prv/res/"; |
| constexpr const char16_t* kSchemaAndroid = u"http://schemas.android.com/apk/res/android"; |
| |
| /** |
| * Result of extracting a package name from a namespace URI declaration. |
| */ |
| struct ExtractedPackage { |
| /** |
| * The name of the package. This can be the empty string, which means that the package |
| * should be assumed to be the package being compiled. |
| */ |
| std::u16string package; |
| |
| /** |
| * True if the package's private namespace was declared. This means that private resources |
| * are made visible. |
| */ |
| bool privateNamespace; |
| }; |
| |
| /** |
| * Returns an ExtractedPackage struct if the namespace URI is of the form: |
| * http://schemas.android.com/apk/res/<package> or |
| * http://schemas.android.com/apk/prv/res/<package> |
| * |
| * Special case: if namespaceUri is http://schemas.android.com/apk/res-auto, |
| * returns an empty package name. |
| */ |
| Maybe<ExtractedPackage> extractPackageFromNamespace(const std::u16string& namespaceUri); |
| |
| /** |
| * Interface representing a stack of XML namespace declarations. When looking up the package |
| * for a namespace prefix, the stack is checked from top to bottom. |
| */ |
| struct IPackageDeclStack { |
| virtual ~IPackageDeclStack() = default; |
| |
| /** |
| * Returns an ExtractedPackage struct if the alias given corresponds with a package declaration. |
| */ |
| virtual Maybe<ExtractedPackage> transformPackageAlias( |
| const StringPiece16& alias, const StringPiece16& localPackage) const = 0; |
| }; |
| |
| /** |
| * Helper function for transforming the original Reference inRef to a fully qualified reference |
| * via the IPackageDeclStack. This will also mark the Reference as private if the namespace of |
| * the package declaration was private. |
| */ |
| void transformReferenceFromNamespace(IPackageDeclStack* declStack, |
| const StringPiece16& localPackage, Reference* inRef); |
| |
| } // namespace xml |
| } // namespace aapt |
| |
| #endif /* AAPT_XML_XMLUTIL_H */ |