UNPKG

@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.

194 lines (193 loc) 5.8 kB
import { deepFreeze } from "../../helpers/deep-freeze.js"; import {} from "./effect.js"; import {} from "./target.js"; /** An array containing all referents. */ export const ALL_REFERENTS = /* @__PURE__ */ deepFreeze([ "1m:NEU", "1m:BEN", "1m:DET", "2m:NEU", "2m:BEN", "2m:DET", "2p:NEU", "2p:BEN", "2p:DET", "ma:NEU", "ma:BEN", "ma:DET", "pa:NEU", "pa:BEN", "pa:DET", "mi:NEU", "mi:BEN", "mi:DET", "pi:NEU", "pi:BEN", "pi:DET", "Mx:NEU", "Mx:BEN", "Mx:DET", "Rdp:NEU", "Rdp:BEN", "Rdp:DET", "Obv:NEU", "Obv:BEN", "Obv:DET", "PVS:NEU", "PVS:BEN", "PVS:DET", ]); /** An object mapping referents into their Ithkuilic counterparts. */ export const REFERENT_TO_ITHKUIL_MAP = /* @__PURE__ */ deepFreeze({ /** The `false` branch is used in referentials and personal-reference roots. */ false: { "1m:NEU": "l", "1m:BEN": "r", "1m:DET": "ř", "2m:NEU": "s", "2m:BEN": "š", "2m:DET": "ž", "2p:NEU": "n", "2p:BEN": "t", "2p:DET": "d", "ma:NEU": "m", "ma:BEN": "p", "ma:DET": "b", "pa:NEU": "ň", "pa:BEN": "k", "pa:DET": "g", "mi:NEU": "z", "mi:BEN": "ţ", "mi:DET": "ḑ", "pi:NEU": "ż", "pi:BEN": "f", "pi:DET": "v", "Mx:NEU": "c", "Mx:BEN": "č", "Mx:DET": "j", "Rdp:NEU": "th", "Rdp:BEN": "ph", "Rdp:DET": "kh", "Obv:NEU": "ll", "Obv:BEN": "rr", "Obv:DET": "řř", "PVS:NEU": "mm", "PVS:BEN": "nn", "PVS:DET": "ňň", }, /** The `true` branch is used in referential affixes. */ true: { "1m:NEU": "l", "1m:BEN": "r", "1m:DET": "ř", "2m:NEU": "s", "2m:BEN": "š", "2m:DET": "ž", "2p:NEU": "n", "2p:BEN": "t", "2p:DET": "d", "ma:NEU": "m", "ma:BEN": "p", "ma:DET": "b", "pa:NEU": "ň", "pa:BEN": "k", "pa:DET": "g", "mi:NEU": "z", "mi:BEN": "ţ", "mi:DET": "ḑ", "pi:NEU": "ż", "pi:BEN": "f", "pi:DET": "v", "Mx:NEU": "c", "Mx:BEN": "č", "Mx:DET": "j", "Rdp:NEU": "th", "Rdp:BEN": "ph", "Rdp:DET": "kh", "Obv:NEU": "lç", "Obv:BEN": "rç", "Obv:DET": "řç", "PVS:NEU": "mç", "PVS:BEN": "nç", "PVS:DET": "ňç", }, }); /** * Converts a referent into Ithkuil. * * @param referent The referent to be converted. * @param isReferentialAffix Whether this referent is used in a referential * affix. * @returns Romanized Ithkuilic text representing the referent. */ export function referentToIthkuil(referent, isReferentialAffix) { return REFERENT_TO_ITHKUIL_MAP[`${isReferentialAffix}`][referent]; } /** An object mapping from referents to their referent objects. */ export const REFERENT_TO_REFERENT_OBJECT_MAP = /* @__PURE__ */ deepFreeze({ "1m:NEU": { target: "1m", effect: "NEU" }, "1m:BEN": { target: "1m", effect: "BEN" }, "1m:DET": { target: "1m", effect: "DET" }, "2m:NEU": { target: "2m", effect: "NEU" }, "2m:BEN": { target: "2m", effect: "BEN" }, "2m:DET": { target: "2m", effect: "DET" }, "2p:NEU": { target: "2p", effect: "NEU" }, "2p:BEN": { target: "2p", effect: "BEN" }, "2p:DET": { target: "2p", effect: "DET" }, "ma:NEU": { target: "ma", effect: "NEU" }, "ma:BEN": { target: "ma", effect: "BEN" }, "ma:DET": { target: "ma", effect: "DET" }, "pa:NEU": { target: "pa", effect: "NEU" }, "pa:BEN": { target: "pa", effect: "BEN" }, "pa:DET": { target: "pa", effect: "DET" }, "mi:NEU": { target: "mi", effect: "NEU" }, "mi:BEN": { target: "mi", effect: "BEN" }, "mi:DET": { target: "mi", effect: "DET" }, "pi:NEU": { target: "pi", effect: "NEU" }, "pi:BEN": { target: "pi", effect: "BEN" }, "pi:DET": { target: "pi", effect: "DET" }, "Mx:NEU": { target: "Mx", effect: "NEU" }, "Mx:BEN": { target: "Mx", effect: "BEN" }, "Mx:DET": { target: "Mx", effect: "DET" }, "Rdp:NEU": { target: "Rdp", effect: "NEU" }, "Rdp:BEN": { target: "Rdp", effect: "BEN" }, "Rdp:DET": { target: "Rdp", effect: "DET" }, "Obv:NEU": { target: "Obv", effect: "NEU" }, "Obv:BEN": { target: "Obv", effect: "BEN" }, "Obv:DET": { target: "Obv", effect: "DET" }, "PVS:NEU": { target: "PVS", effect: "NEU" }, "PVS:BEN": { target: "PVS", effect: "BEN" }, "PVS:DET": { target: "PVS", effect: "DET" }, }); /** An object mapping from referent targets to their names. */ export const REFERENT_TARGET_TO_NAME_MAP = /* @__PURE__ */ deepFreeze({ "1m": "Speaker", "2m": "Monadic Addressee", "2p": "Polyadic Addressee", ma: "Animate Third Party", pa: "Animate Third Parties", mi: "Inanimate Third Party", pi: "Inanimate Third Parties", Mx: "Mixed Third Parties", Rdp: "Reduplicative", Obv: "Obviative", PVS: "Provisional", }); /** * Deconstructs an referent into its separate components. * * @param referent The referent to be deconstructed. * @returns An object containing the effect and target of the original referent. */ export function referentToReferentObject(referent) { return REFERENT_TO_REFERENT_OBJECT_MAP[referent]; } /** * Reconstructs a referent object into a single referent. * * @param referentObject The referent to be reconstructed. * @returns A string representing the effect and target of the object. */ export function referentObjectToReferent(referentObject) { return `${referentObject.target}:${referentObject.effect}`; }