diff --git a/package.json b/package.json
index 13a7213..7050468 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@lingdocs/pashto-inflector",
- "version": "2.8.2",
+ "version": "2.8.3",
"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/components/blocks/Block.tsx b/src/components/blocks/Block.tsx
index 4c9f061..fbf421f 100644
--- a/src/components/blocks/Block.tsx
+++ b/src/components/blocks/Block.tsx
@@ -21,7 +21,7 @@ function Block({ opts, block }: {
if (block.type === "predicateSelection") {
const english = getEnglishFromRendered(block.selection);
return
-
Pred
+
Predicate
{block.selection.type === "EQComp"
?
:
{block.selection}}
@@ -49,12 +49,8 @@ function NUBlock({ opts }: {
>
nu
- not
+ Neg.
+ not
;
}
@@ -73,6 +69,8 @@ function EquativeBlock({ opts, eq }: {
>
{"short" in eq.ps ? eq.ps.short[0].f : eq.ps[0].f}
+ Equative
+ {"="}
;
}
@@ -82,7 +80,7 @@ function SubjectBlock({ opts, np }: {
}) {
const english = getEnglishFromRendered(np);
return ;
}
@@ -107,12 +105,7 @@ function EqCompBlock({ opts, comp }: {
{adj.ps[0].f}
Adj.
- {adj.e && {adj.e}
}
+ {adj.e}
;
}
@@ -132,16 +125,11 @@ function EqCompBlock({ opts, comp }: {
{adv.ps[0].f}
Loc. Adv.
- {adv.e && {adv.e}
}
+ {adv.e}
;
}
- return
+ return
Comp.
{comp.type === "adjective"
?
@@ -150,6 +138,7 @@ function EqCompBlock({ opts, comp }: {
:
}
;
}
@@ -184,12 +173,7 @@ export function APBlock({ opts, children, english }: {
return
AP
- {english &&
{english}
}
+
{english}
;
}
@@ -226,7 +210,7 @@ export function NPBlock({ opts, children, inside, english }: {
english?: string,
}) {
const np = children;
- const hasPossesor = !!(np.selection.type !== "pronoun" && np.selection.possesor);
+ const hasPossesor = !!(np.selection.type !== "pronoun" && np.selection.possesor && !np.selection.possesor.shrunken);
return
NP
- {english &&
{english}
}
+
{english}
}
@@ -257,6 +236,9 @@ function Possesors({ opts, children }: {
if (!children) {
return null;
}
+ if (children.shrunken) {
+ return null;
+ }
const contraction = checkForContraction(children.np);
return a.ps[0].f).join(" ")}{` `}
}
+
+function EnglishBelow({ children: e }: { children: string | undefined }) {
+ return
{e ? e : ""}
;
+}
diff --git a/src/components/blocks/KidDisplay.tsx b/src/components/blocks/KidDisplay.tsx
new file mode 100644
index 0000000..7d31dce
--- /dev/null
+++ b/src/components/blocks/KidDisplay.tsx
@@ -0,0 +1,16 @@
+import { baParticle } from "../../lib/grammar-units";
+import * as T from "../../types";
+import Phonetics from "../Phonetics";
+
+function KidDisplay({ opts, kid }: {
+ opts: T.TextOptions,
+ kid: T.Kid,
+}) {
+ return
+ {kid.type === "ba"
+ ?
{baParticle}
+ :
{kid.ps}}
+
+}
+
+export default KidDisplay;
\ No newline at end of file
diff --git a/src/components/ep-explorer/EPBlocksDisplay.tsx b/src/components/ep-explorer/EPBlocksDisplay.tsx
index 42fab10..5233fe7 100644
--- a/src/components/ep-explorer/EPBlocksDisplay.tsx
+++ b/src/components/ep-explorer/EPBlocksDisplay.tsx
@@ -1,18 +1,41 @@
import * as T from "../../types";
import Block from "../blocks/Block";
+import KidDisplay from "../blocks/KidDisplay";
-function EPBlocksDisplay({ opts, rendered }: { opts: T.TextOptions, rendered: T.EPRendered }) {
+function EPBlocksDisplay({ opts, rendered }: {
+ opts: T.TextOptions,
+ rendered: T.EPRendered,
+}) {
const blocks = rendered.omitSubject
? rendered.blocks.filter(b => b.type !== "subjectSelection")
: rendered.blocks;
-
- return
- {blocks.map((block, i) => (
+ return
+
;
+
+ {blocks.slice(1).map((block, i) => (
+
+
+
+ ))}
+
+
+}
+
+function KidsSection({ opts, kids }: {
+ opts: T.TextOptions,
+ kids: T.Kid[],
+}) {
+ return kids.length > 0 ?
+
+ {kids.map(kid => (
+
+ ))}
+
+
kids
+
: null;
}
export default EPBlocksDisplay;
\ No newline at end of file
diff --git a/src/components/ep-explorer/EPDisplay.tsx b/src/components/ep-explorer/EPDisplay.tsx
index c7126bf..b5fe94b 100644
--- a/src/components/ep-explorer/EPDisplay.tsx
+++ b/src/components/ep-explorer/EPDisplay.tsx
@@ -8,12 +8,14 @@ import EPTextDisplay from "./EPTextDisplay";
import EPBlocksDisplay from "./EPBlocksDisplay";
type Mode = "text" | "blocks";
+// BIG TODO: FIGRUE OUT A WAY TO HANDLE OMITING SUBJECT
+
function EPDisplay({ eps, opts, setOmitSubject }: {
eps: T.EPSelectionState,
opts: T.TextOptions,
setOmitSubject: (value: "true" | "false") => void,
}) {
- const [mode] = useState
("text");
+ const [mode, setMode] = useState("text");
const EP = completeEPSelection(eps);
const subject = getSubjectSelection(eps.blocks);
@@ -34,7 +36,7 @@ function EPDisplay({ eps, opts, setOmitSubject }: {
const renderedPredicate = getPredicateSelectionFromBlocks(rendered.blocks).selection;
return
- {/*
*/}
+
:
}
+ {result.e &&
+ {result.e.map((e, i) =>
{e}
)}
+
}
{EP.predicate.selection.selection.type === "participle" &&
⚠️ NOTE: This means that the subject {renderedSubject.selection.e ? `(${renderedSubject.selection.e})` : ""} is the action/idea of
{` `}
@@ -58,14 +63,14 @@ function EPDisplay({ eps, opts, setOmitSubject }: {
}
-// function ModeSelect({ value, onChange }: { value: Mode, onChange: (m: Mode) => void }) {
-// return
-// {value === "text" ?
onChange("blocks")}>
-//
-//
:
onChange("text")}>
-//
-//
}
-//
;
-// }
+function ModeSelect({ value, onChange }: { value: Mode, onChange: (m: Mode) => void }) {
+ return
+ {value === "text" ?
onChange("blocks")}>
+
+
:
onChange("text")}>
+
+
}
+
;
+}
export default EPDisplay;
\ No newline at end of file
diff --git a/src/components/ep-explorer/EPExplorer.tsx b/src/components/ep-explorer/EPExplorer.tsx
index dfb8379..6f9a3c0 100644
--- a/src/components/ep-explorer/EPExplorer.tsx
+++ b/src/components/ep-explorer/EPExplorer.tsx
@@ -38,7 +38,7 @@ function EPExplorer(props: {
entryFeeder: T.EntryFeeder,
}) {
const [mode, setMode] = useStickyState<"charts" | "phrases">("charts", "EPExplorerMode");
- const [eps, adjustEps] = useStickyReducer(epsReducer, blankEps, "EPState6", flashMessage);
+ const [eps, adjustEps] = useStickyReducer(epsReducer, blankEps, "EPState7", flashMessage);
const [alert, setAlert] = useState
(undefined);
const [showClipped, setShowClipped] = useState("");
const parent = useRef(null);
diff --git a/src/components/ep-explorer/EPTextDisplay.tsx b/src/components/ep-explorer/EPTextDisplay.tsx
index ee1f2bf..14ecff8 100644
--- a/src/components/ep-explorer/EPTextDisplay.tsx
+++ b/src/components/ep-explorer/EPTextDisplay.tsx
@@ -19,9 +19,6 @@ function EPTextDisplay({ compiled, opts }: { compiled: {
:
}
- {compiled.e &&
- {compiled.e.map((e, i) =>
{e}
)}
-
}
;
}
diff --git a/src/lib/phrase-building/compile.ts b/src/lib/phrase-building/compile.ts
index 433e793..b4e0cdc 100644
--- a/src/lib/phrase-building/compile.ts
+++ b/src/lib/phrase-building/compile.ts
@@ -263,23 +263,26 @@ function arrangeVerbWNegative(head: T.PsString | undefined, restRaw: T.PsString[
export function compileEP(EP: T.EPRendered): { ps: T.SingleOrLengthOpts, e?: string[] };
export function compileEP(EP: T.EPRendered, combineLengths: true, blankOut?: BlankoutOptions): { ps: T.PsString[], e?: string[] };
export function compileEP(EP: T.EPRendered, combineLengths?: boolean, blankOut?: BlankoutOptions): { ps: T.SingleOrLengthOpts, e?: string[] } {
- const psResult = compileEPPs(EP.blocks, EP.kids, blankOut);
+ const psResult = compileEPPs(EP.blocks, EP.kids, EP.omitSubject, blankOut);
return {
ps: combineLengths ? flattenLengths(psResult) : psResult,
e: compileEnglishEP(EP),
};
}
-function compileEPPs(blocks: T.Block[], kids: T.Kid[], blankOut?: BlankoutOptions): T.SingleOrLengthOpts {
+function compileEPPs(blocks: T.Block[], kids: T.Kid[], omitSubject: boolean, blankOut?: BlankoutOptions): T.SingleOrLengthOpts {
if (hasEquativeWithLengths(blocks)) {
return {
- long: compileEPPs(specifyEquativeLength(blocks, "long"), kids, blankOut) as T.PsString[],
- short: compileEPPs(specifyEquativeLength(blocks, "short"), kids, blankOut) as T.PsString[],
+ long: compileEPPs(specifyEquativeLength(blocks, "long"), kids, omitSubject, blankOut) as T.PsString[],
+ short: compileEPPs(specifyEquativeLength(blocks, "short"), kids, omitSubject, blankOut) as T.PsString[],
};
}
const subjectPerson = getSubjectSelectionFromBlocks(blocks)
.selection.selection.person;
- const blocksWKids = putKidsInKidsSection(blocks, kids);
+ const blocksWKids = putKidsInKidsSection(
+ omitSubject ? blocks.filter(b => b.type !== "subjectSelection") : blocks,
+ kids,
+ );
return removeDuplicates(combineIntoText(blocksWKids, subjectPerson));
}
diff --git a/src/lib/phrase-building/render-ep.ts b/src/lib/phrase-building/render-ep.ts
index 4faa18e..0e9c1b1 100644
--- a/src/lib/phrase-building/render-ep.ts
+++ b/src/lib/phrase-building/render-ep.ts
@@ -39,7 +39,7 @@ function getEPSBlocksAndKids(EP: T.EPSelectionComplete): { kids: T.Kid[], blocks
const commandingPerson = getPersonFromNP(commandingNP);
const equative: T.EquativeBlock = { type: "equative", equative: renderEquative(EP.equative, commandingPerson) };
const blocks: T.Block[] = [
- ...renderEPSBlocks(EP.omitSubject ? EP.blocks.filter(b => b.block.type !== "subjectSelection") : EP.blocks),
+ ...renderEPSBlocks(EP.blocks),
{
type: "predicateSelection",
selection: EP.predicate.selection.type === "NP"
@@ -122,19 +122,19 @@ function findPossesivesToShrink(blocks: (T.EPSBlockComplete | T.SubjectSelection
function findShrunkenPossInNP(NP: T.NPSelection): T.MiniPronoun[] {
if (NP.selection.type === "pronoun") return [];
if (!NP.selection.possesor) return [];
- if (NP.selection.type === "noun") {
- if (NP.selection.adjectives) {
- const { adjectives, ...rest } = NP.selection;
- return [
- // TODO: ability to find possesives shrinkage in sandwiches in adjectives
- // ...findShrunkenPossInAdjectives(adjectives),
- ...findShrunkenPossInNP({ type: "NP", selection: {
- ...rest,
- adjectives: [],
- }}),
- ];
- }
- }
+ // if (NP.selection.type === "noun") {
+ // if (NP.selection.adjectives) {
+ // const { adjectives, ...rest } = NP.selection;
+ // return [
+ // // TODO: ability to find possesives shrinkage in sandwiches in adjectives
+ // // ...findShrunkenPossInAdjectives(adjectives),
+ // ...findShrunkenPossInNP({ type: "NP", selection: {
+ // ...rest,
+ // adjectives: [],
+ // }}),
+ // ];
+ // }
+ // }
if (NP.selection.possesor.shrunken) {
const person = getPersonFromNP(NP.selection.possesor.np);
const miniP: T.MiniPronoun = {