130 lines
3.9 KiB
JavaScript
130 lines
3.9 KiB
JavaScript
import { Source, Example, NounTemplate, TemplateGroup, TemplateLibrary, Name, Person } from './classes'
|
|
import { buildDict, buildList } from './helpers';
|
|
import { parseTemplates, getTemplate } from './buildTemplate';
|
|
|
|
export const locales = {
|
|
en: { name: 'English', url: 'https://en.pronouns.page' },
|
|
pl: { name: 'Polski', url: 'https://zaimki.pl' },
|
|
de: { name: 'Deutsch', url: 'https://de.pronouns.page' },
|
|
nl: { name: 'Nederlands', url: 'https://nl.pronouns.page' },
|
|
}
|
|
|
|
import templatesRaw from '../data/templates.tsv';
|
|
export const templates = parseTemplates(templatesRaw);
|
|
|
|
import examplesRaw from '../data/examples.tsv';
|
|
export const examples = buildList(function* () {
|
|
for (let e of examplesRaw) {
|
|
yield new Example(
|
|
Example.parse(e.singular),
|
|
Example.parse(e.plural || e.singular),
|
|
e.isHonorific,
|
|
);
|
|
}
|
|
});
|
|
|
|
import sourcesRaw from '../data/sources.tsv';
|
|
export const sources = buildDict(function* () {
|
|
for (let s of sourcesRaw) {
|
|
yield [
|
|
s.key,
|
|
new Source(
|
|
s.type,
|
|
s.author,
|
|
s.title,
|
|
s.extra,
|
|
s.year,
|
|
s.fragments ? s.fragments.replace(/\|/g, '\n').split('@') : [],
|
|
s.comment,
|
|
s.link,
|
|
)
|
|
];
|
|
}
|
|
});
|
|
|
|
// TODO move to locale
|
|
export const sourcesForMultipleForms = {
|
|
'on&ona': ['genderneutralizacja', 'niebTlum', 'jurewicz', 'krolowaZimy', 'mlotThora', 'statekUmarlych', 'starWarsKoPo', 'luBart1'],
|
|
'ona&onu': ['liniaOporuMix'],
|
|
'ono/jego&ono/jej': ['kazmierczak'],
|
|
}
|
|
|
|
export const getSources = (selectedTemplate) => {
|
|
if (!selectedTemplate) {
|
|
return {};
|
|
}
|
|
|
|
let sources = {};
|
|
for (let multiple in sourcesForMultipleForms) {
|
|
if (sourcesForMultipleForms.hasOwnProperty(multiple)) {
|
|
if (multiple === selectedTemplate.canonicalName) {
|
|
sources[multiple] = sourcesForMultipleForms[multiple];
|
|
}
|
|
}
|
|
}
|
|
for (let option of selectedTemplate.nameOptions()) {
|
|
const template = getTemplate(templates, option);
|
|
if (template && template.sources.length) {
|
|
sources[option] = template.sources;
|
|
}
|
|
}
|
|
return sources;
|
|
}
|
|
|
|
import nounTemplatesRaw from '../data/nounTemplates.tsv';
|
|
export const nounTemplates = buildList(function* () {
|
|
for (let t of nounTemplatesRaw) {
|
|
yield new NounTemplate(
|
|
t.masc.replace(/-/g, '').split('/'),
|
|
t.fem.replace(/-/g, '').split('/'),
|
|
t.neutr.replace(/-/g, '').split('/'),
|
|
t.mascPl.replace(/-/g, '').split('/'),
|
|
t.femPl.replace(/-/g, '').split('/'),
|
|
t.neutrPl.replace(/-/g, '').split('/'),
|
|
);
|
|
}
|
|
});
|
|
|
|
import templateGroupsRaw from '../data/templateGroups.tsv';
|
|
export const templateGroups = buildList(function* () {
|
|
for (let g of templateGroupsRaw) {
|
|
yield new TemplateGroup(
|
|
g.name,
|
|
g.templates.split(','),
|
|
g.description,
|
|
);
|
|
}
|
|
});
|
|
|
|
export const templateLibrary = new TemplateLibrary(templateGroups, templates);
|
|
|
|
import namesRaw from '../data/names.tsv';
|
|
export const names = buildDict(function* () {
|
|
for (let n of namesRaw) {
|
|
yield [n.name, new Name(
|
|
n.name,
|
|
n.origin,
|
|
n.meaning,
|
|
n.usage,
|
|
n.legally,
|
|
n.pros ? n.pros.split(',') : [],
|
|
n.cons ? n.cons.split(',') : [],
|
|
n.notablePeople ? n.notablePeople.split(',') : [],
|
|
n.count,
|
|
n.links ? n.links.split(' ') : [],
|
|
)];
|
|
}
|
|
});
|
|
|
|
import peopleRaw from '../data/people.tsv';
|
|
export const people = buildList(function* () {
|
|
for (let p of peopleRaw) {
|
|
yield new Person(
|
|
p.name,
|
|
p.description,
|
|
p.pronouns.split(','),
|
|
p.sources ? p.sources.split(',') : [],
|
|
);
|
|
}
|
|
});
|