/* * 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. */ #include "Resource.h" #include <map> #include <sstream> #include <string> #include "android-base/stringprintf.h" using ::android::StringPiece; using ::android::base::StringPrintf; namespace aapt { std::string ResourceId::to_string() const { return StringPrintf("0x%08x", id); } std::string ResourceName::to_string() const { return ResourceNameRef(*this).to_string(); } std::string ResourceNameRef::to_string() const { std::ostringstream str_stream; if (!package.empty()) { str_stream << package << ":"; } str_stream << type << "/" << entry; return str_stream.str(); } StringPiece to_string(ResourceType type) { switch (type) { case ResourceType::kAnim: return "anim"; case ResourceType::kAnimator: return "animator"; case ResourceType::kArray: return "array"; case ResourceType::kAttr: return "attr"; case ResourceType::kAttrPrivate: return "^attr-private"; case ResourceType::kBool: return "bool"; case ResourceType::kColor: return "color"; case ResourceType::kConfigVarying: return "configVarying"; case ResourceType::kDimen: return "dimen"; case ResourceType::kDrawable: return "drawable"; case ResourceType::kFont: return "font"; case ResourceType::kFraction: return "fraction"; case ResourceType::kId: return "id"; case ResourceType::kInteger: return "integer"; case ResourceType::kInterpolator: return "interpolator"; case ResourceType::kLayout: return "layout"; case ResourceType::kMenu: return "menu"; case ResourceType::kMipmap: return "mipmap"; case ResourceType::kNavigation: return "navigation"; case ResourceType::kPlurals: return "plurals"; case ResourceType::kRaw: return "raw"; case ResourceType::kString: return "string"; case ResourceType::kStyle: return "style"; case ResourceType::kStyleable: return "styleable"; case ResourceType::kTransition: return "transition"; case ResourceType::kXml: return "xml"; } return {}; } static const std::map<StringPiece, ResourceType> sResourceTypeMap{ {"anim", ResourceType::kAnim}, {"animator", ResourceType::kAnimator}, {"array", ResourceType::kArray}, {"attr", ResourceType::kAttr}, {"^attr-private", ResourceType::kAttrPrivate}, {"bool", ResourceType::kBool}, {"color", ResourceType::kColor}, {"configVarying", ResourceType::kConfigVarying}, {"dimen", ResourceType::kDimen}, {"drawable", ResourceType::kDrawable}, {"font", ResourceType::kFont}, {"fraction", ResourceType::kFraction}, {"id", ResourceType::kId}, {"integer", ResourceType::kInteger}, {"interpolator", ResourceType::kInterpolator}, {"layout", ResourceType::kLayout}, {"menu", ResourceType::kMenu}, {"mipmap", ResourceType::kMipmap}, {"navigation", ResourceType::kNavigation}, {"plurals", ResourceType::kPlurals}, {"raw", ResourceType::kRaw}, {"string", ResourceType::kString}, {"style", ResourceType::kStyle}, {"styleable", ResourceType::kStyleable}, {"transition", ResourceType::kTransition}, {"xml", ResourceType::kXml}, }; const ResourceType* ParseResourceType(const StringPiece& str) { auto iter = sResourceTypeMap.find(str); if (iter == std::end(sResourceTypeMap)) { return nullptr; } return &iter->second; } bool operator<(const ResourceKey& a, const ResourceKey& b) { return std::tie(a.name, a.config) < std::tie(b.name, b.config); } bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) { return std::tie(a.name, a.config) < std::tie(b.name, b.config); } } // namespace aapt