starting on ability
This commit is contained in:
parent
f4d836e9df
commit
2dc41eb028
|
@ -7,7 +7,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.6.0",
|
||||
"@lingdocs/pashto-inflector": "^3.6.2",
|
||||
"@testing-library/jest-dom": "^5.11.4",
|
||||
"@testing-library/react": "^11.1.0",
|
||||
"@testing-library/user-event": "^12.1.10",
|
||||
|
|
|
@ -11,6 +11,7 @@ import {
|
|||
removeFVarients,
|
||||
isPastTense,
|
||||
getPassiveRootsAndStems,
|
||||
getAbilityRootsAndStems,
|
||||
} from "@lingdocs/pashto-inflector";
|
||||
import { isImperativeTense, isPerfectTense } from "@lingdocs/pashto-inflector/dist/lib/type-predicates";
|
||||
import { useState } from "react";
|
||||
|
@ -19,10 +20,11 @@ import { basicVerbs, intransitivePast } from "../content/verbs/basic-present-ver
|
|||
import { getLength } from "@lingdocs/pashto-inflector/dist/lib/p-text-helpers";
|
||||
import { isThirdPerson } from "@lingdocs/pashto-inflector/dist/lib/phrase-building/vp-tools";
|
||||
|
||||
function BasicVerbShowCase({ opts, tense, passive }: {
|
||||
function BasicVerbShowCase({ opts, tense, passive, ability }: {
|
||||
opts: T.TextOptions,
|
||||
tense: T.VerbTense | T.ImperativeTense,
|
||||
passive?: boolean,
|
||||
ability?: boolean,
|
||||
}) {
|
||||
const items = isPastTense(tense)
|
||||
? intransitivePast
|
||||
|
@ -35,6 +37,7 @@ function BasicVerbShowCase({ opts, tense, passive }: {
|
|||
}}</InlinePs>,
|
||||
body: <BasicVerbChart
|
||||
passive={passive}
|
||||
ability={ability}
|
||||
verb={item}
|
||||
opts={opts}
|
||||
tense={tense}
|
||||
|
@ -45,13 +48,15 @@ function BasicVerbShowCase({ opts, tense, passive }: {
|
|||
|
||||
export default BasicVerbShowCase;
|
||||
|
||||
function BasicVerbChart({ verb, opts, tense, passive }: {
|
||||
function BasicVerbChart({ verb, opts, tense, passive, ability }: {
|
||||
verb: T.VerbEntry,
|
||||
opts: T.TextOptions,
|
||||
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
|
||||
passive?: boolean,
|
||||
ability?: boolean,
|
||||
}) {
|
||||
const [voice, setVoice] = useState<"active" | "passive">("active");
|
||||
const [category, setCategory] = useState<"basic" | "ability">("basic");
|
||||
const [negative, setNegative] = useState<boolean>(false);
|
||||
const [length, setLength] = useState<"short" | "long">("short");
|
||||
const c = conjugateVerb(verb.entry, verb.complement);
|
||||
|
@ -60,7 +65,7 @@ function BasicVerbChart({ verb, opts, tense, passive }: {
|
|||
: "grammaticallyTransitive" in c
|
||||
? c.grammaticallyTransitive
|
||||
: c;
|
||||
const phrasesForTable = makeExamplePhrases(verb, tense, negative, length, voice);
|
||||
const phrasesForTable = makeExamplePhrases(verb, tense, negative, length, voice, category);
|
||||
return <div>
|
||||
<div>
|
||||
{getEnglishVerb(verb.entry)}
|
||||
|
@ -78,9 +83,24 @@ function BasicVerbChart({ verb, opts, tense, passive }: {
|
|||
handleChange={setVoice}
|
||||
/>
|
||||
</div>}
|
||||
{ability && <div className="my-2">
|
||||
<ButtonSelect
|
||||
options={[{
|
||||
label: "Basic",
|
||||
value: "basic",
|
||||
}, {
|
||||
label: "Ability",
|
||||
value: "ability",
|
||||
}]}
|
||||
value={category}
|
||||
handleChange={setCategory}
|
||||
/>
|
||||
</div>}
|
||||
<RootsAndStems
|
||||
textOptions={opts}
|
||||
info={voice === "passive"
|
||||
info={category === "ability"
|
||||
? (getAbilityRootsAndStems(conjugations.info))
|
||||
: voice === "passive"
|
||||
? (getPassiveRootsAndStems(conjugations.info) || /* type safety */ conjugations.info)
|
||||
: conjugations.info
|
||||
}
|
||||
|
@ -88,7 +108,7 @@ function BasicVerbChart({ verb, opts, tense, passive }: {
|
|||
highlighted={[tenseToStem(tense)]}
|
||||
/>
|
||||
<div className="my-3 d-flex flex-row justify-content-center">
|
||||
{isPastTense(tense) && !isPerfectTense(tense) && <div className="mx-2">
|
||||
{((isPastTense(tense) && !isPerfectTense(tense)) || category === "ability") && <div className="mx-2">
|
||||
<ButtonSelect
|
||||
handleChange={setLength}
|
||||
value={length}
|
||||
|
@ -127,7 +147,17 @@ function makeExamplePhrases(
|
|||
negative: boolean,
|
||||
length: "short" | "long",
|
||||
voice: "active" | "passive",
|
||||
category: "basic" | "ability",
|
||||
): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } {
|
||||
function tenseToModal(t: T.VerbTense | T.ImperativeTense | T.PerfectTense): T.ModalTense {
|
||||
if (isImperativeTense(t)) {
|
||||
throw new Error("can't have imperative tense with modal");
|
||||
}
|
||||
if (isPerfectTense(t)) {
|
||||
throw new Error("cant' have perfect tense with modal");
|
||||
}
|
||||
return `${t}Modal`;
|
||||
}
|
||||
function makeSelection(person: T.Person): T.VPSelectionComplete{
|
||||
return {
|
||||
"blocks": [
|
||||
|
@ -143,7 +173,7 @@ function makeExamplePhrases(
|
|||
"verb":{
|
||||
"type":"verb",
|
||||
verb,
|
||||
tense,
|
||||
tense: category === "basic" ? tense : tenseToModal(tense),
|
||||
"transitivity":"intransitive",
|
||||
"isCompound":false,
|
||||
voice,
|
||||
|
|
|
@ -2,4 +2,68 @@
|
|||
title: Ability
|
||||
---
|
||||
|
||||
COMING SOON
|
||||
import {
|
||||
defaultTextOptions as opts,
|
||||
Examples,
|
||||
InlinePs,
|
||||
RootsAndStems,
|
||||
conjugateVerb,
|
||||
getVerbInfo,
|
||||
getPassiveRootsAndStems,
|
||||
} from "@lingdocs/pashto-inflector";
|
||||
import { KidsSection, VP, KingIcon, ServantIcon, Camera, Video } from "../../components/terms-links";
|
||||
import psmd from "../../lib/psmd";
|
||||
import Link from "../../components/Link";
|
||||
import Image from "../../components/Image";
|
||||
import Formula from "../../components/formula/Formula";
|
||||
import VideoPlayer from "../../components/VideoPlayer";
|
||||
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
|
||||
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
|
||||
import abilityCopy from "./verb-tree-ability-roots-copy.svg";
|
||||
import halfKedul from "./verb-tree-half-kedul.svg";
|
||||
|
||||
We use "ability" verb forms to talk about the ability of a verb to happen. For example:
|
||||
|
||||
<EditableVPEx opts={opts} length="long">{
|
||||
{"blocks":[{"key":0.7144630314236184,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.3237406469603912,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11624,"p":"لیدل","f":"leedul","g":"leedul","e":"to see","c":"v. trans./gramm. trans.","psp":"وین","psf":"ween","tppp":"لید","tppf":"leed","ec":"see,sees,seeing,saw,seen"}},"verbTense":"presentVerb","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"modal","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
|
||||
}</EditableVPEx>
|
||||
|
||||
<EditableVPEx opts={opts}>{
|
||||
{"blocks":[{"key":0.22382799925273678,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.8844517944804815,"block":{"type":"objectSelection","selection":"none"}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815216,"i":6642,"p":"راتلل","f":"raatlúl","g":"raatlul","e":"to come","c":"v. intrans. irreg.","psp":"راځ","psf":"raadz","ssp":"راش","ssf":"ráash","prp":"راغلل","prf":"ráaghlul","pprtp":"راغلی","pprtf":"raaghúley","tppp":"راغی","tppf":"ráaghey","noOo":true,"separationAtP":2,"separationAtF":3,"ec":"come,comes,coming,came,come"}},"verbTense":"presentVerb","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"modal","transitivity":"intransitive","isCompound":false,"voice":"active","negative":true,"canChangeTransitivity":false,"canChangeVoice":false,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
|
||||
}</EditableVPEx>
|
||||
|
||||
## Making the ability roots and stems
|
||||
|
||||
To make these "ability" forms we will need to modify the 🌳 <Link to="/verbs/roots-and-stems/">roots and stems</Link> of the verb.
|
||||
|
||||
1. Use the roots for the stems as well
|
||||
2. Add a tail <InlinePs opts={opts} ps={{ p: "ی", f: "ey", e: "" }} /> or <InlinePs opts={opts} ps={{ p: "ای", f: "aay", e: "" }} />
|
||||
3. Add the *perfective* <Camera /> roots and stems of <InlinePs opts={opts} ps={{ p: "کېدل", f: "kedúl", e: "to become" }} />
|
||||
|
||||
<div className="mb-3">
|
||||
<div
|
||||
className="d-flex flex-row align-items-center justify-content-center"
|
||||
style={{ overflowX: "auto", maxWidth: "700px" }}
|
||||
>
|
||||
<div>
|
||||
<img src={abilityCopy} style={{ maxWidth: "275px" }} />
|
||||
</div>
|
||||
<div style={{ fontSize: "2.5rem" }} className="mx-3">+</div>
|
||||
<div className="text-center" style={{ minWidth: "3rem" }}>
|
||||
<div>ی - ey /</div>
|
||||
<div>ای - aay</div>
|
||||
</div>
|
||||
<div style={{ fontSize: "2.5rem" }} className="mx-3">+</div>
|
||||
<div>
|
||||
<img src={halfKedul} style={{ maxWidth: "115px" }} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Have a look through these verbs and notice how the same formula is always used to make the "ability" roots and stems.
|
||||
|
||||
<BasicVerbShowCase opts={opts} tense="presentVerb" ability />
|
||||
|
||||
## Using the ability roots and stems
|
||||
|
||||
🚧 IN PROGRESS ...
|
||||
|
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 92 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 100 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 91 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 92 KiB |
|
@ -1803,10 +1803,10 @@
|
|||
rambda "^6.7.0"
|
||||
react-select "^5.2.2"
|
||||
|
||||
"@lingdocs/pashto-inflector@^3.5.9":
|
||||
version "3.5.9"
|
||||
resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-3.5.9.tgz#3402f382c6818c0ab9d823537a3291764f4de0bd"
|
||||
integrity sha512-A1+Fz7/n1HdC7yWliEKuGiFtEW/eDSn0OeQpFd617ZgsykNmyt3n/hlkojsOHKs+1gLNoi0zS7Xc+XUn63dXKw==
|
||||
"@lingdocs/pashto-inflector@^3.6.2":
|
||||
version "3.6.2"
|
||||
resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-3.6.2.tgz#122eaeaac59253ea0ee708d772e860502aa1d6b7"
|
||||
integrity sha512-hHvgJPrNAp/ZBvZRsm++X2vFnZyuVrpE54YWPubwk+1Xn+28otoJ34r/OsN4N7eXrXBcxawYsWhf/ot9D987GQ==
|
||||
dependencies:
|
||||
"@formkit/auto-animate" "^1.0.0-beta.1"
|
||||
classnames "^2.2.6"
|
||||
|
|
Loading…
Reference in New Issue