SamuelGalaxys's picture
Upload 1921 files
e4a10af
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const FS = require("fs");
const iconv_corefoundation_1 = require("iconv-corefoundation");
const Path = require("path");
const util_1 = require("./util");
class NoSuchLanguageError extends Error {
constructor(lang) {
super(`No known languages found for specification ${Array.isArray(lang) ? `[${lang.join(", ")}]` : lang}.`);
this.lang = lang;
}
}
exports.NoSuchLanguageError = NoSuchLanguageError;
NoSuchLanguageError.prototype.name = NoSuchLanguageError.name;
class Language {
static add(lang) {
Language.byID[lang.languageID] = lang;
for (const tag of lang.langTags)
Language.byTag[tag.toLowerCase()] = lang;
}
static bySpec(lang, context) {
const langs = [];
for (const specLang of util_1.arrayify(lang)) {
const lang = typeof specLang === "number"
? Language.byID[specLang]
: Language.byTag[specLang.toLowerCase()];
if (lang)
langs.push(lang);
else if (context && context.canWarn)
context.warning(new NoSuchLanguageError(specLang));
}
if (langs.length)
return langs;
else
throw new NoSuchLanguageError(lang);
}
toString() {
return `${this.englishName} (language ${this.languageID}${this.langTags.length === 0 ? "" : `; ${this.langTags.join(", ")}`})`;
}
}
Language.byTag = {};
Language.byID = [];
exports.Language = Language;
exports.default = Language;
{
const langJSON = JSON.parse(FS.readFileSync(Path.resolve(__dirname, "..", "language-info.json"), { encoding: "utf8" }));
const labelsByName = {};
for (const labelsName in langJSON.labels)
labelsByName[labelsName] = langJSON.labels[labelsName];
const charsetCache = new Map();
for (const idStr in langJSON.languages) {
const rawLang = langJSON.languages[idStr];
const entry = new class extends Language {
constructor() {
super(...arguments);
this.charset = (() => {
let charset = charsetCache.get(rawLang.charset);
if (!charset) {
charset = iconv_corefoundation_1.StringEncoding.byIANACharSetName(rawLang.charset);
charsetCache.set(rawLang.charset, charset);
}
return charset;
})();
this.doubleByteCharset = rawLang.doubleByteCharset || false;
this.englishName = rawLang.englishName;
this.labels = rawLang.labels ? labelsByName[rawLang.labels] : undefined;
this.languageID = Number(idStr);
this.langTags = rawLang.langTags;
this.localizedName = rawLang.localizedName;
}
}();
Language.add(entry);
}
}
function indexByLanguage(objects, { filter, map, onCollisions } = {}) {
const result = new Map();
const seen = new Set();
const collisions = onCollisions && new Set();
for (const object of objects)
if (!filter || filter(object))
for (const lang of Language.bySpec(object.lang)) {
const { languageID } = lang;
if (seen.has(languageID)) {
if (collisions)
collisions.add(languageID);
}
else {
seen.add(languageID);
const mapped = map ? map(object, lang) : object;
if (mapped !== undefined)
result.set(lang.languageID, mapped);
}
}
if (collisions && collisions.size)
onCollisions(collisions);
return result;
}
exports.indexByLanguage = indexByLanguage;
//# sourceMappingURL=Language.js.map