Home | History | Annotate | Download | only in aapt2
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "Resource.h"
     18 
     19 #include <map>
     20 #include <sstream>
     21 #include <string>
     22 
     23 #include "android-base/stringprintf.h"
     24 
     25 using ::android::StringPiece;
     26 using ::android::base::StringPrintf;
     27 
     28 namespace aapt {
     29 
     30 std::string ResourceId::to_string() const {
     31   return StringPrintf("0x%08x", id);
     32 }
     33 
     34 std::string ResourceName::to_string() const {
     35   return ResourceNameRef(*this).to_string();
     36 }
     37 
     38 std::string ResourceNameRef::to_string() const {
     39   std::ostringstream str_stream;
     40   if (!package.empty()) {
     41     str_stream << package << ":";
     42   }
     43   str_stream << type << "/" << entry;
     44   return str_stream.str();
     45 }
     46 
     47 StringPiece to_string(ResourceType type) {
     48   switch (type) {
     49     case ResourceType::kAnim:
     50       return "anim";
     51     case ResourceType::kAnimator:
     52       return "animator";
     53     case ResourceType::kArray:
     54       return "array";
     55     case ResourceType::kAttr:
     56       return "attr";
     57     case ResourceType::kAttrPrivate:
     58       return "^attr-private";
     59     case ResourceType::kBool:
     60       return "bool";
     61     case ResourceType::kColor:
     62       return "color";
     63     case ResourceType::kConfigVarying:
     64       return "configVarying";
     65     case ResourceType::kDimen:
     66       return "dimen";
     67     case ResourceType::kDrawable:
     68       return "drawable";
     69     case ResourceType::kFont:
     70       return "font";
     71     case ResourceType::kFraction:
     72       return "fraction";
     73     case ResourceType::kId:
     74       return "id";
     75     case ResourceType::kInteger:
     76       return "integer";
     77     case ResourceType::kInterpolator:
     78       return "interpolator";
     79     case ResourceType::kLayout:
     80       return "layout";
     81     case ResourceType::kMenu:
     82       return "menu";
     83     case ResourceType::kMipmap:
     84       return "mipmap";
     85     case ResourceType::kNavigation:
     86       return "navigation";
     87     case ResourceType::kPlurals:
     88       return "plurals";
     89     case ResourceType::kRaw:
     90       return "raw";
     91     case ResourceType::kString:
     92       return "string";
     93     case ResourceType::kStyle:
     94       return "style";
     95     case ResourceType::kStyleable:
     96       return "styleable";
     97     case ResourceType::kTransition:
     98       return "transition";
     99     case ResourceType::kXml:
    100       return "xml";
    101   }
    102   return {};
    103 }
    104 
    105 static const std::map<StringPiece, ResourceType> sResourceTypeMap{
    106     {"anim", ResourceType::kAnim},
    107     {"animator", ResourceType::kAnimator},
    108     {"array", ResourceType::kArray},
    109     {"attr", ResourceType::kAttr},
    110     {"^attr-private", ResourceType::kAttrPrivate},
    111     {"bool", ResourceType::kBool},
    112     {"color", ResourceType::kColor},
    113     {"configVarying", ResourceType::kConfigVarying},
    114     {"dimen", ResourceType::kDimen},
    115     {"drawable", ResourceType::kDrawable},
    116     {"font", ResourceType::kFont},
    117     {"fraction", ResourceType::kFraction},
    118     {"id", ResourceType::kId},
    119     {"integer", ResourceType::kInteger},
    120     {"interpolator", ResourceType::kInterpolator},
    121     {"layout", ResourceType::kLayout},
    122     {"menu", ResourceType::kMenu},
    123     {"mipmap", ResourceType::kMipmap},
    124     {"navigation", ResourceType::kNavigation},
    125     {"plurals", ResourceType::kPlurals},
    126     {"raw", ResourceType::kRaw},
    127     {"string", ResourceType::kString},
    128     {"style", ResourceType::kStyle},
    129     {"styleable", ResourceType::kStyleable},
    130     {"transition", ResourceType::kTransition},
    131     {"xml", ResourceType::kXml},
    132 };
    133 
    134 const ResourceType* ParseResourceType(const StringPiece& str) {
    135   auto iter = sResourceTypeMap.find(str);
    136   if (iter == std::end(sResourceTypeMap)) {
    137     return nullptr;
    138   }
    139   return &iter->second;
    140 }
    141 
    142 bool operator<(const ResourceKey& a, const ResourceKey& b) {
    143   return std::tie(a.name, a.config) < std::tie(b.name, b.config);
    144 }
    145 
    146 bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
    147   return std::tie(a.name, a.config) < std::tie(b.name, b.config);
    148 }
    149 
    150 }  // namespace aapt
    151