/
remove_likely_subtags.js
58 lines (54 loc) · 1.47 KB
/
remove_likely_subtags.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import coreLikelySubtags from "./likely_subtags";
import arraySome from "../util/array/some";
/**
* Given a locale, remove any fields that Add Likely Subtags would add.
* http://www.unicode.org/reports/tr35/#Likely_Subtags
* 1. First get max = AddLikelySubtags(inputLocale). If an error is signaled,
* return it.
* 2. Remove the variants from max.
* 3. Then for trial in {language, language _ region, language _ script}. If
* AddLikelySubtags(trial) = max, then return trial + variants.
* 4. If you do not get a match, return max + variants.
*
* @maxLanguageId [Array] maxLanguageId tuple (see init.js).
*/
export default function(Cldr, cldr, maxLanguageId) {
var match,
matchFound,
language = maxLanguageId[0],
script = maxLanguageId[1],
territory = maxLanguageId[2],
variants = maxLanguageId[3];
// [3]
matchFound = arraySome(
[
[[language, "Zzzz", "ZZ"], [language]],
[
[language, "Zzzz", territory],
[language, territory]
],
[
[language, script, "ZZ"],
[language, script]
]
],
function(test) {
var result = coreLikelySubtags(Cldr, cldr, test[0]);
match = test[1];
return (
result &&
result[0] === maxLanguageId[0] &&
result[1] === maxLanguageId[1] &&
result[2] === maxLanguageId[2]
);
}
);
if (matchFound) {
if (variants) {
match.push(variants);
}
return match;
}
// [4]
return maxLanguageId;
}