correction of verb showcase and starting on perfect page

This commit is contained in:
lingdocs 2022-07-02 15:59:00 -05:00
parent 2e0abde8b9
commit 70f60093fb
10 changed files with 983 additions and 31 deletions

View File

@ -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.2.2",
"@lingdocs/pashto-inflector": "^3.2.3",
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",

View File

@ -29,8 +29,8 @@ function BasicBlocks({ blocks, showKidsSection, large }: {
className="d-flex flex-row justify-content-center align-items-center"
style={{
border: "2px solid black",
height: large ? "2.75rem" : "2.5rem",
width: large ? "4.5rem" : "4rem",
height: large ? "3.5rem" : "2.5rem",
width: large ? "6rem" : "4rem",
}}
>
{(typeof block === "object" && block.inside) ? block.inside : ""}

View File

@ -11,11 +11,12 @@ import {
removeFVarients,
isPastTense,
} from "@lingdocs/pashto-inflector";
import { isImperativeTense } from "@lingdocs/pashto-inflector/dist/lib/type-predicates";
import { isImperativeTense, isPerfectTense } from "@lingdocs/pashto-inflector/dist/lib/type-predicates";
import { useState } from "react";
import Carousel from "./Carousel";
import { basicVerbs, intransitivePast } from "../content/verbs/basic-present-verbs";
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 }: {
opts: T.TextOptions,
@ -42,7 +43,7 @@ export default BasicVerbShowCase;
function BasicVerbChart({ verb, opts, tense }: {
verb: T.VerbEntry,
opts: T.TextOptions,
tense: T.VerbTense | T.ImperativeTense,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
}) {
const [negative, setNegative] = useState<boolean>(false);
const [length, setLength] = useState<"short" | "long">("short");
@ -60,11 +61,11 @@ function BasicVerbChart({ verb, opts, tense }: {
<RootsAndStems
textOptions={opts}
info={conjugations.info}
hidePastParticiple={true}
hidePastParticiple={isPerfectTense(tense) ? false : true}
highlighted={[tenseToStem(tense)]}
/>
<div className="my-3 d-flex flex-row justify-content-center">
{isPastTense(tense) && <div className="mx-2">
{isPastTense(tense) && !isPerfectTense(tense) && <div className="mx-2">
<ButtonSelect
handleChange={setLength}
value={length}
@ -97,7 +98,7 @@ function BasicVerbChart({ verb, opts, tense }: {
</div>
}
function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.ImperativeTense, negative: boolean, length: "short" | "long"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } {
function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, negative: boolean, length: "short" | "long"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } {
function makeSelection(person: T.Person): T.VPSelectionComplete{
return {
"blocks": [
@ -131,7 +132,7 @@ function makeExamplePhrases(verb: T.VerbEntry, tense: T.VerbTense | T.Imperative
const compiled = compileVP(rendered, rendered.form);
return {
ps: [modifyP(getLength(compiled.ps, length)[0])],
e: compiled.e ? modifyEnglish(compiled.e.join(" • ")) : "",
e: compiled.e ? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person)) : "",
};
}
return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : isPastTense(tense) ? "past" : "nonImperative");
@ -144,19 +145,22 @@ function modifyP(ps: T.PsString): T.PsString {
};
}
function modifyEnglish(e: string): string {
function modifyEnglish(e: string, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, isThirdPerson: boolean): string {
// "kitaab" used as a dummy object
return e
.replace(/\(a\/the\) +book/ig, "")
.replace(/he\/it/ig, "he/she/it")
.replace(/We \(m\. pl\.\)/ig, "We ")
.replace(/They \(m\. pl\.\)/ig, "They ")
.replace(/\(m\. pl\.\)/ig, "(pl.)")
.replace(/\(m\.\)/ig, "");
const dummyObjectRemoved =
e.replace(/\(a\/the\) +book/ig, "")
return (isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson))
? dummyObjectRemoved
: dummyObjectRemoved
.replace(/he\/it/ig, "he/she/it")
.replace(/We \(m\. pl\.\)/ig, "We ")
.replace(/They \(m\. pl\.\)/ig, "They ")
.replace(/\(m\. pl\.\)/ig, "(pl.)")
.replace(/\(m\.\)/ig, "");
}
function tenseToStem(t: T.VerbTense | T.ImperativeTense): "imperfective stem" | "perfective stem" | "imperfective root" | "perfective root" {
return t === "presentVerb"
function tenseToStem(t: T.VerbTense | T.ImperativeTense | T.PerfectTense): "imperfective stem" | "perfective stem" | "imperfective root" | "perfective root" | "past participle" {
const stem = t === "presentVerb"
? "imperfective stem"
: t === "subjunctiveVerb"
? "perfective stem"
@ -174,7 +178,10 @@ function tenseToStem(t: T.VerbTense | T.ImperativeTense): "imperfective stem" |
? "perfective root"
: t === "imperfectiveImperative"
? "imperfective root"
: t.endsWith("Perfect")
? "past participle"
: "perfective root";
return stem;
}
function createVerbTable(f: (person: T.Person) => { ps: T.ArrayOneOrMore<T.PsString>, e: string }, type: "imperative" | "nonImperative" | "past"): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } {

View File

@ -30,4 +30,20 @@ export function BlockTerm({ text }: { text: string }) {
export function PerfectiveHead({ text }: { text: string }) {
return <Link to="/verbs/roots-and-stems/#introducing-the-perfective-head">{ text || "perfective head"}</Link>;
}
}
export function Camera() {
return <i className="fas fa-camera" />;
}
export function Video() {
return <i className="fas fa-video" />;
}
export function KingIcon() {
return <i className="mx-1 fas fa-crown" />;
}
export function ServantIcon() {
return <i className="mx-1 fas fa-male" />;
};

View File

@ -63,6 +63,8 @@ import * as negativeVerbs from "!babel-loader!@lingdocs/mdx-loader!./verbs/negat
import * as rootsAndStems from "!babel-loader!@lingdocs/mdx-loader!./verbs/roots-and-stems.mdx";
// @ts-ignore
import * as pastVerbs from "!babel-loader!@lingdocs/mdx-loader!./verbs/past-verbs.mdx";
// @ts-ignore
import * as perfectVerbs from "!babel-loader!@lingdocs/mdx-loader!./verbs/perfect-verbs.mdx";
// @ts-ignore
import * as introToParticiples from "!babel-loader!@lingdocs/mdx-loader!./participles/intro.mdx";
@ -223,6 +225,10 @@ const contentTree = [
import: pastVerbs,
slug: "past-verbs",
},
{
import: perfectVerbs,
slug: "perfect-verbs",
},
{
import: negativeVerbs,
slug: "negative-verbs",

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="531.7431"
height="140.18628"
viewBox="0 0 140.69031 37.090953"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="past-perfect.svg">
<defs
id="defs2">
<rect
x="146.44608"
y="-14.548825"
width="16.950678"
height="12.402935"
id="rect409" />
<rect
x="138.79759"
y="-19.303284"
width="23.772291"
height="14.470091"
id="rect371" />
<rect
x="9.3936357"
y="53.347046"
width="13.023082"
height="15.090237"
id="rect328" />
<rect
x="121.9088"
y="7.8961401"
width="56.433346"
height="18.811117"
id="rect6050" />
<rect
x="107.62167"
y="38.37397"
width="41.756546"
height="15.296953"
id="rect5964" />
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1352"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<rect
x="37.338371"
y="5.0927606"
width="52.299042"
height="14.883522"
id="rect5876" />
<marker
inkscape:stockid="Arrow1Mstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mstart"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1349"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.4,0,0,0.4,4,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1346"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker1631"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1629"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker1615"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1613"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1343"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)" />
</marker>
<rect
x="62.350956"
y="47.882885"
width="66.975845"
height="16.33053"
id="rect1054" />
<rect
id="rect1910"
height="26.602938"
width="109.33515"
y="-7.9594593"
x="78.980247" />
<rect
id="rect1904"
height="12.862959"
width="71.915634"
y="2.4186096"
x="38.637333" />
<rect
id="rect1742"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
x="26.647322"
y="26.647322"
width="34.962795"
height="14.552084"
id="rect837" />
<rect
id="rect837-8"
height="14.552084"
width="34.962795"
y="26.647322"
x="26.647322" />
<rect
id="rect852"
height="14.552084"
width="34.962795"
y="26.647322"
x="26.647322" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1742-2" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1755" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1742-5" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1784" />
<rect
id="rect1742-2-1"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
id="rect1787"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
x="78.980247"
y="-7.9594593"
width="116.05897"
height="23.679539"
id="rect1910-4" />
<rect
x="78.980247"
y="-7.9594593"
width="109.33515"
height="26.602938"
id="rect1927" />
<rect
id="rect1910-4-1"
height="15.49402"
width="47.651417"
y="-7.9594593"
x="78.980247" />
<rect
id="rect1956"
height="23.679539"
width="116.05897"
y="-7.9594593"
x="78.980247" />
<rect
id="rect1054-5"
height="16.33053"
width="66.975845"
y="47.882885"
x="62.350956" />
<rect
id="rect1067"
height="16.33053"
width="66.975845"
y="47.882885"
x="62.350956" />
<rect
id="rect5876-9"
height="13.849944"
width="16.123816"
y="5.0927606"
x="37.338371" />
<rect
id="rect5977"
height="14.883522"
width="52.299042"
y="5.0927606"
x="37.338371" />
<rect
x="37.338371"
y="5.0927606"
width="29.973761"
height="14.263375"
id="rect5876-9-4" />
<rect
x="37.338371"
y="5.0927606"
width="16.123816"
height="13.849944"
id="rect6006" />
<rect
x="37.338371"
y="5.0927606"
width="31.8342"
height="13.436513"
id="rect5876-9-8" />
<rect
x="37.338371"
y="5.0927606"
width="16.123816"
height="13.849944"
id="rect6006-1" />
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1352-7" />
</marker>
<rect
id="rect328-5"
height="15.090237"
width="13.023082"
y="53.347046"
x="9.3936357" />
<rect
id="rect341"
height="15.090237"
width="13.023082"
y="53.347046"
x="9.3936357" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.90505355"
inkscape:cx="264.19234"
inkscape:cy="113.14939"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
units="px"
inkscape:window-width="2560"
inkscape:window-height="1361"
inkscape:window-x="2391"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:snap-global="false"
inkscape:snap-to-guides="true" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-46.189011,26.203543)">
<text
transform="translate(0.37797619,0.37797619)"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1904);fill:#000000;fill-opacity:1;stroke:none;"
id="text1902"
xml:space="preserve" />
<text
id="text1916"
y="10.543595"
x="64.887398"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="stroke-width:0.264583"
y="10.543595"
x="64.887398"
id="tspan1914"
sodipodi:role="line" /></text>
<g
transform="translate(0,0.18449876)"
id="g2100">
<g
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1910-4);fill:#000000;fill-opacity:1;stroke:none"
id="text1908-0-1"
transform="translate(-20.320974,53.966148)"
aria-label="...was eating supper." />
</g>
<text
xml:space="preserve"
id="text5962"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect5964);fill:#000000;fill-opacity:1;stroke:none;" />
<g
transform="translate(0.6201485,-60.822466)"
id="g194">
<path
style="fill:none;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 48.214696,61.208853 H 183.61339"
id="path5870-2" />
<path
style="fill:none;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 115.91404,53.353661 V 69.064044"
id="path5872-7" />
</g>
<rect
style="fill:#000000;stroke:#000000;stroke-width:0.865"
id="rect72"
width="17.364109"
height="11.782787"
x="50.787956"
y="-5.5050073"
ry="2.6873026" />
<path
style="fill:none;stroke:#000000;stroke-width:0.478088;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 66.039643,-12.340652 3.230926,5.3387635 C 72.921676,-11.318877 82.06839,-15.674524 87.523607,-9.969063 l -2.656198,1.3735581 7.479259,3.1930991 3.039793,-8.8527572 -2.578932,1.282576 c -6.848205,-9.417753 -19.755126,-7.21834 -26.767886,0.631935 z"
id="path78"
sodipodi:nodetypes="cccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -7,8 +7,7 @@ import {
Examples,
InlinePs,
} from "@lingdocs/pashto-inflector";
import cousins from "./cousins.png";
import { KidsSection, VP } from "../../components/terms-links";
import { KidsSection, VP, KingIcon, ServantIcon } from "../../components/terms-links";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import Formula from "../../components/formula/Formula";
@ -22,15 +21,6 @@ import unoReverseMeme from "./uno-reverse-meme.jpg";
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
export function KingIcon() {
return <i className="mx-1 fas fa-crown" />;
}
export function ServantIcon() {
return <i className="mx-1 fas fa-male" />;
};
Past tense verbs in Pashto are famous for being very difficult and confusing for the learner. Thankfully there are some very simple rules that we can learn, and with a little practice (ok, a *lot* of practice) you'll find there's nothing scary about the past tense in Pashto at all.
Now that we're making past tense verbs, we will be using the **bottom half** of the <Link to="/verbs/roots-and-stems/">roots and stems</Link> tree.

View File

@ -0,0 +1,105 @@
---
title: Perfect
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/pashto-inflector";
import { KidsSection, VP, EP, Camera, Video, KingIcon } from "../../components/terms-links";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import Formula from "../../components/formula/Formula";
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import simplePast from "./simple-past-in-reality.svg";
import presentPerfect from "./present-perfect.svg";
import chemistryPerfect from "./chemistry-perfect.jpg";
import BasicBlocks from "../../components/BasicBlocks";
## Introduction
We use [perfect tenses](https://en.wikipedia.org/wiki/Perfect_(grammar)) when we want to **emphasize the consequences** of an event or **focus on the resulting state** after the event.
> A perfect tense (abbreviated perf or prf) is a grammatical form used to describe a past event with present relevance, or a present state resulting from a past situation. For example, “I have put it on the table” implies both that I put the object on the table and that it is still there; “I have been to France” conveys that this is a part of my experience as of now; and “I have lost my wallet” implies that this loss is troublesome at the present moment. ([wikipedia](https://en.wikipedia.org/wiki/Perfective_aspect#Perfective_vs._perfect))
<div className="alert alert-warning">
**Note** ⚠️: This is *not* to be confused with the <Link to="/verbs/verb-aspect/#i-classnamefas-fa-camera--perfective-aspect">perfective aspect</Link> <Camera />, which is a totally different thing.
</div>
In English we're not as strict with using the perfect tense. In fact it can sound a little formal or bookish to always say things like "I've lost my wallet" (perfect) instead of "I lost my wallet" (simple past). In Pashto however, this distinction is very normal and common, and you will see the perfect form used whenever it's important to talk about a state resulting from the action.
With the past tense we're talking about an event happening. We're just relaying the fact that something happened, without talking about the consequences of that event.
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={simplePast} alt="" className="img-fluid" />
</div>
<Examples opts={opts}>{[
{
p: "ما ډوډۍ وخوړله",
f: "maa DoDúy óokhoRula",
e: "I ate food",
sub: "meaning: I chewed and swallowed the food."
}
]}</Examples>
With a perfect tense, we're talking about the **result of an event**. We're saying that something has happened, and therefore there's an affect on the situation.
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={presentPerfect} alt="" className="img-fluid" />
</div>
<Examples opts={opts}>{[
{
p: "ما ډوډۍ خوړلې ده",
f: "maa DoDúy khoRúle da",
e: "I've eaten food",
sub: "meaning: I am full now."
}
]}</Examples>
## How to make perfect tenses 🧪
Earlier we talked about how <EP text="equatives" /> and <VP text="verbs" /> are totally different in Pashto. They have different tenses, equatives don't have <Link to="/verbs/verb-aspect/">aspect</Link>, and they have totally different phrase structures.
Well now we're going to do something very crazy. To make the perfect forms we are going to **combine verbs and equatives**. 👨🏻‍🔬😮
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={chemistryPerfect} alt="" className="img-fluid" />
</div>
<Formula>
Verb Past Participle +{` `}
Equative = Perfect
</Formula>
To make the perfect forms we take the <Link to="/verbs/roots-and-stems/#the-past-participle">past participle</Link> of the verb and **add an equative block** next to it. For example, with the verb <InlinePs opts={opts} ps={{ p: "تلل", f: "tlul", e: "to go" }} /> we could have something like:
<BasicBlocks large blocks={[
{ bottom: "Past Particple", inside: "tlúley" },
{ bottom: "Equative", inside: "yum" },
]} />
Now instead of one verb block, *we have **two blocks** that have to agree with the king* <KingIcon /> of the <VP />. Let's see how this works with some intransitive verbs.
<BasicVerbShowCase opts={opts} tense="presentPerfect" />
That seems like a pretty intimidating chart! But it gets simpler if we remember that we are just making the two blocks (past participle and equative) agree with the king <KingIcon /> of the phrase.
Have a look at the examples below, and notice how both the past participle and the equative blocks agree with the king of the phrase. Perfects are considered past-tense so they will follow the <Link to="/phrase-structure/vp/">same VP structure</Link> as other past tense forms:
- with **intransitive** verbs the *subject is king*
- with **transitive** verbs the *object is king*
#### Intransitive Examples
With perfect tenses, we'll use the <VP text="phrase structure of verbs" /> and the <Link to="/equatives/other-equatives/#overview-of-8-equatives">tenses of equatives</Link>.
IN PROGRESS

View File

@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="present-perfect.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 140.69031 37.090953"
height="140.18628"
width="531.7431">
<defs
id="defs2">
<rect
id="rect409"
height="12.402935"
width="16.950678"
y="-14.548825"
x="146.44608" />
<rect
id="rect371"
height="14.470091"
width="23.772291"
y="-19.303284"
x="138.79759" />
<rect
id="rect328"
height="15.090237"
width="13.023082"
y="53.347046"
x="9.3936357" />
<rect
id="rect6050"
height="18.811117"
width="56.433346"
y="7.8961401"
x="121.9088" />
<rect
id="rect5964"
height="15.296953"
width="41.756546"
y="38.37397"
x="107.62167" />
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1352" />
</marker>
<rect
id="rect5876"
height="14.883522"
width="52.299042"
y="5.0927606"
x="37.338371" />
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mstart">
<path
transform="matrix(0.4,0,0,0.4,4,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1349" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1346" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1631"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1629" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker1615"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1613" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1343" />
</marker>
<rect
id="rect1054"
height="16.33053"
width="66.975845"
y="47.882885"
x="62.350956" />
<rect
x="78.980247"
y="-7.9594593"
width="109.33515"
height="26.602938"
id="rect1910" />
<rect
x="38.637333"
y="2.4186096"
width="71.915634"
height="12.862959"
id="rect1904" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1742" />
<rect
id="rect837"
height="14.552084"
width="34.962795"
y="26.647322"
x="26.647322" />
<rect
x="26.647322"
y="26.647322"
width="34.962795"
height="14.552084"
id="rect837-8" />
<rect
x="26.647322"
y="26.647322"
width="34.962795"
height="14.552084"
id="rect852" />
<rect
id="rect1742-2"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
id="rect1755"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
id="rect1742-5"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
id="rect1784"
height="22.867559"
width="43.65625"
y="33.489403"
x="49.46875" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1742-2-1" />
<rect
x="49.46875"
y="33.489403"
width="43.65625"
height="22.867559"
id="rect1787" />
<rect
id="rect1910-4"
height="23.679539"
width="116.05897"
y="-7.9594593"
x="78.980247" />
<rect
id="rect1927"
height="26.602938"
width="109.33515"
y="-7.9594593"
x="78.980247" />
<rect
x="78.980247"
y="-7.9594593"
width="47.651417"
height="15.49402"
id="rect1910-4-1" />
<rect
x="78.980247"
y="-7.9594593"
width="116.05897"
height="23.679539"
id="rect1956" />
<rect
x="62.350956"
y="47.882885"
width="66.975845"
height="16.33053"
id="rect1054-5" />
<rect
x="62.350956"
y="47.882885"
width="66.975845"
height="16.33053"
id="rect1067" />
<rect
x="37.338371"
y="5.0927606"
width="16.123816"
height="13.849944"
id="rect5876-9" />
<rect
x="37.338371"
y="5.0927606"
width="52.299042"
height="14.883522"
id="rect5977" />
<rect
id="rect5876-9-4"
height="14.263375"
width="29.973761"
y="5.0927606"
x="37.338371" />
<rect
id="rect6006"
height="13.849944"
width="16.123816"
y="5.0927606"
x="37.338371" />
<rect
id="rect5876-9-8"
height="13.436513"
width="31.8342"
y="5.0927606"
x="37.338371" />
<rect
id="rect6006-1"
height="13.849944"
width="16.123816"
y="5.0927606"
x="37.338371" />
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-3"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path1352-7"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<rect
x="9.3936357"
y="53.347046"
width="13.023082"
height="15.090237"
id="rect328-5" />
<rect
x="9.3936357"
y="53.347046"
width="13.023082"
height="15.090237"
id="rect341" />
</defs>
<sodipodi:namedview
inkscape:snap-to-guides="true"
inkscape:snap-global="false"
inkscape:window-maximized="1"
inkscape:window-y="-9"
inkscape:window-x="-9"
inkscape:window-height="1001"
inkscape:window-width="1920"
units="px"
fit-margin-bottom="10"
fit-margin-right="10"
fit-margin-left="10"
fit-margin-top="10"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="113.14939"
inkscape:cx="264.19234"
inkscape:zoom="0.90505355"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-46.189011,26.203543)"
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<text
xml:space="preserve"
id="text1902"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1904);fill:#000000;fill-opacity:1;stroke:none;"
transform="translate(0.37797619,0.37797619)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="64.887398"
y="10.543595"
id="text1916"><tspan
sodipodi:role="line"
id="tspan1914"
x="64.887398"
y="10.543595"
style="stroke-width:0.264583" /></text>
<g
id="g2100"
transform="translate(0,0.18449876)">
<g
aria-label="...was eating supper."
transform="translate(-20.320974,53.966148)"
id="text1908-0-1"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect1910-4);fill:#000000;fill-opacity:1;stroke:none" />
</g>
<text
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect5964);fill:#000000;fill-opacity:1;stroke:none;"
id="text5962"
xml:space="preserve" />
<g
id="g194"
transform="translate(0.6201485,-60.822466)">
<path
id="path5870-2"
d="M 48.214696,61.208853 H 183.61339"
style="fill:none;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5872-7"
d="M 115.91404,53.353661 V 69.064044"
style="fill:none;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<rect
ry="2.6873026"
y="-5.5050073"
x="70.374733"
height="11.782787"
width="17.364109"
id="rect72"
style="fill:#000000;stroke:#000000;stroke-width:0.865" />
<path
sodipodi:nodetypes="cccccccc"
id="path78"
d="m 83.835042,-12.530533 4.699152,4.5104575 C 91.915033,-13.037115 101.58879,-19.29379 108.90621,-14.911434 l -2.78899,1.923137 9.16942,1.484627 1.83448,-9.315704 -2.71737,1.817331 c -9.60637,-7.705371 -23.992761,-2.733434 -30.568708,6.47151 z"
style="fill:none;stroke:#000000;stroke-width:0.515144;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB