@zsnout/ithkuil
Version:
A set of tools which can generate and parse romanized Ithkuil text and which can generate Ithkuil script from text and JSON data.
65 lines (64 loc) • 2.43 kB
JavaScript
import { deepFreeze } from "../helpers/deep-freeze.js";
import { fillDefaults } from "../helpers/fill-defaults.js";
/** The default referential (1m:NEU, M, THM, NRM). */
export const DEFAULT_REFERENTIAL =
/* @__PURE__ */ deepFreeze({
referents: ["1m:NEU"],
perspective: "M",
case: "THM",
essence: "NRM",
});
/** The default suppletive referential (CAR, THM, NRM). */
export const DEFAULT_SUPPLETIVE_REFERENTIAL =
/* @__PURE__ */ deepFreeze({
type: "CAR",
case: "THM",
essence: "NRM",
});
/**
* Fills default values into empty slots of a referential/
*
* @param referential The referential to be filled.
* @returns A complete referential, with all default slots filled.
*/
export function fillInDefaultReferentialSlots(referential) {
if (referential.perspective2 || referential.referents2) {
if (referential.specification ||
(referential.affixes && referential.affixes.length)) {
throw new Error("A referential cannot specify a second referent/perspective and a specification or affix at the same time.", { cause: referential });
}
return referential.type ?
fillDefaults({
...DEFAULT_SUPPLETIVE_REFERENTIAL,
perspective2: "M",
// @ts-ignore
referents2: "1m:NEU",
}, referential)
: fillDefaults({
...DEFAULT_REFERENTIAL,
perspective2: "M",
// @ts-ignore
referents2: "1m:NEU",
}, referential);
}
if (referential.specification ||
(referential.affixes && referential.affixes.length)) {
if (referential.perspective2 || referential.referents2) {
throw new Error("A referential cannot specify a second referent/perspective and a specification or affix at the same time.", { cause: referential });
}
return referential.type ?
fillDefaults({
...DEFAULT_SUPPLETIVE_REFERENTIAL,
specification: "BSC",
affixes: [],
}, referential)
: fillDefaults({
...DEFAULT_REFERENTIAL,
specification: "BSC",
affixes: [],
}, referential);
}
return referential.type ?
fillDefaults(DEFAULT_SUPPLETIVE_REFERENTIAL, referential)
: fillDefaults(DEFAULT_REFERENTIAL, referential);
}