xref: /aosp_15_r20/external/libtextclassifier/native/utils/resources.h (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker  *
4*993b0882SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker  *
8*993b0882SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker  *
10*993b0882SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker  * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker  */
16*993b0882SAndroid Build Coastguard Worker 
17*993b0882SAndroid Build Coastguard Worker #ifndef LIBTEXTCLASSIFIER_UTILS_RESOURCES_H_
18*993b0882SAndroid Build Coastguard Worker #define LIBTEXTCLASSIFIER_UTILS_RESOURCES_H_
19*993b0882SAndroid Build Coastguard Worker 
20*993b0882SAndroid Build Coastguard Worker #include <vector>
21*993b0882SAndroid Build Coastguard Worker 
22*993b0882SAndroid Build Coastguard Worker #include "utils/i18n/language-tag_generated.h"
23*993b0882SAndroid Build Coastguard Worker #include "utils/i18n/locale.h"
24*993b0882SAndroid Build Coastguard Worker #include "utils/resources_generated.h"
25*993b0882SAndroid Build Coastguard Worker #include "utils/strings/stringpiece.h"
26*993b0882SAndroid Build Coastguard Worker 
27*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
28*993b0882SAndroid Build Coastguard Worker 
29*993b0882SAndroid Build Coastguard Worker // Class for accessing localized model resources.
30*993b0882SAndroid Build Coastguard Worker class Resources {
31*993b0882SAndroid Build Coastguard Worker  public:
Resources(const ResourcePool * resources)32*993b0882SAndroid Build Coastguard Worker   explicit Resources(const ResourcePool* resources) : resources_(resources) {}
33*993b0882SAndroid Build Coastguard Worker 
34*993b0882SAndroid Build Coastguard Worker   // Returns the string value associated with the particular resource.
35*993b0882SAndroid Build Coastguard Worker   // `locales` are locales in preference order.
36*993b0882SAndroid Build Coastguard Worker   bool GetResourceContent(const std::vector<Locale>& locales,
37*993b0882SAndroid Build Coastguard Worker                           const StringPiece resource_name,
38*993b0882SAndroid Build Coastguard Worker                           std::string* result) const;
39*993b0882SAndroid Build Coastguard Worker 
40*993b0882SAndroid Build Coastguard Worker  private:
41*993b0882SAndroid Build Coastguard Worker   // Match priorities: language > script > region with wildcard matches being
42*993b0882SAndroid Build Coastguard Worker   // weaker than an exact match.
43*993b0882SAndroid Build Coastguard Worker   // For a resource lookup, at least language needs to (weakly) match.
44*993b0882SAndroid Build Coastguard Worker   // c.f. developer.android.com/guide/topics/resources/multilingual-support
45*993b0882SAndroid Build Coastguard Worker   enum LocaleMatch {
46*993b0882SAndroid Build Coastguard Worker     LOCALE_NO_MATCH = 0,
47*993b0882SAndroid Build Coastguard Worker     LOCALE_REGION_WILDCARD_MATCH = 1 << 0,
48*993b0882SAndroid Build Coastguard Worker     LOCALE_REGION_MATCH = 1 << 1,
49*993b0882SAndroid Build Coastguard Worker     LOCALE_SCRIPT_WILDCARD_MATCH = 1 << 2,
50*993b0882SAndroid Build Coastguard Worker     LOCALE_SCRIPT_MATCH = 1 << 3,
51*993b0882SAndroid Build Coastguard Worker     LOCALE_LANGUAGE_WILDCARD_MATCH = 1 << 4,
52*993b0882SAndroid Build Coastguard Worker     LOCALE_LANGUAGE_MATCH = 1 << 5
53*993b0882SAndroid Build Coastguard Worker   };
54*993b0882SAndroid Build Coastguard Worker   int LocaleMatch(const Locale& locale, const LanguageTag* entry_locale) const;
55*993b0882SAndroid Build Coastguard Worker 
56*993b0882SAndroid Build Coastguard Worker   // Finds a resource entry by name.
57*993b0882SAndroid Build Coastguard Worker   const ResourceEntry* FindResource(const StringPiece resource_name) const;
58*993b0882SAndroid Build Coastguard Worker 
59*993b0882SAndroid Build Coastguard Worker   // Finds the best locale matching resource from a resource entry.
60*993b0882SAndroid Build Coastguard Worker   int BestResourceForLocales(const ResourceEntry* resource,
61*993b0882SAndroid Build Coastguard Worker                              const std::vector<Locale>& locales) const;
62*993b0882SAndroid Build Coastguard Worker 
63*993b0882SAndroid Build Coastguard Worker   const ResourcePool* resources_;
64*993b0882SAndroid Build Coastguard Worker };
65*993b0882SAndroid Build Coastguard Worker 
66*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
67*993b0882SAndroid Build Coastguard Worker 
68*993b0882SAndroid Build Coastguard Worker #endif  // LIBTEXTCLASSIFIER_UTILS_RESOURCES_H_
69