66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
import {MORPHEMES, Template} from "./classes";
|
|
import Compressor from "./compressor";
|
|
import {buildDict} from "./helpers";
|
|
|
|
export const addAliasesToTemplates = (templates) => {
|
|
const templatesWithAliases = {}
|
|
for (let base in templates) {
|
|
if (templates.hasOwnProperty(base)) {
|
|
const template = templates[base];
|
|
templatesWithAliases[base] = template;
|
|
for (let alias of template.aliases) {
|
|
templatesWithAliases[alias] = template;
|
|
}
|
|
}
|
|
}
|
|
return templatesWithAliases;
|
|
}
|
|
|
|
export const getTemplate = (templates, id) => {
|
|
return addAliasesToTemplates(templates)[id];
|
|
}
|
|
|
|
export const buildTemplate = (templates, path) => {
|
|
const templatesWithAliases = addAliasesToTemplates(templates);
|
|
|
|
const templateStr = path.split(',');
|
|
|
|
let base = null;
|
|
for (let option of templateStr[0].split('&')) {
|
|
if (!base) {
|
|
base = templatesWithAliases[option]
|
|
} else {
|
|
base = base.merge(templatesWithAliases[option])
|
|
}
|
|
}
|
|
|
|
return templateStr.length === 1
|
|
? base
|
|
: Template.from(Compressor.uncompress(templateStr, base ? base.toArray() : null));
|
|
}
|
|
|
|
export const parseTemplates = (templatesRaw) => {
|
|
return buildDict(function* () {
|
|
for (let t of templatesRaw) {
|
|
const aliases = t.key.split(',');
|
|
|
|
yield [
|
|
aliases[0],
|
|
new Template(
|
|
t.description,
|
|
buildDict(function* () {
|
|
for (let morpheme of MORPHEMES) {
|
|
yield [morpheme, t[morpheme]];
|
|
}
|
|
}),
|
|
t.plural,
|
|
t.pluralHonorific,
|
|
t.sources ? t.sources.split(',') : [],
|
|
aliases.slice(1),
|
|
t.history,
|
|
)
|
|
];
|
|
}
|
|
});
|
|
}
|