98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
// Metro module 5195 (f5196).
|
|
module.exports.parse = function(a0) {
|
|
let r15, r48, length3;
|
|
const r20 = /^(?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))$|^((?:[a-z]{2,3}(?:(?:-[a-z]{3}){1,3})?)|[a-z]{4}|[a-z]{5,8})(?:-([a-z]{4}))?(?:-([a-z]{2}|\d{3}))?((?:-(?:[\da-z]{5,8}|\d[\da-z]{3}))*)?((?:-[\da-wy-z](?:-[\da-z]{2,8})+)*)?(-x(?:-[\da-z]{1,8})+)?$|^(x(?:-[\da-z]{1,8})+)$/i.exec(a0);
|
|
if (r20) {
|
|
r20.shift();
|
|
let extlang = [];
|
|
const r23 = r20[2];
|
|
let language = null;
|
|
if (r23) {
|
|
const r26 = r20[2].split("-");
|
|
language = r26.shift();
|
|
extlang = r26;
|
|
}
|
|
let variant = [];
|
|
if (r20[5]) {
|
|
const r32 = r20[5].split("-");
|
|
r32.shift();
|
|
variant = r32;
|
|
}
|
|
const extension = [];
|
|
if (r20[6]) {
|
|
const r13 = r20[6].split("-");
|
|
r13.shift();
|
|
let r12 = [];
|
|
const length2 = r13.length;
|
|
let r42 = void 0;
|
|
let extension3 = r12;
|
|
let singleton = void 0;
|
|
if (length2) {
|
|
do {
|
|
const r45 = r13.shift();
|
|
const length = r45.length;
|
|
const extension2 = r12;
|
|
const singleton2 = r42;
|
|
if (length === 1) {
|
|
r15 = extension2;
|
|
r48 = r45;
|
|
if (singleton2) {
|
|
extension.push({
|
|
singleton: singleton2,
|
|
extension: extension2
|
|
});
|
|
r15 = [];
|
|
r48 = r45;
|
|
}
|
|
} else {
|
|
extension2.push(r45);
|
|
r15 = extension2;
|
|
r48 = singleton2;
|
|
}
|
|
length3 = r13.length;
|
|
r12 = r15;
|
|
r42 = r48;
|
|
extension3 = r12;
|
|
singleton = r42;
|
|
} while (length3);
|
|
}
|
|
extension.push({
|
|
singleton,
|
|
extension: extension3
|
|
});
|
|
}
|
|
let privateuse = [];
|
|
if (r20[7]) {
|
|
const r59 = r20[7].split("-");
|
|
r59.shift();
|
|
r59.shift();
|
|
privateuse = r59;
|
|
}
|
|
let privateuse2 = [];
|
|
if (r20[8]) {
|
|
const r69 = r20[8].split("-");
|
|
r69.shift();
|
|
privateuse2 = r69;
|
|
}
|
|
return {
|
|
langtag: {
|
|
language: {
|
|
language,
|
|
extlang
|
|
},
|
|
script: r20[3] || null,
|
|
region: r20[4] || null,
|
|
variant,
|
|
extension,
|
|
privateuse
|
|
},
|
|
privateuse: privateuse2,
|
|
grandfathered: {
|
|
irregular: r20[0] || null,
|
|
regular: r20[1] || null
|
|
}
|
|
};
|
|
}
|
|
return null;
|
|
};
|