1 // Copyright (C) 2014 Google Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef I18N_ADDRESSINPUT_REGION_DATA_BUILDER_H_ 16 #define I18N_ADDRESSINPUT_REGION_DATA_BUILDER_H_ 17 18 #include <libaddressinput/util/basictypes.h> 19 20 #include <map> 21 #include <string> 22 23 namespace i18n { 24 namespace addressinput { 25 26 class PreloadSupplier; 27 class RegionData; 28 29 class RegionDataBuilder { 30 public: 31 // Does not take ownership of |supplier|, which should not be NULL. 32 explicit RegionDataBuilder(PreloadSupplier* supplier); 33 ~RegionDataBuilder(); 34 35 // Returns a tree of administrative subdivisions for the |region_code|. 36 // Examples: 37 // US with en-US UI language. 38 // |______________________ 39 // | | | 40 // v v v 41 // AL:Alabama AK:Alaska AS:American Samoa ... 42 // 43 // KR with ko-Latn UI language. 44 // |______________________________________ 45 // | | | 46 // v v v 47 // 강원도:Gangwon 경기도:Gyeonggi 경상남도:Gyeongnam ... 48 // 49 // KR with ko-KR UI language. 50 // |_______________________________ 51 // | | | 52 // v v v 53 // 강원도:강원 경기도:경기 경상남도:경남 ... 54 // 55 // The BCP 47 |ui_language_tag| is used to choose the best supported language 56 // tag for this region (assigned to |best_region_tree_language_tag|). For 57 // example, Canada has both English and French names for its administrative 58 // subdivisions. If the UI language is French, then the French names are used. 59 // The |best_region_tree_language_tag| value may be an empty string. 60 // 61 // Should be called only if supplier->IsLoaded(region_code) returns true. The 62 // |best_region_tree_language_tag| parameter should not be NULL. 63 const RegionData& Build(const std::string& region_code, 64 const std::string& ui_language_tag, 65 std::string* best_region_tree_language_tag); 66 67 private: 68 typedef std::map<std::string, const RegionData*> LanguageRegionMap; 69 typedef std::map<std::string, LanguageRegionMap*> RegionCodeDataMap; 70 71 PreloadSupplier* const supplier_; // Not owned. 72 RegionCodeDataMap cache_; 73 74 DISALLOW_COPY_AND_ASSIGN(RegionDataBuilder); 75 }; 76 77 } // namespace addressinput 78 } // namespace i18n 79 80 #endif // I18N_ADDRESSINPUT_REGION_DATA_BUILDER_H_ 81