mui-language-picker
Version:
Material UI language picker
116 lines (115 loc) • 4.63 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRtl = exports.getLangTag = exports.getFamily = exports.displayFamily = exports.fontMap = exports.scriptName = exports.getScripts = exports.getPart = exports.hasPart = exports.getExact = exports.hasExact = exports.langTags = void 0;
var langtags_json_1 = __importDefault(require("./data/langtags.json"));
var tagIndex_1 = __importDefault(require("./data/tagIndex"));
var langtagsIndex_1 = __importDefault(require("./data/langtagsIndex"));
var scriptFontIndex_1 = __importDefault(require("./data/scriptFontIndex"));
var codeScripts_1 = __importDefault(require("./data/codeScripts"));
var scriptName_1 = __importDefault(require("./data/scriptName"));
var families_json_1 = __importDefault(require("./data/families.json"));
var bcp47_1 = require("./bcp47");
var rtlScripts_1 = __importDefault(require("./data/rtlScripts"));
exports.langTags = langtags_json_1.default;
exports.langTags.push({
full: 'qaa',
iso639_3: 'qaa',
localname: 'Unknown',
name: 'Unknown',
regionname: 'anywhere',
script: 'Latn',
sldr: false,
tag: 'qaa',
});
var tagIndex = new Map(tagIndex_1.default);
var hasExact = function (tag) { return tagIndex.has(tag.toLowerCase()); };
exports.hasExact = hasExact;
var getExact = function (tag) {
var index = tagIndex.get(tag.toLowerCase());
if (!index)
return undefined;
return exports.langTags[index];
};
exports.getExact = getExact;
var tokenIndex = new Map(langtagsIndex_1.default);
var hasPart = function (tag) {
return tokenIndex.has(tag.slice(0, 2).toLowerCase());
};
exports.hasPart = hasPart;
var getPart = function (tag, limit, start) {
var _a;
var indexes = tokenIndex.get(tag.slice(0, 2).toLowerCase());
if (!indexes)
return undefined;
if (start) {
var find = indexes.indexOf(start);
if (find !== -1)
indexes = indexes.slice(find);
}
var count = 0;
var result = [];
for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {
var index = indexes_1[_i];
if ((_a = exports.langTags[index]) === null || _a === void 0 ? void 0 : _a.tag) {
if (limit && count > limit)
return { result: result, index: index };
var element = exports.langTags[index];
var re = new RegExp(tag, 'i');
if (re.test(JSON.stringify(element))) {
result.push(exports.langTags[index]);
count++;
}
}
}
return { result: result, index: -1 };
};
exports.getPart = getPart;
var scriptMap = new Map(codeScripts_1.default);
var getScripts = function (code) { var _a; return (_a = scriptMap.get(code)) !== null && _a !== void 0 ? _a : []; };
exports.getScripts = getScripts;
exports.scriptName = new Map(scriptName_1.default);
exports.fontMap = new Map(scriptFontIndex_1.default);
var families = families_json_1.default;
var displayFamily = function (familyId) { var _a, _b; return (_b = (_a = families[familyId]) === null || _a === void 0 ? void 0 : _a.family) !== null && _b !== void 0 ? _b : familyId; };
exports.displayFamily = displayFamily;
var getFamily = function (familyId) { return families[familyId]; };
exports.getFamily = getFamily;
var getLangTag = function (tag) {
if (!tag)
return undefined;
// put exact code match at the top of the list
if ((0, exports.hasExact)(tag)) {
var langTag = (0, exports.getExact)(tag);
if (langTag)
return langTag;
}
// check for a short tag match
if ((0, bcp47_1.bcp47Match)(tag)) {
var lastDash = tag.lastIndexOf('-');
while (lastDash > 0) {
var shortTag = tag.slice(0, lastDash);
if ((0, exports.hasExact)(shortTag)) {
var langTag = (0, exports.getExact)(shortTag);
if (langTag) {
return langTag;
}
}
else {
lastDash = shortTag.lastIndexOf('-');
}
}
}
};
exports.getLangTag = getLangTag;
var getRtl = function (tag) {
if (!tag || tag.indexOf('fonipa') !== -1)
return false;
var langTag = (0, exports.getLangTag)(tag);
if (langTag)
return rtlScripts_1.default.includes(langTag.script);
return false;
};
exports.getRtl = getRtl;