This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Zaimki/src/buildTemplate.js

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,
)
];
}
});
}