2 // Copyright 2011 The Android Open Source Project
4 // Build resource files from raw assets.
7 #include "ResourceFilter.h"
10 ResourceFilter::parse(const char* arg)
27 if (part == "en_XA") {
28 mContainsPseudoAccented = true;
29 } else if (part == "ar_XB") {
30 mContainsPseudoBidi = true;
34 if (!AaptGroupEntry::parseFilterNamePart(part, &axis, &value)) {
35 fprintf(stderr, "Invalid configuration: %s\n", arg);
37 for (int i=0; i<p-arg; i++) {
40 for (int i=0; i<q-p; i++) {
43 fprintf(stderr, "\n");
47 ssize_t index = mData.indexOfKey(axis);
49 mData.add(axis, SortedVector<AxisValue>());
51 SortedVector<AxisValue>& sv = mData.editValueFor(axis);
54 // If it's a locale with a region, script or variant, we should also match an
55 // unmodified locale of the same language
56 if (axis == AXIS_LOCALE) {
57 if (value.localeValue.region[0] || value.localeValue.script[0] ||
58 value.localeValue.variant[0]) {
60 memcpy(copy.localeValue.language, value.localeValue.language,
61 sizeof(value.localeValue.language));
74 ResourceFilter::isEmpty() const
76 return mData.size() == 0;
80 ResourceFilter::match(int axis, const AxisValue& value) const
82 if (value.intValue == 0 && (value.localeValue.language[0] == 0)) {
83 // they didn't specify anything so take everything
86 ssize_t index = mData.indexOfKey(axis);
88 // we didn't request anything on this axis so take everything
91 const SortedVector<AxisValue>& sv = mData.valueAt(index);
92 return sv.indexOf(value) >= 0;
96 ResourceFilter::match(int axis, const ResTable_config& config) const
98 return match(axis, AaptGroupEntry::getConfigValueForAxis(config, axis));
102 ResourceFilter::match(const ResTable_config& config) const
104 for (int i=AXIS_START; i<=AXIS_END; i++) {
105 if (!match(i, AaptGroupEntry::getConfigValueForAxis(config, i))) {
112 const SortedVector<AxisValue>* ResourceFilter::configsForAxis(int axis) const
114 ssize_t index = mData.indexOfKey(axis);
118 return &mData.valueAt(index);