diff --git a/package.json b/package.json index cf43949..0779662 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@formkit/auto-animate": "^1.0.0-beta.1", "@fortawesome/fontawesome-free": "^5.15.4", "@lingdocs/lingdocs-main": "^0.3.1", - "@lingdocs/pashto-inflector": "^3.1.6", + "@lingdocs/pashto-inflector": "^3.1.8", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", diff --git a/src/components/BasicVerbShowCase.tsx b/src/components/BasicVerbShowCase.tsx index 99ad4c7..0880d83 100644 --- a/src/components/BasicVerbShowCase.tsx +++ b/src/components/BasicVerbShowCase.tsx @@ -9,17 +9,20 @@ import { getEnglishVerb, InlinePs, removeFVarients, + isPastTense, } from "@lingdocs/pashto-inflector"; import { isImperativeTense } from "@lingdocs/pashto-inflector/dist/lib/type-predicates"; import { useState } from "react"; import Carousel from "./Carousel"; -import { basicVerbs } from "../content/verbs/basic-present-verbs"; +import { basicVerbs, intransitivePast } from "../content/verbs/basic-present-verbs"; +import { getLength } from "@lingdocs/pashto-inflector/dist/lib/p-text-helpers"; function BasicVerbShowCase({ opts, tense }: { opts: T.TextOptions, tense: T.VerbTense | T.ImperativeTense, }) { - return { + const items = isPastTense(tense) ? intransitivePast : basicVerbs; + return { return { title: {{ ...removeFVarients(item.entry), @@ -42,13 +45,14 @@ function BasicVerbChart({ verb, opts, tense }: { tense: T.VerbTense | T.ImperativeTense, }) { const [negative, setNegative] = useState(false); + const [length, setLength] = useState<"short" | "long">("short"); const c = conjugateVerb(verb.entry, verb.complement); const conjugations = "stative" in c ? c.stative : "grammaticallyTransitive" in c ? c.grammaticallyTransitive : c; - const phrasesForTable = makeExamplePhrases(verb, tense, negative) + const phrasesForTable = makeExamplePhrases(verb, tense, negative, length) return
{getEnglishVerb(verb.entry)} @@ -59,16 +63,29 @@ function BasicVerbChart({ verb, opts, tense }: { hidePastParticiple={true} highlighted={[tenseToStem(tense)]} /> -
- setNegative(value === "true")} - value={String(negative)} +
+ {isPastTense(tense) &&
+ + /> +
} +
+ setNegative(value === "true")} + value={String(negative)} + small + options={[ + { value: "true", label: "Neg." }, + { value: "false", label: "Pos." }, + ]} + /> +
} -function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.ImperativeTense, negative: boolean): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } { +function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.ImperativeTense, negative: boolean, length: "short" | "long"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } { function makeSelection(person: T.Person): T.VPSelectionComplete{ return { "blocks": [ @@ -111,13 +128,13 @@ function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.Imperative function makePhrase(person: T.Person): { ps: T.ArrayOneOrMore, e: string } { const selection = makeSelection(person); const rendered = renderVP(selection); - const compiled = compileVP(rendered, rendered.form, true); + const compiled = compileVP(rendered, rendered.form); return { - ps: [modifyP(compiled.ps[0])], + ps: [modifyP(getLength(compiled.ps, length)[0])], e: compiled.e ? modifyEnglish(compiled.e.join(" • ")) : "", }; } - return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : "nonImperative"); + return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : isPastTense(tense) ? "past" : "nonImperative"); } function modifyP(ps: T.PsString): T.PsString { @@ -160,7 +177,7 @@ function tenseToStem(t: T.VerbTense | T.ImperativeTense): "imperfective stem" | : "perfective root"; } -function createVerbTable(f: (person: T.Person) => { ps: T.ArrayOneOrMore, e: string }, type: "imperative" | "nonImperative"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } { +function createVerbTable(f: (person: T.Person) => { ps: T.ArrayOneOrMore, e: string }, type: "imperative" | "nonImperative" | "past"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } { if (type === "imperative") { const b = [ [f(2), f(8)], @@ -180,7 +197,6 @@ function createVerbTable(f: (person: T.Person) => { ps: T.ArrayOneOrMore ({ entry })); + +// @ts-ignore +export const intransitivePast: T.VerbEntry[] = [ + {"ts":1527813573,"i":6809,"p":"رسېدل","f":"rasedul","g":"rasedul","e":"arrive, reached; (fig.) understand, attain to; mature, ripen","c":"v. intrans.","shortIntrans":true,"ec":"arrive"}, + {"ts":1527812645,"i":10822,"p":"ګرځېدل","f":"gurdzedul","g":"gurdzedul","e":"to walk, wander, turn about; to become, to be","c":"v. intrans.","shortIntrans":true,"ec":"walk"}, + {"ts":1527816495,"i":3470,"p":"تښتېدل","f":"tuxtedul","g":"tuxtedul","e":"to run off, escape, flee","c":"v. intrans.","shortIntrans":true,"ec":"escape"}, + {"ts":1527813680,"i":9218,"p":"غږېدل","f":"ghuGedul, ghaGedul","g":"ghugedul,ghagedul","e":"to speak, talk, converse, sing","c":"v. intrans.","ec":"speak,speaks,speaking,spoke"}, ].map(entry => ({ entry })); \ No newline at end of file diff --git a/src/content/verbs/past-verbs.mdx b/src/content/verbs/past-verbs.mdx index 842eb9a..50d99e1 100644 --- a/src/content/verbs/past-verbs.mdx +++ b/src/content/verbs/past-verbs.mdx @@ -55,13 +55,25 @@ Then, we will see **what really trips people up** when learning Pashto is that < **First we'll introduce the two forms (simple and continuous past) using intransitive verbs**, and then later we'll see how things change when we use transitive verbs. Let's go! -## Simple Past +## Past tense with intransitive verbs -IN PROGRESS +### Simple Past -## Continuous Past + + Perfective root +{` `} + Past verb ending + -IN PROGRESS + + +### Continuous Past + + + Imperfective root +{` `} + Past verb ending + + + ## Past Tense with Transitive Verbs diff --git a/yarn.lock b/yarn.lock index a30576b..1aeab59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1695,10 +1695,10 @@ rambda "^6.7.0" react-select "^5.2.2" -"@lingdocs/pashto-inflector@^3.1.6": - version "3.1.6" - resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-3.1.6.tgz#9e74cfca62fac868e037219236e1ba6d6c851054" - integrity sha512-FwLI8bHfELRn3UlZKdUQCx0jSbnivjcZUmcXxPXth4U0Xw2VpunNj7F/yrKZkxM2b384A1fIjOVxXbXFB8ZadQ== +"@lingdocs/pashto-inflector@^3.1.8": + version "3.1.8" + resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-3.1.8.tgz#2601f186430862e6cd0fa936c0266fc99da7808e" + integrity sha512-+K8vkbZbH+4X8Qfj7eDyHz7IP8G6wqZspoQkEwWkuskF3O9g+WEmbAVvG3X0mkHTj62bnq96tYAFtHIW/5fRBg== dependencies: "@formkit/auto-animate" "^1.0.0-beta.1" classnames "^2.2.6"