From 21a0efdd8a3dab57a37fce1041f21137348364e9 Mon Sep 17 00:00:00 2001 From: lingdocs <71590811+lingdocs@users.noreply.github.com> Date: Tue, 23 Aug 2022 17:25:31 +0400 Subject: [PATCH] more --- package.json | 2 +- src/lib/phrase-building/blocks-utils.ts | 28 +++++++++++++++++++++++++ src/lib/phrase-building/compile.ts | 15 +++++++------ src/types.ts | 7 +++++++ 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 887367b..235e916 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lingdocs/pashto-inflector", - "version": "3.7.5", + "version": "3.7.6", "author": "lingdocs.com", "description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations", "homepage": "https://verbs.lingdocs.com", diff --git a/src/lib/phrase-building/blocks-utils.ts b/src/lib/phrase-building/blocks-utils.ts index 7c069f4..fbd4baa 100644 --- a/src/lib/phrase-building/blocks-utils.ts +++ b/src/lib/phrase-building/blocks-utils.ts @@ -1,6 +1,34 @@ import * as T from "../../types"; import { getLength } from "../p-text-helpers"; +export function isRenderedVerbB(block: T.Block["block"]): block is T.RenderedVerbB { + if (block.type === "modalVerbBlock") { + return true; + } + if (block.type === "modalVerbKedulPart") { + return true; + } + if (block.type === "perfectEquativeBlock") { + return true; + } + if (block.type === "perfectParticipleBlock") { + return true; + } + if (block.type === "perfectiveHead") { + return true; + } + if (block.type === "verb") { + return true; + } + return false; +} + +export function getVerbBlocks(blocks: T.Block[][]): T.RenderedVerbB[] { + return blocks[0] + .filter(b => isRenderedVerbB(b.block)) + .map(b => b.block) as T.RenderedVerbB[]; +} + export function makeBlock(block: T.Block["block"], key?: number): T.Block { return { key: key === undefined ? Math.random() : key, diff --git a/src/lib/phrase-building/compile.ts b/src/lib/phrase-building/compile.ts index 5327058..09d649a 100644 --- a/src/lib/phrase-building/compile.ts +++ b/src/lib/phrase-building/compile.ts @@ -29,7 +29,7 @@ const blank: T.PsString = { p: "_____", f: "_____", }; -type BlankoutOptions = { equative?: boolean, ba?: boolean, kidsSection?: boolean }; +type BlankoutOptions = { equative?: boolean, ba?: boolean, kidsSection?: boolean, verb?: boolean }; const kidsBlank: T.PsString = { p: "___", f: "___" }; @@ -70,10 +70,10 @@ export function compileEP(EP: T.EPRendered, combineLengths?: boolean, blankOut?: } export function compileVP(VP: T.VPRendered, form: T.FormVersion): { ps: T.SingleOrLengthOpts, e?: string [] }; -export function compileVP(VP: T.VPRendered, form: T.FormVersion, combineLengths: true): { ps: T.PsString[], e?: string [] }; -export function compileVP(VP: T.VPRendered, form: T.FormVersion, combineLengths?: true): { ps: T.SingleOrLengthOpts, e?: string [] } { +export function compileVP(VP: T.VPRendered, form: T.FormVersion, combineLengths: true, blankOut?: "verb"): { ps: T.PsString[], e?: string [] }; +export function compileVP(VP: T.VPRendered, form: T.FormVersion, combineLengths?: true, blankOut?: "verb"): { ps: T.SingleOrLengthOpts, e?: string [] } { const verb = getVerbFromBlocks(VP.blocks).block; - const psResult = compileVPPs(VP.blocks, VP.kids, form, VP.king); + const psResult = compileVPPs(VP.blocks, VP.kids, form, VP.king, blankOut); return { ps: combineLengths ? flattenLengths(psResult) : psResult, // TODO: English doesn't quite work for dynamic compounds in passive voice @@ -81,7 +81,7 @@ export function compileVP(VP: T.VPRendered, form: T.FormVersion, combineLengths? }; } -function compileVPPs(blocks: T.Block[][], kids: T.Kid[], form: T.FormVersion, king: "subject" | "object"): T.SingleOrLengthOpts { +function compileVPPs(blocks: T.Block[][], kids: T.Kid[], form: T.FormVersion, king: "subject" | "object", blankOut?: "verb"): T.SingleOrLengthOpts { const lengthyBlock = getLengthyFromBlocks(blocks); const potentialLengthy = lengthyBlock?.type === "verb" ? lengthyBlock.block.ps @@ -102,7 +102,10 @@ function compileVPPs(blocks: T.Block[][], kids: T.Kid[], form: T.FormVersion, ki kids, false, ); - return removeDuplicates(combineIntoText(blocksWKids, subjectPerson, {})); + return removeDuplicates(combineIntoText(blocksWKids, subjectPerson, { + ba: blankOut === "verb", + verb: blankOut === "verb", + })); } function compileEPPs(blocks: T.Block[][], kids: T.Kid[], omitSubject: boolean, blankOut?: BlankoutOptions): T.SingleOrLengthOpts { diff --git a/src/types.ts b/src/types.ts index 59e37de..a5d26e5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -970,6 +970,13 @@ export type Block = { | EquativeBlock; } +export type RenderedVerbB = VerbRenderedBlock + | PerfectiveHeadBlock + | ModalVerbBlock + | ModalVerbKedulPart + | PerfectEquativeBlock + | PerfectParticipleBlock; + export type Kid = { key: number, kid: | { type: "ba" }