in resources/src/main/java/org/robolectric/res/android/ConfigDescription.java [95:179]
int initFromParts(PeekingIterator<String> iter) {
String part = iter.peek();
if (part.startsWith("b+")) {
// This is a "modified" BCP 47 language tag. Same semantics as BCP 47 tags,
// except that the separator is "+" and not "-".
String[] subtags = part.substring(2).toLowerCase().split("\\+", 0);
if (subtags.length == 1) {
set_language(subtags[0]);
} else if (subtags.length == 2) {
set_language(subtags[0]);
// The second tag can either be a region, a variant or a script.
switch (subtags[1].length()) {
case 2:
case 3:
set_region(subtags[1]);
break;
case 4:
if ('0' <= subtags[1].charAt(0) && subtags[1].charAt(0) <= '9') {
// This is a variant: fall through
} else {
set_script(subtags[1]);
break;
}
// fall through
case 5:
case 6:
case 7:
case 8:
set_variant(subtags[1]);
break;
default:
return -1;
}
} else if (subtags.length == 3) {
// The language is always the first subtag.
set_language(subtags[0]);
// The second subtag can either be a script or a region code.
// If its size is 4, it's a script code, else it's a region code.
if (subtags[1].length() == 4) {
set_script(subtags[1]);
} else if (subtags[1].length() == 2 || subtags[1].length() == 3) {
set_region(subtags[1]);
} else {
return -1;
}
// The third tag can either be a region code (if the second tag was
// a script), else a variant code.
if (subtags[2].length() >= 4) {
set_variant(subtags[2]);
} else {
set_region(subtags[2]);
}
} else if (subtags.length == 4) {
set_language(subtags[0]);
set_script(subtags[1]);
set_region(subtags[2]);
set_variant(subtags[3]);
} else {
return -1;
}
iter.next();
} else {
if ((part.length() == 2 || part.length() == 3) && is_alpha(part) &&
!Objects.equals(part, "car")) {
set_language(part);
iter.next();
if (iter.hasNext()) {
final String region_part = iter.peek();
if (region_part.charAt(0) == 'r' && region_part.length() == 3) {
set_region(region_part.substring(1));
iter.next();
}
}
}
}
return 0;
}