finish phonetics conversion

This commit is contained in:
adueck 2023-07-27 22:53:03 +04:00
parent 5df7a85003
commit d076fff05c
68 changed files with 20980 additions and 7701 deletions

View File

@ -17,7 +17,7 @@
"@formkit/auto-animate": "^1.0.0-beta.6",
"@fortawesome/fontawesome-free": "5.15.4",
"@lingdocs/lingdocs-main": "^0.3.3",
"@lingdocs/ps-react": "^5.7.13",
"@lingdocs/ps-react": "^6.0.2",
"@mdx-js/rollup": "^2.2.1",
"@stefanprobst/rehype-extract-toc": "^2.2.0",
"@types/mdx": "^2.0.3",

View File

@ -11,25 +11,26 @@ const allTs = [...nounAdjTs, ...verbs, ...adverbs];
console.log("getting words from dictionary...");
fetch("https://account.lingdocs.com/dictionary/entries", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ ids: allTs }),
}).then(res => res.json()).then(data => {
const content = `
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ ids: allTs }),
})
.then((res) => res.json())
.then((data) => {
const content = `
// @ts-ignore
const words: Word[] = ${JSON.stringify(data.results)};
export default words;`;
fs.writeFileSync(wordsFile, content);
const missingEc = data.results.filter(x => "entry" in x && !x.entry.ec);
if (missingEc.length) {
console.log("verbs missing ec");
console.log(missingEc);
}
if (data.notFound.length) {
console.log("entries not found:");
console.log(data.notFound);
}
});
fs.writeFileSync(wordsFile, content);
const missingEc = data.results.filter((x) => "entry" in x && !x.entry.ec);
if (missingEc.length) {
console.log("verbs missing ec");
console.log(missingEc);
}
if (data.notFound.length) {
console.log("entries not found:");
console.log(data.notFound);
}
});

View File

@ -1,295 +1,409 @@
import {
Types as T,
RootsAndStems,
conjugateVerb,
VerbTable,
renderVP,
compileVP,
ButtonSelect,
getEnglishVerb,
InlinePs,
removeFVarients,
isPastTense,
getPassiveRootsAndStems,
getAbilityRootsAndStems,
Types as T,
RootsAndStems,
conjugateVerb,
VerbTable,
renderVP,
compileVP,
ButtonSelect,
getEnglishVerb,
InlinePs,
removeFVarients,
isPastTense,
getPassiveRootsAndStems,
getAbilityRootsAndStems,
} from "@lingdocs/ps-react";
import { isImperativeTense, isPerfectTense } from "@lingdocs/ps-react/dist/lib/src/type-predicates";
import {
isImperativeTense,
isPerfectTense,
} from "@lingdocs/ps-react/dist/lib/src/type-predicates";
import { useState } from "react";
import Carousel from "./Carousel";
import { basicVerbs, intransitivePastVerbs } from "../content/verbs/basic-present-verbs";
import {
basicVerbs,
intransitivePastVerbs,
} from "../content/verbs/basic-present-verbs";
import { getLength } from "@lingdocs/ps-react/dist/lib/src/p-text-helpers";
import { isThirdPerson } from "@lingdocs/ps-react";
function BasicVerbShowCase({ opts, tense, passive, ability }: {
opts: T.TextOptions,
tense: T.VerbTense | T.ImperativeTense,
passive?: boolean,
ability?: boolean,
function BasicVerbShowCase({
opts,
tense,
passive,
ability,
}: {
opts: T.TextOptions;
tense: T.VerbTense | T.ImperativeTense;
passive?: boolean;
ability?: boolean;
}) {
const items = isPastTense(tense)
? intransitivePastVerbs
: (passive ? basicVerbs.filter(v => v.entry.p !== "کول") : basicVerbs);
return <Carousel stickyTitle items={items} render={(item) => {
const items = isPastTense(tense)
? intransitivePastVerbs
: passive
? basicVerbs.filter((v) => v.entry.p !== "کول")
: basicVerbs;
return (
<Carousel
stickyTitle
items={items}
render={(item) => {
return {
title: <InlinePs opts={opts}>{{
title: (
<InlinePs opts={opts}>
{{
...removeFVarients(item.entry),
e: undefined,
}}</InlinePs>,
body: <BasicVerbChart
passive={passive}
ability={ability}
verb={item}
opts={opts}
tense={tense}
/>,
}}
</InlinePs>
),
body: (
<BasicVerbChart
passive={passive}
ability={ability}
verb={item}
opts={opts}
tense={tense}
/>
),
};
}}/>
}}
/>
);
}
export default BasicVerbShowCase;
function BasicVerbChart({ verb, opts, tense, passive, ability }: {
verb: T.VerbEntry,
opts: T.TextOptions,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
passive?: boolean,
ability?: boolean,
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);
const conjugations = "stative" in c
? c.stative
: "grammaticallyTransitive" in c
? c.grammaticallyTransitive
: c;
const phrasesForTable = makeExamplePhrases(verb, tense, negative, length, voice, category);
return <div>
<div>
{getEnglishVerb(verb.entry)}
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);
const conjugations =
"stative" in c
? c.stative
: "grammaticallyTransitive" in c
? c.grammaticallyTransitive
: c;
const phrasesForTable = makeExamplePhrases(
verb,
tense,
negative,
length,
voice,
category
);
return (
<div>
<div>{getEnglishVerb(verb.entry)}</div>
{passive && (
<div className="my-2">
<ButtonSelect
options={[
{
label: "Active",
value: "active",
},
{
label: "Passive",
value: "passive",
},
]}
value={voice}
handleChange={setVoice}
/>
</div>
{passive && <div className="my-2">
)}
{ability && (
<div className="my-2">
<ButtonSelect
options={[
{
label: "Basic",
value: "basic",
},
{
label: "Ability",
value: "ability",
},
]}
value={category}
handleChange={setCategory}
/>
</div>
)}
<RootsAndStems
textOptions={opts}
info={
category === "ability"
? getAbilityRootsAndStems(conjugations.info)
: voice === "passive"
? getPassiveRootsAndStems(conjugations.info) ||
/* type safety */ conjugations.info
: conjugations.info
}
hidePastParticiple={isPerfectTense(tense) ? false : true}
highlighted={[tenseToStem(tense)]}
/>
<div className="my-3 d-flex flex-row justify-content-center">
{((isPastTense(tense) && !isPerfectTense(tense)) ||
category === "ability") && (
<div className="mx-2">
<ButtonSelect
options={[{
label: "Active",
value: "active",
}, {
label: "Passive",
value: "passive",
}]}
value={voice}
handleChange={setVoice}
handleChange={setLength}
value={length}
small
options={[
{ value: "long", label: "long" },
{ value: "short", label: "short" },
]}
/>
</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={category === "ability"
? (getAbilityRootsAndStems(conjugations.info))
: voice === "passive"
? (getPassiveRootsAndStems(conjugations.info) || /* type safety */ conjugations.info)
: conjugations.info
}
hidePastParticiple={isPerfectTense(tense) ? false : true}
highlighted={[tenseToStem(tense)]}
</div>
)}
<div className="mx-2">
<ButtonSelect
handleChange={(value) => setNegative(value === "true")}
value={String(negative)}
small
options={[
{ value: "true", label: "Neg." },
{ value: "false", label: "Pos." },
]}
/>
</div>
</div>
<div className="text-left">
<VerbTable
textOptions={opts}
block={phrasesForTable.ps}
english={phrasesForTable.e}
/>
<div className="my-3 d-flex flex-row justify-content-center">
{((isPastTense(tense) && !isPerfectTense(tense)) || category === "ability") && <div className="mx-2">
<ButtonSelect
handleChange={setLength}
value={length}
small
options={[
{ value: "long", label: "long" },
{ value: "short", label: "short" },
]}
/>
</div>}
<div className="mx-2">
<ButtonSelect
handleChange={(value) => setNegative(value === "true")}
value={String(negative)}
small
options={[
{ value: "true", label: "Neg." },
{ value: "false", label: "Pos." },
]}
/>
</div>
</div>
<div className="text-left">
<VerbTable
textOptions={opts}
block={phrasesForTable.ps}
english={phrasesForTable.e}
/>
</div>
</div>
</div>
);
}
function makeExamplePhrases(
verb: T.VerbEntry,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
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`;
verb: T.VerbEntry,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
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.AbilityTense {
if (isImperativeTense(t)) {
throw new Error("can't have imperative tense with modal");
}
function makeSelection(person: T.Person): T.VPSelectionComplete{
return {
"blocks": [
{"key":Math.random(),"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person": person,"distance":"far"}}}},
{
key: Math.random(),
// @ts-ignore
block: (verb.entry.c?.includes("intrans.") || voice === "passive")
? {"type":"objectSelection","selection":"none"}
: {"type":"objectSelection", "selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10011,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}},
},
],
"verb":{
"type":"verb",
verb,
tense: category === "basic" ? tense : tenseToModal(tense),
"transitivity":"intransitive",
"isCompound":false,
voice,
negative,
"canChangeTransitivity":false,
"canChangeVoice":false,
"canChangeStatDyn":false,
if (isPerfectTense(t)) {
throw new Error("cant' have perfect tense with modal");
}
return `${t}Modal`;
}
function makeSelection(person: T.Person): T.VPSelectionComplete {
return {
blocks: [
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: person, distance: "far" },
},
"form":{"removeKing":false,"shrinkServant":false},
};
}
function makePhrase(person: T.Person): { ps: T.ArrayOneOrMore<T.PsString>, e: string } {
const selection = makeSelection(person);
const rendered = renderVP(selection);
const compiled = compileVP(rendered, rendered.form);
return {
ps: [modifyP(getLength(compiled.ps, length)[0])],
e: compiled.e ? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person)) : "",
};
}
return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : isPastTense(tense) ? "past" : "nonImperative");
},
},
{
key: Math.random(),
// @ts-ignore
block:
verb.entry.c?.includes("intrans.") || voice === "passive"
? { type: "objectSelection", selection: "none" }
: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10011,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
verb: {
type: "verb",
verb,
tense: category === "basic" ? tense : tenseToModal(tense),
transitivity: "intransitive",
isCompound: false,
voice,
negative,
canChangeTransitivity: false,
canChangeVoice: false,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
};
}
function makePhrase(person: T.Person): {
ps: T.ArrayOneOrMore<T.PsString>;
e: string;
} {
const selection = makeSelection(person);
const rendered = renderVP(selection);
const compiled = compileVP(rendered, rendered.form);
return {
ps: [modifyP(getLength(compiled.ps, length)[0])],
e: compiled.e
? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person))
: "",
};
}
return createVerbTable(
makePhrase,
isImperativeTense(tense)
? "imperative"
: isPastTense(tense)
? "past"
: "nonImperative"
);
}
function modifyP(ps: T.PsString): T.PsString {
return {
p: ps.p.replace(" کتاب ", ""),
f: ps.f.replace(" kitáab ", ""),
};
return {
p: ps.p.replace(" کتاب ", ""),
f: ps.f.replace(" kitáab ", ""),
};
}
function modifyEnglish(e: string, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, isThirdPerson: boolean): string {
// "kitaab" used as a dummy object
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 modifyEnglish(
e: string,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
isThirdPerson: boolean
): string {
// "kitaab" used as a dummy object
const dummyObjectRemoved = e.replace(/\(a\/the\) +book/gi, "");
return isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson)
? dummyObjectRemoved
: dummyObjectRemoved
.replace(/he\/it/gi, "he/she/it")
.replace(/We \(m\. pl\.\)/gi, "We ")
.replace(/They \(m\. pl\.\)/gi, "They ")
.replace(/\(m\. pl\.\)/gi, "(pl.)")
.replace(/\(m\.\)/gi, "");
}
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"
: t === "imperfectiveFuture"
? "imperfective stem"
: t === "perfectiveFuture"
? "perfective stem"
: t === "imperfectivePast"
? "imperfective root"
: t === "perfectivePast"
? "perfective root"
: t === "habitualImperfectivePast"
? "imperfective root"
: t === "habitualPerfectivePast"
? "perfective root"
: t === "imperfectiveImperative"
? "imperfective stem"
: t === "perfectiveImperative"
? "perfective stem"
: t.endsWith("Perfect")
? "past participle"
: "perfective root";
return stem;
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"
: t === "imperfectiveFuture"
? "imperfective stem"
: t === "perfectiveFuture"
? "perfective stem"
: t === "imperfectivePast"
? "imperfective root"
: t === "perfectivePast"
? "perfective root"
: t === "habitualImperfectivePast"
? "imperfective root"
: t === "habitualPerfectivePast"
? "perfective root"
: t === "imperfectiveImperative"
? "imperfective stem"
: t === "perfectiveImperative"
? "perfective stem"
: 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 } {
if (type === "imperative") {
const b = [
[f(2), f(8)],
[f(3), f(9)],
];
return {
ps: [
[b[0][0].ps, b[0][1].ps],
[b[1][0].ps, b[1][1].ps],
],
e: [
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
],
};
}
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 } {
if (type === "imperative") {
const b = [
[f(0), f(6)],
[f(1), f(7)],
[f(2), f(8)],
[f(3), f(9)],
[f(4), f(10)],
[f(5), f(11)],
[f(2), f(8)],
[f(3), f(9)],
];
return {
ps: [
[b[0][0].ps, b[0][1].ps],
[b[1][0].ps, b[1][1].ps],
[b[2][0].ps, b[2][1].ps],
[b[3][0].ps, b[3][1].ps],
[b[4][0].ps, b[4][1].ps],
[b[5][0].ps, b[5][1].ps],
],
e: [
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[2][0].e, b[2][1].e],
[b[3][0].e, b[3][1].e],
[b[4][0].e, b[4][1].e],
[b[5][0].e, b[5][1].e],
],
ps: [
[b[0][0].ps, b[0][1].ps],
[b[1][0].ps, b[1][1].ps],
],
e: [
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
],
};
}
}
const b = [
[f(0), f(6)],
[f(1), f(7)],
[f(2), f(8)],
[f(3), f(9)],
[f(4), f(10)],
[f(5), f(11)],
];
return {
ps: [
[b[0][0].ps, b[0][1].ps],
[b[1][0].ps, b[1][1].ps],
[b[2][0].ps, b[2][1].ps],
[b[3][0].ps, b[3][1].ps],
[b[4][0].ps, b[4][1].ps],
[b[5][0].ps, b[5][1].ps],
],
e: [
[b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][1].e],
[b[2][0].e, b[2][1].e],
[b[3][0].e, b[3][1].e],
[b[4][0].e, b[4][1].e],
[b[5][0].e, b[5][1].e],
],
};
}

View File

@ -1,16 +1,17 @@
import { Component } from "react";
import classNames from "classnames";
import highlightExample from "./highlight-example";
import {
phonemes,
Phoneme,
PhonemeExample,
} from "./phonemes";
import { phonemes, Phoneme, PhonemeExample } from "./phonemes";
import playAudio from "../../lib/play-audio";
import views from "./views";
import Media from "react-media";
export type ViewOptions = "all" | "shortVowel" | "longVowel" | "fiveYs" | "specialConsonant";
export type ViewOptions =
| "all"
| "shortVowel"
| "longVowel"
| "fiveYs"
| "specialConsonant";
interface IAppState {
view: ViewOptions;
@ -28,100 +29,119 @@ class PhoneticsViewer extends Component<any, IAppState> {
const phonemesShowing =
this.state.view === "all"
? phonemes
// @ts-ignore
: phonemes.filter((p) => p[this.state.view]);
: // @ts-ignore
phonemes.filter((p) => p[this.state.view]);
const selectedOption = views.find((v) => v.value === this.state.view);
const generatePlayerFunction = (item: Phoneme | PhonemeExample) => {
if ("phoneme" in item && item.a) {
return () => { playAudio(item.a || ""); };
return () => {
playAudio(item.a || "");
};
}
if ("f" in item && item.a) {
// dumb typescript
return () => { playAudio(item.a || ""); };
// dumb typescript
return () => {
playAudio(item.a || "");
};
}
return () => null;
}
return <>
<div className="text-center mt-4">
<Media queries={{ small: "(max-width: 599px)" }}>
{matches => (
<div className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}>
{views.map(({ label, value }) => (
<button
key={value}
type="button"
className={classNames("btn", "btn-outline-secondary", {
active: this.state.view === value,
})}
onClick={() => this.setState({ view: value })}
>
{label}
</button>
))}
</div>
)}
</Media>
<div className="small mb-2"><i className="fas fa-volume-down"></i> click the phonetic letter or examples to hear - not all sounds are available</div>
</div>
<div style={{ overflowX: "auto", marginBottom: "1em" }}>
<table className="table table-striped">
<thead>
<tr>
<th>Phonetic Letter</th>
{/* <th>IPA Letter</th> */}
<th>Short Explanation</th>
<th>Example</th>
<th>Pashto Letter(s)</th>
</tr>
</thead>
<tbody>
{phonemesShowing.map((phoneme) => (
<tr key={phoneme.phoneme}>
<td onClick={generatePlayerFunction(phoneme)}>
{phoneme.phoneme}
</td>
{/* <td>{phoneme.ipa.letter} </td> */}
<td>
{phoneme.quickExplanation}{" "}
{phoneme.ipa.video && (
<a href={phoneme.ipa.video} target="_blank" rel="noopener noreferrer">
<i className="fa fa-video" />
</a>
)}
</td>
<td onClick={generatePlayerFunction(phoneme.examples[0])}>
{highlightExample(
phoneme.examples[0].f,
phoneme.examples[0].fHighlight
)}
{` - `}
{highlightExample(
phoneme.examples[0].p,
phoneme.examples[0].pHighlight
)}
</td>
<td>
{phoneme.possibleLetters
? phoneme.possibleLetters.reduce(
(s, l) =>
`${s}${l.letter} ${
l.alternate ? ` (${l.alternate}) ` : ""
}`,
""
)
: ""}
{/* phoneme.diacritic && `(diacritic ◌${phoneme.diacritic})` */}
</td>
};
return (
<>
<div className="text-center mt-4">
<Media queries={{ small: "(max-width: 599px)" }}>
{(matches) => (
<div
className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}
>
{views.map(({ label, value }) => (
<button
key={value}
type="button"
className={classNames("btn", "btn-outline-secondary", {
active: this.state.view === value,
})}
onClick={() => this.setState({ view: value })}
>
{label}
</button>
))}
</div>
)}
</Media>
<div className="small mb-2">
<i className="fas fa-volume-down"></i> click the phonetic letter or
examples to hear - not all sounds are available
</div>
</div>
<div style={{ overflowX: "auto", marginBottom: "1em" }}>
<table className="table table-striped">
<thead>
<tr>
<th>Phonetic Letter</th>
{/* <th>IPA Letter</th> */}
<th>Short Explanation</th>
<th>Example</th>
<th>Pashto Letter(s)</th>
</tr>
))}
</tbody>
</table>
</div>
{selectedOption?.notes && <div>
<p><strong>Notes about {selectedOption.label.toLowerCase()}:</strong></p>
{selectedOption.notes}
</div>}
</>;
</thead>
<tbody>
{phonemesShowing.map((phoneme) => (
<tr key={phoneme.phoneme}>
<td onClick={generatePlayerFunction(phoneme)}>
{phoneme.phoneme}
</td>
{/* <td>{phoneme.ipa.letter} </td> */}
<td>
{phoneme.quickExplanation}{" "}
{phoneme.ipa.video && (
<a
href={phoneme.ipa.video}
target="_blank"
rel="noopener noreferrer"
>
<i className="fa fa-video" />
</a>
)}
</td>
<td onClick={generatePlayerFunction(phoneme.examples[0])}>
{highlightExample(
phoneme.examples[0].f,
phoneme.examples[0].fHighlight
)}
{` - `}
{highlightExample(
phoneme.examples[0].p,
phoneme.examples[0].pHighlight
)}
</td>
<td>
{phoneme.possibleLetters
? phoneme.possibleLetters.reduce(
(s, l) =>
`${s}${l.letter} ${
l.alternate ? ` (${l.alternate}) ` : ""
}`,
""
)
: ""}
{/* phoneme.diacritic && `(diacritic ◌${phoneme.diacritic})` */}
</td>
</tr>
))}
</tbody>
</table>
</div>
{selectedOption?.notes && (
<div>
<p>
<strong>Notes about {selectedOption.label.toLowerCase()}:</strong>
</p>
{selectedOption.notes}
</div>
)}
</>
);
}
}

View File

@ -1,21 +1,24 @@
import React, { ReactNode } from "react";
export default function highlightExample(text: string, highlight: number[][]): ReactNode {
if (!highlight.length) {
return text;
}
let index = 0;
// @ts-ignore
const pText = highlight.reduce((acc, curr, i): ReactNode => {
const isLastElement = i === (highlight.length - 1);
const section = [
...acc,
curr[0] > 0 ? text.slice(index, curr[0]) : "",
<strong>{text.slice(curr[0], curr[1] + 1)}</strong>,
isLastElement ? text.slice(curr[1] + 1) : "",
];
index = curr[1] + 1;
return section;
}, []);
return pText;
export default function highlightExample(
text: string,
highlight: number[][]
): ReactNode {
if (!highlight.length) {
return text;
}
let index = 0;
// @ts-ignore
const pText = highlight.reduce((acc, curr, i): ReactNode => {
const isLastElement = i === highlight.length - 1;
const section = [
...acc,
curr[0] > 0 ? text.slice(index, curr[0]) : "",
<strong>{text.slice(curr[0], curr[1] + 1)}</strong>,
isLastElement ? text.slice(curr[1] + 1) : "",
];
index = curr[1] + 1;
return section;
}, []);
return pText;
}

View File

@ -105,7 +105,7 @@ export const letters: IAlphabet = {
export const diacritics = {
zwar: "َ",
zwarakey: "ٙ",
zwarakay: "ٙ",
zer: "ِ",
pesh: "ُ",
sukun: "ْ",
@ -116,30 +116,28 @@ export const diacritics = {
fathahan: "ً",
};
export type PhonemeExample = (
T.PsString &
{
pHighlight: number[][],
fHighlight: number[][],
a?: string,
audio?: { externalLink: string },
});
export type PhonemeExample = T.PsString & {
pHighlight: number[][];
fHighlight: number[][];
a?: string;
audio?: { externalLink: string };
};
export type Phoneme = {
phoneme: string,
a?: string,
quickExplanation: string | JSX.Element,
specialConsonant?: boolean,
shortVowel?: boolean,
longVowel?: boolean,
addAlefToStart?: boolean,
fiveYs?: boolean,
canBeIgnored?: boolean,
ipa: any,
onlyOnEnd?: boolean,
endingLetter?: ILetter,
examples: PhonemeExample[],
} & ({ possibleLetters: ILetter[] } | { diacritic: string })
phoneme: string;
a?: string;
quickExplanation: string | JSX.Element;
specialConsonant?: boolean;
shortVowel?: boolean;
longVowel?: boolean;
addAlefToStart?: boolean;
fiveYs?: boolean;
canBeIgnored?: boolean;
ipa: any;
onlyOnEnd?: boolean;
endingLetter?: ILetter;
examples: PhonemeExample[];
} & ({ possibleLetters: ILetter[] } | { diacritic: string });
export const phonemes = [
// consonants
@ -567,9 +565,9 @@ export const phonemes = [
examples: [
{
p: "وږی",
f: "wuGey",
f: "wuGay",
e: "hungry",
a: "wuggey",
a: "wuggay",
pHighlight: [[1, 1]],
fHighlight: [[2, 2]],
},
@ -824,8 +822,7 @@ export const phonemes = [
quickExplanation: "l with back of tongue higher up",
ipa: {
letter: "l",
link:
"https://en.wikipedia.org/wiki/Voiced_dental,_alveolar_and_postalveolar_lateral_approximants#Voiced_alveolar_lateral_approximant",
link: "https://en.wikipedia.org/wiki/Voiced_dental,_alveolar_and_postalveolar_lateral_approximants#Voiced_alveolar_lateral_approximant",
},
examples: [
{
@ -833,8 +830,14 @@ export const phonemes = [
f: "leekul",
e: "to write",
a: "leekul",
pHighlight: [[0, 0], [3, 3]],
fHighlight: [[0, 0], [5, 5]],
pHighlight: [
[0, 0],
[3, 3],
],
fHighlight: [
[0, 0],
[5, 5],
],
},
],
},
@ -940,8 +943,8 @@ export const phonemes = [
examples: [
{
p: "وږی",
f: "wuGey",
a: "wuggey",
f: "wuGay",
a: "wuggay",
e: "hungry",
pHighlight: [[0, 0]],
fHighlight: [[0, 0]],
@ -994,9 +997,9 @@ export const phonemes = [
examples: [
{
p: "سَړی",
f: "saRey",
f: "saRay",
e: "man",
a: "sarrey",
a: "sarray",
pHighlight: [[1, 1]],
fHighlight: [[1, 1]],
},
@ -1059,7 +1062,7 @@ export const phonemes = [
{
phoneme: "u",
shortVowel: true,
diacritic: diacritics.zwarakey,
diacritic: diacritics.zwarakay,
quickExplanation: (
<>
shwa sound similar to u in b<strong>u</strong>d
@ -1200,11 +1203,7 @@ export const phonemes = [
longVowel: true,
fiveYs: true,
addAlefToStart: true,
quickExplanation: (
<>
close to ee in b<strong>ee</strong> but more open
</>
),
quickExplanation: <>'ee' sound but with mouth slightly more open</>,
ipa: {
letter: "e",
},
@ -1220,15 +1219,15 @@ export const phonemes = [
],
},
{
phoneme: "ey",
a: "ey",
phoneme: "ay",
a: "ay",
possibleLetters: [letters.naareenaYe],
longVowel: true,
fiveYs: true,
addAlefToStart: true,
quickExplanation: (
<>
similar to ay in d<strong>ay</strong>
short 'a' sound + y. similar to ay in d<strong>ay</strong>
</>
),
ipa: {
@ -1237,32 +1236,31 @@ export const phonemes = [
examples: [
{
p: "سړی",
f: "saRey",
f: "saRay",
e: "man",
a: "saRey",
a: "saRay",
pHighlight: [[2, 2]],
fHighlight: [[3, 4]],
},
],
},
{
phoneme: "eyy",
a: "eyy",
phoneme: "ey",
a: "ey",
possibleLetters: [letters.faailiyaYe],
longVowel: true,
fiveYs: true,
onlyOnEnd: true,
quickExplanation:
"Close or the same as 'uy'. Starts with a ey sound and glides into an ee at the end",
quickExplanation: "e sound + y",
ipa: {
letter: "əi",
},
examples: [
{
p: "کښېنئ",
f: "kxeneyy",
f: "kxeney",
e: "please sit",
a: "kxeneyy",
a: "kxeney",
pHighlight: [[4, 4]],
fHighlight: [[4, 6]],
},
@ -1274,8 +1272,7 @@ export const phonemes = [
possibleLetters: [letters.xudzeenaYe],
longVowel: true,
fiveYs: true,
quickExplanation:
"Starts with a u (schwa) sound and glides into an ee at the end",
quickExplanation: "u (schwa) sound + y",
ipa: {
letter: "əi",
},

View File

@ -23,9 +23,9 @@ import e from "./audio/e.m4a";
// @ts-ignore
import ee from "./audio/ee.m4a";
// @ts-ignore
import ey from "./audio/ey.m4a";
import ay from "./audio/ey.m4a";
// @ts-ignore
import eyy from "./audio/eyy.m4a";
import ey from "./audio/eyy.m4a";
// @ts-ignore
import gh from "./audio/gh.m4a";
// @ts-ignore
@ -144,10 +144,76 @@ import naayee from "./audio/naayee.mp3";
import fojee from "./audio/fojee.mp3";
export default {
a, aa, aasmaan, d, D, DoDuy, dwa, dz, dzaay, dzungul, e, ee, ey,
eyy, gh, gharma, h, halaat, i, injuluy, islaam, joR, jz, jzwund, kadoo,
kh, khwux, kxeneyy, l, leekul, lUtfan, maalTa, maNa, meena, N, o, oo,
oox, ooy, paaNa, poza, puxto, q, qaazee, r, R, rang, saRey, t, tor, ts,
tsomra, T, u, uu, uy, w, wuGey, waadu, x, xudza, xudze, zooy, sheen, chaa,
baad, kor, gUl, maat, maruy, naayee, fojee,
a,
aa,
aasmaan,
d,
D,
DoDuy,
dwa,
dz,
dzaay,
dzungul,
e,
ee,
ay,
ey,
gh,
gharma,
h,
halaat,
i,
injuluy,
islaam,
joR,
jz,
jzwund,
kadoo,
kh,
khwux,
kxeneyy,
l,
leekul,
lUtfan,
maalTa,
maNa,
meena,
N,
o,
oo,
oox,
ooy,
paaNa,
poza,
puxto,
q,
qaazee,
r,
R,
rang,
saRey,
t,
tor,
ts,
tsomra,
T,
u,
uu,
uy,
w,
wuGey,
waadu,
x,
xudza,
xudze,
zooy,
sheen,
chaa,
baad,
kor,
gUl,
maat,
maruy,
naayee,
fojee,
};

View File

@ -34,7 +34,8 @@ const views: {
<div>
<p>
Long vowels are <strong>always written</strong> in Pashto script. When
long vowels come at the beginning of a word, they are prefixed with a letter alef (ا).
long vowels come at the beginning of a word, they are prefixed with a
letter alef (ا).
</p>
<p>for example:</p>
<ul>
@ -46,8 +47,9 @@ const views: {
</li>
</ul>
<p>
Note: When ey - ی or ee - ي are written in the middle of a word, both appear as ـیـ.
To differentiate ee - ي from ey - ی you can (optionally) add a ِ diacritic. (eg. شِین - sheen)
Note: When ay - ی or ee - ي are written in the middle of a word, both
appear as ـیـ. To differentiate ee - ي from ay - ی you can
(optionally) add a ِ diacritic. (eg. شِین - sheen)
</p>
</div>
),

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,15 +2,7 @@
title: Intro to Compound Verbs
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
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";
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
import cookingPotatoes from "./cooking-potatoes.svg";
import doingWork from "./doing-work.svg";
import stativeCompoundTransitive from "./stative-compound-transitive.svg";
@ -19,73 +11,86 @@ import dynamicCopmoundTransitive from "./dynamic-compound-transitive.svg";
Compound verbs are verbs made up from a helper verb and some other word. These are extremely common in Pashto. In fact, 70% of the verbs in the [LingDocs Pashto Dictionary](https://dictionary.lingdocs.com) are compound verbs. Here are some examples:
<ul>
<li>
<InlinePs
opts={opts}
ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }}
/>
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }} />
<InlinePs opts={opts} ps={{ p: "کار", f: "kaar", e: "work" }} /> +{" "}
<InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} />
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "کار", f: "kaar", e: "work" }} /> + <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} />
</li>
</ul>
</ul>
<li>
<InlinePs
opts={opts}
ps={{ p: "منډې وهل", f: "munDe wahul", e: "to run" }}
/>
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "منډې وهل", f: "munDe wahul", e: "to run" }} />
<InlinePs opts={opts} ps={{ p: "منډې", f: "munDe", e: "runs" }} /> +{" "}
<InlinePs opts={opts} ps={{ p: "وهل", f: "wahul", e: "to hit" }} />
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "منډې", f: "munDe", e: "runs" }} /> + <InlinePs opts={opts} ps={{ p: "وهل", f: "wahul", e: "to hit" }} />
</li>
</ul>
</ul>
<li>
<InlinePs opts={opts} ps={{ p: "بندول", f: "bandawul", e: "to close" }} />
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "بندول", f: "bandawul", e: "to close" }} />
<InlinePs opts={opts} ps={{ p: "بند", f: "band", e: "closed" }} /> +{" "}
<InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} />
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "بند", f: "band", e: "closed" }} /> + <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} />
</li>
</ul>
</ul>
<li>
<InlinePs
opts={opts}
ps={{ p: "ستړی کېدل", f: "stuRay kedúl", e: "to get tired" }}
/>
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "ستړی کېدل", f: "stuRey kedúl", e: "to get tired" }} />
<InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRay", e: "tired" }} /> +{" "}
<InlinePs opts={opts} ps={{ p: "کېدل", f: "kedúl", e: "to become" }} />
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRey", e: "tired" }} /> + <InlinePs opts={opts} ps={{ p: "کېدل", f: "kedúl", e: "to become" }} />
</li>
</ul>
</ul>
</ul>
In order to understand how compound verbs work it's important to know that they fall into two different categories:
- **stative** compound verbs
- involve *something being changed*
- involve _something being changed_
- **dynamic** compound verbs
- involve *an action being done*
- involve _an action being done_
These two types of compounds look very similary but they *behave completely differently*. Unfortunately this is an area of Pashto grammar that is not very well known or explained, and so, learners often get quite confused about compound verbs and why they behave the way they do.
These two types of compounds look very similary but they _behave completely differently_. Unfortunately this is an area of Pashto grammar that is not very well known or explained, and so, learners often get quite confused about compound verbs and why they behave the way they do.
Before we understand how these compounds are made and how they work, it might be helpful to quickly picture them as little machines.
With **stative compounds**, we are taking some object and changing it by "making" it something else. We have something that is changing *"state,"* hence the name "stative." For example - if we *melt* ice, we are changing the state of the water from frozen to liquid. We are *making* the ice into liquid.
With **stative compounds**, we are taking some object and changing it by "making" it something else. We have something that is changing _"state,"_ hence the name "stative." For example - if we _melt_ ice, we are changing the state of the water from frozen to liquid. We are _making_ the ice into liquid.
<div className="text-center mb-2">
<img src={stativeCompoundTransitive} alt="" className="img-fluid" />
<img src={stativeCompoundTransitive} alt="" className="img-fluid" />
</div>
If we cook potatoes, we are changing the state of the potatoes from raw to cooked.
<div className="text-center mb-2">
<img src={cookingPotatoes} alt="" className="img-fluid" />
<img src={cookingPotatoes} alt="" className="img-fluid" />
</div>
With **dynamic compounds**, we are simply *doing* some action. The action is the object and the subject "does" it. So these compounds look like much simpler machines.
With **dynamic compounds**, we are simply _doing_ some action. The action is the object and the subject "does" it. So these compounds look like much simpler machines.
<div className="text-center mb-2">
<img src={dynamicCopmoundTransitive} alt="" className="img-fluid" />
<img src={dynamicCopmoundTransitive} alt="" className="img-fluid" />
</div>
For example, with the compound verb <InlinePs opts={opts} ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }} /> we have <InlinePs opts={opts} ps={{ p: "کار", f: "kaar", e: "work" }} /> as the object/action that gets done.
<div className="text-center mb-2">
<img src={doingWork} alt="" className="img-fluid" />
<img src={doingWork} alt="" className="img-fluid" />
</div>
Don't worry if this doesn't fully make sense yet. We will explain how these compounds work in the chapters ahead. For now, the important thing to know is that there are these two kinds of compounds, and they are **very different**.
@ -93,4 +98,4 @@ Don't worry if this doesn't fully make sense yet. We will explain how these comp
- **stative compounds** are used **to make** something different
- **dynamic compounds** are used **to do** an action
For each type of compound we have a completely different structure and set of rules. If a student is just told that there are "compound verbs" in Pashto and then try to understand what's going on with them, they are in for a world of pain. 😫 But if we know that there are both stative and dynamic compounds, **everything will make sense**. 🙂
For each type of compound we have a completely different structure and set of rules. If a student is just told that there are "compound verbs" in Pashto and then try to understand what's going on with them, they are in for a world of pain. 😫 But if we know that there are both stative and dynamic compounds, **everything will make sense**. 🙂

View File

@ -3,21 +3,16 @@ title: More on Compounds
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
RootsAndStems,
getVerbInfo,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import { KidsSection, VP, KingIcon, ServantIcon, PerfectiveHead, Camera, Video, Complement, BlockTerm, BlocksIcon } from "../../components/terms-links";
import { KingIcon, Complement } 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 VideoPlayer from "../../components/VideoPlayer";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import BasicBlocks from "../../components/BasicBlocks";
import Image from "../../components/Image";
import helperVerbsSummaryChart from "./helper-verbs-summary-chart.svg";
import generativeStativeCompound from "./generative-stative-compound.svg";
import ironingStative from "./ironing-stative.svg";
@ -47,7 +42,7 @@ But there are a couple of special cases to watch out for which can cause more co
## Some can be dynamic or stative
Some compounds can be used as either dynamic *or* stative compounds. For instance with the compound verb <InlinePs opts={opts} ps={{ p: "استري کول", f: "istree kawul", e: "to iron" }} /> you can use it either as:
Some compounds can be used as either dynamic _or_ stative compounds. For instance with the compound verb <InlinePs opts={opts} ps={{ p: "استري کول", f: "istree kawul", e: "to iron" }} /> you can use it either as:
- a stative compound
- as in "to iron \_\_\_\_" (to make \_\_\_\_ ironed)
@ -58,8 +53,8 @@ Some compounds can be used as either dynamic *or* stative compounds. For instanc
With the stative version we are using
- <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> as a <Complement /> noun.
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> as "to make"
- <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> as a <Complement /> noun.
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> as "to make"
So we are talking about making an object ironed.
@ -68,15 +63,163 @@ So we are talking about making an object ironed.
In the past tense, the verb will always agree with the object that's being ironed (the <KingIcon /> of the phrase).
<EditableVPEx opts={opts}>
{
{"blocks":[{"key":0.8393288429274519,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}},{"key":0.4708124056055294,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527815718,"i":10413,"p":"کمیس","f":"kamees","g":"kamees","e":"shirt, undershirt, slip, kameez","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1658796089458,"i":507,"p":"استري کول","f":"istree kawul","g":"istreekawul","e":"to iron (clothes etc.)","c":"v. dyn./stat. comp. trans.","l":1658795458148,"ec":"iron"},"complement":{"ts":1658795458148,"i":506,"p":"استري","f":"istree","g":"istree","e":"iron (for ironing clothes)","c":"n. f."}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":"stative","voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":true},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.8393288429274519,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
{
key: 0.4708124056055294,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815718,
i: 10413,
p: "کمیس",
f: "kamees",
g: "kamees",
e: "shirt, undershirt, slip, kameez",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1658796089458,
i: 507,
p: "استري کول",
f: "istree kawul",
g: "istreekawul",
e: "to iron (clothes etc.)",
c: "v. dyn./stat. comp. trans.",
l: 1658795458148,
ec: "iron",
},
complement: {
ts: 1658795458148,
i: 506,
p: "استري",
f: "istree",
g: "istree",
e: "iron (for ironing clothes)",
c: "n. f.",
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: "stative",
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: true,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts}>
{
{"blocks":[{"key":0.8393288429274519,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}},{"key":0.4708124056055294,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527815718,"i":10413,"p":"کمیس","f":"kamees","g":"kamees","e":"shirt, undershirt, slip, kameez","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1658796089458,"i":507,"p":"استري کول","f":"istree kawul","g":"istreekawul","e":"to iron (clothes etc.)","c":"v. dyn./stat. comp. trans.","l":1658795458148,"ec":"iron"},"complement":{"ts":1658795458148,"i":506,"p":"استري","f":"istree","g":"istree","e":"iron (for ironing clothes)","c":"n. f."}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":"stative","voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":true},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.8393288429274519,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
{
key: 0.4708124056055294,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815718,
i: 10413,
p: "کمیس",
f: "kamees",
g: "kamees",
e: "shirt, undershirt, slip, kameez",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1658796089458,
i: 507,
p: "استري کول",
f: "istree kawul",
g: "istreekawul",
e: "to iron (clothes etc.)",
c: "v. dyn./stat. comp. trans.",
l: 1658795458148,
ec: "iron",
},
complement: {
ts: 1658795458148,
i: 506,
p: "استري",
f: "istree",
g: "istree",
e: "iron (for ironing clothes)",
c: "n. f.",
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: "stative",
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: true,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
Also we notice that since we are using <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} /> as the helper verb, there is no <InlinePs opts={opts} ps={{ p: "و", f: "óo", e: "" }} /> prefix.
@ -85,57 +228,159 @@ Also we notice that since we are using <InlinePs opts={opts} ps={{ p: "کول",
But we can also use a <Link to="/compound-verbs/dynamic-compounds/">dynamic</Link> version of this compound if we use
- <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> as an action noun/object
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} /> as the helper verb
- <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> as an action
noun/object
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} /> as the helper
verb
Now instead of talking about making something ironed (stative), we are talking about **doing the action of ironing**
<BasicBlocks large blocks={[
<BasicBlocks
large
blocks={[
{
bottom: "Noun/Object",
inside: <div>
<div>استري</div>
<div>iron</div>
</div>,
bottom: "Noun/Object",
inside: (
<div>
<div>استري</div>
<div>iron</div>
</div>
),
},
"+",
{
bottom: "Helper Verb",
inside: <div>
<div>کول</div>
<div>to do</div>
</div>,
bottom: "Helper Verb",
inside: (
<div>
<div>کول</div>
<div>to do</div>
</div>
),
},
]} />
]}
/>
<EditableVPEx opts={opts}>
{
{"blocks":[{"key":0.8393288429274519,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}},{"key":0.4708124056055294,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1658795458148,"i":506,"p":"استري","f":"istree","g":"istree","e":"iron (for ironing clothes)","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[],"dynamicComplement":true}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1658796089458,"i":507,"p":"استري کول","f":"istree kawul","g":"istreekawul","e":"to iron (clothes etc.)","c":"v. dyn./stat. comp. trans.","l":1658795458148,"ec":"iron"},"complement":{"ts":1658795458148,"i":506,"p":"استري","f":"istree","g":"istree","e":"iron (for ironing clothes)","c":"n. f."}},"dynAuxVerb":{"entry":{"i":10058,"ts":1527812752,"g":"","p":"کول","f":"kawul","e":"to do (an action or activity)","c":"v. trans. irreg. dyn. aux.","ssp":"وکړ","ssf":"óokR","prp":"وکړل","prf":"óokRul","pprtp":"کړی","pprtf":"kúRey","diacExcept":true}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":"dynamic","voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":true},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.8393288429274519,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
{
key: 0.4708124056055294,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1658795458148,
i: 506,
p: "استري",
f: "istree",
g: "istree",
e: "iron (for ironing clothes)",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
dynamicComplement: true,
},
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1658796089458,
i: 507,
p: "استري کول",
f: "istree kawul",
g: "istreekawul",
e: "to iron (clothes etc.)",
c: "v. dyn./stat. comp. trans.",
l: 1658795458148,
ec: "iron",
},
complement: {
ts: 1658795458148,
i: 506,
p: "استري",
f: "istree",
g: "istree",
e: "iron (for ironing clothes)",
c: "n. f.",
},
},
dynAuxVerb: {
entry: {
i: 10058,
ts: 1527812752,
g: "",
p: "کول",
f: "kawul",
e: "to do (an action or activity)",
c: "v. trans. irreg. dyn. aux.",
ssp: "وکړ",
ssf: "óokR",
prp: "وکړل",
prf: "óokRul",
pprtp: "کړی",
pprtf: "kúRay",
diacExcept: true,
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: "dynamic",
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: true,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
Now the object of the phrase is <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} />, so in the past tense, the verb will <em>always</em> agree with <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} />. Even if you add a possesor to <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> <Link to="/compound-verbs/dynamic-compounds/#attaching-other-actors">to say what she was ironing</Link>, <InlinePs opts={opts} ps={{ p: "استري", f: "istree", e: "iron" }} /> is <em>still</em> the object.
<Examples opts={opts}>
{psmd([
{
p: "هغې **د کمیس استري** وکړه",
f: "haghé **du kamees istree** óokRa",
e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirt**."
},
])}
{psmd([
{
p: "هغې **د کمیس استري** وکړه",
f: "haghé **du kamees istree** óokRa",
e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirt**.",
},
])}
</Examples>
<Examples opts={opts}>
{psmd([
{
p: "هغې **د کمیسونه استري** وکړه",
f: "haghé **du kameesoona istree** óokRa",
e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirts**."
},
])}
{psmd([
{
p: "هغې **د کمیسونه استري** وکړه",
f: "haghé **du kameesoona istree** óokRa",
e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirts**.",
},
])}
</Examples>
#### Other examples
@ -145,107 +390,119 @@ Another compound that can be used as either stative or dynamic is <InlinePs opts
##### As stative:
<Examples opts={opts}>
{psmd([
{
p: "هغه **درې کسان** قتل کړل",
f: "haghú **dre kesaan** qatul kRul",
e: "He murdered **three people**",
},
])}
{psmd([
{
p: "هغه **درې کسان** قتل کړل",
f: "haghú **dre kesaan** qatul kRul",
e: "He murdered **three people**",
},
])}
</Examples>
In this example:
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is a <Complement /> noun
- <InlinePs opts={opts} ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }} /> is the object
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }} />
- there is no <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix because we're using <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} />
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is a <Complement /> noun
- <InlinePs
opts={opts}
ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }}
/> is the object
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }} />
- there is no <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix because we're using <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} />
#### As dynamic
<Examples opts={opts}>
{psmd([
{
p: "هغه **د درې کسان قتل** وکړ",
f: "haghú **du dre kesaano qatul** óokuR",
e: "He murdered three people",
sub: "lit. He did **the murder of three people**",
},
])}
{psmd([
{
p: "هغه **د درې کسان قتل** وکړ",
f: "haghú **du dre kesaano qatul** óokuR",
e: "He murdered three people",
sub: "lit. He did **the murder of three people**",
},
])}
</Examples>
In this example:
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is the object
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} />
- there is a <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix because we're using <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} />
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is the object
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} />
- there is a <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix because we're using <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} />
## Generative stative compounds
There are a number of compound verbs like:
- <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }} />
- <InlinePs opts={opts} ps={{ p: "غږ کول", f: "ghuG kawul", e: "to call out" }} />
- <InlinePs opts={opts} ps={{ p: "کیسه کول", f: "keesa kawul", e: "to tell a story" }} />
- <InlinePs
opts={opts}
ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "غږ کول", f: "ghuG kawul", e: "to call out" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "کیسه کول", f: "keesa kawul", e: "to tell a story" }}
/>
that can be used either as <Link to="/compound-verbs/dynamic-compounds/">dynamic compounds</Link> or as **generative stative compounds**.
That means that these can be used as stative compounds, but **with an unspoken complement** that describes something "existing."
<Image
src={generativeStativeCompound}
alt="generative stative compound diagram"
maxWidth="550px"
src={generativeStativeCompound}
alt="generative stative compound diagram"
maxWidth="550px"
/>
So with <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }} /> you could say:
<Examples opts={opts}>
{[
{
p: "هغې چیغه وکړه",
f: "haghé chéegha óokRa",
e: "She screamed",
sub: "DYNAMIC - lit. she did a scream"
},
]}
{[
{
p: "هغې چیغه وکړه",
f: "haghé chéegha óokRa",
e: "She screamed",
sub: "DYNAMIC - lit. she did a scream",
},
]}
</Examples>
or
or
<Examples opts={opts}>
{[
{
p: "هغې چیغه کړه",
f: "haghé chéegha kRa",
e: "She screamed",
sub: "GENERATIVE STATIVE - lit. she made a scream existing (she let out/created a scream)"
},
]}
{[
{
p: "هغې چیغه کړه",
f: "haghé chéegha kRa",
e: "She screamed",
sub: "GENERATIVE STATIVE - lit. she made a scream existing (she let out/created a scream)",
},
]}
</Examples>
You might also hear something like,
<Examples opts={opts}>
{[
{
p: "ما منډه کړه",
f: "maa múnDa kRa",
e: "I ran",
sub: "GENERATIVE STATIVE - lit. I made a run existing (I let out/created a run)",
},
]}
{[
{
p: "ما منډه کړه",
f: "maa múnDa kRa",
e: "I ran",
sub: "GENERATIVE STATIVE - lit. I made a run existing (I let out/created a run)",
},
]}
</Examples>
And these can work the the intransitive versions as well
<Examples opts={opts}>
{[
{
p: "چیغه شوه",
f: "chéegha shwa",
e: "A scream was let out",
sub: "GENERATIVE STATIVE - lit. A scream became existing",
},
]}
</Examples>
{[
{
p: "چیغه شوه",
f: "chéegha shwa",
e: "A scream was let out",
sub: "GENERATIVE STATIVE - lit. A scream became existing",
},
]}
</Examples>

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +1,73 @@
import {
Types as T,
concatPsString,
ButtonSelect,
InlinePs,
grammarUnits,
Types as T,
concatPsString,
ButtonSelect,
InlinePs,
grammarUnits,
} from "@lingdocs/ps-react";
import { useState } from "react";
import EquativeFormChoice from "../../components/EquativeFormChoice";
function WithTailChoice({ opts, ba }: { opts: T.TextOptions, ba: boolean }) {
const [choice, setChoice] = useState("aay");
const waay = concatPsString(
{p: "و", f: "w"},
choice === "aay" ? { p: "ای", f: "aay" } : { p: "ی", f: "ey" },
);
return (
<div>
<div className="text-center my-3">
<div className="text-muted mb-1">
<small>The spelling/pronunciation of the non-inflecting tail can vary based on dialect</small>
</div>
<ButtonSelect
options={[
{ label: <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} />, value: "aay" },
{ label: <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} />, value: "ey" },
]}
value={choice}
handleChange={(p) => setChoice(p)}
/>
</div>
<EquativeFormChoice
forms={{
sentence: !ba ? {
displayForm: concatPsString(
{ p: "کاشکې ... ...", f: "kaashke ... ..."}, " ",
waay, { p: "!", f: "!" },
),
english: [[["If only ... was/were ...!"]]],
} : {
displayForm: concatPsString(
{ p: "به ...", f: "ba ..." }, " ", waay,
),
english: [[["... would have been ..."]]],
},
pure: {
displayForm: !ba ? waay : concatPsString(grammarUnits.baParticle, " ", waay),
},
}}
opts={opts}
/>
function WithTailChoice({ opts, ba }: { opts: T.TextOptions; ba: boolean }) {
const [choice, setChoice] = useState("aay");
const waay = concatPsString(
{ p: "و", f: "w" },
choice === "aay" ? { p: "ای", f: "aay" } : { p: "ی", f: "ay" }
);
return (
<div>
<div className="text-center my-3">
<div className="text-muted mb-1">
<small>
The spelling/pronunciation of the non-inflecting tail can vary based
on dialect
</small>
</div>
);
<ButtonSelect
options={[
{
label: <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} />,
value: "aay",
},
{
label: <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} />,
value: "ay",
},
]}
value={choice}
handleChange={(p) => setChoice(p)}
/>
</div>
<EquativeFormChoice
forms={{
sentence: !ba
? {
displayForm: concatPsString(
{ p: "کاشکې ... ...", f: "kaashke ... ..." },
" ",
waay,
{ p: "!", f: "!" }
),
english: [[["If only ... was/were ...!"]]],
}
: {
displayForm: concatPsString(
{ p: "به ...", f: "ba ..." },
" ",
waay
),
english: [[["... would have been ..."]]],
},
pure: {
displayForm: !ba
? waay
: concatPsString(grammarUnits.baParticle, " ", waay),
},
}}
opts={opts}
/>
</div>
);
}
export default WithTailChoice;

View File

@ -3,90 +3,85 @@ title: Habitual Equative
---
import {
addToForm,
defaultTextOptions,
grammarUnits,
Examples,
concatPsString,
InlinePs,
addToForm,
defaultTextOptions,
grammarUnits,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Markdown from "markdown-to-jsx";
import EquativeFormChoice from "../../components/EquativeFormChoice";
import Link from "../../components/Link";
export const opts = defaultTextOptions;
import grassBeWet from "../../images/grass-be-wet.jpg";
import {
equativeGameHabitual,
} from "../../games/games";
import { equativeGameHabitual } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
In the last section we looked at the <Link to="/equatives/present-equative/">present equative</Link>, which we use to say something *is* something currently, or is categorically, always something. What if we want to say that something *tends to be something* or *is habitually something*?
In the last section we looked at the <Link to="/equatives/present-equative/">present equative</Link>, which we use to say something _is_ something currently, or is categorically, always something. What if we want to say that something _tends to be something_ or _is habitually something_?
## Habitual Equative Form
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.habitual,
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/she/it is ...", "They are ..."],
["He/she/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.habitual,
},
}}
opts={opts}
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.habitual
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/she/it is ...", "They are ..."],
["He/she/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.habitual,
},
}}
opts={opts}
/>
This form is used to say that something is something (A = B) **habitually, generally, or repeatedly**.
<Examples opts={opts}>
{psmd([
{
p: "سحار کې چمن لوند **وي**",
f: "saháar ke chaman loond **wee**",
e: "The grass **is** wet in the morning. (generally, habitually)",
},
{
p: "هغه تر ماښامه پورې په دوکان کې **وي**",
f: "haghá tur maaxaama pore pu dookáan ke **wee**",
e: "He's in the shop until evening. (generally, habitually)",
},
{
p: "اتو بجو نه بعد دوکان بند **وي**.",
f: "atu bajo na bad dookáan band **wee**",
e: "The shop is closed after 8 o'clock. (generally, habitually)",
},
])}
{psmd([
{
p: "سحار کې چمن لوند **وي**",
f: "saháar ke chaman loond **wee**",
e: "The grass **is** wet in the morning. (generally, habitually)",
},
{
p: "هغه تر ماښامه پورې په دوکان کې **وي**",
f: "haghá tur maaxaama pore pu dookáan ke **wee**",
e: "He's in the shop until evening. (generally, habitually)",
},
{
p: "اتو بجو نه بعد دوکان بند **وي**.",
f: "atu bajo na bad dookáan band **wee**",
e: "The shop is closed after 8 o'clock. (generally, habitually)",
},
])}
</Examples>
⚠ **Warning**: For English speakers **it take some time to get used to choosing between the *present* and *habitual* equatives**. Standard English uses the same form for both, but in Pashto the forms change!
⚠ **Warning**: For English speakers **it take some time to get used to choosing between the _present_ and _habitual_ equatives**. Standard English uses the same form for both, but in Pashto the forms change!
<Examples opts={opts}>
{psmd([
{
p: "دوکان بند **دی**.",
f: "dookáan band **dey**.",
e: "The shop **is** closed. (right now, at this moment)",
sub: "1. Present Form"
},
{
p: "دوکان هر وخت بند **وي**",
f: "dookáan hăr wakht band **wee**",
e: "The shop **is** always closed. (generally, every day)",
sub: "2. Habitual Form"
},
])}
{psmd([
{
p: "دوکان بند **دی**.",
f: "dookáan band **day**.",
e: "The shop **is** closed. (right now, at this moment)",
sub: "1. Present Form",
},
{
p: "دوکان هر وخت بند **وي**",
f: "dookáan hăr wakht band **wee**",
e: "The shop **is** always closed. (generally, every day)",
sub: "2. Habitual Form",
},
])}
</Examples>
In English, we just say "is" in both situations. But **in Pashto, you have to pick between the two forms**. Use the present form for things that are something in the moment, and use the habitual form for things are generally or habitually something.
@ -96,46 +91,78 @@ Interestingly, there is also a separate [habitual equative](https://en.wikipedia
<img className="img-fluid mb-4" src={grassBeWet} />
<div style={{ overflowX: "auto" }}>
<table className="table" style={{ minWidth: "400px" }}>
<thead>
<tr>
<th scope="col">Form</th>
<th scope="col">Standard English</th>
<th scope="col">AAVE</th>
<th scope="col">Pashto</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Present</th>
<td>
<div>The grass <strong>is</strong> wet</div>
<div className="small text-muted">right now</div>
</td>
<td>The grass <strong>is</strong> wet</td>
<td>
<Examples opts={opts}>
{[
{ p: <>چمن لوند <strong>دی</strong></>, f: <>chaman loond <strong>dey</strong></> },
]}
</Examples>
</td>
</tr>
<tr>
<th scope="row">Habitual</th>
<td>
<div>The grass <strong>is</strong> wet in the morning</div>
<div className="small text-muted">generally</div>
</td>
<td>The grass <strong>be</strong> wet in the morning</td>
<td>
<Examples opts={opts}>
{[{ p: <>په سحار کې چمن لوند <strong>وي</strong></>, f: <>pu sahaar ke chaman loond <strong>wee</strong></> }]}
</Examples>
</td>
</tr>
</tbody>
</table>
<table className="table" style={{ minWidth: "400px" }}>
<thead>
<tr>
<th scope="col">Form</th>
<th scope="col">Standard English</th>
<th scope="col">AAVE</th>
<th scope="col">Pashto</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Present</th>
<td>
<div>
The grass <strong>is</strong> wet
</div>
<div className="small text-muted">right now</div>
</td>
<td>
The grass <strong>is</strong> wet
</td>
<td>
<Examples opts={opts}>
{[
{
p: (
<>
چمن لوند <strong>دی</strong>
</>
),
f: (
<>
chaman loond <strong>day</strong>
</>
),
},
]}
</Examples>
</td>
</tr>
<tr>
<th scope="row">Habitual</th>
<td>
<div>
The grass <strong>is</strong> wet in the morning
</div>
<div className="small text-muted">generally</div>
</td>
<td>
The grass <strong>be</strong> wet in the morning
</td>
<td>
<Examples opts={opts}>
{[
{
p: (
<>
په سحار کې چمن لوند <strong>وي</strong>
</>
),
f: (
<>
pu sahaar ke chaman loond <strong>wee</strong>
</>
),
},
]}
</Examples>
</td>
</tr>
</tbody>
</table>
</div>
<GameDisplay record={equativeGameHabitual} />

View File

@ -3,14 +3,11 @@ title: Other Equatives
---
import {
addToForm,
defaultTextOptions as opts,
grammarUnits,
VerbFormDisplay,
ButtonSelect,
concatPsString,
InlinePs,
Examples,
addToForm,
defaultTextOptions as opts,
grammarUnits,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import EquativeFormChoice from "../../components/EquativeFormChoice";
@ -18,12 +15,12 @@ import WithTailChoice from "./WithTailChoice";
import Formula from "../../components/formula/Formula";
import Link from "../../components/Link";
import {
equativeGameSubjunctive,
equativeGameFuture,
equativeGamePast,
equativeGameWouldBe,
equativeGamePastSubjunctive,
equativeGameWouldHaveBeen,
equativeGameSubjunctive,
equativeGameFuture,
equativeGamePast,
equativeGameWouldBe,
equativeGamePastSubjunctive,
equativeGameWouldHaveBeen,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
import { KidsSection } from "../../components/terms-links";
@ -31,42 +28,43 @@ import { KidsSection } from "../../components/terms-links";
## Subjunctive Equative
The subjunctive equative is used to talk about something being something when the statement involves:
- a hypothetical condition
- a wish, desire, hope
- a purpose
- statement of whether it should or shouldn't be
<Examples opts={opts}>
{[
psmd({
p: "امید لرم چې خوشحاله **وي**",
f: "Umeed larum che khosháala **wee**",
e: "I hope he **is** happy",
}),
]}
{[
psmd({
p: "امید لرم چې خوشحاله **وي**",
f: "Umeed larum che khosháala **wee**",
e: "I hope he **is** happy",
}),
]}
</Examples>
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.subjunctive,
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/she/it is ...", "They are ..."],
["He/she/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.subjunctive,
},
}}
opts={opts}
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.subjunctive
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/she/it is ...", "They are ..."],
["He/she/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.subjunctive,
},
}}
opts={opts}
/>
#### Purpose
@ -74,13 +72,13 @@ The subjunctive equative is used to talk about something being something when th
The subjunctive is used in clauses that express a purpose or an aim of something being something.
<Examples opts={opts}>
{psmd([
{
p: "زه به درته سندره وایم، چې ته خوشحاله **وې**",
f: "zu ba taa ta sandura waayum, che tu khoshaala **we**.",
e: "I'll sing to you, so that you'll **be** happy.",
},
])}
{psmd([
{
p: "زه به درته سندره وایم، چې ته خوشحاله **وې**",
f: "zu ba taa ta sandura waayum, che tu khoshaala **we**.",
e: "I'll sing to you, so that you'll **be** happy.",
},
])}
</Examples>
#### Judgement/obligation
@ -88,49 +86,49 @@ The subjunctive is used in clauses that express a purpose or an aim of something
The subjunctive form can be used to talk about it being being good or bad, necessary, or required that something is something.
<Examples opts={opts}>
{psmd([
{
p: "هغوي باید په ښووونځي کې **وي**",
f: "hagwee baayad pu xowoondzee ke **wee**.",
e: "They have to be in school.",
},
])}
{psmd([
{
p: "هغوي باید په ښووونځي کې **وي**",
f: "hagwee baayad pu xowoondzee ke **wee**.",
e: "They have to be in school.",
},
])}
</Examples>
#### Desire
<Examples opts={opts}>
{psmd([
{
p: "امید لرم چې هلته **وي**",
f: "Umeed larum che halta **wee**.",
e: "I hope they're there.",
},
{
p: "هغه غواړي چې مونږ په کور کې **وو**",
f: "haghá ghwaaRee che moonG pu kor ke **woo**.",
e: "He wants us to be home.",
},
])}
{psmd([
{
p: "امید لرم چې هلته **وي**",
f: "Umeed larum che halta **wee**.",
e: "I hope they're there.",
},
{
p: "هغه غواړي چې مونږ په کور کې **وو**",
f: "haghá ghwaaRee che moonG pu kor ke **woo**.",
e: "He wants us to be home.",
},
])}
</Examples>
#### Conditions
The subjunctive form is also used to talk about conditions or possibilities. *If A = B, then...* or *It could be that A = B ...*
The subjunctive form is also used to talk about conditions or possibilities. _If A = B, then..._ or _It could be that A = B ..._
<Examples opts={opts}>
{psmd([
{
p: "که دوکان کې وریژې **وي** نو وایې خله",
f: "ku dokaan ke wrejze **wee**, no waa-ye-khla",
e: "If there's rice in the store, buy it",
},
{
p: "کېدی شي چې ډوډۍ تیاره **وي**",
f: "kedey shee che DoDúy tayaara **wee**",
e: "The food could be ready",
},
])}
{psmd([
{
p: "که دوکان کې وریژې **وي** نو وایې خله",
f: "ku dokaan ke wrejze **wee**, no waa-ye-khla",
e: "If there's rice in the store, buy it",
},
{
p: "کېدی شي چې ډوډۍ تیاره **وي**",
f: "keday shee che DoDúy tayaara **wee**",
e: "The food could be ready",
},
])}
</Examples>
#### Important Note on Common Use:
@ -138,20 +136,20 @@ The subjunctive form is also used to talk about conditions or possibilities. *If
This is the standard/written form of the subjunctive equative. However in many dialects you will find that people use the same forms as the <Link to="/equative/habitual-equative">habitual equative</Link> when speaking. For example:
<Examples opts={opts}>
{psmd([
{
p: "هغه غواړي چې مونږ په کور کې **وو**",
f: "haghá ghwaaRee che moonG pu kor ke **woo**.",
e: "He wants us to be home.",
sub: "proper / standard",
},
{
p: "هغه غواړي چې مونږ په کور کې **یو**",
f: "haghá ghwaaRee che moonG pu kor ke **yoo**.",
e: "He wants us to be home.",
sub: "often spoken / colloquial",
},
])}
{psmd([
{
p: "هغه غواړي چې مونږ په کور کې **وو**",
f: "haghá ghwaaRee che moonG pu kor ke **woo**.",
e: "He wants us to be home.",
sub: "proper / standard",
},
{
p: "هغه غواړي چې مونږ په کور کې **یو**",
f: "haghá ghwaaRee che moonG pu kor ke **yoo**.",
e: "He wants us to be home.",
sub: "often spoken / colloquial",
},
])}
</Examples>
<GameDisplay record={equativeGameSubjunctive} />
@ -164,72 +162,73 @@ This is used for:
2. To guess or surmise about something being something (now or in the future). ("I'll be...")
<Formula>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> + <Link to="/equatives/habitual-equative/">habitual equative</Link>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> +{" "}
<Link to="/equatives/habitual-equative/">habitual equative</Link>
</Formula>
<div className="small">
Note: The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the <KidsSection />.
Note: The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the{" "}
<KidsSection />.
</div>
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm([
grammarUnits.pronouns.far.plain,
" ",
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
],
grammarUnits.equativeEndings.habitual,
),
english: [
["I will be ...", "We will be ..."],
["I will be ...", "We will be ..."],
["You will be ...", "You will be ..."],
["You will be ...", "You will be ..."],
["He/she/it will be ...", "They will be ..."],
["He/she/it will be ...", "They will be ..."],
],
},
pure: {
displayForm: addToForm([
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
], grammarUnits.equativeEndings.habitual)
},
}}
opts={opts}
forms={{
sentence: {
displayForm: addToForm(
[
grammarUnits.pronouns.far.plain,
" ",
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
],
grammarUnits.equativeEndings.habitual
),
english: [
["I will be ...", "We will be ..."],
["I will be ...", "We will be ..."],
["You will be ...", "You will be ..."],
["You will be ...", "You will be ..."],
["He/she/it will be ...", "They will be ..."],
["He/she/it will be ...", "They will be ..."],
],
},
pure: {
displayForm: addToForm(
[grammarUnits.baParticle, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.habitual
),
},
}}
opts={opts}
/>
#### Examples
<Examples opts={opts}>
{psmd([
{
p: "زه **به** په کور کې **یم**.",
f: "zu **ba** pu kor ke **yum**.",
e: "I **will be** at home.",
},
{
p: "مونږ **به** ستړي **یو**",
f: "moonG ba stúRee **yoo**.",
e: "We **will be** tired.",
},
{
p: "ډوډۍ **به** تیاره **وي**.",
f: "DoDúy **ba** tayáara **wee**.",
e: "The food **will be** ready.",
},
{
p: "تاسو **به** وږي **یئ**، که نه؟",
f: "taaso **ba** wuGee **yeyy**, ku nu?",
e: "You**'ll be** hungry, won't you?",
},
])}
{psmd([
{
p: "زه **به** په کور کې **یم**.",
f: "zu **ba** pu kor ke **yum**.",
e: "I **will be** at home.",
},
{
p: "مونږ **به** ستړي **یو**",
f: "moonG ba stúRee **yoo**.",
e: "We **will be** tired.",
},
{
p: "ډوډۍ **به** تیاره **وي**.",
f: "DoDúy **ba** tayáara **wee**.",
e: "The food **will be** ready.",
},
{
p: "تاسو **به** وږي **یئ**، که نه؟",
f: "taaso **ba** wuGee **yey**, ku nu?",
e: "You**'ll be** hungry, won't you?",
},
])}
</Examples>
<GameDisplay record={equativeGameFuture} />
@ -241,62 +240,63 @@ This is used to say that something was something in the past. ("I was...")
It is usually used in the short form.
<Formula>
<InlinePs opts={opts} ps={{ p: "ول", f: "wul" }} /> + <Link to="/verbs/verb-endings/#past-verb-endings">past verb endings</Link>
<InlinePs opts={opts} ps={{ p: "ول", f: "wul" }} /> +{" "}
<Link to="/verbs/verb-endings/#past-verb-endings">past verb endings</Link>
</Formula>
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm([
grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.past,
),
english: [
["I was ...", "We were ..."],
["I was ...", "We were ..."],
["You were ...", "You were ..."],
["You were ...", "You were ..."],
["He/it was ...", "They were ..."],
["She/it was ...", "They were ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.past,
},
}}
opts={opts}
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.past
),
english: [
["I was ...", "We were ..."],
["I was ...", "We were ..."],
["You were ...", "You were ..."],
["You were ...", "You were ..."],
["He/it was ...", "They were ..."],
["She/it was ...", "They were ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.past,
},
}}
opts={opts}
/>
### Examples
<Examples opts={opts}>
{psmd([
{
p: "ته چېرته **وې**؟",
f: "tu cherta **we**?",
e: "Where **were** you?",
},
{
p: "زه په کور کې **وم**.",
f: "zu pu kor ke **wum**.",
e: "I **was** at home.",
},
{
p: "هغه ډېر ستړی **و**.",
f: "haghá Der stúRey **wo**.",
e: "He **was** very tired.",
},
{
p: "هغه ډېره ستړې **وه**.",
f: "haghá Déra stúRe **wa**.",
e: "She **was** very tired.",
},
{
p: "مونږ خفه **وو**",
f: "moonG khúfa **woo**.",
e: "We **were** sad.",
},
])}
{psmd([
{
p: "ته چېرته **وې**؟",
f: "tu cherta **we**?",
e: "Where **were** you?",
},
{
p: "زه په کور کې **وم**.",
f: "zu pu kor ke **wum**.",
e: "I **was** at home.",
},
{
p: "هغه ډېر ستړی **و**.",
f: "haghá Der stúRay **wo**.",
e: "He **was** very tired.",
},
{
p: "هغه ډېره ستړې **وه**.",
f: "haghá Déra stúRe **wa**.",
e: "She **was** very tired.",
},
{
p: "مونږ خفه **وو**",
f: "moonG khúfa **woo**.",
e: "We **were** sad.",
},
])}
</Examples>
<GameDisplay record={equativeGamePast} />
@ -304,6 +304,7 @@ It is usually used in the short form.
## "Would be" Equative
This is used to:
- say A was B habitually/repeatedly in past
- to presume or guess about A being B in the past
- or to talk about the outcome of hypothetical conditions
@ -312,45 +313,46 @@ This is used to:
Like the <Link to="#past-equative">past equative</Link> that it's based on, it's usually used with the short form.
<Formula>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> + <Link to="#past-equative">past equative</Link>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> +{" "}
<Link to="#past-equative">past equative</Link>
</Formula>
<div className="small">
Note: The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the <KidsSection />.
Note: The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the{" "}
<KidsSection />.
</div>
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm([
grammarUnits.pronouns.far.plain,
" ",
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
],
grammarUnits.equativeEndings.past,
),
english: [
["I'll be ...", "We'll be ..."],
["I'll be ...", "We'll be ..."],
["You'll be ...", "You'll be ..."],
["You'll be ...", "You'll be ..."],
["He/she/it'll be ...", "They'll be ..."],
["He/she/it'll be ...", "They'll be ..."],
],
},
pure: {
displayForm: addToForm([
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
], grammarUnits.equativeEndings.past)
}
}}
opts={opts}
forms={{
sentence: {
displayForm: addToForm(
[
grammarUnits.pronouns.far.plain,
" ",
grammarUnits.baParticle,
" ",
{ p: "...", f: "..." },
" ",
],
grammarUnits.equativeEndings.past
),
english: [
["I'll be ...", "We'll be ..."],
["I'll be ...", "We'll be ..."],
["You'll be ...", "You'll be ..."],
["You'll be ...", "You'll be ..."],
["He/she/it'll be ...", "They'll be ..."],
["He/she/it'll be ...", "They'll be ..."],
],
},
pure: {
displayForm: addToForm(
[grammarUnits.baParticle, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.past
),
},
}}
opts={opts}
/>
### Examples
@ -358,42 +360,42 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
#### Presuming something about the past
<Examples opts={opts}>
{psmd([
{
p: "ته **به** خبر **وې** که نه؟",
f: "tu **ba** khabúr **we**, ka na?.",
e: "You would have known, wouldn't you?",
},
])}
{psmd([
{
p: "ته **به** خبر **وې** که نه؟",
f: "tu **ba** khabúr **we**, ka na?.",
e: "You would have known, wouldn't you?",
},
])}
</Examples>
#### Habitual Past
<Examples opts={opts}>
{psmd([
{
p: "زه **به** هر سهار هلته **وم**",
f: "zu **ba** hăr saháar halta **wum**",
e: "I would be there every morning",
},
{
p: "زما مور **به** دلته ناسته **وه**.",
f: "zmaa mor **ba** dalta naasta **wa**.",
e: "My mom would be sitting here.",
}
])}
{psmd([
{
p: "زه **به** هر سهار هلته **وم**",
f: "zu **ba** hăr saháar halta **wum**",
e: "I would be there every morning",
},
{
p: "زما مور **به** دلته ناسته **وه**.",
f: "zmaa mor **ba** dalta naasta **wa**.",
e: "My mom would be sitting here.",
},
])}
</Examples>
#### Hypothetical outcome
<Examples opts={opts}>
{psmd([
{
p: "که خوب مې نه وای کړی، زه **به** ستړی **وم**.",
f: "ku khob me nu waay kúRey, zu **ba** stúRey **wum**.",
e: "If I hadn't slept, I **would have been** tired.",
},
])}
{psmd([
{
p: "که خوب مې نه وای کړی، زه **به** ستړی **وم**.",
f: "ku khob me nu waay kúRay, zu **ba** stúRay **wum**.",
e: "If I hadn't slept, I **would have been** tired.",
},
])}
</Examples>
<GameDisplay record={equativeGameWouldBe} />
@ -403,69 +405,68 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
This is used to talk about:
- If A were hypothetically B but it isn't
- also if A *had been* hypothetically B, but it isn't
- also if A _had been_ hypothetically B, but it isn't
- If you wish A were B
- If A should have been B
- A had to be B (it was necessary/good for A to be B)
- In prayers and blessings (in some dialects)
Because this is based on the the non-inflecting tail, *it doesn't change at all, no matter what the subject is*.
Because this is based on the the non-inflecting tail, _it doesn't change at all, no matter what the subject is_.
<Formula>
<InlinePs opts={opts} ps={{ p: "و", f: "w" }} /> + non-inflecting tail
<InlinePs opts={opts} ps={{ p: "و", f: "w" }} /> + non-inflecting tail
</Formula>
<WithTailChoice opts={opts} ba={false} />
### Examples
#### If A were B
#### If A were B
<Examples opts={opts}>
{psmd([
{
p: "که زه ستا پر ځای **وای**",
f: "ku zu staa pur dzaay **waay**",
e: "If I **were** in your place",
},
{
p: "که مونږ خبر **وای**، نه راتلو.",
f: "ku moonG khabúr **waay**, nú raatloo.",
e: "If had known, we wouldn't have come.",
},
])}
{psmd([
{
p: "که زه ستا پر ځای **وای**",
f: "ku zu staa pur dzaay **waay**",
e: "If I **were** in your place",
},
{
p: "که مونږ خبر **وای**، نه راتلو.",
f: "ku moonG khabúr **waay**, nú raatloo.",
e: "If had known, we wouldn't have come.",
},
])}
</Examples>
#### You wish A were B
<Examples opts={opts}>
{psmd([
{
p: "**کاشکې ته دلته **وای!",
f: "kaashke tu dălta **waay**!",
e: "If only you were here!",
},
])}
{psmd([
{
p: "**کاشکې ته دلته **وای!",
f: "kaashke tu dălta **waay**!",
e: "If only you were here!",
},
])}
</Examples>
#### A should have been B
<Examples opts={opts}>
{psmd([
{
p: "د باید دلته **وای**!",
f: "tu baayad dălta **waay**!",
e: "You should have been here!",
},
{
p: "د باید دلته **وای**",
f: "tu baayad dălta **waay**",
e: "You had to be here",
},
])}
{psmd([
{
p: "د باید دلته **وای**!",
f: "tu baayad dălta **waay**!",
e: "You should have been here!",
},
{
p: "د باید دلته **وای**",
f: "tu baayad dălta **waay**",
e: "You had to be here",
},
])}
</Examples>
<GameDisplay record={equativeGamePastSubjunctive} />
## "Would have been" Equative
@ -476,7 +477,8 @@ This is used to talk about:
- A should have been B, or it would have been good if A would have been B
<Formula>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> + <Link to="#past-subjunctive">past subjunctive</Link>
<InlinePs opts={opts} ps={grammarUnits.baParticle} /> +{" "}
<Link to="#past-subjunctive">past subjunctive</Link>
</Formula>
<WithTailChoice opts={opts} ba={true} />
@ -485,17 +487,26 @@ This is used to talk about:
## Overview of 8 Equatives
<h5>1. <Link to="/equatives/present-equative/">Present Equative</Link></h5>
<h5>
1. <Link to="/equatives/present-equative/">Present Equative</Link>
</h5>
- A is B currently
- A is B categorically, definately
<h5>2. <Link to="/equatives/habitual-equative/">Habitual Equative</Link></h5>
<h5>
2. <Link to="/equatives/habitual-equative/">Habitual Equative</Link>
</h5>
- A is B habitually, repeatedly, generally
- A tends to be B
<h5>3.<Link to="/equatives/other-equatives/#subjunctive-equative">Subjunctive Equative</Link></h5>
<h5>
3.
<Link to="/equatives/other-equatives/#subjunctive-equative">
Subjunctive Equative
</Link>
</h5>
- One desires or wants A to be B
- A should/must be B (judgement)
@ -503,31 +514,51 @@ This is used to talk about:
- if A is B
- ...so that A is B (purpose)
<h5>4. <Link to="/equatives/other-equatives/#future-equative">Future Equative</Link></h5>
<h5>
4.{" "}
<Link to="/equatives/other-equatives/#future-equative">Future Equative</Link>
</h5>
- A will be B
- presuming or guessing that A will be B
<h5>5. <Link to="/equatives/other-equatives/#past-equative">Past Equative</Link></h5>
<h5>
5. <Link to="/equatives/other-equatives/#past-equative">Past Equative</Link>
</h5>
- A was B
- (if) A turns out to be B
<h5>6. <Link to="/equatives/other-equatives/#would-be-equative">"Would be" Equative</Link></h5>
<h5>
6.{" "}
<Link to="/equatives/other-equatives/#would-be-equative">
"Would be" Equative
</Link>
</h5>
- A was B habitually
- Presuming or guessing that A was B
- A would have been B (as the result of a hypothetical outcome)
- A should have been B
<h5>7. <Link to="/equatives/other-equatives/#past-subjunctive">Past Subjunctive Equative</Link></h5>
<h5>
7.{" "}
<Link to="/equatives/other-equatives/#past-subjunctive">
Past Subjunctive Equative
</Link>
</h5>
- A should have been B
- A had to be B (it was necessary/good for A to be B)
- If A were B (unreal conditional)...
- I wish/if only A were B!
<h5>8. <Link to="/equatives/other-equatives/#would-have-been-equative">"Would have been" Equative</Link></h5>
<h5>
8.{" "}
<Link to="/equatives/other-equatives/#would-have-been-equative">
"Would have been" Equative
</Link>
</h5>
- (given some hypothetical condition) A would have been B

View File

@ -4,20 +4,15 @@ title: Present Equative
import Link from "../../components/Link";
import Carousel from "../../components/Carousel";
import { useState } from "react";
import {
grammarUnits,
Examples,
defaultTextOptions,
ButtonSelect,
addToForm,
InlinePs,
grammarUnits,
Examples,
defaultTextOptions,
addToForm,
InlinePs,
} from "@lingdocs/ps-react";
import {
equativeGamePresent,
} from "../../games/games";
import { equativeGamePresent } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
import psmd from "../../lib/psmd";
import EquativeFormChoice from "../../components/EquativeFormChoice";
## Present Equative Form
@ -29,86 +24,154 @@ Here are the **present equative endings** that you have to use depending on the
Not that this is **only for making statements about what is currently or 100% true**. If something tends to be true, or is habitually true, then you will need to use the <Link to="/equatives/habitual-equative">habitual equative</Link>.
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.present,
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/it is ...", "They are ..."],
["She/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.present,
}
}}
opts={defaultTextOptions}
<EquativeFormChoice
forms={{
sentence: {
displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.present
),
english: [
["I am ...", "We are ..."],
["I am ...", "We are ..."],
["You are ...", "You are ..."],
["You are ...", "You are ..."],
["He/it is ...", "They are ..."],
["She/it is ...", "They are ..."],
],
},
pure: {
displayForm: grammarUnits.equativeEndings.present,
},
}}
opts={defaultTextOptions}
/>
**Note**: in colloquial speech with some dialects, people will use <InlinePs opts={defaultTextOptions} ps={{ p: "ده", f: "da" }} /> for both masculine and feminine subjects.
**Note**: in colloquial speech with some dialects, people will use <InlinePs opts={defaultTextOptions} ps={{ p: "ده", f: "da" }} /> for both masculine and feminine subjects.
Flip through the following examples and notice how the equative changes depending on the subject.
<Carousel
items={[
{ title: "1st pers. sing.", ex: { p: "زه خوشحاله یم", f: "zu khosháala yum", e: "I am happy" }},
{ title: "2nd pers. sing.", ex: { p: "ته خوشحاله یې", f: "tu khosháala ye", e: "You are happy" }},
{ title: "3rd pers. sing. masc.", ex: { p: "هغه خوشحاله دی", f: "haghá khosháala dey", e: "He is happy" }},
{ title: "3rd pers. sing. fem.", ex: { p: "پلوشه خوشحاله ده", f: "pulwasha khosháala da", e: "Pulwasha is happy" }},
{ title: "1st pers. plur. masc.", ex: { p: "مونږ خوشحاله یو", f: "moonG khosháala yoo", e: "We are happy" }},
{ title: "2nd pers. plur.", ex: { p: "تاسو خوشحاله یئ", f: "taaso khosháala yeyy", e: "You (pl.) are happy" }},
{ title: "3rd pers. plur.", ex: { p: "ماشومان خوشحاله دي", f: "maashoomáan khosháala dee", e: "The children are happy" }},
{ title: "3rd pers. plur.", ex: { p: "دوي خوشحاله دي", f: "dwee khosháala dee", e: "They are happy" }},
]}
render={(item) => ({
title: item.title,
body: <Examples opts={defaultTextOptions}>{[item.ex]}</Examples>,
})}
<Carousel
items={[
{
title: "1st pers. sing.",
ex: { p: "زه خوشحاله یم", f: "zu khosháala yum", e: "I am happy" },
},
{
title: "2nd pers. sing.",
ex: { p: "ته خوشحاله یې", f: "tu khosháala ye", e: "You are happy" },
},
{
title: "3rd pers. sing. masc.",
ex: { p: "هغه خوشحاله دی", f: "haghá khosháala day", e: "He is happy" },
},
{
title: "3rd pers. sing. fem.",
ex: {
p: "پلوشه خوشحاله ده",
f: "pulwasha khosháala da",
e: "Pulwasha is happy",
},
},
{
title: "1st pers. plur. masc.",
ex: { p: "مونږ خوشحاله یو", f: "moonG khosháala yoo", e: "We are happy" },
},
{
title: "2nd pers. plur.",
ex: {
p: "تاسو خوشحاله یئ",
f: "taaso khosháala yey",
e: "You (pl.) are happy",
},
},
{
title: "3rd pers. plur.",
ex: {
p: "ماشومان خوشحاله دي",
f: "maashoomáan khosháala dee",
e: "The children are happy",
},
},
{
title: "3rd pers. plur.",
ex: { p: "دوي خوشحاله دي", f: "dwee khosháala dee", e: "They are happy" },
},
]}
render={(item) => ({
title: item.title,
body: <Examples opts={defaultTextOptions}>{[item.ex]}</Examples>,
})}
/>
## Examples
## Examples
<Examples opts={defaultTextOptions} ex={[
{ p: "هغوي ماشومان دي", f: "haghwée mashoomáan dee", e: "They are children" },
<Examples
opts={defaultTextOptions}
ex={[
{
p: "هغوي ماشومان دي",
f: "haghwée mashoomáan dee",
e: "They are children",
},
{ p: "ته ډاکټر یې؟", f: "tu DakTár ye?", e: "Are you a doctor?" },
{ p: "تاسو ډاکټران یئ؟", f: "taaso DakTaráan yeyy?", e: "Are you (pl.) doctors?" },
{ p: "دا ستا کور دی", f: "daa staa kor dey", e: "That's your house" },
{ p: "دا ستا کورونه دي", f: "daa staa koróona dee", e: "Those are your houses" },
]} />
{
p: "تاسو ډاکټران یئ؟",
f: "taaso DakTaráan yey?",
e: "Are you (pl.) doctors?",
},
{ p: "دا ستا کور دی", f: "daa staa kor day", e: "That's your house" },
{
p: "دا ستا کورونه دي",
f: "daa staa koróona dee",
e: "Those are your houses",
},
]}
/>
Notice how the equative agrees with the subject, but also how the complement can inflect (change) depending on the gender and number. We'll understand more about how this works when we look at *inflection*.
Notice how the equative agrees with the subject, but also how the complement can inflect (change) depending on the gender and number. We'll understand more about how this works when we look at _inflection_.
<Examples opts={defaultTextOptions} ex={[
{ p: "زه ستړی یم", f: "zu stúRey yum", e: "I (m.) am tired 👨"},
{ p: "زه ستړې یم", f: "zu stúRe yum", e: "I (f.) am tired 👩"},
<Examples
opts={defaultTextOptions}
ex={[
{ p: "زه ستړی یم", f: "zu stúRay yum", e: "I (m.) am tired 👨" },
{ p: "زه ستړې یم", f: "zu stúRe yum", e: "I (f.) am tired 👩" },
{ p: "ته پښتون یې؟", f: "tu puxtoon ye?", e: "Are you (m.) a Pashtun?" },
{ p: "ته پښتنه یې؟", f: "tu puxtana ye?", e: "Are you (f.) a Pashtun?" },
{ p: "تاسو پښتانه یې؟", f: "taaso puxtaanu yeyy?", e: "Are you (m. pl.) Pashtuns?" },
{ p: "تاسو پښتنې یې؟", f: "taaso puxtane yeyy?", e: "Are you (f. pl.) Pashtuns?" },
]} />
{
p: "تاسو پښتانه یې؟",
f: "taaso puxtaanu yey?",
e: "Are you (m. pl.) Pashtuns?",
},
{
p: "تاسو پښتنې یې؟",
f: "taaso puxtane yey?",
e: "Are you (f. pl.) Pashtuns?",
},
]}
/>
Note: To understand why/how these words are changing, you will need to read up on *inflection*.
Note: To understand why/how these words are changing, you will need to read up on _inflection_.
## Notes on word order
When you're asking a question, all you have to do is change the intonation. You don't have to change the word order like you do in English.
<Examples opts={defaultTextOptions} ex={[
<Examples
opts={defaultTextOptions}
ex={[
{ p: "ته پښتون یې.", f: "tu puxtoon ye.", e: "You (m.) are a Pashtun." },
{ p: "ته پښتون یې؟", f: "tu puxtoon ye?", e: "Are you (m.) a Pashtun?" },
]} />
]}
/>
**99.9% of the time the equative will go at the end of the sentence.** But in poetry the order often gets flipped around. You can also flip the order around to make an emphatic point.
<Examples opts={defaultTextOptions} ex={[
{ p: "خو ته یې افعان", f: "kho tu ye afgháan", e: "But you are Afghan!" }
]} />
<Examples
opts={defaultTextOptions}
ex={[
{ p: "خو ته یې افعان", f: "kho tu ye afgháan", e: "But you are Afghan!" },
]}
/>
<GameDisplay record={equativeGamePresent} />

View File

@ -2,31 +2,27 @@
title: Intro to Inflection
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import Carousel from "../../components/Carousel";
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
import Table from "../../components/Table";
import InlineInflectionButton from "../../components/InlineInflectionButton";
import Formula from "../../components/formula/Formula";
import catInflectionGif from "../../images/cat-inflection.gif";
export const singleInflectionHeadRow = [
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton /></div>
<div className="align-self-center">Plain</div>
</div>,
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton inflection={1} /></div>
<div className="align-self-center">Inflected</div>
</div>,
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2">
<InlineInflectionButton />
</div>
<div className="align-self-center">Plain</div>
</div>,
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2">
<InlineInflectionButton inflection={1} />
</div>
<div className="align-self-center">Inflected</div>
</div>,
];
In Pashto, *nouns and adjectives get morphed or changed in certain situations*. We call this **inflection**.
In Pashto, _nouns and adjectives get morphed or changed in certain situations_. We call this **inflection**.
In this chapter we will explain **why** inflection happens (in what situations words inflect). In the following chapters we will explain **how** inflection happens with different types of words (how exactly the words change).
@ -43,16 +39,26 @@ For any of these three reasons, you do the same thing to the word: inflect it!
If we think of a word as a little button <InlineInflectionButton />, then we can think of inflection as pressing down the button <InlineInflectionButton inflection={1} /> and modifying the word slightly.
<div className="text-center mb-3">
<img src={catInflectionGif} alt="a cat pressing a button for Pashto inflections" className="img-fluid" />
<img
src={catInflectionGif}
alt="a cat pressing a button for Pashto inflections"
className="img-fluid"
/>
</div>
### Inflecting for Reason #1 - Plural
<Table headRow={singleInflectionHeadRow} opts={opts}>
{[
[{p:"سړی", f:"saRey", e:"man"}, {p:"سړي", f:"saRee", e:"men"}],
[{p:"ښځه", f:"xudza", e:"woman"}, {p:"ښځې", f:"xudze", e:"women"}],
]}
{[
[
{ p: "سړی", f: "saRay", e: "man" },
{ p: "سړي", f: "saRee", e: "men" },
],
[
{ p: "ښځه", f: "xudza", e: "woman" },
{ p: "ښځې", f: "xudze", e: "women" },
],
]}
</Table>
### Inflecting for Reason #2 - Sandwich
@ -60,10 +66,24 @@ If we think of a word as a little button <InlineInflectionButton />, then we can
Let's attach a little <InlinePs opts={opts} ps={{p:"د ...", f:"du ...", e:"'s, of, possessive"}} /> sandwich to the same words and watch what happens.
<Table headRow={singleInflectionHeadRow} opts={opts}>
{[
[{p:"سړی", f:"saRey", e:"man"}, {p:"د سړي نوم څه دی؟", f:"du saRee noom tsu dey?", e:"What's the man's name?"}],
[{p:"ښځه", f:"xudza", e:"woman"}, {p:"د ښځې نوم څه دی؟", f:"du xudze noom tsu dey?", e:"What's the woman's name?"}],
]}
{[
[
{ p: "سړی", f: "saRay", e: "man" },
{
p: "د سړي نوم څه دی؟",
f: "du saRee noom tsu day?",
e: "What's the man's name?",
},
],
[
{ p: "ښځه", f: "xudza", e: "woman" },
{
p: "د ښځې نوم څه دی؟",
f: "du xudze noom tsu day?",
e: "What's the woman's name?",
},
],
]}
</Table>
### Inflecting for Reason #3 - Subject of a transitive past tense verb
@ -71,65 +91,126 @@ Let's attach a little <InlinePs opts={opts} ps={{p:"د ...", f:"du ...", e:"'s,
If a word is the subject of a past tense transitive verb, we also inflect it.
<Table headRow={singleInflectionHeadRow} opts={opts}>
{[
[{p:"سړی", f:"saRey", e:"man"}, {p:"سړي ډوډۍ وخوړه", f:"saRee DoDuy óokhoRa", e:"The man ate food."}],
[{p:"ښځه", f:"xudza", e:"woman"}, {p:"ښځې ډوډۍ وخوړه", f:"xudze DoDuy óokhoRa", e:"The woman ate food."}],
]}
{[
[
{ p: "سړی", f: "saRay", e: "man" },
{ p: "سړي ډوډۍ وخوړه", f: "saRee DoDuy óokhoRa", e: "The man ate food." },
],
[
{ p: "ښځه", f: "xudza", e: "woman" },
{
p: "ښځې ډوډۍ وخوړه",
f: "xudze DoDuy óokhoRa",
e: "The woman ate food.",
},
],
]}
</Table>
Notice how for all these reasons, the exact same thing happened to the words.
Notice how for all these reasons, the exact same thing happened to the words.
***It doesn't matter if you're inflecting it for reason #1, reason #2, or reason #3. The inflection always looks the same.*** 🤯
**_It doesn't matter if you're inflecting it for reason #1, reason #2, or reason #3. The inflection always looks the same._** 🤯
## Double Inflection
So what happens if you need to inflect for two reasons at once? 🤔
So what happens if you need to inflect for two reasons at once? 🤔
Once a word gets inflected, you can push or bend it even further a second time. Think of the word as a button that gets pushed halfway down, <InlineInflectionButton inflection={1} /> (1st inflection) then all the way down <InlineInflectionButton inflection={2} /> (2nd inflection).
<Table wide headRow={[
<Table
wide
headRow={[
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton /></div>
<div className="align-self-center">Plain</div>
<div className="mr-2">
<InlineInflectionButton />
</div>
<div className="align-self-center">Plain</div>
</div>,
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton inflection={1} /></div>
<div className="align-self-center">1st Inflection</div>
<div className="mr-2">
<InlineInflectionButton inflection={1} />
</div>
<div className="align-self-center">1st Inflection</div>
</div>,
<div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton inflection={2} /></div>
<div className="align-self-center">2nd Inflection</div>
<div className="mr-2">
<InlineInflectionButton inflection={2} />
</div>
<div className="align-self-center">2nd Inflection</div>
</div>,
]} opts={opts}>
{[
[
{p:"سړی", f:"saRey", e:"man"},
{p:"سړي", f:"saRee"},
{p:"سړیو", f:"saRiyo"},
],
[
{p:"ښځه", f:"xudza", e:"woman"},
{p:"ښځې", f:"xudze"}, {p:"ښځو", f:"xudzo"}
],
[
{p:"دا سړی پښتون دی", f:"daa saRey puxtoon dey", e:"That man is a Pashtun", sub:"no reason to inflect"},
{p:"هغوي سړي دي", f:"haghwee saRee dee", e:"They are men", sub:"inflect for plural"},
{p:"د سړیو کور هلته دی", f:"du saRiyo kor halta dey", e:"The men's house is there", sub:"inflect for plural and sandwich"},
],
[
null,
{p:"د سړي کور هلته دی", f:"du saRee kor halta dey", e:"The man's house is there", sub:"inflect for sandwich"},
null,
],
[
{p:"دا ښځه پښتنه ده", f:"daa xudza puxtana da", e:"That woman is a Pashtun", sub:"no reason to inflect"},
{p:"هغوي ښځې دي", f:"haghwee xudze dee", e:"They are women", sub:"inflect for plural"},
{p:"د ښځو کور هلته دی", f:"du xudzo kor halta dey", e:"The ladies' house is there", sub:"inflect for plural and sandwich"},
],
[
null,
{p:"د ښځې کور هلته دی", f:"du xudze kor halta dey", e:"The woman's house is there", sub:"inflect for sandwich"},
null,
],
]}
]}
opts={opts}
>
{[
[
{ p: "سړی", f: "saRay", e: "man" },
{ p: "سړي", f: "saRee" },
{ p: "سړیو", f: "saRiyo" },
],
[
{ p: "ښځه", f: "xudza", e: "woman" },
{ p: "ښځې", f: "xudze" },
{ p: "ښځو", f: "xudzo" },
],
[
{
p: "دا سړی پښتون دی",
f: "daa saRay puxtoon day",
e: "That man is a Pashtun",
sub: "no reason to inflect",
},
{
p: "هغوي سړي دي",
f: "haghwee saRee dee",
e: "They are men",
sub: "inflect for plural",
},
{
p: "د سړیو کور هلته دی",
f: "du saRiyo kor halta day",
e: "The men's house is there",
sub: "inflect for plural and sandwich",
},
],
[
null,
{
p: "د سړي کور هلته دی",
f: "du saRee kor halta day",
e: "The man's house is there",
sub: "inflect for sandwich",
},
null,
],
[
{
p: "دا ښځه پښتنه ده",
f: "daa xudza puxtana da",
e: "That woman is a Pashtun",
sub: "no reason to inflect",
},
{
p: "هغوي ښځې دي",
f: "haghwee xudze dee",
e: "They are women",
sub: "inflect for plural",
},
{
p: "د ښځو کور هلته دی",
f: "du xudzo kor halta day",
e: "The ladies' house is there",
sub: "inflect for plural and sandwich",
},
],
[
null,
{
p: "د ښځې کور هلته دی",
f: "du xudze kor halta day",
e: "The woman's house is there",
sub: "inflect for sandwich",
},
null,
],
]}
</Table>

View File

@ -2,31 +2,22 @@
title: Inflection Patterns
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
grammarUnits,
InflectionsTable,
inflectWord,
typePredicates as tp,
defaultTextOptions as opts,
Examples,
InlinePs,
typePredicates as tp,
} from "@lingdocs/ps-react";
import InflectionCarousel from "../../components/InflectionCarousel";
import { nouns, adjectives } from "../../words/words";
import { startingWord } from "../../lib/starting-word";
import Link from "../../components/Link";
import psmd from "../../lib/psmd";
export const words = [
...nouns.filter(tp.isUnisexNounEntry),
...adjectives,
];
export const words = [...nouns.filter(tp.isUnisexNounEntry), ...adjectives];
export const femNouns = nouns.filter(tp.isFemNounEntry);
import {
inflectionPatternsGame1,
inflectionPatternsGame2,
inflectionPatternsGame1,
inflectionPatternsGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
@ -45,28 +36,25 @@ These words always end in:
- **Masculine:** - consonant or a shwa (<InlinePs opts={opts} ps={{ p: "ـه", f: "-u" }} /> vowel)
- **Feminine:** - <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} />
<InflectionCarousel items={startingWord(
words.filter(tp.isPattern1Entry),
"غټ",
)} />
<InflectionCarousel
items={startingWord(words.filter(tp.isPattern1Entry), "غټ")}
/>
**Note:** See <Link to="/inflection/inflection-patterns/#pattern-1-words-in-sandwiches-starting-with-inlineps-optsopts-ps-p-په-f-pu--">exception</Link> below.
## 2. Words ending in an unstressed ی - ey
## 2. Words ending in an unstressed ی - ay
<InflectionCarousel items={startingWord(
words.filter(tp.isPattern2Entry),
"ستړی",
)} />
<InflectionCarousel
items={startingWord(words.filter(tp.isPattern2Entry), "ستړی")}
/>{" "}
## 3. Words ending in a stressed ی - éy
## 3. Words ending in a stressed ی - áy
This is very similar to pattern #2, but with the stress on the last syllable the feminine inflection changes.
<InflectionCarousel items={startingWord(
words.filter(tp.isPattern3Entry),
"لومړی",
)} />
<InflectionCarousel
items={startingWord(words.filter(tp.isPattern3Entry), "لومړی")}
/>{" "}
## 4. Words with the "Pashtoon" pattern
@ -75,10 +63,9 @@ These words are a little irregular but you can see a common patten based around:
- lengthening the 1st masculine inflection with <InlinePs opts={opts} ps={{ p: "ا ـ ـه", f: "aa _ u" }} />
- shortening the other forms and adding the <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} />, <InlinePs opts={opts} ps={{ p: "ـې", f: "-e" }} />, <InlinePs opts={opts} ps={{ p: "ـو", f: "-o" }} /> endings
<InflectionCarousel items={startingWord(
words.filter(tp.isPattern4Entry),
"پښتون",
)} />
<InflectionCarousel
items={startingWord(words.filter(tp.isPattern4Entry), "پښتون")}
/>
**Note:** See <Link to="/inflection/inflection-patterns/#pattern-4-masculine-animate-nouns">exception</Link> below.
@ -86,32 +73,38 @@ These words are a little irregular but you can see a common patten based around:
These are also a little irregular but instead of lengthening the 1st masculine inflection they compress it as well and take just an <InlinePs opts={opts} ps={{ p: "ـه", f: "-u" }} /> on the end.
<InflectionCarousel items={startingWord(
words.filter(tp.isPattern5Entry),
"غل",
)} />
<InflectionCarousel
items={startingWord(words.filter(tp.isPattern5Entry), "غل")}
/>{" "}
## 6. Inanimate feminine nouns ending in ي - ee
There is one more pattern which only works for **inanimate feminine nouns ending in <InlinePs opts={opts} ps={{ p: "ي", f: "ee", e: "" }} />**.
<InflectionCarousel items={startingWord(femNouns.filter(tp.isPattern6FemEntry), "آزادي")} />
<InflectionCarousel
items={startingWord(femNouns.filter(tp.isPattern6FemEntry), "آزادي")}
/>
Animate nouns like <InlinePs opts={opts} ps={{ p: "بي بي", f: "beebee", e: "grandmother" }} /> will not inflect like this, and masculine nouns like <InlinePs ps={{ p: "قاضي", f: "qaazee", e: "judge" }} opts={opts} /> also will not inflect.
## Not all words inflect
It's important to know that *not all words can be inflected*. If a word doesn't fit into one of these 6 patterns, you can't inflect it. For example, if an adjective ends in an <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> in the masculine form, you can't inflect it because it doesn't fit any of the patterns above. 🙅‍♂️
It's important to know that _not all words can be inflected_. If a word doesn't fit into one of these 6 patterns, you can't inflect it. For example, if an adjective ends in an <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> in the masculine form, you can't inflect it because it doesn't fit any of the patterns above. 🙅‍♂️
<Examples opts={opts}>
{[
{ p: "خفه", f: "khufa", e: "sad", sub: "...is also sad because it can't inflect like all the other words 😢" },
]}
{[
{
p: "خفه",
f: "khufa",
e: "sad",
sub: "...is also sad because it can't inflect like all the other words 😢",
},
]}
</Examples>
## Exceptions
Whatever kind of word you're using, it will always inflect for the <Link to="/inflection/inflection-intro/">three reasons</Link> that we mentioned earlier. However, there are two big exceptions.
Whatever kind of word you're using, it will always inflect for the <Link to="/inflection/inflection-intro/">three reasons</Link> that we mentioned earlier. However, there are two big exceptions.
### Pattern 1 words in sandwiches starting with په - pu
@ -120,118 +113,146 @@ When you put a <Link to="/inflection/inflection-patterns/#1-basic">pattern 1 - b
For example, let's put the word <InlinePs opts={opts} ps={{ p: "کوټه", f: "koTa", e: "room" }} /> inside the sandwich <InlinePs opts={opts} ps={{ p: "په ... کې", f: "pu ... ke", e: "in" }} />. It doesn't inflect!
<Examples opts={opts}>
{psmd([
{ p: "زه **په کوټه کې** یم", f: "zu **pu koTa ke** yum", e: "I am **in the room**" },
])}
{psmd([
{
p: "زه **په کوټه کې** یم",
f: "zu **pu koTa ke** yum",
e: "I am **in the room**",
},
])}
</Examples>
But if you make it plural, it *will* use the second inflection. Only the first inflection is skipped.
But if you make it plural, it _will_ use the second inflection. Only the first inflection is skipped.
<Examples opts={opts}>
{psmd([
{ p: "مونږ **په کوټو کې** یو", f: "moonG **pu koTo ke** yoo", e: "We are **in the rooms**" },
])}
{psmd([
{
p: "مونږ **په کوټو کې** یو",
f: "moonG **pu koTo ke** yoo",
e: "We are **in the rooms**",
},
])}
</Examples>
Remember that in any other kind of sandwich, you still use the first inflection with these pattern 1 words.
<Examples opts={opts}>
{psmd([
{
p: "زه **کوټې ته** ځم",
f: "zu **koTé ta** dzum",
e: "I'm going to the room",
},
])}
{psmd([
{
p: "زه **کوټې ته** ځم",
f: "zu **koTé ta** dzum",
e: "I'm going to the room",
},
])}
</Examples>
Other sandwiches starting with <InlinePs opts={opts} ps={{ p: "په", f: "pu" }} /> like <InlinePs opts={opts} ps={{ p: "په ... باندې", f: "pu ... baande" }} /> are a bit flexible with these pattern 1 words. Sometimes people will inflect them and sometimes they won't.
<Examples opts={opts}>
{psmd([
{ p: "هغه **په ښځه باندې** ډوډۍ پخوي", f: "hagha **pu xudza baande** DoDuy pakhawee", e: "He gets his wife to cook the food", sub: "not inflected" },
{ p: "هغه **په ښځې باندې** ډوډۍ پخوي", f: "hagha **pu xudze baande** DoDuy pakhawee", e: "He gets his wife to cook the food", sub: "inflected" },
])}
{psmd([
{
p: "هغه **په ښځه باندې** ډوډۍ پخوي",
f: "hagha **pu xudza baande** DoDuy pakhawee",
e: "He gets his wife to cook the food",
sub: "not inflected",
},
{
p: "هغه **په ښځې باندې** ډوډۍ پخوي",
f: "hagha **pu xudze baande** DoDuy pakhawee",
e: "He gets his wife to cook the food",
sub: "inflected",
},
])}
</Examples>
### Pattern 4 masculine animate nouns
<p><Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern">Pattern 4</Link> <strong>masculine animate nouns</strong> (ie. a person or animal) in this pattern will often <strong>only use the first inflection for the plural</strong>. (In some dialects and formal written text though, they will still use the inflection for all three reasons.)</p>
<p>
<Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern">
Pattern 4
</Link>
{` `}
<strong>masculine animate nouns</strong> (ie. a person or animal) in this
pattern will often{` `}
<strong>only use the first inflection for the plural</strong>. (In some dialects
and formal written text though, they will still use the inflection for all three
reasons.)
</p>
#### In sandwiches
For example, if we put the the singular word <InlinePs opts={opts} ps={{ p: "پښټون", f: "puxtoon" }} /> in a sandwich, *usually* people will not inflect it.
For example, if we put the the singular word <InlinePs opts={opts} ps={{ p: "پښټون", f: "puxtoon" }} /> in a sandwich, _usually_ people will not inflect it.
<Examples opts={opts}>
{psmd([
{
p: "زه **له پښتون سره** ناست یم",
f: "zu **la puxtoon sara** naast yum",
e: "I'm (m.) sitting **with the Pashtun** (m.)",
sub: "masc - not inflected",
},
{
p: "زه **له پښتنې سره** ناسته یم",
f: "zu **la puxtane sara** naasta yum",
e: "I'm (f.) sitting **with the Pashtun** (f.)",
sub: "fem - inflected",
},
{
p: "**د پښتون** نوم څه دی؟",
f: "**du puxtoon** (m.) noom tsu dey?",
e: "What is the **Pashtun's** (m.) name",
sub: "masc - not inflected",
},
{
p: "زه **له پښتنو سره** ناست یم",
f: "zu **la puxtano sara** naast yum",
e: "I'm sitting **with the Pashtuns**",
},
{
p: "**د پښتنو** نومونه څه دی؟",
f: "**du puxtano** noomoona tsu dee?",
e: "What are the **Pashtun's** names",
},
])}
{psmd([
{
p: "زه **له پښتون سره** ناست یم",
f: "zu **la puxtoon sara** naast yum",
e: "I'm (m.) sitting **with the Pashtun** (m.)",
sub: "masc - not inflected",
},
{
p: "زه **له پښتنې سره** ناسته یم",
f: "zu **la puxtane sara** naasta yum",
e: "I'm (f.) sitting **with the Pashtun** (f.)",
sub: "fem - inflected",
},
{
p: "**د پښتون** نوم څه دی؟",
f: "**du puxtoon** (m.) noom tsu day?",
e: "What is the **Pashtun's** (m.) name",
sub: "masc - not inflected",
},
{
p: "زه **له پښتنو سره** ناست یم",
f: "zu **la puxtano sara** naast yum",
e: "I'm sitting **with the Pashtuns**",
},
{
p: "**د پښتنو** نومونه څه دی؟",
f: "**du puxtano** noomoona tsu dee?",
e: "What are the **Pashtun's** names",
},
])}
</Examples>
#### As subjects of past tense transitive verbs
<Examples opts={opts}>
{psmd([
{
p: "**پښتون** زه ولیدم",
f: "**puxtoon** zu óoledum",
e: "The Pashtun saw me",
sub: "not inflected",
},
{
p: "**پښتنو** زه ولیدم",
f: "**puxtano** zu óoledum",
e: "The Pashtuns saw me",
},
])}
{psmd([
{
p: "**پښتون** زه ولیدم",
f: "**puxtoon** zu óoledum",
e: "The Pashtun saw me",
sub: "not inflected",
},
{
p: "**پښتنو** زه ولیدم",
f: "**puxtano** zu óoledum",
e: "The Pashtuns saw me",
},
])}
</Examples>
#### Plural
But these words will *always* use the first inflection for the plural.
But these words will _always_ use the first inflection for the plural.
<Examples opts={opts}>
{psmd([
{
p: "دلته **پښتانه** اوسېږي",
f: "dalta **puxtaanu** oseGee",
e: "**Pashtuns** live here",
},
{
p: "دا **د پښتنو** رواج دی",
f: "daa **du puxtano** rawaaj dey",
e: "This is **the Pashtuns'** custom"
},
])}
{psmd([
{
p: "دلته **پښتانه** اوسېږي",
f: "dalta **puxtaanu** oseGee",
e: "**Pashtuns** live here",
},
{
p: "دا **د پښتنو** رواج دی",
f: "daa **du puxtano** rawaaj day",
e: "This is **the Pashtuns'** custom",
},
])}
</Examples>
<GameDisplay record={inflectionPatternsGame1} />
<GameDisplay record={inflectionPatternsGame2} />
<GameDisplay record={inflectionPatternsGame2} />

View File

@ -2,26 +2,25 @@
title: Arabic Plural Nouns
---
import {
Examples,
InlinePs,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import { InlinePs, defaultTextOptions as opts } from "@lingdocs/ps-react";
import Table from "../../components/Table";
export function ArabicPluralTable({ children }) {
return (
<Table headRow={[
<div>
<div>Singular</div>
</div>,
<div>
<div>Arabic Plural</div>
</div>,
]} opts={opts}>
{children}
</Table>
);
return (
<Table
headRow={[
<div>
<div>Singular</div>
</div>,
<div>
<div>Arabic Plural</div>
</div>,
]}
opts={opts}
>
{children}
</Table>
);
}
Pashto has many Arabic loan words, and people often **use the Arabic plural forms of these loan words**. We won't get into how plurals work in Arabic here, but you will learn to recognize and use these plural through lots of exposure.
@ -31,61 +30,139 @@ For now, see if you can notice some of the basic patterns.
Some of the words change drastically:
<ArabicPluralTable>
{[
[{p:"حال", f:"haal", e:"condition"}, {p:"احوال", f:"ahwaal", e:"conditions"}],
[{p:"لفظ", f:"lafz", e:"word"}, {p:"الفاظ", f:"alfaaz", e:"words"}],
[{p:"مکتب", f:"maktab", e:"school"}, {p:"مکاتب", f:"makaatib", e:"schools"}],
[{p:"نبي", f:"nabee", e:"prophet"}, {p:"انبیا", f:"ambiyáa", e:"prophets"}],
[{p:"فرد",f:"fard", e:"person"},{p:"افراد", f:"afráad", e:"people"}],
[{p:"قانون", f:"qaanóon", e:"law"},{p:"قوانین", f:"qawaanéen", e:"laws"}],
]}
{[
[
{ p: "حال", f: "haal", e: "condition" },
{ p: "احوال", f: "ahwaal", e: "conditions" },
],
[
{ p: "لفظ", f: "lafz", e: "word" },
{ p: "الفاظ", f: "alfaaz", e: "words" },
],
[
{ p: "مکتب", f: "maktab", e: "school" },
{ p: "مکاتب", f: "makaatib", e: "schools" },
],
[
{ p: "نبي", f: "nabee", e: "prophet" },
{ p: "انبیا", f: "ambiyáa", e: "prophets" },
],
[
{ p: "فرد", f: "fard", e: "person" },
{ p: "افراد", f: "afráad", e: "people" },
],
[
{ p: "قانون", f: "qaanóon", e: "law" },
{ p: "قوانین", f: "qawaanéen", e: "laws" },
],
]}
</ArabicPluralTable>
Some add an <InlinePs opts={opts} ps={{ p: "ات", f: "áat" }} /> on the end:
<ArabicPluralTable>
{[
[{p:"توجیه", f:"tawjeeh", e:"justification"}, {p:"توجیهات", f:"tawjeehaat", e:"justifications"}],
[{p:"ملاحظه", f:"mUlaahiza", e:"consideration"}, {p:"ملاحظات", f:"mUlaahizaat", e:"considerations"}]
]}
{[
[
{ p: "توجیه", f: "tawjeeh", e: "justification" },
{ p: "توجیهات", f: "tawjeehaat", e: "justifications" },
],
[
{ p: "ملاحظه", f: "mUlaahiza", e: "consideration" },
{ p: "ملاحظات", f: "mUlaahizaat", e: "considerations" },
],
]}
</ArabicPluralTable>
And some add an <InlinePs opts={opts} ps={{ p: "ین", f: "éen" }} /> on the end:
<ArabicPluralTable>
{[
[{p:"مجاهد", f:"mUjaahíd", e:"religious warrior"}, {p:"مجاهدین", f:"mUjaahidéen", e:"religious warriors"}],
[{p:"متحد", f:"mUtahíd", e:"ally/allied"}, {p:"متحدین", f:"mUtahidéen", e:"allies"}],
[{p:"معتاد", f:"mUtáad", e:"addict"}, {p:"معتادین", f:"mUtaadéen", e:"addicts"}],
[{p:"مهاجر", f:"mUhaajir", e:"immigrant"}, {p:"مهاجرین", f:"mUhaajiréen", e:"immigrants"}],
]}
{[
[
{ p: "مجاهد", f: "mUjaahíd", e: "religious warrior" },
{ p: "مجاهدین", f: "mUjaahidéen", e: "religious warriors" },
],
[
{ p: "متحد", f: "mUtahíd", e: "ally/allied" },
{ p: "متحدین", f: "mUtahidéen", e: "allies" },
],
[
{ p: "معتاد", f: "mUtáad", e: "addict" },
{ p: "معتادین", f: "mUtaadéen", e: "addicts" },
],
[
{ p: "مهاجر", f: "mUhaajir", e: "immigrant" },
{ p: "مهاجرین", f: "mUhaajiréen", e: "immigrants" },
],
]}
</ArabicPluralTable>
## Notes
### Arabic Plurals are Always Masculine
Once a word is put into it's special Arabic plural form, it's always a *masculine plural* (based on the consonant ending) even if the singular version of the word was feminine.
Once a word is put into it's special Arabic plural form, it's always a _masculine plural_ (based on the consonant ending) even if the singular version of the word was feminine.
<ArabicPluralTable>
{[
[
{p:"ملاحظه", f:"mUlaahiza", e:"consideration (f.)", sub: "feminine", gender: "f"},
{p:"ملاحظات", f:"mUlaahizaat", e:"considerations (m. pl.)", sub: "masculine", gender: "m"},
],
[
{p:"تجربه", f:"tajraba", e:"experience (f.)", sub: "feminine", gender: "f"},
{p:"تجارب", f:"tajaarab", e:"experiences (m. pl.)", sub: "masculine", gender: "m"},
],
[
{p:"لفظ", f:"lafz", e:"word (m.)", sub: "masculine", gender: "m"},
{p:"الفاظ", f:"alfaaz", e:"words (m. pl.)", sub: "masculine", gender: "m"},
],
[
{p:"قبیله", f:"qabeela", e:"tribe (f.)", sub: "feminine", gender: "f"},
{p:"قبایل", f:"qabaayul", e:"tribes (m. pl.)", sub: "masculine", gender: "m"},
],
]}
{[
[
{
p: "ملاحظه",
f: "mUlaahiza",
e: "consideration (f.)",
sub: "feminine",
gender: "f",
},
{
p: "ملاحظات",
f: "mUlaahizaat",
e: "considerations (m. pl.)",
sub: "masculine",
gender: "m",
},
],
[
{
p: "تجربه",
f: "tajraba",
e: "experience (f.)",
sub: "feminine",
gender: "f",
},
{
p: "تجارب",
f: "tajaarab",
e: "experiences (m. pl.)",
sub: "masculine",
gender: "m",
},
],
[
{ p: "لفظ", f: "lafz", e: "word (m.)", sub: "masculine", gender: "m" },
{
p: "الفاظ",
f: "alfaaz",
e: "words (m. pl.)",
sub: "masculine",
gender: "m",
},
],
[
{
p: "قبیله",
f: "qabeela",
e: "tribe (f.)",
sub: "feminine",
gender: "f",
},
{
p: "قبایل",
f: "qabaayul",
e: "tribes (m. pl.)",
sub: "masculine",
gender: "m",
},
],
]}
</ArabicPluralTable>
### Arabic Plurals are Not Always Used
@ -93,22 +170,21 @@ Once a word is put into it's special Arabic plural form, it's always a *masculin
For many words, people may either use the regular Pashto plural endings or the special Arabic form. Here are a couple examples of words that are often said either way.
<Table opts={opts} headRow={["Singular", "Arabic Plural", "Pashto Plural"]}>
{[
[
{p:"مکتب", f:"maktab", e:"school"},
{p:"مکاتب", f:"makáatib", e:"schools"},
{p:"مکتبونه", f:"maktaboona", e:"schools"},
],
[
{p:"مهاجر", f:"mUhaajir", e:"immigrant"},
{p:"مهاجرین", f:"mUhaajiréen", e:"immigrants"},
{p:"مهاجران", f:"mUhaajiráan", e:"immigrants"},
],
[
{p:"رابطه", f:"raabitá", e:"connection"},
{p:"روابط", f:"rawáabit", e:"connections"},
{p:"رابطې", f:"raabité", e:"connections"},
],
]}
{[
[
{ p: "مکتب", f: "maktab", e: "school" },
{ p: "مکاتب", f: "makáatib", e: "schools" },
{ p: "مکتبونه", f: "maktaboona", e: "schools" },
],
[
{ p: "مهاجر", f: "mUhaajir", e: "immigrant" },
{ p: "مهاجرین", f: "mUhaajiréen", e: "immigrants" },
{ p: "مهاجران", f: "mUhaajiráan", e: "immigrants" },
],
[
{ p: "رابطه", f: "raabitá", e: "connection" },
{ p: "روابط", f: "rawáabit", e: "connections" },
{ p: "رابطې", f: "raabité", e: "connections" },
],
]}
</Table>

View File

@ -2,43 +2,39 @@
title: Bundled Plurals
---
import {
Examples,
InlinePs,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import { InlinePs, defaultTextOptions as opts } from "@lingdocs/ps-react";
import Table from "../../components/Table";
import penBundle from "../../images/pen-bundle.jpg";
export function BundledPluralTable({ children, inflection }) {
return (
<Table headRow={["singular", "bundled plural"]} opts={opts}>
{children}
</Table>
);
return (
<Table headRow={["singular", "bundled plural"]} opts={opts}>
{children}
</Table>
);
}
For many nouns ending in a consonant, we can make a special kind of **"bundled plural"** to show that the things are closely lumped together.
<div className="mx-auto" style={{ maxWidth: "300px" }}>
<img src={penBundle} className="img-fluid" />
<img src={penBundle} className="img-fluid" />
</div>
To make this "bundled plural" we add a <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> to the end of the noun.
<BundledPluralTable>
{[
[
{ p: "کال", f: "kaal", e: "year" },
{ p: "کاله", f: "kaala", e: "years" },
],
[
{ p: "کس", f: "kas", e: "person" },
{ p: "کسه", f: "kasa", e: "people" },
],
[
{ p: "کرت", f: "karat", e: "time" },
{ p: "کرته", f: "karata", e: "times" },
],
]}
{[
[
{ p: "کال", f: "kaal", e: "year" },
{ p: "کاله", f: "kaala", e: "years" },
],
[
{ p: "کس", f: "kas", e: "person" },
{ p: "کسه", f: "kasa", e: "people" },
],
[
{ p: "کرت", f: "karat", e: "time" },
{ p: "کرته", f: "karata", e: "times" },
],
]}
</BundledPluralTable>

View File

@ -3,28 +3,24 @@ title: Nouns and Gender
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
firstVariation,
defaultTextOptions as opts,
InlinePs,
firstVariation,
} from "@lingdocs/ps-react";
import genderColors from "../../lib/gender-colors";
import GenderTable from "../../components/GenderTable";
import Link from "../../components/Link";
export const femColor = genderColors.f;
export const mascColor = genderColors.m;
import {
nounGenderGame1,
nounGenderGame2,
} from "../../games/games";
import { nounGenderGame1, nounGenderGame2 } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
export const Masc = () => (
<span style={{ backgroundColor: mascColor }}>masculine</span>
<span style={{ backgroundColor: mascColor }}>masculine</span>
);
export const Fem = () => (
<span style={{ backgroundColor: femColor }}>feminine</span>
<span style={{ backgroundColor: femColor }}>feminine</span>
);
All nouns in Pashto are either <Masc /> or <Fem />. Thankfully, you can pretty much always tell the gender of a word by its ending.
@ -33,77 +29,82 @@ All nouns in Pashto are either <Masc /> or <Fem />. Thankfully, you can pretty m
**<span style={{ backgroundColor: mascColor }}>Masculine</span> words end in:**
- a consonant
- <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} />
- <InlinePs opts={opts} ps={{ p: "ـه", f: "u" }} />
- <InlinePs opts={opts} ps={{ p: "وی", f: "ooy" }} /> or <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} />
- a consonant
- <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} />
- <InlinePs opts={opts} ps={{ p: "ـه", f: "u" }} />
- <InlinePs opts={opts} ps={{ p: "وی", f: "ooy" }} /> or <InlinePs
opts={opts}
ps={{ p: "ای", f: "aay" }}
/>
**<span style={{ backgroundColor: femColor }}>Feminine</span> words end in:**
- all the other vowels (<InlinePs opts={opts} ps={{ p: "ا", f: "aa" }} />, <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} />, <InlinePs opts={opts} ps={{ p: "ي", f: "ee" }} />, <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} />, etc.)
- all the other vowels (<InlinePs opts={opts} ps={{ p: "ا", f: "aa" }} />, <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} />, <InlinePs opts={opts} ps={{ p: "ي", f: "ee" }} />, <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} />, etc.)
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ending: "any consonant",
ex: { p: "کور", f: "kor", e: "house" },
},
fem: {
ending: { p: "ه", f: "a" },
ex: { p: "ښځه", f: "xudza", e: "woman" },
},
masc: {
ending: "any consonant",
ex: { p: "کور", f: "kor", e: "house" },
},
fem: {
ending: { p: "ه", f: "a" },
ex: { p: "ښځه", f: "xudza", e: "woman" },
},
},
{
masc: {
ending: { p: "ی", f: "ey" },
ex: {p:"سړی", f:"saRey", e:"man"},
},
fem: {
ending: { p: "ا", f: "aa" },
ex: {p:"جزا", f:"jăzaa", e:"punishment"},
},
masc: {
ending: { p: "ی", f: "ay" },
ex: { p: "سړی", f: "saRay", e: "man" },
},
fem: {
ending: { p: "ا", f: "aa" },
ex: { p: "جزا", f: "jăzaa", e: "punishment" },
},
},
{
masc: {
ending: { p: "ای", f: "aay" },
ex: {p:"ځای", f:"dzaay", e:"place"},
},
fem: {
ending: { p: "ي", f: "ee" },
ex: {p:"دوستي", f:"dostee", e:"friendship"},
},
masc: {
ending: { p: "ای", f: "aay" },
ex: { p: "ځای", f: "dzaay", e: "place" },
},
fem: {
ending: { p: "ي", f: "ee" },
ex: { p: "دوستي", f: "dostee", e: "friendship" },
},
},
{
masc: {
ending: { p: "ه", f: "u" },
ex: {p:"واده", f:"waadu", e:"marriage"},
},
fem: {
ending: { p: "ۍ", f: "uy" },
ex: {p:"هګۍ", f:"haguy", e:"egg"},
},
masc: {
ending: { p: "ه", f: "u" },
ex: { p: "واده", f: "waadu", e: "marriage" },
},
fem: {
ending: { p: "ۍ", f: "uy" },
ex: { p: "هګۍ", f: "haguy", e: "egg" },
},
},
{
masc: {
ending: { p:"و", f: "aw" },
ex: {p:"کنډو", f:"kanDáw", e:"crack"},
},
fem: {
ending: { p: "و", f: "o" },
ex: { p:"پښتو", f:"puxto", e:"Pashto" },
},
masc: {
ending: { p: "و", f: "aw" },
ex: { p: "کنډو", f: "kanDáw", e: "crack" },
},
fem: {
ending: { p: "و", f: "o" },
ex: { p: "پښتو", f: "puxto", e: "Pashto" },
},
},
{
masc: {
ending: { p: "وی", f: "ooy" },
ex: {p:"سوی", f:"sooy", e:"rabbit"},
},
fem: {
ending: { p: "ې", f: "e" },
ex: {p:"ملګرې", f:"malgure", e:"female friend"},
},
masc: {
ending: { p: "وی", f: "ooy" },
ex: { p: "سوی", f: "sooy", e: "rabbit" },
},
fem: {
ending: { p: "ې", f: "e" },
ex: { p: "ملګرې", f: "malgure", e: "female friend" },
},
},
]} />
]}
/>
**A couple of other things to watch out for:**
@ -121,24 +122,33 @@ Some <Fem /> words have had their <InlinePs opts={opts} ps={{p:"ـه", f:"a"}} /
Here are some other <Fem /> words that have lost their <InlinePs opts={opts} ps={{p:"ـه", f:"a"}} /> ending:
export const femEndingWConsonant = [
{ p: "لار", f: "laar", e: "road" },
{ p: "میاشت", f: "myaasht", e: "month" },
{ p: "غېږ", f: "gheG", e: "bosom" },
{ p: "څنګل", f: "tsangul", e: "elbow" },
{ p: "بړستن", f: "bRastun", e: "blanket" },
{ p: "ږمنځ", f: "Gmundz", e: "comb" },
{ p: "ستن", f: "stun", e: "needle" },
{ p: "لمن", f: "lamun", e: "skirt" },
{ p: "لار", f: "laar", e: "road" },
{ p: "میاشت", f: "myaasht", e: "month" },
{ p: "غېږ", f: "gheG", e: "bosom" },
{ p: "څنګل", f: "tsangul", e: "elbow" },
{ p: "بړستن", f: "bRastun", e: "blanket" },
{ p: "ږمنځ", f: "Gmundz", e: "comb" },
{ p: "ستن", f: "stun", e: "needle" },
{ p: "لمن", f: "lamun", e: "skirt" },
];
export function IrregularFem() {
return <ul>
{femEndingWConsonant.map((entry) => (
<li key={entry.p}>
<InlinePs opts={opts} ps={{ p: entry.p, f: firstVariation(entry.f), e: firstVariation(entry.e) }} />
</li>
))}
</ul>;
return (
<ul>
{femEndingWConsonant.map((entry) => (
<li key={entry.p}>
<InlinePs
opts={opts}
ps={{
p: entry.p,
f: firstVariation(entry.f),
e: firstVariation(entry.e),
}}
/>
</li>
))}
</ul>
);
}
<IrregularFem />
@ -147,33 +157,35 @@ Note that some words can be said with or without an <InlinePs opts={opts} ps={{p
### Words for people
Some words are used to describe people who obviously have a gender and they *totally break or ignore the rules we saw above*. For example:
Some words are used to describe people who obviously have a gender and they _totally break or ignore the rules we saw above_. For example:
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: { p: "بندي", f: "bandee", e: "prisoner" },
},
fem: {
ex: { p: "مور", f: "mor", e: "mother" },
},
masc: {
ex: { p: "بندي", f: "bandee", e: "prisoner" },
},
fem: {
ex: { p: "مور", f: "mor", e: "mother" },
},
},
{
masc: {
ex: {p:"مېلمه", f:"melmá", e:"guest (male)"},
},
fem: {
ex: {p: "ترور", f:"tror", e: "aunt" },
},
masc: {
ex: { p: "مېلمه", f: "melmá", e: "guest (male)" },
},
fem: {
ex: { p: "ترور", f: "tror", e: "aunt" },
},
},
{
masc: {
ex: {p: "ماما", f:"maamáa", e: "uncle" },
},
fem: {
ex: { p: "خور", f: "khor", e: "sister" },
},
masc: {
ex: { p: "ماما", f: "maamáa", e: "uncle" },
},
fem: {
ex: { p: "خور", f: "khor", e: "sister" },
},
},
]} />
]}
/>
<GameDisplay record={nounGenderGame2} />

View File

@ -49,10 +49,10 @@ To understand how to inflect words, have a look at the <Link to="/inflection/inf
[
{
p: "سړی",
f: "saRéy",
f: "saRáy",
e: "man",
sub: (
<Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-éy--">
<Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-áy--">
pattern #3
</Link>
),
@ -62,10 +62,10 @@ To understand how to inflect words, have a look at the <Link to="/inflection/inf
[
{
p: "سپی",
f: "spey",
f: "spay",
e: "dog",
sub: (
<Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-éy--">
<Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-áy--">
pattern #3
</Link>
),
@ -146,7 +146,7 @@ Note that in some forms of inflection with feminine nouns the word does not chan
f: "malgúre",
e: "friend (f.)",
sub: (
<Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ey--">
<Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ay--">
pattern #2
</Link>
),
@ -222,8 +222,8 @@ This is _usually_ only used with animate things (people or animals), but there a
<PluralTable>
{[
[
{ p: "شی", f: "shey", e: "thing" },
{ p: "شیان", f: "sheyáan", e: "things" },
{ p: "شی", f: "shay", e: "thing" },
{ p: "شیان", f: "shayáan", e: "things" },
],
]}
</PluralTable>
@ -272,7 +272,7 @@ Some nouns just have completely irregular plural forms.
{[
[
{ p: "خور", f: "khor", e: "sister" },
{ p: "خویندې", f: "khweynde", e: "sisters" },
{ p: "خویندې", f: "khwaynde", e: "sisters" },
],
[
{ p: "ورور", f: "wror", e: "brother" },
@ -292,7 +292,7 @@ Some nouns just have completely irregular plural forms.
],
[
{ p: "ترور", f: "tror", e: "aunt" },
{ p: "تریندې", f: "treynde", e: "aunts" },
{ p: "تریندې", f: "traynde", e: "aunts" },
],
[
{ p: "لور", f: "loor", e: "daughter" },
@ -304,7 +304,7 @@ Some nouns just have completely irregular plural forms.
],
[
{ p: "نږور", f: "nGor", e: "daughter-in-law" },
{ p: "نږیندې", f: "nGeynde", e: "daughter-in-laws" },
{ p: "نږیندې", f: "nGaynde", e: "daughter-in-laws" },
],
]}
</PluralTable>

View File

@ -2,12 +2,7 @@
title: Unisex Nouns
---
import {
Examples,
InlinePs,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import Table from "../../components/Table";
import { InlinePs, defaultTextOptions as opts } from "@lingdocs/ps-react";
import Link from "../../components/Link";
import GenderTable from "../../components/GenderTable";
import { unisexNounGame } from "../../games/games";
@ -23,203 +18,213 @@ To make the male and female forms you just follow the <Link to="/inflection/infl
Just like with other words following the <Link to="/inflection/inflection-patterns/#1-basic">basic pattern</Link>, you add an <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} /> on the end to make them feminine.
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: { p: "ډاکټر", f: "DakTár", e: "male doctor 👨‍⚕️" },
},
fem: {
ex: { p: "ډاکټره", f: "DakTára", e: "female doctor 👩‍⚕️" },
},
masc: {
ex: { p: "ډاکټر", f: "DakTár", e: "male doctor 👨‍⚕️" },
},
fem: {
ex: { p: "ډاکټره", f: "DakTára", e: "female doctor 👩‍⚕️" },
},
},
{
masc: {
ex: {p:"نرس", f:"nurs", e:"male nurse"},
},
fem: {
ex: {p: "نرسه", f:"nursa", e: "female nurse" },
},
masc: {
ex: { p: "نرس", f: "nurs", e: "male nurse" },
},
fem: {
ex: { p: "نرسه", f: "nursa", e: "female nurse" },
},
},
{
masc: {
ex: { p: "اتل", f: "atal", e: "male hero" },
},
fem: {
ex: { p: "اتله", f: "atala", e: "female hero" },
},
masc: {
ex: { p: "اتل", f: "atal", e: "male hero" },
},
fem: {
ex: { p: "اتله", f: "atala", e: "female hero" },
},
},
]} />
]}
/>
### 2. Words ending in an unstressed ی - ey
### 2. Words ending in an unstressed ی - ay
The feminine form the <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /> on the end becomes <InlinePs opts={opts} ps={{ p: "ې", f: "e" }} />. See <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ey--">pattern</Link>.
The feminine form the <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} /> on the end becomes <InlinePs opts={opts} ps={{ p: "ې", f: "e" }} />. See <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ay--">pattern</Link>.
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: {
p: "ملګری",
f: "malgúrey",
e: "male friend 👦",
},
masc: {
ex: {
p: "ملګری",
f: "malgúray",
e: "male friend 👦",
},
fem: {
ex: {
p: "ملګرې",
f: "malgúre",
e: "female friend 👧",
},
},
fem: {
ex: {
p: "ملګرې",
f: "malgúre",
e: "female friend 👧",
},
},
},
{
masc: {
ex: {p: "ښوونکی", f:"xUwóonkey", e: "male teacher 👨‍🏫" },
},
fem: {
ex: { p: "ښوونکې", f: "xUwóonke", e: "female teacher 👩‍🏫" },
},
masc: {
ex: { p: "ښوونکی", f: "xUwóonkay", e: "male teacher 👨‍🏫" },
},
fem: {
ex: { p: "ښوونکې", f: "xUwóonke", e: "female teacher 👩‍🏫" },
},
},
]} />
]}
/>
### 3. Words ending in a stressed ی - éy
### 3. Words ending in a stressed ی - áy
If the accent comes on the end of the word, the femine form is a little different. With these words the <InlinePs opts={opts} ps={{ p: "ی", f: "éy" }} /> on the end becomes <InlinePs opts={opts} ps={{ p: "ۍ", f: "úy" }} />. See <Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-éy--">pattern</Link>.
If the accent comes on the end of the word, the femine form is a little different. With these words the <InlinePs opts={opts} ps={{ p: "ی", f: "áy" }} /> on the end becomes <InlinePs opts={opts} ps={{ p: "ۍ", f: "úy" }} />. See <Link to="/inflection/inflection-patterns/#3-words-ending-in-a-stressed-inlineps-optsopts-ps-p-ی-f-áy--">pattern</Link>.
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: {
p: "پاکستانی",
f: "paakistaanéy",
e: "A Pakistani man",
},
masc: {
ex: {
p: "پاکستانی",
f: "paakistaanáy",
e: "A Pakistani man",
},
fem: {
ex: {
p: "پاکستانۍ",
f: "paakistaanúy",
e: "A Pakistani woman",
},
},
fem: {
ex: {
p: "پاکستانۍ",
f: "paakistaanúy",
e: "A Pakistani woman",
},
},
},
{
masc: {
ex: {p: "لمسی", f: "lmaséy", e: "grandson 👦"},
},
fem: {
ex: {p: "لمسۍ", f: "lmasúy", e: "granddaughter 👧"},
},
masc: {
ex: { p: "لمسی", f: "lmasáy", e: "grandson 👦" },
},
fem: {
ex: { p: "لمسۍ", f: "lmasúy", e: "granddaughter 👧" },
},
},
]} />
]}
/>
### 4. Words with the "Pashtoon" pattern
See <Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern">pattern</Link>.
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: {
p: "پښتون",
f: "puxtóon",
e: "a male Pashtun",
},
masc: {
ex: {
p: "پښتون",
f: "puxtóon",
e: "a male Pashtun",
},
fem: {
ex: {
p: "پښتنه",
f: "puxtaná",
e: "a female Pashtun",
},
},
fem: {
ex: {
p: "پښتنه",
f: "puxtaná",
e: "a female Pashtun",
},
},
},
{
masc: {
ex: {
p: "شپون",
f: "shpoon",
e: "male shepherd",
},
masc: {
ex: {
p: "شپون",
f: "shpoon",
e: "male shepherd",
},
fem: {
ex: {
p: "شپنه",
f: "shpaná",
e: "female shepherd",
},
}
},
fem: {
ex: {
p: "شپنه",
f: "shpaná",
e: "female shepherd",
},
},
},
{
masc: {
ex: {
p: "مېلمه",
f: "melmá",
e: "a male guest",
},
masc: {
ex: {
p: "مېلمه",
f: "melmá",
e: "a male guest",
},
fem: {
ex: {
p: "مېلمنه",
f: "melmaná",
e: "a female guest",
},
},
fem: {
ex: {
p: "مېلمنه",
f: "melmaná",
e: "a female guest",
},
},
},
{
masc: {
ex: {
p: "کوربه",
f: "korbá",
e: "male host",
},
masc: {
ex: {
p: "کوربه",
f: "korbá",
e: "male host",
},
fem: {
ex: {
p: "کوربنه",
f: "korbaná",
e: "female host",
},
}
}
]} />
},
fem: {
ex: {
p: "کوربنه",
f: "korbaná",
e: "female host",
},
},
},
]}
/>
### 5. Shorter words that squish
See <Link to="/inflection/inflection-patterns/#5-shorter-words-that-squish">pattern</Link>.
<GenderTable rows={[
<GenderTable
rows={[
{
masc: {
ex: {
p: "غل",
f: "ghul",
e: "male thief",
},
masc: {
ex: {
p: "غل",
f: "ghul",
e: "male thief",
},
fem: {
ex: {
p: "غله",
f: "ghla",
e: "female thief",
},
}
},
fem: {
ex: {
p: "غله",
f: "ghla",
e: "female thief",
},
},
},
{
masc: {
ex: {
p: "خر",
f: "khur",
e: "male donkey",
},
masc: {
ex: {
p: "خر",
f: "khur",
e: "male donkey",
},
fem: {
ex: {
p: "خره",
f: "khra",
e: "female donkey",
},
}
}
]} />
},
fem: {
ex: {
p: "خره",
f: "khra",
e: "female donkey",
},
},
},
]}
/>
<GameDisplay record={unisexNounGame} />

View File

@ -1,10 +1,11 @@
---
title: Intro to Participles
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import Link from "../../components/Link";
import participleMeme from "./participle-meme.jpg";
@ -13,41 +14,46 @@ import psmd from "../../lib/psmd";
Participles words that are **made from verbs** but **act as a noun or adjective**.
<div className="text-center">
<img className="img-fluid mb-4" src={participleMeme} alt="participle meme" style={{ margin: "0 auto" }} />
<img
className="img-fluid mb-4"
src={participleMeme}
alt="participle meme"
style={{ margin: "0 auto" }}
/>
</div>
There are 3 types of participles.
1. Root/Infinitive
2. <InlinePs opts={opts} ps={{ p: "-ونکی", f: "-oonkey" }} /> suffix
1. Root/Infinitive
2. <InlinePs opts={opts} ps={{ p: "-ونکی", f: "-oonkay" }} /> suffix{" "}
3. Past Participle
## Root/Infinitive
This is the easiest to make. It's just the <Link to="/verbs/roots-and-stems/">imperfective root</Link>, which is the infinitive or "dictionary form" of a verb. For example, for the verb <InlinePs opts={opts} ps={{ p: "لیکل", f: "leekúl", e: "to write" }} />, it's... <InlinePs opts={opts} ps={{ p: "لیکل", f: "leekúl" }} />. That's right, it looks exactly the same, but when it's a participle it functions as a **3rd person plural noun** in the sentence.
Here's an example where we use <InlinePs opts={opts} ps={{ p: "لیکل", f: "leekúl" }} /> to describe *the activity or action* of writing. And, as with all these kind of participles, it functions as a **3rd person plural noun**.
Here's an example where we use <InlinePs opts={opts} ps={{ p: "لیکل", f: "leekúl" }} /> to describe _the activity or action_ of writing. And, as with all these kind of participles, it functions as a **3rd person plural noun**.
<Examples opts={opts}>
{psmd([
{
p: "**لیکل** ښه دي",
f: "**leekul** xu dee",
e: "**Writing** is good",
},
])}
{psmd([
{
p: "**لیکل** ښه دي",
f: "**leekul** xu dee",
e: "**Writing** is good",
},
])}
</Examples>
These kinds of participles are used like the "-ing" present particple in English, or like the "to be" infinitives in English.
<Examples opts={opts}>
{psmd([
{
p: "زه **لیکل** غواړم",
f: "zu **leekul** ghwaaRum",
e: "I want **to write**",
},
])}
{psmd([
{
p: "زه **لیکل** غواړم",
f: "zu **leekul** ghwaaRum",
e: "I want **to write**",
},
])}
</Examples>
### Inflecting the Root/Infinitive Participle
@ -62,18 +68,18 @@ And just like with other plural nouns, they are inflected by adding an <InlinePs
#### 1. Inflecting in a sandwich
<Examples opts={opts}>
{psmd([
{
p: "**د لیکلو لپاره** څه نشته",
f: "**du leekulo lapaara** tsu nushta",
e: "There's nothing to write",
},
{
p: "زه **د پاڅېدلو** توان نه لرم",
f: "zu **du patsedulo** twaan nu larum",
e: "I don't have the strength to get up",
}
])}
{psmd([
{
p: "**د لیکلو لپاره** څه نشته",
f: "**du leekulo lapaara** tsu nushta",
e: "There's nothing to write",
},
{
p: "زه **د پاڅېدلو** توان نه لرم",
f: "zu **du patsedulo** twaan nu larum",
e: "I don't have the strength to get up",
},
])}
</Examples>
#### 2. Inflecting as a subject of a past tense transitive verb
@ -81,180 +87,180 @@ And just like with other plural nouns, they are inflected by adding an <InlinePs
Since these particples are nouns, they can also be the subject of a sentance. For example:
<Examples opts={opts}>
{psmd([
{
p: "**لیکل** ما ستړی کوي",
f: "**leekul** maa stuRey kawee.",
e: "Writing makes me tired",
sub: "subject of a present tense transitive verb (not inflected)"
},
{
p: "**لیکلو** زه ستړی کړم",
f: "**leekulo** zu stuRey kRum",
e: "**Writing** made me tired",
sub: "subject of a past tense transitive verb (inflected)"
},
])}
{psmd([
{
p: "**لیکل** ما ستړی کوي",
f: "**leekul** maa stuRay kawee.",
e: "Writing makes me tired",
sub: "subject of a present tense transitive verb (not inflected)",
},
{
p: "**لیکلو** زه ستړی کړم",
f: "**leekulo** zu stuRay kRum",
e: "**Writing** made me tired",
sub: "subject of a past tense transitive verb (inflected)",
},
])}
</Examples>
## ونکی - óonkey suffix
## ونکی - óonkay suffix
This type of participle is formed by adding <InlinePs opts={opts} ps={{ p: "ونکی", f: "oonkey" }} /> to the end of the short version of the <Link to="/verbs/roots-and-stems/">imperfective root</Link> of a verb.
This type of participle is formed by adding <InlinePs opts={opts} ps={{ p: "ونکی", f: "oonkay" }} /> to the end of the short version of the <Link to="/verbs/roots-and-stems/">imperfective root</Link> of a verb.
### As an adjective
This form can be used to transform verbs into adjectives. For example, from the verb <InlinePs opts={opts} ps={{ p: "دردول", f: "dardawul", e: "to hurt, cause pain/sadness" }} />, we can add the <InlinePs opts={opts} ps={{ p: "ونکی", f: "óonkey" }} /> suffix and get the adjective <InlinePs opts={opts} ps={{ p: "دردونکی", f: "dardawóonkey", e: "sad/painful" }} />.
This form can be used to transform verbs into adjectives. For example, from the verb <InlinePs opts={opts} ps={{ p: "دردول", f: "dardawul", e: "to hurt, cause pain/sadness" }} />, we can add the <InlinePs opts={opts} ps={{ p: "ونکی", f: "óonkay" }} /> suffix and get the adjective <InlinePs opts={opts} ps={{ p: "دردونکی", f: "dardawóonkay", e: "sad/painful" }} />.
These "adjectives" will <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ey--">inflect just like any other adjectives ending with an unstressed <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /></Link>.
These "adjectives" will <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ay--">inflect just like any other adjectives ending with an unstressed <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} /></Link>.
<Examples opts={opts}>
{psmd([
{
p: "دا یوه **دردونکې** کیسه ده",
f: "daa yawa **dardawóonke** keesa da",
e: "That's a sad story",
sub: "(fem. sing.)"
},
{
p: "دا یو **دردونکی** ناول دی",
f: "daa yo **dardawóonkey** naawul dey",
e: "That's a sad novel",
sub: "(masc. sing.)"
},
{
p: "دا **دردونکي** ناولونه دي",
f: "daa **dardawóonkee** naawuloona dee",
e: "Those are sad novels",
sub: "(masc. plural.)"
},
])}
{psmd([
{
p: "دا یوه **دردونکې** کیسه ده",
f: "daa yawa **dardawóonke** keesa da",
e: "That's a sad story",
sub: "(fem. sing.)",
},
{
p: "دا یو **دردونکی** ناول دی",
f: "daa yo **dardawóonkay** naawul day",
e: "That's a sad novel",
sub: "(masc. sing.)",
},
{
p: "دا **دردونکي** ناولونه دي",
f: "daa **dardawóonkee** naawuloona dee",
e: "Those are sad novels",
sub: "(masc. plural.)",
},
])}
</Examples>
### As an agent noun
This suffix can also be used to make verbs into <a href="https://en.wikipedia.org/wiki/Agent_noun#:~:text=In%20linguistics%2C%20an%20agent%20noun,from%20the%20verb%20%22drive%22.">agent nouns</a>. This is like how in English we use "-er" or "-or" suffixes to make nouns like "worker", "player", "cutter", "gamer".
This suffix can also be used to make verbs into <a href="https://en.wikipedia.org/wiki/Agent_noun#:~:text=In%20linguistics%2C%20an%20agent%20noun,from%20the%20verb%20%22drive%22.">agent nouns</a>. This is like how in English we use "-er" or "-or" suffixes to make nouns like "worker", "player", "cutter", "gamer".
export const agentNounExamples = [
[
{
p: "زده کول",
f: "zda kawul",
e: "to learn",
},
{
p: "زده کوونکی",
f: "zda kawóonkey",
e: "student/learner",
},
],
[
{
p: "ښوول",
f: "xowul",
e: "to teach",
},
{
p: "ښووونکی",
f: "xowóonkey",
e: "teacher",
},
],
[
{
p: "لیدل",
f: "leedul",
e: "to see",
},
{
p: "لیدونکی",
f: "leedóonkey",
e: "viewer",
},
],
[
{
p: "اورېدل",
f: "awredul",
e: "to hear",
},
{
p: "اورېدونکی",
f: "awredoonkey",
e: "listener",
},
],
[
{
p: "زده کول",
f: "zda kawul",
e: "to learn",
},
{
p: "زده کوونکی",
f: "zda kawóonkay",
e: "student/learner",
},
],
[
{
p: "ښوول",
f: "xowul",
e: "to teach",
},
{
p: "ښووونکی",
f: "xowóonkay",
e: "teacher",
},
],
[
{
p: "لیدل",
f: "leedul",
e: "to see",
},
{
p: "لیدونکی",
f: "leedóonkay",
e: "viewer",
},
],
[
{
p: "اورېدل",
f: "awredul",
e: "to hear",
},
{
p: "اورېدونکی",
f: "awredoonkay",
e: "listener",
},
],
];
<table className="table table-bordered my-3">
<thead>
<tr>
<th scope="col">Verb</th>
<th scope="col">Agent Noun</th>
</tr>
</thead>
<tbody>
{agentNounExamples.map(a => (
<tr>
<td>
<Examples opts={opts}>{a[0]}</Examples>
</td>
<td>
<Examples opts={opts}>{a[1]}</Examples>
</td>
</tr>
))}
</tbody>
<thead>
<tr>
<th scope="col">Verb</th>
<th scope="col">Agent Noun</th>
</tr>
</thead>
<tbody>
{agentNounExamples.map((a) => (
<tr>
<td>
<Examples opts={opts}>{a[0]}</Examples>
</td>
<td>
<Examples opts={opts}>{a[1]}</Examples>
</td>
</tr>
))}
</tbody>
</table>
Of course, these nouns will <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ey--">inflect just like any other nounse ending with an unstressed <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /></Link>.
Of course, these nouns will <Link to="/inflection/inflection-patterns/#2-words-ending-in-an-unstressed-inlineps-optsopts-ps-p-ی-f-ay--">inflect just like any other nounse ending with an unstressed <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} /></Link>.
<Examples opts={opts}>
{psmd([
{
p: "**زده کوونکي** مکتب ته ځي",
f: "**zda kawoonkee** maktab to dzee",
e: "The **students (male)** are going to school",
},
{
p: "**زده کوونکې** مکتب ته ځي",
f: "**zda kawoonke** maktab to dzee",
e: "The **students (female)** are going to school",
},
{
p: "ګرانو **لیدونکو**، ستړي مه شئ",
f: "graano **leedóonko**, stuRee ma sheyy",
e: "Hello dear viewers",
},
])}
{psmd([
{
p: "**زده کوونکي** مکتب ته ځي",
f: "**zda kawoonkee** maktab to dzee",
e: "The **students (male)** are going to school",
},
{
p: "**زده کوونکې** مکتب ته ځي",
f: "**zda kawoonke** maktab to dzee",
e: "The **students (female)** are going to school",
},
{
p: "ګرانو **لیدونکو**، ستړي مه شئ",
f: "graano **leedóonko**, stuRee ma shey",
e: "Hello dear viewers",
},
])}
</Examples>
## Past Participle
{/* These are formed by adding a <InlinePs opts={opts} ps={{ p: "ونکی", f: "oonkey" }} /> to the end of the <Link to="/verbs/roots-and-stems/">imperfective root</Link> of a verb. */}
{/* These are formed by adding a <InlinePs opts={opts} ps={{ p: "ونکی", f: "oonkay" }} /> to the end of the <Link to="/verbs/roots-and-stems/">imperfective root</Link> of a verb. */}
They work as an adjective... EXPLANATION COMING SOON.
<Examples opts={opts}>
{psmd([
{
p: "د موټړو په ښیښو **لیکې** خبرې",
f: "du moTur pu xeexo **leekúle** khabure",
e: "Words **written** on car windows",
},
{
p: "کلاس په **ټاکلي** وخت کې پیل شو",
f: "klaas pu **Takúlee** wakht peyl sho",
e: "Class started at the **appointed** time",
},
{
p: "**راغلي** خلک هلته ناست دي",
f: "**raaghúlee** khalk halta naast dee",
e: "The people **that came** are sitting there",
},
{
p: "هغوي له **راغلو** خلکو سره مرسته کوي",
f: "haghwee la **raaghúlo** khalko sara mrasta kawee",
e: "They are helping the people that came.",
}
])}
</Examples>
{psmd([
{
p: "د موټړو په ښیښو **لیکې** خبرې",
f: "du moTur pu xeexo **leekúle** khabure",
e: "Words **written** on car windows",
},
{
p: "کلاس په **ټاکلي** وخت کې پیل شو",
f: "klaas pu **Takúlee** wakht payl sho",
e: "Class started at the **appointed** time",
},
{
p: "**راغلي** خلک هلته ناست دي",
f: "**raaghúlee** khalk halta naast dee",
e: "The people **that came** are sitting there",
},
{
p: "هغوي له **راغلو** خلکو سره مرسته کوي",
f: "haghwee la **raaghúlo** khalko sara mrasta kawee",
e: "They are helping the people that came.",
},
])}
</Examples>

View File

@ -2,18 +2,9 @@
title: APs
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
makeNounSelection,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
import Link from "../../components/Link";
import EditableBlock, {
EditIcon,
} from "../../components/phrase-diagram/EditableBlock";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import EditableBlock from "../../components/phrase-diagram/EditableBlock";
import EditableEPEx from "../../components/phrase-diagram/EditableEPEx";
import { EP, VP } from "../../components/terms-links.tsx";
@ -24,198 +15,333 @@ An AP is either:
- an adverb, or
- a sandwich
### Adverb
An adverb is a word or expression that modifies the time, manner, place, etc. of a phrase.
<EditableBlock opts={opts}>
{
{
type: "AP",
selection: {
type: "adverb",
entry: {"ts":1527815160,"i":2394,"p":"پرون","f":"paroon","g":"paroon","e":"yesterday","c":"adv."},
},
}
}
{{
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527815160,
i: 2394,
p: "پرون",
f: "paroon",
g: "paroon",
e: "yesterday",
c: "adv.",
},
},
}}
</EditableBlock>
<EditableBlock opts={opts}>
{
{
type: "AP",
selection: {
type: "adverb",
entry: {"ts":1527819967,"i":5428,"p":"خامخا","f":"khaamakhaa","g":"khaamakhaa","e":"definitely, for sure, whether someone wants or not, willy-nilly (this last use more in Urdu)","c":"adv."},
},
}
}
{{
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527819967,
i: 5428,
p: "خامخا",
f: "khaamakhaa",
g: "khaamakhaa",
e: "definitely, for sure, whether someone wants or not, willy-nilly (this last use more in Urdu)",
c: "adv.",
},
},
}}
</EditableBlock>
#### Note on inflecting adverbs
Adverbs don't normally inflect, but they *will inflect* if they are words that can also be used as an adjective.
Adverbs don't normally inflect, but they _will inflect_ if they are words that can also be used as an adjective.
Notice how the adverb <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRey", e: "tired" }} /> inflects depending on who is sitting in this example:
Notice how the adverb <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRay", e: "tired" }} /> inflects depending on who is sitting in this example:
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.23089213205851067,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":3,"distance":"far"}}}},{"key":0.3252190155472441,"block":{"type":"AP","selection":{"type":"adverb","entry":{"ts":1527812558,"i":6352,"p":"دلته","f":"dălta","g":"dalta","e":"here","c":"loc. adv."}}}},{"key":0.015377073636430039,"block":{"type":"AP","selection":{"type":"adverb","entry":{"ts":1527815306,"i":7722,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj. / adv."}}}}],"predicate":{"type":"Complement","Complement":{"type":"complement","selection":{"type":"adjective","entry":{"ts":1527815106,"i":13461,"p":"ناست","f":"naast","g":"naast","e":"sitting, seated","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.23089213205851067,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 3, distance: "far" },
},
},
},
{
key: 0.3252190155472441,
block: {
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527812558,
i: 6352,
p: "دلته",
f: "dălta",
g: "dalta",
e: "here",
c: "loc. adv.",
},
},
},
},
{
key: 0.015377073636430039,
block: {
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527815306,
i: 7722,
p: "ستړی",
f: "stúRay",
g: "stuRay",
e: "tired",
c: "adj. / adv.",
},
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "complement",
selection: {
type: "adjective",
entry: {
ts: 1527815106,
i: 13461,
p: "ناست",
f: "naast",
g: "naast",
e: "sitting, seated",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
When an adverb can also be used as an adjective it will inflect to agree with:
- With <EP text="EPs" />: the subject
- With <VP text="VPs" />: the object, or if there's no object NP, the subject
- With <EP text="EPs" />: the subject
- With <VP text="VPs" />: the object, or if there's no object NP, the subject
### Sandwich 🥪
In English we have have [prepositions](https://en.wikipedia.org/wiki/Preposition_and_postposition) like "with", "at", "towards", "under" that we put *in front* of nouns. Other langagues have [prepositions](https://en.wikipedia.org/wiki/Preposition_and_postposition) that you add to the *end* of nouns. In Pashto we have [adpostions](https://en.wikipedia.org/wiki/Preposition_and_postposition), which are little sets of words that go *in front and behind* nouns. Sometimes they only go on one side, and sometimes they surround the word on both sides. Because of this we'll call them **sandwiches**.
In English we have have [prepositions](https://en.wikipedia.org/wiki/Preposition_and_postposition) like "with", "at", "towards", "under" that we put _in front_ of nouns. Other langagues have [prepositions](https://en.wikipedia.org/wiki/Preposition_and_postposition) that you add to the _end_ of nouns. In Pashto we have [adpostions](https://en.wikipedia.org/wiki/Preposition_and_postposition), which are little sets of words that go _in front and behind_ nouns. Sometimes they only go on one side, and sometimes they surround the word on both sides. Because of this we'll call them **sandwiches**.
These "sandwiches" are also used as an adverb to give more information for the phrase. They take an <Link to="/phrase-structure/np/">NP</Link> in the middle. For example if we want to say "in the house" we take the sandwich <InlinePs opts={opts} ps={{ p: "په ... کې", f: "pu ... ke", e: "in" }} /> and put the NP <InlinePs opts={opts} ps={{ p: "کور", f: "kor", e: "house" }} /> inside of it.
<EditableBlock opts={opts}>
{
{
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
}
}
{{
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
}}
</EditableBlock>
Because the inside of a sandwich is an <Link to="/phrase-structure/np/">NP</Link> we can also spice it up by adding adjectives.
<EditableBlock opts={opts}>
{
{
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [{
type: "adjective",
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."},
}],
possesor: undefined,
},
},
{{
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {
ts: 1527812625,
i: 9128,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
}
}
],
possesor: undefined,
},
},
},
}}
</EditableBlock>
We can also add a possesor it hangs outside of the sandwich. All together it's still all considered one AP block though.
<EditableBlock opts={opts}>
{{
type: "AP",
{{
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [{
type: "adjective",
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."},
}],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527815251,"i":7802,"p":"سړی","f":"saRéy","g":"saRey","e":"man","c":"n. m.","ec":"man","ep":"men"},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
},
type: "noun",
entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {
ts: 1527812625,
i: 9128,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815251,
i: 7802,
p: "سړی",
f: "saRáy",
g: "saRay",
e: "man",
c: "n. m.",
ec: "man",
ep: "men",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
},
}}
},
},
}}
</EditableBlock>
Here's another example using the sandwich <InlinePs opts={opts} ps={{ p: "سره", f: "sara", e: "with" }} />:
<EditableBlock opts={opts}>
{{
type: "AP",
{{
type: "AP",
selection: {
type: "sandwich",
before: { p: "له", f: "la" },
after: { p: "سره", f: "sara" },
e: "with",
inside: {
type: "NP",
selection: {
type: "sandwich",
before: { p: "له", f: "la" },
after: { p: "سره", f: "sara" },
e: "with",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527814159,"i":12723,"p":"ملګری","f":"malgúrey","g":"malgurey","e":"friend, companion","c":"n. m. anim. unisex"},
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "pronoun",
distance: "far",
person: 0,
},
},
},
},
type: "noun",
entry: {
ts: 1527814159,
i: 12723,
p: "ملګری",
f: "malgúray",
g: "malguray",
e: "friend, companion",
c: "n. m. anim. unisex",
},
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "pronoun",
distance: "far",
person: 0,
},
},
},
},
}}
},
},
}}
</EditableBlock>
Notice how when we put the word <InlinePs opts={opts} ps={{ p: "ملګری", f: "malgúrey", e: "friend" }} /> inside the sandwich it <Link to="/inflection/inflection-intro/">inflects</Link>. You <strong>always inflect the inside of the sandwich</strong> except for <Link to="/inflection/inflection-patterns/#exceptions">two exceptions</Link>.
Notice how when we put the word <InlinePs opts={opts} ps={{ p: "ملګری", f: "malgúray", e: "friend" }} /> inside the sandwich it <Link to="/inflection/inflection-intro/">inflects</Link>. You <strong>always inflect the inside of the sandwich</strong> except for <Link to="/inflection/inflection-patterns/#exceptions">two exceptions</Link>.

View File

@ -2,23 +2,15 @@
title: Blocks and Kids
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
import Link from "../../components/Link";
import EditableBlock, {
EditIcon,
} from "../../components/phrase-diagram/EditableBlock";
import BasicBlocks from "../../components/BasicBlocks";
import { AP, NP, Complement } from "../../components/terms-links";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import EditableEPEx from "../../components/phrase-diagram/EditableEPEx";
export function BlocksIcon() {
return <i className="mx-1 fas fa-cubes" />
return <i className="mx-1 fas fa-cubes" />;
}
Pashto phrases are built with **blocks** 🧱 and **kids** 👶. It's important to know what these parts are and how they fit together.
@ -34,38 +26,208 @@ Blocks are units of speech like <NP text="NPs" />, <AP text="APs" /> or verbs, e
Wherever you see an example phrase with a <BlocksIcon /> you can click it to see the blocks that make up the phrase. Try clicking the <BlocksIcon /> to see the blocks that make up the examples below.
<EditableVPEx opts={opts} noEdit>
{
{"blocks":[{"key":0.21116655057859535,"block":{"type":"AP","selection":{"type":"adverb","entry":{"ts":1527815160,"i":2394,"p":"پرون","f":"paroon","g":"paroon","e":"yesterday","c":"adv."}}}},{"key":0.3303626365055592,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.03422215123934946,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.21116655057859535,
block: {
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527815160,
i: 2394,
p: "پرون",
f: "paroon",
g: "paroon",
e: "yesterday",
c: "adv.",
},
},
},
},
{
key: 0.3303626365055592,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.03422215123934946,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableEPEx opts={opts} noEdit hideOmitSubject>
{
{"blocks":[{"key":0.7559632995928578,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527815306,"i":7595,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}}}},"equative":{"tense":"present","negative":true},"omitSubject":false}
}
{{
blocks: [
{
key: 0.7559632995928578,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527815306,
i: 7595,
p: "ستړی",
f: "stúRay",
g: "stuRay",
e: "tired",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: true },
omitSubject: false,
}}
</EditableEPEx>
<EditableVPEx opts={opts} noEdit>
{
{"blocks":[{"key":0.3303626365055592,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.03422215123934946,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"perfect","transitivity":"transitive","isCompound":false,"voice":"active","negative":true,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.3303626365055592,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.03422215123934946,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "perfect",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: true,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
You will see a bunch of different blocks. Don't worry about learning what they all are, but if you want here's a complete list:
<details>
<summary>All the blocks</summary>
<ul>
<li><NP /></li>
<li><AP /></li>
<li><Complement text="Complement" /></li>
<li>Verb</li>
<li>The perfective head of a Verb (a perfective prefix like <InlinePs opts={opts} ps={{ p: "و", f: "oo", e: "" }} />)</li>
<li>Equative</li>
<li>Past Participle (in a perfect verb)</li>
<li>The negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "not" }} /> or <InlinePs opts={opts} ps={{ p: "مه", f: "mú", e: "don't" }} /></li>
<li>The ability auxilary verb (ie. the <InlinePs opts={opts} ps={{ p: "شي", f: "shee" }} /> in <InlinePs opts={opts} ps={{ p: "کولی شي", f: "shee" }} />)</li>
</ul>
</details>
<summary>All the blocks</summary>
<ul>
<li>
<NP />
</li>
<li>
<AP />
</li>
<li>
<Complement text="Complement" />
</li>
<li>Verb</li>
<li>
The perfective head of a Verb (a perfective prefix like{" "}
<InlinePs opts={opts} ps={{ p: "و", f: "oo", e: "" }} />)
</li>
<li>Equative</li>
<li>Past Participle (in a perfect verb)</li>
<li>
The negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "not" }} />{" "}
or <InlinePs opts={opts} ps={{ p: "مه", f: "mú", e: "don't" }} />
</li>
<li>
The ability auxilary verb (ie. the{" "}
<InlinePs opts={opts} ps={{ p: "شي", f: "shee" }} /> in{" "}
<InlinePs opts={opts} ps={{ p: "کولی شي", f: "shee" }} />)
</li>
</ul>
</details>
## The Kids' Section
@ -81,42 +243,221 @@ The **kids' section is always after the first block**.
Click on the <BlocksIcon /> on the following examples to see where the kids' section lies.
<EditableVPEx opts={opts} noEdit>
{
{"blocks":[{"key":0.27231313024586834,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.6810015291689175,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.27231313024586834,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.6810015291689175,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: true },
}}
</EditableVPEx>
<EditableEPEx opts={opts} hideOmitSubject noEdit>
{
{"blocks":[{"key":0.7559632995928578,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527815177,"i":2535,"p":"پلار","f":"plaar","g":"plaar","e":"father","c":"n. m. anim."},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[],"possesor":{"np":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}},"shrunken":true}}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"loc. adv.","entry":{"ts":1527812558,"i":6251,"p":"دلته","f":"dălta","g":"dalta","e":"here","c":"loc. adv."}}}},"equative":{"tense":"future","negative":true},"omitSubject":false}
}
{{
blocks: [
{
key: 0.7559632995928578,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815177,
i: 2535,
p: "پلار",
f: "plaar",
g: "plaar",
e: "father",
c: "n. m. anim.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: {
np: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
shrunken: true,
},
},
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "loc. adv.",
entry: {
ts: 1527812558,
i: 6251,
p: "دلته",
f: "dălta",
g: "dalta",
e: "here",
c: "loc. adv.",
},
},
},
},
equative: { tense: "future", negative: true },
omitSubject: false,
}}
</EditableEPEx>
<EditableVPEx opts={opts} noEdit>
{
{"blocks":[{"key":0.27231313024586834,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.6810015291689175,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"perfect","transitivity":"transitive","isCompound":false,"voice":"active","negative":true,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.27231313024586834,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.6810015291689175,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "perfect",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: true,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: true },
}}
</EditableVPEx>
Here are the kids go in the kids' section, and they always line up **in this order**.
<ul>
<li>The emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> particle</li>
<li>The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> particle</li>
<li>The jussive <InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "may" }} /></li>
<li><Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link>:</li>
<ul>
<li><InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st pers sing" }} /></li>
<li><InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "2nd pers sing" }} /></li>
<li><InlinePs opts={opts} ps={{ p: "مو", f: "mU", e: "1st/2nd pers plur" }} /></li>
<li><InlinePs opts={opts} ps={{ p: "یې", f: "ye", e: "3rd pers" }} /></li>
</ul>
<li><InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} /></li>
<li>
The emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> particle
</li>
<li>
The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> particle
</li>
<li>
The jussive <InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "may" }} />
</li>
<li>
<Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link>:
</li>
<ul>
<li>
<InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st pers sing" }} />
</li>
<li>
<InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "2nd pers sing" }} />
</li>
<li>
<InlinePs opts={opts} ps={{ p: "مو", f: "mU", e: "1st/2nd pers plur" }} />
</li>
<li>
<InlinePs opts={opts} ps={{ p: "یې", f: "ye", e: "3rd pers" }} />
</li>
</ul>
<li>
<InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} />
</li>
</ul>
<p><Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link> will always line up in 1st, 2rd, 3rd person order.</p>
<p>
<Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link> will always line up
in 1st, 2rd, 3rd person order.
</p>
**Note**: You'll also see <InlinePs opts={opts} ps={{ p: "خو", f: "kho", e: "but/however" }} /> as a connector or <InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} /> *outsite of the kids' section*. But all the other kids have to stay in the kids' section always!
**Note**: You'll also see <InlinePs opts={opts} ps={{ p: "خو", f: "kho", e: "but/however" }} /> as a connector or <InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} /> _outsite of the kids' section_. But all the other kids have to stay in the kids' section always!
## Connectors
@ -126,13 +467,16 @@ Phrases are connected using conjuctions like:
- <InlinePs opts={opts} ps={{ p: "چې", f: "che", e: "that" }} />
- <InlinePs opts={opts} ps={{ p: "خو", f: "kho", e: "but/however" }} />
These **connectors do not count as blocks**. The <Link to="#the-kids-section">kids' section</Link> will always come after the first *block*.
These **connectors do not count as blocks**. The <Link to="#the-kids-section">kids' section</Link> will always come after the first _block_.
Phrases also might start with little directional words like:
- <InlinePs opts={opts} ps={{ p: "راته", f: "raa-ta", e: "to me/us" }} />
- <InlinePs opts={opts} ps={{ p: "درته", f: "dăr-ta", e: "to you" }} />
- <InlinePs opts={opts} ps={{ p: "ورته", f: "wăr-ta", e: "to him/her/them/it" }} />
- <InlinePs
opts={opts}
ps={{ p: "ورته", f: "wăr-ta", e: "to him/her/them/it" }}
/>
- <InlinePs opts={opts} ps={{ p: "راپسې", f: "raa-pase", e: "after me/us" }} />
- <InlinePs opts={opts} ps={{ p: "درپسې", f: "dăr-pase", e: "after you" }} />
- <InlinePs opts={opts} ps={{ p: "ورپسې", f: "wăr-pase", e: "after you" }} />

File diff suppressed because it is too large Load Diff

View File

@ -3,25 +3,26 @@ title: EPs
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
makeNounSelection,
defaultTextOptions as opts,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import EquativeIllustration from "../../components/EquativeIllustration";
import EditableEPEx, { EditIcon } from "../../components/phrase-diagram/EditableEPEx";
import BasicBlocks from "../../components/BasicBlocks"
import EditableEPEx, {
EditIcon,
} from "../../components/phrase-diagram/EditableEPEx";
import BasicBlocks from "../../components/BasicBlocks";
**There is no "to be" verb in Pashto**. 🤯 Let that sink in for a second. There's no infinitive "to be" form. You can't say "It's good *to be* here." We can't use "to be" as a verb and make normal verb phrases like we do in other languages.
**There is no "to be" verb in Pashto**. 🤯 Let that sink in for a second. There's no infinitive "to be" form. You can't say "It's good _to be_ here." We can't use "to be" as a verb and make normal verb phrases like we do in other languages.
In Pashto, we use a special structure called an **equative phrase (EP)** when we talk about something being something.
Basically with an equative phrase we have three main parts:
- **"A"** a subject (the thing we are talking about)
- **"B"** a predicate (what the thing *is*)
- **"B"** a predicate (what the thing _is_)
- **"="** an equative at the end to join them together
Notice how the word order is different than it is in English.
@ -30,18 +31,25 @@ Notice how the word order is different than it is in English.
There are two ways to build an equative phrase:
1. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/ep/#whats-an-ep-complement">Complement</Link> + Equative
2. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/np/">NP</Link> + Equative
1. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/ep/#whats-an-ep-complement">
Complement
</Link> + Equative
2. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/np/">
NP
</Link> + Equative{" "}
The equative will **always agree with the last NP** in the phrase. So for #1 it will agree with the *subject* and for #2 it will agree with the *predicate*.
The equative will **always agree with the last NP** in the phrase. So for #1 it will agree with the _subject_ and for #2 it will agree with the _predicate_.
## 1. NP + Complement
<BasicBlocks large blocks={[
<BasicBlocks
large
blocks={[
{ bottom: "NP", inside: "A", top: "Subject" },
{ bottom: "Comp.", inside: "B", top: "Predicate" },
{ bottom: "Equative", inside: "=" },
]} />
]}
/>
This is the most common phrase you will see for describing what a subject is. With this kind of phrase we use an <Link to="/phrase-structure/ep/#whats-an-ep-complement">EP complement</Link> to describe the subject <Link to="/phrase-structure/np/">NP</Link>.
@ -61,15 +69,77 @@ Let's look at some examples using each of these kinds of complements. Click on t
An adjective is a word that describes what the subject is like. Notice that if possible, it will inflect to agree with the subject.
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527815306,"i":7595,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527815306,
i: 7595,
p: "ستړی",
f: "stúRay",
g: "stuRay",
e: "tired",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527812792,"i":5823,"p":"خوشاله","f":"khoshaala","g":"khoshaala","e":"happy, glad","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527812792,
i: 5823,
p: "خوشاله",
f: "khoshaala",
g: "khoshaala",
e: "happy, glad",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
#### With a location adverb
@ -77,15 +147,77 @@ An adjective is a word that describes what the subject is like. Notice that if p
A location adverb is a word that describes the location of the subject. Don't worry, it doesn't inflect.
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":10,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"loc. adv.","entry":{"ts":1527812558,"i":6251,"p":"دلته","f":"dălta","g":"dalta","e":"here","c":"loc. adv."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 10, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "loc. adv.",
entry: {
ts: 1527812558,
i: 6251,
p: "دلته",
f: "dălta",
g: "dalta",
e: "here",
c: "loc. adv.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"loc. adv.","entry":{"ts":1527812449,"i":13954,"p":"هلته","f":"hálta, álta","g":"halta,alta","e":"there","c":"loc. adv."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "loc. adv.",
entry: {
ts: 1527812449,
i: 13954,
p: "هلته",
f: "hálta, álta",
g: "halta,alta",
e: "there",
c: "loc. adv.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
#### With a sandwich
@ -93,75 +225,356 @@ A location adverb is a word that describes the location of the subject. Don't wo
You can also use any kind of sandwich to describe the subject of an EP.
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":1,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"sandwich","before":{"p":"له","f":"la"},"after":{"p":"سره","f":"sara"},"e":"with","inside":{"type":"NP","selection":{"type":"pronoun","person":3,"distance":"far"}}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 1, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "sandwich",
before: { p: "له", f: "la" },
after: { p: "سره", f: "sara" },
e: "with",
inside: {
type: "NP",
selection: { type: "pronoun", person: 3, distance: "far" },
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":4,"distance":"far"}}}}],"predicate":{"type":"Complement","Complement":{"type":"EQComp","selection":{"type":"sandwich","before":{"p":"په","f":"pu"},"after":{"p":"کې","f":"ke"},"e":"in","inside":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812828,"i":10540,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 4, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
Complement: {
type: "EQComp",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812828,
i: 10540,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
#### With a complement noun
In Pashto there are a lot of [compound verbs](https://www.lingdocs.com/blog/pashto-compound-verbs) that use *nouns* as the complement. For example, to become angry <InlinePs opts={opts} ps={{ p: "غوسه کېدل", f: "ghwUsa kedul", e: "to become angry" }} /> uses the complement <InlinePs opts={opts} ps={{ p: "غوسه", f: "ghWusa", e: "anger" }} />. This complement noun can also be used with an equative, for instance.
In Pashto there are a lot of [compound verbs](https://www.lingdocs.com/blog/pashto-compound-verbs) that use _nouns_ as the complement. For example, to become angry <InlinePs opts={opts} ps={{ p: "غوسه کېدل", f: "ghwUsa kedul", e: "to become angry" }} /> uses the complement <InlinePs opts={opts} ps={{ p: "غوسه", f: "ghWusa", e: "anger" }} />. This complement noun can also be used with an equative, for instance.
<Examples opts={opts}>
{psmd([
{ p: "هغه **غوسه** دی", f: "hagha **ghwUsa** dey", e: "He is **angry**" },
])}
{psmd([
{ p: "هغه **غوسه** دی", f: "hagha **ghwUsa** day", e: "He is **angry**" },
])}
</Examples>
In English it would [sound funny](https://www.youtube.com/shorts/U7X7cEh5au8) to say "I am anger," but in Pashto it's normal. These complement nouns get treated almost as if they were adjectives. Except...
You will notice how when people use these complement nouns with equatives they *don't inflect* based on the subject. For instance you could ask if someone is resting using the word <InlinePs opts={opts} ps={{ p: "استرحات", f: "istiraháat", e: "rest" }} /> from the compound verb <InlinePs opts={opts} ps={{ p: "استرحات کول", f: "istirahaat kawul", e: "to rest" }} />.
You will notice how when people use these complement nouns with equatives they _don't inflect_ based on the subject. For instance you could ask if someone is resting using the word <InlinePs opts={opts} ps={{ p: "استرحات", f: "istiraháat", e: "rest" }} /> from the compound verb <InlinePs opts={opts} ps={{ p: "استرحات کول", f: "istirahaat kawul", e: "to rest" }} />.
<Examples opts={opts}>
{psmd([
{ p: "ته استرحات یې؟", f: "tu istirahaat ye?", e: "Are you (m.) **resting**?" },
{ p: "ته استرحات یې؟", f: "tu istirahaat ye?", e: "Are you (f.) **resting**?" },
])}
{psmd([
{
p: "ته استرحات یې؟",
f: "tu istirahaat ye?",
e: "Are you (m.) **resting**?",
},
{
p: "ته استرحات یې؟",
f: "tu istirahaat ye?",
e: "Are you (f.) **resting**?",
},
])}
</Examples>
You don't inflect the <InlinePs opts={opts} ps={{ p: "استرحات", f: "istiraháat", e: "rest" }} /> because it's a noun, not an adjective.
It's not always that straightforward though. Some complement nouns get used so much they get treated (by some people) as adjectives and *will* inflect. A good example of this is the <InlinePs opts={opts} ps={{ p: "خبر", f: "khabur", e: "news" }} /> in <InlinePs opts={opts} ps={{ p: "خبرېدل", f: "khabredul", e: "to become aware of" }} />. Some people will inflect it, and some people won't.
It's not always that straightforward though. Some complement nouns get used so much they get treated (by some people) as adjectives and _will_ inflect. A good example of this is the <InlinePs opts={opts} ps={{ p: "خبر", f: "khabur", e: "news" }} /> in <InlinePs opts={opts} ps={{ p: "خبرېدل", f: "khabredul", e: "to become aware of" }} />. Some people will inflect it, and some people won't.
<Examples opts={opts}>
{psmd([
{ p: "زه **خبر** یم", f: "zu **khabúr** yum", e: "I (f.) am aware", sub: "not inflected" },
{ p: "زه **خبره** یم", f: "zu **khabúra** yum", e: "I (f.) am aware", sub: "inflected" },
])}
{psmd([
{
p: "زه **خبر** یم",
f: "zu **khabúr** yum",
e: "I (f.) am aware",
sub: "not inflected",
},
{
p: "زه **خبره** یم",
f: "zu **khabúra** yum",
e: "I (f.) am aware",
sub: "inflected",
},
])}
</Examples>
## 2. NP + NP
<BasicBlocks large blocks={[
<BasicBlocks
large
blocks={[
{ bottom: "NP", inside: "A", top: "Subject" },
{ bottom: "NP", inside: "B", top: "Predicate" },
{ bottom: "Equative", inside: "=" },
]} />
]}
/>
Sometimes you need to say that an <Link to="/phrase-structure/np/">NP</Link> is an <Link to="/phrase-structure/np/">NP</Link>. <strong>The equative always agrees with the <em>last</em> <Link to="/phrase-structure/np/">NP</Link></strong>.
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10010,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}}}}],"predicate":{"type":"NP","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527819521,"i":5824,"p":"خوشالي","f":"khoshaalee","g":"khoshaalee","e":"happiness (خوشحالي)","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10010,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
predicate: {
type: "NP",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527819521,
i: 5824,
p: "خوشالي",
f: "khoshaalee",
g: "khoshaalee",
e: "happiness (خوشحالي)",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527819521,"i":5824,"p":"خوشالي","f":"khoshaalee","g":"khoshaalee","e":"happiness (خوشحالي)","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"predicate":{"type":"NP","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10010,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527819521,
i: 5824,
p: "خوشالي",
f: "khoshaalee",
g: "khoshaalee",
e: "happiness (خوشحالي)",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
predicate: {
type: "NP",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10010,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812903,"i":13128,"p":"مینه","f":"meena","g":"meena","e":"love","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"predicate":{"type":"NP","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527815268,"i":8554,"p":"شی","f":"shey","g":"shey","e":"thing","c":"n. m.","ppp":"شیان، شیونه","ppf":"sheyáan, sheyóona"},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[{"type":"adjective","entry":{"ts":1527812796,"i":8655,"p":"ښه","f":"xu","g":"xu","e":"good","c":"adj."}}]}},"Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527815306,"i":7595,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812903,
i: 13128,
p: "مینه",
f: "meena",
g: "meena",
e: "love",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
predicate: {
type: "NP",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815268,
i: 8554,
p: "شی",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {
ts: 1527812796,
i: 8655,
p: "ښه",
f: "xu",
g: "xu",
e: "good",
c: "adj.",
},
},
],
},
},
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527815306,
i: 7595,
p: "ستړی",
f: "stúRay",
g: "stuRay",
e: "tired",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
## Adding APs
@ -169,9 +582,94 @@ Sometimes you need to say that an <Link to="/phrase-structure/np/">NP</Link> is
You can add as many <Link to="/phrase-structure/ap/">APs</Link> as you like to a phrase. For example if we wanted to say that the weather is good <strong>here</strong> we can add the <Link to="/phrase-structure/ap/">AP</Link> <InlinePs opts={opts} ps={{ p: "دلته", f: "dălta", e: "here - adverb" }} />.
<EditableEPEx opts={opts} hideOmitSubject>
{
{"blocks":[{"key":0.925654634890972,"block":{"type":"AP","selection":{"type":"adverb","entry":{"ts":1527812558,"i":6251,"p":"دلته","f":"dălta","g":"dalta","e":"here","c":"loc. adv."}}}},{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812672,"i":14045,"p":"هوا","f":"hawaa","g":"hawaa","e":"air, atmosphere; weather","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"predicate":{"type":"Complement","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10010,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}},"Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527812796,"i":8655,"p":"ښه","f":"xu","g":"xu","e":"good","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":false}
}
{{
blocks: [
{
key: 0.925654634890972,
block: {
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527812558,
i: 6251,
p: "دلته",
f: "dălta",
g: "dalta",
e: "here",
c: "loc. adv.",
},
},
},
},
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812672,
i: 14045,
p: "هوا",
f: "hawaa",
g: "hawaa",
e: "air, atmosphere; weather",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
predicate: {
type: "Complement",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10010,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527812796,
i: 8655,
p: "ښه",
f: "xu",
g: "xu",
e: "good",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: false,
}}
</EditableEPEx>
Try adding clicking the <EditIcon /> and adding other <Link to="/phrase-structure/ap/">APs</Link> to this or other examples above.
@ -181,13 +679,115 @@ Try adding clicking the <EditIcon /> and adding other <Link to="/phrase-structur
If it's obvious who/what you're talking about you can always leave out the subject.
<EditableEPEx opts={opts}>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":5,"distance":"far"}}}}],"predicate":{"type":"Complement","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10010,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}},"Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527812796,"i":8655,"p":"ښه","f":"xu","g":"xu","e":"good","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":true}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 5, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10010,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527812796,
i: 8655,
p: "ښه",
f: "xu",
g: "xu",
e: "good",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: true,
}}
</EditableEPEx>
<EditableEPEx opts={opts}>
{
{"blocks":[{"key":0.0539623363055568,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":1,"distance":"far"}}}}],"predicate":{"type":"Complement","NP":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812817,"i":10010,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"plural","numberCanChange":true,"adjectives":[]}},"Complement":{"type":"EQComp","selection":{"type":"adjective","entry":{"ts":1527815306,"i":7595,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}}}},"equative":{"tense":"present","negative":false},"omitSubject":true}
}
{{
blocks: [
{
key: 0.0539623363055568,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 1, distance: "far" },
},
},
},
],
predicate: {
type: "Complement",
NP: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10010,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
Complement: {
type: "EQComp",
selection: {
type: "adjective",
entry: {
ts: 1527815306,
i: 7595,
p: "ستړی",
f: "stúRay",
g: "stuRay",
e: "tired",
c: "adj.",
},
},
},
},
equative: { tense: "present", negative: false },
omitSubject: true,
}}
</EditableEPEx>

View File

@ -1,4 +0,0 @@
export const data = {
name: "bill",
age: 34,
};

View File

@ -3,16 +3,15 @@ title: NPs
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
defaultTextOptions as opts,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import EditableBlock, {
EditIcon,
EditIcon,
} from "../../components/phrase-diagram/EditableBlock";
import BasicBlocks from "../../components/BasicBlocks";
A noun phrase (NP) in Pashto is one of the following three things:
@ -25,186 +24,330 @@ A noun phrase (NP) in Pashto is one of the following three things:
A **noun** is a word that we use to identify people, places, things, or ideas. One of these words by itself it forms a NP, one of the basic building blocks.
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
}
}
</EditableBlock>
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
}}
</EditableBlock>
#### Adding adjectives
We can also **extend our noun by adding *adjectives***. Let's add the *adjective* <InlinePs opts={opts} ps={{ p: "زوړ", f: "zoR", e: "old" }} /> to our NP.
We can also **extend our noun by adding _adjectives_**. Let's add the _adjective_ <InlinePs opts={opts} ps={{ p: "زوړ", f: "zoR", e: "old" }} /> to our NP.
<EditableBlock opts={opts}>
{
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [{
type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"},
}],
possesor: undefined,
}
}
}
type: "adjective",
entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
},
],
possesor: undefined,
},
}}
</EditableBlock>
Now we have two words, but it's still **one NP**, one building block. We can add as many adjectives as we want, and it still stays as one single building block. Click on the <EditIcon /> icon below to try adding or removing more adjectives.
<EditableBlock opts={opts}>
{
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {"ts":1527812625,"i":9119,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."},
},
{
type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"},
},
{
type: "adjective",
entry: {"ts":1578329248464,"i":7542,"p":"سپین","f":"speen","g":"speen","e":"white (fig. clear, honest, beautiful)","c":"adj."},
},
],
possesor: undefined,
}
}
}
type: "adjective",
entry: {
ts: 1527812625,
i: 9119,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
{
type: "adjective",
entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
},
{
type: "adjective",
entry: {
ts: 1578329248464,
i: 7542,
p: "سپین",
f: "speen",
g: "speen",
e: "white (fig. clear, honest, beautiful)",
c: "adj.",
},
},
],
possesor: undefined,
},
}}
</EditableBlock>
It's important to note that the adjective will <Link to="/inflection/inflection-patterns/">inflect</Link> according to the noun it's attached to.
#### Adding a possesor
We can also add a **possesor** by adding another NP <Link to="/sandwiches/sandwiches/">sandwiched</Link> in with a <InlinePs opts={opts} ps={{ p: "د", f: "du", e: "of"}} />. (Notice that the word sandwiched in there will <Link to="/inflection/inflection-intro/">inflect</Link> if possible.) Now we have a NP inside of an NP, but it's still all **one NP** or **one building block**.
We can also add a **possesor** by adding another NP <Link to="/sandwiches/sandwiches/">sandwiched</Link> in with a <InlinePs opts={opts} ps={{ p: "د", f: "du", e: "of"}} />. (Notice that the word sandwiched in there will <Link to="/inflection/inflection-intro/">inflect</Link> if possible.) Now we have a NP inside of an NP, but it's still all **one NP** or **one building block**.
<EditableBlock opts={opts}>
{
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"},
},
],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
}
},
},
type: "adjective",
entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
},
],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
}
}
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
}}
</EditableBlock>
If our possesor is a noun, we can add a possesor to *it*. Try clicking the <EditIcon /> icon below and adding possesors to the possesors, you can go forever! 🤯
If our possesor is a noun, we can add a possesor to _it_. Try clicking the <EditIcon /> icon below and adding possesors to the possesors, you can go forever! 🤯
<EditableBlock opts={opts}>
{
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"},
},
],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527815177,"i":2530,"p":"پلار","f":"plaar","g":"plaar","e":"father","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
},
},
type: "adjective",
entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
},
],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
}
}
gender: "masc",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815177,
i: 2530,
p: "پلار",
f: "plaar",
g: "plaar",
e: "father",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
},
},
},
}}
</EditableBlock>
A possesor can have another possesor which can have another posseser and so-on and on *forever*. The nerdy word for this phenomenon where things reference/repeat themselves is [recursion](https://en.wikipedia.org/wiki/Recursion). 🤓
A possesor can have another possesor which can have another posseser and so-on and on _forever_. The nerdy word for this phenomenon where things reference/repeat themselves is [recursion](https://en.wikipedia.org/wiki/Recursion). 🤓
<details>
<summary>Click here for another example of what <strong>recursion</strong> looks like (if you don't have epilepsy)</summary>
<div style={{ width: "100%", height:0, paddingBottom: "51%", position: "relative" }}>
<iframe src="https://giphy.com/embed/5xtDarxMlfVnrjN4MyQ" width="100%" height="100%" style={{ position: "absolute" }} frameBorder="0" class="giphy-embed"></iframe>
</div>
<p className="mt-1">The starbucks cup has a picture of a starbucks cup, which has a picture of a starbucks cup which has a...</p>
<summary>
Click here for another example of what <strong>recursion</strong> looks like
(if you don't have epilepsy)
</summary>
<div
style={{
width: "100%",
height: 0,
paddingBottom: "51%",
position: "relative",
}}
>
<iframe
src="https://giphy.com/embed/5xtDarxMlfVnrjN4MyQ"
width="100%"
height="100%"
style={{ position: "absolute" }}
frameBorder="0"
class="giphy-embed"
></iframe>
</div>
<p className="mt-1">
The starbucks cup has a picture of a starbucks cup, which has a picture of a
starbucks cup which has a...
</p>
</details>
A noun is one of three starting points for making an NP. When you start with a noun you can add adjectives and a possesor to it. (The possesor is another NP, which you can keep building on in the same way.)
@ -216,96 +359,99 @@ A pronoun is a word like "I", "you", "us", "them" that signifies a person or thi
You can't add any adjectives or possesors to pronouns in Pashto. They just stand on their own as an NP.
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "pronoun",
person: 0,
distance: "far",
}
}
}
{{
type: "NP",
selection: {
type: "pronoun",
person: 0,
distance: "far",
},
}}
</EditableBlock>
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "pronoun",
person: 11,
distance: "far",
},
}
}
{{
type: "NP",
selection: {
type: "pronoun",
person: 11,
distance: "far",
},
}}
</EditableBlock>
### Participle
In Pashto you can use the infinitive form of a verb as a participle, meaning you can use it *as noun* in a sentence. For example, we can take the verb <InlinePs opts={opts} ps={{"ts":1527812856,"i":11617,"p":"لیکل","f":"leekul","g":"leekul","e":"to write","c":"v. trans./gramm. trans.","ec":"write,writes,writing,wrote,written"}} /> and use it as a particple meaning either:
In Pashto you can use the infinitive form of a verb as a participle, meaning you can use it _as noun_ in a sentence. For example, we can take the verb <InlinePs opts={opts} ps={{"ts":1527812856,"i":11617,"p":"لیکل","f":"leekul","g":"leekul","e":"to write","c":"v. trans./gramm. trans.","ec":"write,writes,writing,wrote,written"}} /> and use it as a particple meaning either:
- "to write" or
- "writing"
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {"ts":1527812856,"i":11617,"p":"لیکل","f":"leekul","g":"leekul","e":"to write","c":"v. trans./gramm. trans.","ec":"write,writes,writing,wrote,written"},
},
}
}
}
{{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {
ts: 1527812856,
i: 11617,
p: "لیکل",
f: "leekul",
g: "leekul",
e: "to write",
c: "v. trans./gramm. trans.",
ec: "write,writes,writing,wrote,written",
},
},
},
}}
</EditableBlock>
Then we can use this NP just like we would any other noun in a sentence.
<Examples opts={opts}>
{psmd([
{
p: "زه **لیکل** غواړم.",
f: "zu **leekúl** ghwaaRum.",
e: "I want **to write**",
sub: "'to write' - used as an object",
},
{
p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.",
e: "**Writing** is dificult",
sub: "'writing' - used as a subject",
},
])}
{psmd([
{
p: "زه **لیکل** غواړم.",
f: "zu **leekúl** ghwaaRum.",
e: "I want **to write**",
sub: "'to write' - used as an object",
},
{
p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.",
e: "**Writing** is dificult",
sub: "'writing' - used as a subject",
},
])}
</Examples>
The important thing to know about these kinds of NPs (participles) is that they are *always* considered **masculine plural**.
The important thing to know about these kinds of NPs (participles) is that they are _always_ considered **masculine plural**.
Notice how in the example above we said
<Examples opts={opts}>
{psmd([
{
p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.",
e: "**Writing** is dificult",
sub: "'writing' - is *masculine plural*",
}
])}
{psmd([
{
p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.",
e: "**Writing** is dificult",
sub: "'writing' - is *masculine plural*",
},
])}
</Examples>
We could *not* say
We could _not_ say
<Examples opts={opts}>
{psmd([
{
p: "**لیکل** سخت دی. ❌",
f: "**leekúl** sakht dey. ❌",
e: "**Writing** is dificult",
},
])}
{psmd([
{
p: "**لیکل** سخت دی. ❌",
f: "**leekúl** sakht day. ❌",
e: "**Writing** is dificult",
},
])}
</Examples>
We can also **add subjects or objects** to the participle by <Link to="/sandwiches/sandwiches/">sandwiching</Link> them in with a possesive <InlinePs opts={opts} ps={{ p: "د", f: "du", e: "of" }} />.
@ -313,51 +459,79 @@ We can also **add subjects or objects** to the participle by <Link to="/sandwich
For example, if we take the participle <InlinePs opts={opts} ps={{ p: "وهل", f: "wahúl", e: "to hit / hitting" }} />
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {"ts":1527815399,"i":14463,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"},
},
}
}
}
{{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {
ts: 1527815399,
i: 14463,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
},
},
}}
</EditableBlock>
And we can add the word <InlinePs opts={opts} ps={{ p: "ماشومان", f: "maashoomaan", e: "children" }} /> by sandwiching it in like we did with the possesor, we get
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {"ts":1527815399,"i":14463,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"},
},
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},
gender: "masc",
genderCanChange: true,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
{{
type: "NP",
selection: {
type: "participle",
verb: {
entry: {
ts: 1527815399,
i: 14463,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
},
possesor: {
shrunken: false,
np: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
}
}
gender: "masc",
genderCanChange: true,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
},
}}
</EditableBlock>
The noun we just attached can be a subject *or* an object of the participle. You just have to know from context. So this NP can mean either:
The noun we just attached can be a subject _or_ an object of the participle. You just have to know from context. So this NP can mean either:
- hitting children, or (the kids are the object being hit)
- children's hitting (the kids are the subject doing the hitting)
@ -365,11 +539,13 @@ The noun we just attached can be a subject *or* an object of the participle. You
And we can use this NP block as noun in a sentence.
<Examples opts={opts}>
{psmd([{
p: "**د ماشومانو وهل** ښه نه دي.",
f: "**du maashoomaano wahul** xu nu dee.",
e: "**Hitting children** is bad.",
}])}
{psmd([
{
p: "**د ماشومانو وهل** ښه نه دي.",
f: "**du maashoomaano wahul** xu nu dee.",
e: "**Hitting children** is bad.",
},
])}
</Examples>
## Overview
@ -377,16 +553,12 @@ And we can use this NP block as noun in a sentence.
An **NP** is one of the following:
- a noun
- w/ optional adjectives
- and a possesor, which is an **NP** ↺
- w/ optional adjectives
- and a possesor, which is an **NP** ↺
- a pronoun, or
- a participle
- which can have a subject/object, which is an **NP** ↺
- which can have a subject/object, which is an **NP** ↺
Notice how NPs can contain other NPs, and therefore go on foreeeever. So you could have like 50 words packed together and it would all be **one single NP**, **one building block** in a sentence.
{/* ## NP Playground
Now try making your own NPs from scratch! 👩‍🍳 See if you can make really big ones like "hitting my good old friend's brother's father's big dog."
<NPPlayground opts={opts} /> */}
{/* TODO put NP PLAYGROUND IN HERE */}

View File

@ -3,27 +3,24 @@ title: Shortening VPs
---
import {
defaultTextOptions as opts,
InlinePs,
Examples,
makeNounSelection,
defaultTextOptions as opts,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import EquativeIllustration from "../../components/EquativeIllustration";
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
import BasicBlocks from "../../components/BasicBlocks";
import InlineInflectionButton from "../../components/InlineInflectionButton";
import EditableVPEx, {
EditIcon,
} from "../../components/phrase-diagram/EditableVPEx";
import VPStructureSummary from "./vp-structure.svg";
import { KidsSection } from "../../components/terms-links";
import VideoPlayer from "../../components/VideoPlayer";
export function KingIcon() {
return <i className="mx-1 fas fa-crown" />;
return <i className="mx-1 fas fa-crown" />;
}
export function ServantIcon() {
return <i className="mx-1 fas fa-male" />;
return <i className="mx-1 fas fa-male" />;
}
<VideoPlayer src="https://www.youtube.com/watch?v=0B-hrsnCk50&t=1s&ab_channel=LingDocs" />
@ -31,15 +28,25 @@ export function ServantIcon() {
Pashto has a very special way of shortening <Link to="/phrase-structure/vp">VP</Link>s. In a language like English if we want to say "I saw her," we can only say, "I saw her." But in Pashto there are many ways to shorten and to say this.
<Examples opts={opts}>
{[
{ p: "ما هغه ولیده", f: "maa haghá óoleeda", e: "I saw her", sub: "full form" },
{ p: "ما ولیده", f: "maa óoleeda", e: "I saw her", sub: "short form #1" },
{ p: "هغه مې ولیده", f: "haghá me óoleeda", e: "I saw her", sub: "short form #2" },
{ p: "ومې لیده", f: "óo-me leeda", e: "I saw her", sub: "short form #3" },
]}
{[
{
p: "ما هغه ولیده",
f: "maa haghá óoleeda",
e: "I saw her",
sub: "full form",
},
{ p: "ما ولیده", f: "maa óoleeda", e: "I saw her", sub: "short form #1" },
{
p: "هغه مې ولیده",
f: "haghá me óoleeda",
e: "I saw her",
sub: "short form #2",
},
{ p: "ومې لیده", f: "óo-me leeda", e: "I saw her", sub: "short form #3" },
]}
</Examples>
So what is going on here? 🧐 This is another behaviour of Pashto that can seem very illogical or confusing to the learner. Thankfully though, there's a very clear rule about how these phrases are shortened up.
So what is going on here? 🧐 This is another behaviour of Pashto that can seem very illogical or confusing to the learner. Thankfully though, there's a very clear rule about how these phrases are shortened up.
In Pashto [pronouns can be dropped](https://en.wikipedia.org/wiki/Pro-drop_language) when the verb agrees with them. When the verb doesn't agree with them, they can be shrunken into <Link to="/pronouns/pronouns-mini/">mini-pronouns</Link>.
@ -53,19 +60,23 @@ In the previous chapter on <Link to="/phrase-structure/vp">VP structure</Link> w
The king and servant swap roles between the subject and object, depending on what kind of verb we're using.
- with intransitive verbs 🛴
- the **subject** is the king <KingIcon />
- (there is no servant)
- the **subject** is the king <KingIcon />
- (there is no servant)
- with non-past transitive verbs 🚲
- the **subject** is the king <KingIcon />
- the **object** is the servant <ServantIcon />
- the **subject** is the king <KingIcon />
- the **object** is the servant <ServantIcon />
- with past-tense transitive verbs 🚲🤪
- the **subject** is the servant <ServantIcon />
- the **object** is the king <KingIcon />
- the **subject** is the servant <ServantIcon />
- the **object** is the king <KingIcon />
Or if you want to see it in our little review chart...
<div className="text-center mb-3">
<img className="img-fluid" src={VPStructureSummary} alt={"VP structure in Pashto with past tense"} />
<img
className="img-fluid"
src={VPStructureSummary}
alt={"VP structure in Pashto with past tense"}
/>
</div>
## The Rule
@ -73,7 +84,10 @@ Or if you want to see it in our little review chart...
So, now that we've reviewed the roles of **king** <KingIcon /> and **servant** <ServantIcon /> all we need to know is one simple rule.
<div style={{ fontSize: "larger" }}>
<blockquote>To shorten a VP, you can <strong>Kill the King</strong> <KingIcon /> and <strong>Shrink the Servant</strong> <ServantIcon /></blockquote>
<blockquote>
To shorten a VP, you can <strong>Kill the King</strong> <KingIcon /> and{" "}
<strong>Shrink the Servant</strong> <ServantIcon />
</blockquote>
</div>
This is a litle memory aid to help us remember the two things that we can do to any VP phrase.
@ -88,9 +102,61 @@ This is a litle memory aid to help us remember the two things that we can do to
Now we can look at some examples to see how this works. Let's take a very simple sentence:
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
This is a <Link to="/vp/#2-with-non-past-transitive-verbs-">present-tense transitive</Link> phrase. See if you can figure out what the king <KingIcon /> and servant <ServantIcon /> are in this sentence, then click on the <i className="fas fa-cubes" /> to see what they are.
@ -98,25 +164,181 @@ This is a <Link to="/vp/#2-with-non-past-transitive-verbs-">present-tense transi
Got it? So now we know we can **kill the king**. Since the king controls the verb, we can just leave it out.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: false },
}}
</EditableVPEx>
The other thing we can do is we can **shrink the servant** 🪄 and turn it into a <Link to="/pronouns/pronouns-mini/">mini-pronoun</Link>. The servant here is <InlinePs opts={opts} ps={{ p: "تا", f: "taa", e: "you - 2nd. pers. sing." }} /> so it will get shrunk into the 2nd pers. sing. <Link to="/pronouns/pronouns-mini/">mini-pronoun</Link>, <InlinePs opts={opts} ps={{ p: "دې", f: "de" }} />. Because it's a little mini-pronoun 👶 it has to go in the <KidsSection />. (After the first block)
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: true },
}}
</EditableVPEx>
Now if we want to make our sentence *really* short we can **kill the king** *and* **shrink the servant**.
Now if we want to make our sentence _really_ short we can **kill the king** _and_ **shrink the servant**.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: true },
}}
</EditableVPEx>
It's very important to remember to play by the rules. You can **kill the king** and **shrink the servant** but you cannot kill the servant or shrink the king! 🙅‍♂ (That's another mistake that Pashto learners make a lot!)
@ -128,33 +350,241 @@ Let's try another example with a <Link to="/phrase-structure/vp/#3-with-past-ten
Here's the same phrase but using a continuous past verb. Take a second and identify the king and the servant in the phrase below, and then check by clicking on the <i className="fas fa-cubes" />.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
Let's go ahead and **kill the king**, which in this case is the *subject*.
Let's go ahead and **kill the king**, which in this case is the _subject_.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: false },
}}
</EditableVPEx>
Looks quite different, but we're still following the same rule. Now let's **shrink the servant**. 🪄 This time the servant is the *object* <InlinePs opts={opts} ps={{ p: "ما", f: "maa", e: "I - 1st pers. sing." }} /> so it will get shrunk into the 1nd pers. sing. <Link to="/pronouns/pronouns-mini/">mini-pronoun</Link>, <InlinePs opts={opts} ps={{ p: "مې", f: "me" }} /> and go in the <KidsSection />.
Looks quite different, but we're still following the same rule. Now let's **shrink the servant**. 🪄 This time the servant is the _object_ <InlinePs opts={opts} ps={{ p: "ما", f: "maa", e: "I - 1st pers. sing." }} /> so it will get shrunk into the 1nd pers. sing. <Link to="/pronouns/pronouns-mini/">mini-pronoun</Link>, <InlinePs opts={opts} ps={{ p: "مې", f: "me" }} /> and go in the <KidsSection />.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: true },
}}
</EditableVPEx>
And of course we can do both **kill the king** and **shrink the servant**.
And of course we can do both **kill the king** and **shrink the servant**.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.13415526513680676,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.2455033196459333,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":true}}
}
{{
blocks: [
{
key: 0.13415526513680676,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.2455033196459333,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: true },
}}
</EditableVPEx>
Notice how our shortened sentences look completely different from the present-tense version above, but they follow the exact same two rules for shortening with the king and servant. This all feels like mental gymnastics to the learner, but Pashtuns will very casually use all these different forms of shortening depending on what they want to emphasize or the flow of conversation.
@ -164,43 +594,361 @@ Notice how our shortened sentences look completely different from the present-te
Let's look at another example with an <Link to="/vp/#1-with-intransitive-verbs-">intransitive verb</Link>.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.2392487764665734,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.6268130996406576,"block":{"type":"objectSelection","selection":"none"}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815348,"i":3655,"p":"تلل","f":"tlul","g":"tlul","e":"to go","c":"v. intrans. irreg.","psp":"ځ","psf":"dz","ssp":"لاړ ش","ssf":"láaR sh","prp":"لاړ","prf":"láaR","ec":"go,goes,going,went,gone"}},"verbTense":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"intransitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":false,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.2392487764665734,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.6268130996406576,
block: { type: "objectSelection", selection: "none" },
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527815348,
i: 3655,
p: "تلل",
f: "tlul",
g: "tlul",
e: "to go",
c: "v. intrans. irreg.",
psp: "ځ",
psf: "dz",
ssp: "لاړ ش",
ssf: "láaR sh",
prp: "لاړ",
prf: "láaR",
ec: "go,goes,going,went,gone",
},
},
verbTense: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "intransitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: false,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
The **king** <KingIcon /> of this sentence is the *subject* <InlinePs opts={opts} ps={{ p: "زه", f: "zu", e: "I" }} />. So we can **kill the king** and leave that out.
The **king** <KingIcon /> of this sentence is the _subject_ <InlinePs opts={opts} ps={{ p: "زه", f: "zu", e: "I" }} />. So we can **kill the king** and leave that out.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.2392487764665734,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.6268130996406576,"block":{"type":"objectSelection","selection":"none"}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815348,"i":3655,"p":"تلل","f":"tlul","g":"tlul","e":"to go","c":"v. intrans. irreg.","psp":"ځ","psf":"dz","ssp":"لاړ ش","ssf":"láaR sh","prp":"لاړ","prf":"láaR","ec":"go,goes,going,went,gone"}},"verbTense":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"intransitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":false,"canChangeStatDyn":false},"form":{"removeKing":true,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.2392487764665734,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.6268130996406576,
block: { type: "objectSelection", selection: "none" },
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527815348,
i: 3655,
p: "تلل",
f: "tlul",
g: "tlul",
e: "to go",
c: "v. intrans. irreg.",
psp: "ځ",
psf: "dz",
ssp: "لاړ ش",
ssf: "láaR sh",
prp: "لاړ",
prf: "láaR",
ec: "go,goes,going,went,gone",
},
},
verbTense: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "intransitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: false,
canChangeStatDyn: false,
},
form: { removeKing: true, shrinkServant: false },
}}
</EditableVPEx>
Notice that we cannot **shrink the servant** because there is no servant in a VP with an intransitive verb. The learner is often tempted to shrink the king into a mini-pronoun, but that is *not allowed!* 🙅‍♂️
Notice that we cannot **shrink the servant** because there is no servant in a VP with an intransitive verb. The learner is often tempted to shrink the king into a mini-pronoun, but that is _not allowed!_ 🙅‍♂️
### Other examples
Try shortening these other examples. Notice how the <KidsSection /> (after the first block), and the <KidsSection /> changes depending on what's in the phrase. If we start the phrase with an <Link to="/phrase-structure/ap">AP</Link> the mini pronoun will fall right after that first AP. Try shrinking this sentence all the way (click on "both") and see what happens.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.5372523258610236,"block":{"type":"AP","selection":{"type":"sandwich","before":{"p":"په","f":"pu"},"after":{"p":"کې","f":"ke"},"e":"in","inside":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527815151,"i":2140,"p":"پارک","f":"paark","g":"paark","e":"park","c":"n. m."},"gender":"masc","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}},{"key":0.44012482066169145,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.8184810526278858,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.5372523258610236,
block: {
type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527815151,
i: 2140,
p: "پارک",
f: "paark",
g: "paark",
e: "park",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
},
{
key: 0.44012482066169145,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.8184810526278858,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
Or if a phrase is using a <Link to="/verbs/verb-aspect/">perfective verb</Link>, then the <Link to="/verbs/roots-and-stems/#about-the-split-in-the-perfective-side">front part of the verb can split off</Link> into a seperate block. This puts the kids' section in an interesting place... see what happens when you hit "both" for this phrase.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.44012482066169145,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.8184810526278858,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11608,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.44012482066169145,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.8184810526278858,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11608,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
Go ahead, click on the <EditIcon /> and try making your own phrases and shrinking them.
<EditableVPEx formChoice opts={opts}>
{
{"blocks":[{"key":0.9914022242777141,"block":{"type":"AP","selection":{"type":"adverb","entry":{"ts":1527815160,"i":2394,"p":"پرون","f":"paroon","g":"paroon","e":"yesterday","c":"adv."}}}},{"key":0.35863341169816,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812881,"i":11707,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},"gender":"fem","genderCanChange":true,"number":"singular","numberCanChange":true,"adjectives":[]}}}},{"key":0.028227454947787223,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815399,"i":14480,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.9914022242777141,
block: {
type: "AP",
selection: {
type: "adverb",
entry: {
ts: 1527815160,
i: 2394,
p: "پرون",
f: "paroon",
g: "paroon",
e: "yesterday",
c: "adv.",
},
},
},
},
{
key: 0.35863341169816,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11707,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "fem",
genderCanChange: true,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
{
key: 0.028227454947787223,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527815399,
i: 14480,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>

File diff suppressed because it is too large Load Diff

View File

@ -4,107 +4,133 @@ title: Pronoun Picker
import PronounPicker from "../../components/PronounPicker";
import {
defaultTextOptions as opts,
InlinePs,
ButtonSelect,
randomPerson,
randomSubjObj,
isInvalidSubjObjCombo,
defaultTextOptions as opts,
InlinePs,
ButtonSelect,
randomPerson,
randomSubjObj,
isInvalidSubjObjCombo,
} from "@lingdocs/ps-react";
import { useState } from "react";
export function RPicker() {
// TODO: Pull this into a type safe file
const startSubjObj = randomSubjObj();
const [subject, setSubject] = useState({ type: "pronoun", pronounType: "far", person: startSubjObj.subj });
const [object, setObject] = useState({ type: "pronoun", pronounType: "far", person: startSubjObj.obj });
const [mode, setMode] = useState("single");
function handleSetSubject(incoming) {
if (mode !== "single" && isInvalidSubjObjCombo(incoming.person, object.person)) {
alert("That combination of pronouns is not allowed");
return;
// let newP = 0;
// do {
// newP = randomPerson();
// } while (isInvalidSubjObjCombo(newP, object.person));
// return setSubject({ ...incoming, person: newP });
}
return setSubject(incoming);
// TODO: Pull this into a type safe file
const startSubjObj = randomSubjObj();
const [subject, setSubject] = useState({
type: "pronoun",
pronounType: "far",
person: startSubjObj.subj,
});
const [object, setObject] = useState({
type: "pronoun",
pronounType: "far",
person: startSubjObj.obj,
});
const [mode, setMode] = useState("single");
function handleSetSubject(incoming) {
if (
mode !== "single" &&
isInvalidSubjObjCombo(incoming.person, object.person)
) {
alert("That combination of pronouns is not allowed");
return;
// let newP = 0;
// do {
// newP = randomPerson();
// } while (isInvalidSubjObjCombo(newP, object.person));
// return setSubject({ ...incoming, person: newP });
}
function handleSetObject(incoming) {
if (isInvalidSubjObjCombo(subject.person, incoming.person)) {
alert("That combination of pronouns is not allowed");
return;
// let newP = 0;
// do {
// newP = randomPerson();
// } while (isInvalidSubjObjCombo(newP, subject.person));
// return setObject({ ...incoming, person: newP });
}
return setObject(incoming);
return setSubject(incoming);
}
function handleSetObject(incoming) {
if (isInvalidSubjObjCombo(subject.person, incoming.person)) {
alert("That combination of pronouns is not allowed");
return;
// let newP = 0;
// do {
// newP = randomPerson();
// } while (isInvalidSubjObjCombo(newP, subject.person));
// return setObject({ ...incoming, person: newP });
}
function setRandomSubjObj() {
const { subj, obj } = randomSubjObj();
setSubject(s => ({
...s,
person: subj,
}));
setObject(s => ({
...s,
person: obj,
}));
return setObject(incoming);
}
function setRandomSubjObj() {
const { subj, obj } = randomSubjObj();
setSubject((s) => ({
...s,
person: subj,
}));
setObject((s) => ({
...s,
person: obj,
}));
}
function handleRandom() {
if (mode === "single") {
const person = randomPerson(subject.person);
setSubject((s) => ({
...s,
person,
}));
} else {
setRandomSubjObj();
}
function handleRandom() {
if (mode === "single") {
const person = randomPerson(subject.person);
setSubject(s => ({
...s,
person,
}));
} else {
setRandomSubjObj();
}
}
function handleModeChange(m) {
if (m === "subjObj") {
setRandomSubjObj();
}
function handleModeChange(m) {
if (m === "subjObj") {
setRandomSubjObj();
}
setMode(m);
}
return <div className="text-center">
<div className="mb-4">
<ButtonSelect
options={[{
label: "Single",
value: "single"
}, {
label: "Subj. / Obj.",
value: "subjObj",
}]}
value={mode}
handleChange={handleModeChange}
setMode(m);
}
return (
<div className="text-center">
<div className="mb-4">
<ButtonSelect
options={[
{
label: "Single",
value: "single",
},
{
label: "Subj. / Obj.",
value: "subjObj",
},
]}
value={mode}
handleChange={handleModeChange}
/>
</div>
<div className="row">
<div
className="col my-2"
style={{ maxWidth: "375px", margin: "0 auto" }}
>
{mode === "subjObj" && <h5>Subject</h5>}
<PronounPicker pronoun={subject} onChange={handleSetSubject} />
</div>
{mode === "subjObj" && (
<div
className="col my-2"
style={{ maxWidth: "375px", margin: "0 auto" }}
>
<h5>Object</h5>
<PronounPicker
pronoun={object}
onChange={handleSetObject}
isObject
/>
</div>
<div className="row">
<div className="col my-2" style={{ maxWidth: "375px", margin: "0 auto" }}>
{mode === "subjObj" && <h5>Subject</h5>}
<PronounPicker pronoun={subject} onChange={handleSetSubject} />
</div>
{mode === "subjObj" &&
<div className="col my-2" style={{ maxWidth: "375px", margin: "0 auto" }}>
<h5>Object</h5>
<PronounPicker pronoun={object} onChange={handleSetObject} isObject />
</div>
}
</div>
<button className="btn btn-lg btn-primary mt-2">
<i class="fas fa-random" onClick={handleRandom} />
</button>
</div>;
</div>
)}
</div>
<button className="btn btn-lg btn-primary mt-2">
<i class="fas fa-random" onClick={handleRandom} />
</button>
</div>
);
}
Use this pronoun picker to help you drill different sentences. Choose different pronouns to drill a friend, or press the <i class="fas fa-random"></i> button to get a random selection.
<div className="mt-4">
<RPicker />
<RPicker />
</div>

View File

@ -3,52 +3,52 @@ title: Pronouns
---
import {
defaultTextOptions,
grammarUnits,
VerbTable,
ButtonSelect,
defaultTextOptions,
grammarUnits,
VerbTable,
ButtonSelect,
} from "@lingdocs/ps-react";
import { useState } from "react";
export function PronounInflectionChoice({ pronouns, far }) {
const [choice, setChoice] = useState("plain");
const english = {
plain: [
["I", "we"],
["I", "we"],
["you", "you"],
["you", "you"],
[far ? "he/she/it" : "he/it", "they"],
["she/it", "they"],
],
inflected: [
["me", "us"],
["me", "us"],
["you", "you"],
["you", "you"],
["him/it", "them"],
["her/it", "them"],
],
}
return (
<div>
<div className="text-center my-3">
<ButtonSelect
options={[
{ label: "Plain", value: "plain" },
{ label: "Inflected", value: "inflected" },
]}
value={choice}
handleChange={(p) => setChoice(p)}
/>
</div>
<VerbTable
block={pronouns[choice]}
textOptions={defaultTextOptions}
english={english[choice]}
/>
</div>
);
const [choice, setChoice] = useState("plain");
const english = {
plain: [
["I", "we"],
["I", "we"],
["you", "you"],
["you", "you"],
[far ? "he/she/it" : "he/it", "they"],
["she/it", "they"],
],
inflected: [
["me", "us"],
["me", "us"],
["you", "you"],
["you", "you"],
["him/it", "them"],
["her/it", "them"],
],
};
return (
<div>
<div className="text-center my-3">
<ButtonSelect
options={[
{ label: "Plain", value: "plain" },
{ label: "Inflected", value: "inflected" },
]}
value={choice}
handleChange={(p) => setChoice(p)}
/>
</div>
<VerbTable
block={pronouns[choice]}
textOptions={defaultTextOptions}
english={english[choice]}
/>
</div>
);
}
## Far Pronouns

View File

@ -2,14 +2,10 @@
title: Directional Pronouns
---
import {
defaultTextOptions as opts,
grammarUnits,
VerbTable,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
@ -17,44 +13,36 @@ import Link from "../../components/Link";
Pashto has 3 **directional pronouns** that indicate the direction that a word is focussed towards.
<table className="table">
<thead>
<tr>
<th scope="col">Person</th>
<th scope="col">Directional Pronoun</th>
</tr>
</thead>
<tbody>
<tr>
<td>1st</td>
<td>
<Examples opts={opts}>
{[
{ p: "را", f: "raa", e: "me, we" },
]}
</Examples>
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<Examples opts={opts}>
{[
{ p: "در", f: "dăr", e: "you, you (pl.)" },
]}
</Examples>
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<Examples opts={opts}>
{[
{ p: "ور", f: "wăr", e: "him, her, it, them" },
]}
</Examples>
</td>
</tr>
</tbody>
<thead>
<tr>
<th scope="col">Person</th>
<th scope="col">Directional Pronoun</th>
</tr>
</thead>
<tbody>
<tr>
<td>1st</td>
<td>
<Examples opts={opts}>{[{ p: "را", f: "raa", e: "me, we" }]}</Examples>
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<Examples opts={opts}>
{[{ p: "در", f: "dăr", e: "you, you (pl.)" }]}
</Examples>
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<Examples opts={opts}>
{[{ p: "ور", f: "wăr", e: "him, her, it, them" }]}
</Examples>
</td>
</tr>
</tbody>
</table>
## With the Verb "to give"
@ -62,45 +50,78 @@ Pashto has 3 **directional pronouns** that indicate the direction that a word is
There are different verbs used for "to give" depending on which direction the giving is happening.
<table className="table">
<thead>
<tr>
<th scope="col">Person Receiving</th>
<th scope="col">Verb</th>
</tr>
</thead>
<tbody>
<tr>
<td>1st</td>
<td>
<InlinePs opts={opts} ps={{ p: "راکول", f: "raakawúl", e: "to give to me/us" }} />
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<InlinePs opts={opts} ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }} />
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<InlinePs opts={opts} ps={{ p: "ورکول", f: "wărkawul", e: "to give to him/her/it/them" }} />
</td>
</tr>
</tbody>
<thead>
<tr>
<th scope="col">Person Receiving</th>
<th scope="col">Verb</th>
</tr>
</thead>
<tbody>
<tr>
<td>1st</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "راکول", f: "raakawúl", e: "to give to me/us" }}
/>
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }}
/>
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "ورکول", f: "wărkawul", e: "to give to him/her/it/them" }}
/>
</td>
</tr>
</tbody>
</table>
The choice of <InlinePs opts={opts} ps={{ p: "را، در، ور", f: "raa, dăr, wăr" }} /> depends on **who is on the receiving end of the giving**.
<Examples opts={opts}>
{psmd([
{ p: "ما ته کتاب **راکړه**", f: "maa ta kitáab **ráakRa**", e: "**Give** me the book." },
{ p: "مونږ ته پیسې **راکوي**", f: "moonG ta peysé **raakawee**", e: "He **gives** us money." },
{ p: "چای **درکړم**؟", f: "chaay **dărkRum**?", e: "Should I **give** you tea?" },
{ p: "تاسو ته پیسې **درکوي**.", f: "taaso ta peysé **dărkawee**.", e: "He **gives** you money." },
{ p: "دا کتاب ده ته **ورکړه**", f: "daa kitaab du ta **wărkRa**", e: "**Give** this book to him." },
{ p: "مونږ هغوي ته پیسې **ورکوو**", f: "moonG haghwee ta peyse **wărkawoo**.", e: "We **give** them money." },
])}
{psmd([
{
p: "ما ته کتاب **راکړه**",
f: "maa ta kitáab **ráakRa**",
e: "**Give** me the book.",
},
{
p: "مونږ ته پیسې **راکوي**",
f: "moonG ta paysé **raakawee**",
e: "He **gives** us money.",
},
{
p: "چای **درکړم**؟",
f: "chaay **dărkRum**?",
e: "Should I **give** you tea?",
},
{
p: "تاسو ته پیسې **درکوي**.",
f: "taaso ta paysé **dărkawee**.",
e: "He **gives** you money.",
},
{
p: "دا کتاب ده ته **ورکړه**",
f: "daa kitaab du ta **wărkRa**",
e: "**Give** this book to him.",
},
{
p: "مونږ هغوي ته پیسې **ورکوو**",
f: "moonG haghwee ta payse **wărkawoo**.",
e: "We **give** them money.",
},
])}
</Examples>
## With "to go"
@ -108,128 +129,176 @@ The choice of <InlinePs opts={opts} ps={{ p: "را، در، ور", f: "raa, dăr
It's very common to add the directional pronouns in front of the verbs "to go" to indication which direction someone is going.
<table className="table">
<thead>
<tr>
<th scope="col">Direction</th>
<th scope="col">Verb</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>
<InlinePs opts={opts} ps={{ p: "تلل", f: "tlúl", e: "to go" }} />
</td>
</tr>
<tr>
<td>1st</td>
<td>
<InlinePs opts={opts} ps={{ p: "راتلل", f: "raatlúl", e: "to come - here, to me/us" }} />
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<InlinePs opts={opts} ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }} />
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<InlinePs opts={opts} ps={{ p: "ورتلل", f: "wărtlúl", e: "to go - there, to him/her/them" }} />
</td>
</tr>
</tbody>
<thead>
<tr>
<th scope="col">Direction</th>
<th scope="col">Verb</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>
<InlinePs opts={opts} ps={{ p: "تلل", f: "tlúl", e: "to go" }} />
</td>
</tr>
<tr>
<td>1st</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "راتلل", f: "raatlúl", e: "to come - here, to me/us" }}
/>
</td>
</tr>
<tr>
<td>2nd</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }}
/>
</td>
</tr>
<tr>
<td>3rd</td>
<td>
<InlinePs
opts={opts}
ps={{ p: "ورتلل", f: "wărtlúl", e: "to go - there, to him/her/them" }}
/>
</td>
</tr>
</tbody>
</table>
<Examples opts={opts}>
{psmd([
{ p: "هغه اوس **راځي**", f: "haghá oos **raadzée**", e: "He's **coming** now" },
{ p: "دلته **راشه**!", f: "dălta **ráasha**!", e: "**Come** here!" },
{ p: "هلته **ورشه**!", f: "hălta **wărsha**!", e: "**Go** there!" },
{ p: "زه **درځم**.", f: "zu **dărdzúm**", e: "I'm **coming** to you." },
])}
{psmd([
{
p: "هغه اوس **راځي**",
f: "haghá oos **raadzée**",
e: "He's **coming** now",
},
{ p: "دلته **راشه**!", f: "dălta **ráasha**!", e: "**Come** here!" },
{ p: "هلته **ورشه**!", f: "hălta **wărsha**!", e: "**Go** there!" },
{ p: "زه **درځم**.", f: "zu **dărdzúm**", e: "I'm **coming** to you." },
])}
</Examples>
These directional verbs are really common when talking about someone knowing a language, because in Pashto we can say that a language "goes to" someone if they know it.
<Examples opts={opts}>
{psmd([
{ p: "پښتو **راځي**.", f: "puxto **raadzée**.", e: "I know Pashto. (lit. Pashto comes to me.)" },
{ p: "پښتو **درځي**؟", f: "puxto **dărdzée**?", e: "Do you know Pashto? (lit. Does Pashto come to you?)" },
{ p: "پښتو **ورځي**.", f: "puxto **wărdzée**.", e: "She knows Pashto. (lit. Pashto comes to her.)" },
])}
{psmd([
{
p: "پښتو **راځي**.",
f: "puxto **raadzée**.",
e: "I know Pashto. (lit. Pashto comes to me.)",
},
{
p: "پښتو **درځي**؟",
f: "puxto **dărdzée**?",
e: "Do you know Pashto? (lit. Does Pashto come to you?)",
},
{
p: "پښتو **ورځي**.",
f: "puxto **wărdzée**.",
e: "She knows Pashto. (lit. Pashto comes to her.)",
},
])}
</Examples>
## With other verbs
These directional pronouns can also get added on to all kinds of other verbs to make the direction clearer. Note that when they do get added on, they go *before* the <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix in the perfective forms.
These directional pronouns can also get added on to all kinds of other verbs to make the direction clearer. Note that when they do get added on, they go _before_ the <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} /> prefix in the perfective forms.
<table className="table">
<thead>
<tr>
<th scope="col">Verb</th>
<th scope="col">Example W/ Directional Pronoun</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{[
{ p: "لېږل", f: "legúl", e: "to send" },
]}
</Examples>
</td>
<td><Examples opts={opts}>
{psmd([
{ p: "دا عکس **را**ولېږه", f: "daa aks **raa**-óoleGa", e: "Send me that picture" },
{ p: "سمه ده. اوس یې **در**لېږم.", f: "sama da. oos ye **dăr**-léGum", e: "Ok. I'm sending you it now"},
])}
</Examples></td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{[
{ p: "استول", f: "astawul", e: "to send" },
]}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{ p: "پرون یې پیغام **را**واستاوه.", f: "paróon ye peygháam **raa**-wáastawu.", e: "She sent me a message yesterday." },
{ p: "زه به ورته یو پیغام **ور**واستوم.", f: "zu ba wăr-ta yo peyghaan **wăr**-wáastawum.", e: "I'll send her a message."},
])}
</Examples>
</td>
</tr>
</tbody>
<thead>
<tr>
<th scope="col">Verb</th>
<th scope="col">Example W/ Directional Pronoun</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{[{ p: "لېږل", f: "legúl", e: "to send" }]}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "دا عکس **را**ولېږه",
f: "daa aks **raa**-óoleGa",
e: "Send me that picture",
},
{
p: "سمه ده. اوس یې **در**لېږم.",
f: "sama da. oos ye **dăr**-léGum",
e: "Ok. I'm sending you it now",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{[{ p: "استول", f: "astawul", e: "to send" }]}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "پرون یې پیغام **را**واستاوه.",
f: "paróon ye paygháam **raa**-wáastawu.",
e: "She sent me a message yesterday.",
},
{
p: "زه به ورته یو پیغام **ور**واستوم.",
f: "zu ba wăr-ta yo payghaan **wăr**-wáastawum.",
e: "I'll send her a message.",
},
])}
</Examples>
</td>
</tr>
</tbody>
</table>
## In Some Sandwiches
These directional pronouns can be used instead of <Link to="/pronouns/pronouns-basic/">regular pronouns</Link> in the following sandwiches:
- *"to"* <InlinePs opts={opts} ps={{ p: "... ته", f: "... ta" }} /> etc.
- *"from"* <InlinePs opts={opts} ps={{ p: "له ... نه", f: "la ... na" }} />, <InlinePs opts={opts} ps={{ p: "له ... څخه", f: "la ... tsukha" }} /> etc.
- *"with"* <InlinePs opts={opts} ps={{ p: "له ... سره", f: "la ... sara" }} />, etc.
- _"to"_ <InlinePs opts={opts} ps={{ p: "... ته", f: "... ta" }} /> etc.
- _"from"_ <InlinePs opts={opts} ps={{ p: "له ... نه", f: "la ... na" }} />, <InlinePs opts={opts} ps={{ p: "له ... څخه", f: "la ... tsukha" }} /> etc.
- _"with"_ <InlinePs opts={opts} ps={{ p: "له ... سره", f: "la ... sara" }} />, etc.
When you put these directional pronouns in these sandwiches, the first part (<InlinePs opts={opts} ps={{ p: "له", f: "la" }} />, <InlinePs opts={opts} ps={{ p: "د", f: "du" }} />) is always left out.
<Examples opts={opts}>
{psmd([
{ p: "ولې **را**ته ګورې؟", f: "wăle **raa**-ta góre?", e: "Why are you looking at **me/us**?" },
{ p: "**را**ته ووایه!", f: "**raa**-ta óowaaya!", e: "Tell **me/us**!" },
{ p: "**در**سره چای شته؟", f: "**dăr**-sara chaay shta?", e: "Is there tea with **you**? Do you have tea?" },
{ p: "اوبه **ور**څخه راځي.", f: "oobu **wăr**-tsukha raadzée.", e: "Water comes from **it**." },
])}
{psmd([
{
p: "ولې **را**ته ګورې؟",
f: "wăle **raa**-ta góre?",
e: "Why are you looking at **me/us**?",
},
{ p: "**را**ته ووایه!", f: "**raa**-ta óowaaya!", e: "Tell **me/us**!" },
{
p: "**در**سره چای شته؟",
f: "**dăr**-sara chaay shta?",
e: "Is there tea with **you**? Do you have tea?",
},
{
p: "اوبه **ور**څخه راځي.",
f: "oobu **wăr**-tsukha raadzée.",
e: "Water comes from **it**.",
},
])}
</Examples>
## As Prefixes on Adjectives
👷‍♂️ Coming Soon ✍

View File

@ -6,13 +6,10 @@ import {
defaultTextOptions as opts,
grammarUnits,
VerbTable,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import bigAndLittleBrother from "../../images/big-and-little-brother.jpg";
import Link from "../../components/Link";
import Chart from "../../components/Chart";
import EditableVPEx, {
EditIcon,
} from "../../components/phrase-diagram/EditableVPEx";
@ -270,7 +267,7 @@ Whatever the servant <NP /> is, the whole block is shrunken and replaced by a mi
e: "mother, mom",
c: "n. f. anim.",
ppp: "میندې, میېندې",
ppf: "méynde, myénde",
ppf: "máynde, myénde",
},
gender: "fem",
genderCanChange: false,
@ -520,12 +517,12 @@ You can also take possesives and shrink them into mini-pronouns. The possesive c
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -619,12 +616,12 @@ So that can be shrunk down to the mini-pronoun <InlinePs opts={opts} ps={{ p: "
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -904,12 +901,12 @@ While exploring/editing phrases, you can click on the 🪄 above a possesor to s
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -1015,12 +1012,12 @@ When we talked about <NP text="NPs" /> we also noted that you <Link to="/phrase-
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -1116,12 +1113,12 @@ Wherever the mini-pronouns came from, they always run off to the <KidsSection />
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -1272,12 +1269,12 @@ Here it's just a coincedence that the <InlinePs opts={opts} ps={{ p: "دې", f:
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -1428,12 +1425,12 @@ Watch what happens when we shrink <InlinePs opts={opts} ps={{ p: "د هغوي",
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -1584,12 +1581,12 @@ The <InlinePs opts={opts} ps={{ p: "یې", f: "ye" }} /> sits in the kids sectio
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,
@ -2260,12 +2257,12 @@ Remember our example about about their brother sitting in your house yesterday?
ts: 1527815268,
i: 8554,
p: "شی",
f: "shey",
g: "shey",
f: "shay",
g: "shay",
e: "thing",
c: "n. m.",
ppp: "شیان، شیونه",
ppf: "sheyáan, sheyóona",
ppf: "shayáan, shayóona",
},
gender: "masc",
genderCanChange: false,

View File

@ -2,18 +2,14 @@
title: Sandwiches 🥪
---
import Link from "../../components/Link";
import {
Examples,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import { Examples, defaultTextOptions as opts } from "@lingdocs/ps-react";
import sandwiches from "./sandwiches";
## What are Sandwiches?
In Pashto there are **little particles that get attached to the front, back, or both sides of a word.**
We will call these *sandwiches*, but in fancy grammer terms these are called [adpositions](https://en.wikipedia.org/wiki/Preposition_and_postposition).
We will call these _sandwiches_, but in fancy grammer terms these are called [adpositions](https://en.wikipedia.org/wiki/Preposition_and_postposition).
In English we have just one kind of these sandwiches, the [preposition](https://en.wikipedia.org/wiki/Preposition_and_postposition), which is something that is stuck in front of a noun/pronoun. For example: I am going <u><strong>to</strong> school</u>. I'm making supper <u><strong>for</strong> you</u>.
@ -28,64 +24,116 @@ This last kind is probably the newest and most surprising to language learners.
## Sandwiches and Examples
export function SandwichTable() {
return (
<table className="table table-bordered my-3">
<thead>
<tr>
<th scope="col">Sandwich</th>
<th scope="col">Examples</th>
</tr>
</thead>
<tbody>
{sandwiches.map((s) => {
const pre = s.pre || { p: "", f: "" };
const post = s.post || { p: "", f: "" };
return <tr>
<td>
<Examples opts={opts}>{{
p: `${pre.p} ... ${post.p}`,
f: `${pre.f} ... ${post.f}`,
e: s.e,
}}</Examples>
</td>
<td>
<Examples opts={opts}>
{s.examples}
</Examples>
</td>
</tr>
})}
</tbody>
</table>
);
return (
<table className="table table-bordered my-3">
<thead>
<tr>
<th scope="col">Sandwich</th>
<th scope="col">Examples</th>
</tr>
</thead>
<tbody>
{sandwiches.map((s) => {
const pre = s.pre || { p: "", f: "" };
const post = s.post || { p: "", f: "" };
return (
<tr>
<td>
<Examples opts={opts}>
{{
p: `${pre.p} ... ${post.p}`,
f: `${pre.f} ... ${post.f}`,
e: s.e,
}}
</Examples>
</td>
<td>
<Examples opts={opts}>{s.examples}</Examples>
</td>
</tr>
);
})}
</tbody>
</table>
);
}
<SandwichTable />
More in progress... 👷‍♂️
More in progress...
{/* prettier-ignore */}
{/*
<Table size="medium"
titleRow={[{e: "sandwich" }, {e: "example"}]}
rows={
[
...sandwiches.reduce((accumulator, s) => {
const rowsForOneSandwich = [];
const leftSide = {p:`${s.pre.p} ... ${s.post.p}`, f:`${s.pre.f} ... ${s.post.f}`, e: s.e};
s.examples.forEach((ex, i) => {
// If first row or sandwich, show the sandwich and an example
// Otherwise just have an empty left hand side with an example on the right
rowsForOneSandwich.push([i === 0 ? leftSide : {}, {
p:<>{ex.p.before.p} <span className="underline"><strong>{s.pre.p}{s.pre.p && ' '}</strong> {ex.p.mid.p} <strong>{s.post.p && ' '}{s.post.p}</strong></span> {ex.p.after.p}</>,
f:<>{ex.p.before.f} <span className="underline"><strong>{s.pre.f}{s.pre.f && ' '}</strong>{ex.p.mid.f}<strong>{s.post.f && ' '}{s.post.f}</strong></span> {ex.p.after.f}</>,
e:<>{ex.e.before}<span className="underline"><strong>{ex.e.pre}</strong>{ex.e.mid}<strong>{ex.e.post}</strong></span>{ex.e.after}</>
}]);
})
return [...accumulator, ...rowsForOneSandwich];
}, [])
]
} />
<Table
size="medium"
titleRow={[{ e: "sandwich" }, { e: "example" }]}
rows={[
...sandwiches.reduce((accumulator, s) => {
const rowsForOneSandwich = [];
const leftSide = {
p: `${s.pre.p} ... ${s.post.p}`,
f: `${s.pre.f} ... ${s.post.f}`,
e: s.e,
};
s.examples.forEach((ex, i) => {
// If first row or sandwich, show the sandwich and an example
// Otherwise just have an empty left hand side with an example on the right
rowsForOneSandwich.push([
i === 0 ? leftSide : {},
{
p: (
<>
{ex.p.before.p}{" "}
<span className="underline">
<strong>
{s.pre.p}
{s.pre.p && " "}
</strong>{" "}
{ex.p.mid.p}{" "}
<strong>
{s.post.p && " "}
{s.post.p}
</strong>
</span>{" "}
{ex.p.after.p}
</>
),
f: (
<>
{ex.p.before.f}{" "}
<span className="underline">
<strong>
{s.pre.f}
{s.pre.f && " "}
</strong>
{ex.p.mid.f}
<strong>
{s.post.f && " "}
{s.post.f}
</strong>
</span>{" "}
{ex.p.after.f}
</>
),
e: (
<>
{ex.e.before}
<span className="underline">
<strong>{ex.e.pre}</strong>
{ex.e.mid}
<strong>{ex.e.post}</strong>
</span>
{ex.e.after}
</>
),
},
]);
});
return [...accumulator, ...rowsForOneSandwich];
}, []),
]}
/>{" "}
And many more!
@ -97,10 +145,10 @@ You will notice that some sandwiches also take <Link to="/inflection/mayonnaise/
<!-- ### Exceptional Sandwiches
Usually, words in sandwiches get <Link to="inflection/inflection-intro/">inflected</Link>. However, words inside the following sandwiches are often not inflected for the first inflection:
Usually, words in sandwiches get <Link to="inflection/inflection-intro/">inflected</Link>. However, words inside the following sandwiches are often not inflected for the first inflection:
- <Multi t={{p:"په ... ګې", f:"pu ... ke"}} />
- <Multi t={{p:"په ... باندې", f:"pu ... baande"}} />
- <Multi t={{p:"په ... ګې", f:"pu ... ke"}} />
- <Multi t={{p:"په ... باندې", f:"pu ... baande"}} />
- <Multi t={{p:"په ...", f:"pu ..."}} /> -->
*/}
\*/}

View File

@ -1,152 +1,485 @@
import {
Types as T,
} from "@lingdocs/ps-react";
import { Types as T } from "@lingdocs/ps-react";
type SandwichInfo = {
pre?: T.PsString,
post?: T.PsString,
e: string,
examples: (T.PsJSX | T.PsString)[]
}
pre?: T.PsString;
post?: T.PsString;
e: string;
examples: (T.PsJSX | T.PsString)[];
};
const sandwiches: SandwichInfo[] = [
{
pre: {p: "په", f: "pu"},
post: {p: "کې", f: "ke"},
e: "in / at",
examples: [
{
p: <>زه <u><strong>په</strong> کور <strong>کې</strong></u> یم</>,
f: <>zu <u><strong>pu</strong> kor <strong>ke</strong></u> yum</>,
e: <>I'm <u><strong>at</strong> home</u></>,
},
{
p: <>هغه <u><strong>په</strong> پارک <strong>کې</strong></u> دی</>,
f: <>haghá <u><strong>pu</strong> paark <strong>ke</strong></u> dey</>,
e: <>He's <u><strong>in</strong> the park</u></>,
},
{
p: <>مونږ <u><strong>په</strong> افغانستان <strong>کې</strong></u> اوسېږو</>,
f: <>moonG <u><strong>pu</strong> afghaanistaan <strong>ke</strong></u> oseGoo</>,
e: <>We live <u><strong>in</strong> Afghanistan</u></>,
},
],
},
{
post: { p: "ته", f: "ta" },
e: "to / towards",
examples: [
{
p: <>زه <u><strong>ښار</strong> ته</u> ځم</>,
f: <>zu <u><strong>xaar</strong> ta</u> dzum</>,
e: <>I'm going <u><strong>to</strong> the city</u></>,
},
{
p: <><u><strong>ما</strong> ته</u> وګوره</>,
f: <><u><strong>maa</strong> ta</u> óogora</>,
e: <>Look <u>at <strong>me</strong></u></>,
},
],
},
{
pre: { p: "د", f: "du" },
e: "of / 's",
examples: [
{
p: <><u><strong>د</strong> یوسف</u> کور هلته دی</>,
f: <><u><strong>du</strong> yoosuf</u> kor halta dey</>,
e: <><u>Yousuf<strong>'s</strong></u> house is there</>,
},
{
p: <>مونږ <u><strong>د</strong> پېشور</u> یو</>,
f: <>moonG <u><strong>du</strong> pexawar</u> yoo</>,
e: <>We are <u><strong>of</strong> Peshawer</u> (ie. We are from Peshawer)</>,
},
{
p: <>دا خوراک <u><strong>د</strong> خوړلو</u> نه دی</>,
f: <>daa khoraak <u><strong>du</strong> khoRulo</u> nu dey</>,
e: <>That food is not <u>of eating</u> (ie. It's unfit for eating)</>,
},
],
},
// TODO: ADD په سره
{
pre: { p: "له", f: "la" },
post: { p: "سره", f: "sara" },
e: "with",
examples: [
{
p: <>هغه <u><strong>له</strong> احمد <strong>سره</strong></u> دی</>,
f: <>haghá <u><strong>la</strong> ahmad <strong>sara</strong></u> dey</>,
e: <>He is <u><strong>with</strong> Ahmed</u>.</>,
},
{
p: <>ته <u><strong>له</strong> ما <strong>سره</strong></u> ځې؟</>,
f: <>tu <u><strong>la</strong> maa <strong>sara</strong></u> dze?</>,
e: <>Will you go <u><strong>with</strong> me</u>?</>,
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "دپاره", f: "dupaara" },
e: "for",
examples: [
{
p: <>دا <u><strong>د</strong> هغې <strong>دپاره</strong></u> دی</>,
f: <>daa <u><strong>du</strong> haghé <strong>dupaara</strong></u> dey</>,
e: <>This is <u><strong>for</strong> her</u></>,
},
],
},
{
pre: { p: "پر", f: "pur" },
post: { p: "باندې", f: "baande" },
e: "on",
examples: [
{
p: <>کتاب <u><strong>پر</strong> مېز <strong>باندې</strong></u> دی</>,
f: <>kitáab <u><strong>pur</strong> mez <strong>baande</strong></u> dey</>,
e: <>The book is <u><strong>on</strong> the table</u></>,
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "په اړه", f: "pu aRa" },
e: "about / concerning",
examples: [
{
p: <><u><strong>د</strong> تعلیم <strong>په اړه</strong></u> خبرې کوو</>,
f: <><u><strong>du</strong> taleem <strong>pu aRa</strong></u> khabure kawoo</>,
e: <>We are talking <u><strong>about</strong> education</u></>,
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "په بارې کې", f: "pu baare ke" },
e: "about / concerning",
examples: [
{
p: <><u><strong>د</strong> تعلیم <strong>په بارې کې</strong></u> خبرې کوو</>,
f: <><u><strong>du</strong> taleem <strong>pu baare ke</strong></u> khabure kawoo</>,
e: <>We are talking <u><strong>about</strong> education</u></>,
},
],
},
{
pre: { p: "پر", f: "pur" },
post: { p: "سربېره", f: "sărbera" },
e: "in addition to, along with",
examples: [
{
p: <><u><strong>پر</strong> وچکالۍ <strong>سربېره</strong></u> دلته جنګ هم شته</>,
f: <><u><strong>pur</strong> wuchkaaluy <strong>sărbera</strong></u> dălta jang hum shta</>,
e: <><u><strong>In addition to</strong> drought</u>, there is also war here</>,
},
],
},
{
pre: { p: "په", f: "pu" },
post: { p: "کې", f: "ke" },
e: "in / at",
examples: [
{
p: (
<>
زه{" "}
<u>
<strong>په</strong> کور <strong>کې</strong>
</u>{" "}
یم
</>
),
f: (
<>
zu{" "}
<u>
<strong>pu</strong> kor <strong>ke</strong>
</u>{" "}
yum
</>
),
e: (
<>
I'm{" "}
<u>
<strong>at</strong> home
</u>
</>
),
},
{
p: (
<>
هغه{" "}
<u>
<strong>په</strong> پارک <strong>کې</strong>
</u>{" "}
دی
</>
),
f: (
<>
haghá{" "}
<u>
<strong>pu</strong> paark <strong>ke</strong>
</u>{" "}
day
</>
),
e: (
<>
He's{" "}
<u>
<strong>in</strong> the park
</u>
</>
),
},
{
p: (
<>
مونږ{" "}
<u>
<strong>په</strong> افغانستان <strong>کې</strong>
</u>{" "}
اوسېږو
</>
),
f: (
<>
moonG{" "}
<u>
<strong>pu</strong> afghaanistaan <strong>ke</strong>
</u>{" "}
oseGoo
</>
),
e: (
<>
We live{" "}
<u>
<strong>in</strong> Afghanistan
</u>
</>
),
},
],
},
{
post: { p: "ته", f: "ta" },
e: "to / towards",
examples: [
{
p: (
<>
زه{" "}
<u>
<strong>ښار</strong> ته
</u>{" "}
ځم
</>
),
f: (
<>
zu{" "}
<u>
<strong>xaar</strong> ta
</u>{" "}
dzum
</>
),
e: (
<>
I'm going{" "}
<u>
<strong>to</strong> the city
</u>
</>
),
},
{
p: (
<>
<u>
<strong>ما</strong> ته
</u>{" "}
وګوره
</>
),
f: (
<>
<u>
<strong>maa</strong> ta
</u>{" "}
óogora
</>
),
e: (
<>
Look{" "}
<u>
at <strong>me</strong>
</u>
</>
),
},
],
},
{
pre: { p: "د", f: "du" },
e: "of / 's",
examples: [
{
p: (
<>
<u>
<strong>د</strong> یوسف
</u>{" "}
کور هلته دی
</>
),
f: (
<>
<u>
<strong>du</strong> yoosuf
</u>{" "}
kor halta day
</>
),
e: (
<>
<u>
Yousuf<strong>'s</strong>
</u>{" "}
house is there
</>
),
},
{
p: (
<>
مونږ{" "}
<u>
<strong>د</strong> پېشور
</u>{" "}
یو
</>
),
f: (
<>
moonG{" "}
<u>
<strong>du</strong> pexawar
</u>{" "}
yoo
</>
),
e: (
<>
We are{" "}
<u>
<strong>of</strong> Peshawer
</u>{" "}
(ie. We are from Peshawer)
</>
),
},
{
p: (
<>
دا خوراک{" "}
<u>
<strong>د</strong> خوړلو
</u>{" "}
نه دی
</>
),
f: (
<>
daa khoraak{" "}
<u>
<strong>du</strong> khoRulo
</u>{" "}
nu day
</>
),
e: (
<>
That food is not <u>of eating</u> (ie. It's unfit for eating)
</>
),
},
],
},
// TODO: ADD په سره
{
pre: { p: "له", f: "la" },
post: { p: "سره", f: "sara" },
e: "with",
examples: [
{
p: (
<>
هغه{" "}
<u>
<strong>له</strong> احمد <strong>سره</strong>
</u>{" "}
دی
</>
),
f: (
<>
haghá{" "}
<u>
<strong>la</strong> ahmad <strong>sara</strong>
</u>{" "}
day
</>
),
e: (
<>
He is{" "}
<u>
<strong>with</strong> Ahmed
</u>
.
</>
),
},
{
p: (
<>
ته{" "}
<u>
<strong>له</strong> ما <strong>سره</strong>
</u>{" "}
ځې؟
</>
),
f: (
<>
tu{" "}
<u>
<strong>la</strong> maa <strong>sara</strong>
</u>{" "}
dze?
</>
),
e: (
<>
Will you go{" "}
<u>
<strong>with</strong> me
</u>
?
</>
),
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "دپاره", f: "dupaara" },
e: "for",
examples: [
{
p: (
<>
دا{" "}
<u>
<strong>د</strong> هغې <strong>دپاره</strong>
</u>{" "}
دی
</>
),
f: (
<>
daa{" "}
<u>
<strong>du</strong> haghé <strong>dupaara</strong>
</u>{" "}
day
</>
),
e: (
<>
This is{" "}
<u>
<strong>for</strong> her
</u>
</>
),
},
],
},
{
pre: { p: "پر", f: "pur" },
post: { p: "باندې", f: "baande" },
e: "on",
examples: [
{
p: (
<>
کتاب{" "}
<u>
<strong>پر</strong> مېز <strong>باندې</strong>
</u>{" "}
دی
</>
),
f: (
<>
kitáab{" "}
<u>
<strong>pur</strong> mez <strong>baande</strong>
</u>{" "}
day
</>
),
e: (
<>
The book is{" "}
<u>
<strong>on</strong> the table
</u>
</>
),
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "په اړه", f: "pu aRa" },
e: "about / concerning",
examples: [
{
p: (
<>
<u>
<strong>د</strong> تعلیم <strong>په اړه</strong>
</u>{" "}
خبرې کوو
</>
),
f: (
<>
<u>
<strong>du</strong> taleem <strong>pu aRa</strong>
</u>{" "}
khabure kawoo
</>
),
e: (
<>
We are talking{" "}
<u>
<strong>about</strong> education
</u>
</>
),
},
],
},
{
pre: { p: "د", f: "du" },
post: { p: "په بارې کې", f: "pu baare ke" },
e: "about / concerning",
examples: [
{
p: (
<>
<u>
<strong>د</strong> تعلیم <strong>په بارې کې</strong>
</u>{" "}
خبرې کوو
</>
),
f: (
<>
<u>
<strong>du</strong> taleem <strong>pu baare ke</strong>
</u>{" "}
khabure kawoo
</>
),
e: (
<>
We are talking{" "}
<u>
<strong>about</strong> education
</u>
</>
),
},
],
},
{
pre: { p: "پر", f: "pur" },
post: { p: "سربېره", f: "sărbera" },
e: "in addition to, along with",
examples: [
{
p: (
<>
<u>
<strong>پر</strong> وچکالۍ <strong>سربېره</strong>
</u>{" "}
دلته جنګ هم شته
</>
),
f: (
<>
<u>
<strong>pur</strong> wuchkaaluy <strong>sărbera</strong>
</u>{" "}
dălta jang hum shta
</>
),
e: (
<>
<u>
<strong>In addition to</strong> drought
</u>
, there is also war here
</>
),
},
],
},
];
export default sandwiches;
@ -204,7 +537,7 @@ export default sandwiches;
p: {
before: {p:"دا وړاندېز", f:"daa wRaandez"},
mid: {p:"شرط", f:"shart"},
after: {p:"کړی دی", f:"kuRey dey"},
after: {p:"کړی دی", f:"kuRay day"},
},
e: {
before: "He's made that offer ",
@ -245,7 +578,7 @@ export default sandwiches;
{
p: {
before: {p:"", f:""},
mid: {p:"درېو کالو", f:"dreyo kaalo"},
mid: {p:"درېو کالو", f:"dre`yo kaalo"},
after: {p:"کار کوم", f:"kaar kawum"},
},
e: {
@ -267,7 +600,7 @@ export default sandwiches;
p: {
before: {p:"کتاب", f:"kitaab"},
mid: {p:"مېز", f:"mez"},
after: {p:"دی", f:"dey"},
after: {p:"دی", f:"day"},
},
e: {
before: "The book is ",
@ -288,7 +621,7 @@ export default sandwiches;
p: {
before: {p:"کتاب", f:"kitaab"},
mid: {p:"مېز", f:"mez"},
after: {p:"دی", f:"dey"},
after: {p:"دی", f:"day"},
},
e: {
before: "The book is ",
@ -427,4 +760,4 @@ export default sandwiches;
},
];
export default sandwiches; */
export default sandwiches; */

File diff suppressed because it is too large Load Diff

View File

@ -3,182 +3,196 @@ title: All Perfect Forms
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
Pashto,
Phonetics,
defaultTextOptions as opts,
Examples,
InlinePs,
Pashto,
Phonetics,
} from "@lingdocs/ps-react";
import { KidsSection, VP, EP, Camera, Video, KingIcon } from "../../components/terms-links";
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 EditableVPEx, {
EditIcon,
} from "../../components/phrase-diagram/EditableVPEx";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import perfectDogMeme from "./perfect-dog-meme.jpg";
import chemistryPerfect from "./chemistry-perfect.jpg";
import BasicBlocks from "../../components/BasicBlocks";
import GameDisplay from "../../games/GameDisplay";
import {
perfectGameOne,
perfectGameMix,
} from "../../games/games";
import { perfectGameOne, perfectGameMix } from "../../games/games";
In the previous chapter we explained how [perfect](https://en.wikipedia.org/wiki/Perfect_(grammar)) forms are made by combining the <Link to="/verbs/roots-and-stems/#the-past-participle">past participle</Link> of a verb with an equative.
In the previous chapter we explained how [perfect](<https://en.wikipedia.org/wiki/Perfect_(grammar)>) forms are made by combining the <Link to="/verbs/roots-and-stems/#the-past-participle">past participle</Link> of a verb with an equative.
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={chemistryPerfect} alt="" className="img-fluid" />
<img src={chemistryPerfect} alt="" className="img-fluid" />
</div>
<Formula>
<Link to="/verbs/roots-and-stems/#the-past-participle">Verb Past Participle</Link> +{` `}
Equative = Perfect
<Link to="/verbs/roots-and-stems/#the-past-participle">
Verb Past Participle
</Link>
{` + `}
Equative = Perfect
</Formula>
The nice thing about perfects is that we can use <Link to="/equatives/other-equatives/#overview-of-8-equatives">any of the 8 equatives</Link>. This gives use a huge amount of expressive power to talk about whether something has happened, had happened, will have happened, might have happened, would have happened, what you wish would have happened etc. etc.
<div style={{ margin: "0 auto 2rem auto" }}>
<img src={perfectDogMeme} alt="" className="img-fluid" />
<img src={perfectDogMeme} alt="" className="img-fluid" />
</div>
With the power of perfect forms, we can inject our <VP text="verb phrases" /> with all the meanings of the <Link to="/equatives/other-equatives/#overview-of-8-equatives">8 different equative tenses</Link>.
With the power of perfect forms, we can inject our <VP text="verb phrases" /> with all the meanings of the <Link to="/equatives/other-equatives/#overview-of-8-equatives">8 different equative tenses</Link>.
## Present Perfect
<Formula>
Verb Past Participle +{` `}
Present Equative
Verb Past Participle +{` `}
Present Equative
</Formula>
The present perfect is used to talk about events that have happened in the past and therefore have an effect on *the current situation*, now.
The present perfect is used to talk about events that have happened in the past and therefore have an effect on _the current situation_, now.
<Examples opts={opts}>
{psmd([
{
p: "ما ډوډۍ خوړلې ده",
f: "maa DoDúy khoRule da",
e: "I have eaten food",
sub: "I am full **now**",
},
{
p: "زه کابل ته تللی یم",
f: "zu kaabul ta tlúley yum",
e: "I've gone to Kabul",
sub: "I've gone there so I'm over there **now** / I **currently** have the experience of having travelled there."
},
{
p: "هغې ته نه یې لیدلې",
f: "haghé tu nú ye leedúle",
e: "She hasn't seen you (f.)",
sub: "She **currently** does not have the experience of seeing you",
},
])}
{psmd([
{
p: "ما ډوډۍ خوړلې ده",
f: "maa DoDúy khoRule da",
e: "I have eaten food",
sub: "I am full **now**",
},
{
p: "زه کابل ته تللی یم",
f: "zu kaabul ta tlúlay yum",
e: "I've gone to Kabul",
sub: "I've gone there so I'm over there **now** / I **currently** have the experience of having travelled there.",
},
{
p: "هغې ته نه یې لیدلې",
f: "haghé tu nú ye leedúle",
e: "She hasn't seen you (f.)",
sub: "She **currently** does not have the experience of seeing you",
},
])}
</Examples>
### Without the equative
Often the equative is left out with the present equative.
Often the equative is left out with the present equative.
<Examples opts={opts}>
{psmd([
{
p: "تا ډوډۍ **خوړلې**؟",
f: "taa DoDuy **khoRúle**?",
e: "Have you eaten food?",
},
{
p: "مونږ دغه پلاوي سره **کتلي**",
f: "moonG dagha plaawee sara **katúlee**",
e: "We've met with that delegation",
},
])}
{psmd([
{
p: "تا ډوډۍ **خوړلې**؟",
f: "taa DoDuy **khoRúle**?",
e: "Have you eaten food?",
},
{
p: "مونږ دغه پلاوي سره **کتلي**",
f: "moonG dagha plaawee sara **katúlee**",
e: "We've met with that delegation",
},
])}
</Examples>
## Habitual Perfect
<Formula>
Verb Past Participle +{` `}
Habitual Equative
Verb Past Participle +{` `}
Habitual Equative
</Formula>
The habitual perfect is used to talk about events that are habitually/generally found to be completed, so they tend to have an affect on the situation over and over again, in a habitual fashion.
The habitual perfect is used to talk about events that are habitually/generally found to be completed, so they tend to have an affect on the situation over and over again, in a habitual fashion.
<Examples opts={opts}>
{psmd([
{
p: "ماشومان په دې وخت کې مکتب ته تللي وي",
f: "maashoomáan pu de wakht ke maktab ta tlúlee wee",
e: "The kids tend to be gone to school at this time",
sub: "At this time **usually** the kids are gone to school",
},
{
p: "په اختر کې ډېر خلک دلته راغلي وي",
f: "pu akhtar ke Der khalk dălta raaghúlee wee",
e: "On the holiday usually lots of people come/show up here",
sub: "People have a **habit** of arriving here on the holiday - you will **usually** see them here then",
},
])}
{psmd([
{
p: "ماشومان په دې وخت کې مکتب ته تللي وي",
f: "maashoomáan pu de wakht ke maktab ta tlúlee wee",
e: "The kids tend to be gone to school at this time",
sub: "At this time **usually** the kids are gone to school",
},
{
p: "په اختر کې ډېر خلک دلته راغلي وي",
f: "pu akhtar ke Der khalk dălta raaghúlee wee",
e: "On the holiday usually lots of people come/show up here",
sub: "People have a **habit** of arriving here on the holiday - you will **usually** see them here then",
},
])}
</Examples>
## Subjunctive Perfect
<Formula>
Verb Past Participle +{` `}
Subjunctive Equative
Verb Past Participle +{` `}
Subjunctive Equative
</Formula>
The subjunctive perfect is used to talk about things being done in a *subjunctive* way, i.e.:
- *wanting* something to be done
- saying that something *should/must* be done
- saying that something is *possibly* done
- saying *if* something is done
- saying a purpose, i.e. ...**so that** something will be done
The subjunctive perfect is used to talk about things being done in a _subjunctive_ way, i.e.:
- _wanting_ something to be done
- saying that something _should/must_ be done
- saying that something is _possibly_ done
- saying _if_ something is done
- saying a purpose, i.e. ...**so that** something will be done
<Examples opts={opts}>
{psmd([
{
p: "کېدای شي چې **راغلی وي**",
f: "kedaay shee che **raaghuley wee**",
e: "It's possible that he's arrived",
},
{
p: "چې خفه شوی نه وې",
f: "che khufa shúwey nú we",
e: "I hope you haven't become sad",
sub: "I don't want you to have gotten upset",
},
])}
{psmd([
{
p: "کېدای شي چې **راغلی وي**",
f: "kedaay shee che **raaghulay wee**",
e: "It's possible that he's arrived",
},
{
p: "چې خفه شوی نه وې",
f: "che khufa shúway nú we",
e: "I hope you haven't become sad",
sub: "I don't want you to have gotten upset",
},
])}
</Examples>
## Future Perfect
<Formula>
Verb Past Participle +{` `}
Future Equative
Verb Past Participle +{` `}
Future Equative
</Formula>
The future equative is used to either to:
<ol style={{ listStyleType: "upper-alpha" }}>
<li>say that something <em>will be done</em> in the <strong>future</strong></li>
<li>guess/presume that something is done <strong>now</strong></li>
<li>
say that something <em>will be done</em> in the <strong>future</strong>
</li>
<li>
guess/presume that something is done <strong>now</strong>
</li>
</ol>
#### A. Say something will be done in the future
<Examples opts={opts}>
{psmd([
{
p: "سبا به پېښور ته تللې وي",
f: "sabaa ba pexawar ta tlúle wee",
e: "Tomorrow she will have gone to Peshawer",
},
{
p: "دوه کاله بعد به ما پښتو ښه زده کړې وي",
f: "dwa kaala bad ba maa puxto xa zda kúRe wee",
e: "After two years I will have learned Pashto well.",
}
])}
{psmd([
{
p: "سبا به پېښور ته تللې وي",
f: "sabaa ba pexawar ta tlúle wee",
e: "Tomorrow she will have gone to Peshawer",
},
{
p: "دوه کاله بعد به ما پښتو ښه زده کړې وي",
f: "dwa kaala bad ba maa puxto xa zda kúRe wee",
e: "After two years I will have learned Pashto well.",
},
])}
</Examples>
Notice that even though you might be talking about future events, for the <Link to="/phrase-structure/vp/">phrase structure</Link> this is still considered past tense, because **all perfects are considered past tense**.
@ -188,28 +202,28 @@ Notice that even though you might be talking about future events, for the <Link
It is 👉 **extremely common and useful** 👈 to use the future equative to make guesses or presumptions about events being done currently. This is often used in conversation to throw out guesses or estimates, or even ask questions about what might have happened.
<Examples opts={opts}>
{psmd([
{
p: "تا به دا کتاب لیدلی وي",
f: "taa ba daa kitaab leedúley wee",
e: "You've probably seen this book",
},
{
p: "هغه به کابل ته تللی وي",
f: "haghá ba kaabul ta tlúley wee",
e: "He's probably gone to Kabul",
},
{
p: "تا به ډوډۍ نه وي خوړلې",
f: "taa ba DoDuy nu wee khoRúle",
e: "I betcha you haven't eaten",
},
{
p: "بازار کې خو به دې لیملی یم",
f: "baazaar ke kho ba de leedúley yum",
e: "Well surely you will have seen me in the bazar",
},
])}
{psmd([
{
p: "تا به دا کتاب لیدلی وي",
f: "taa ba daa kitaab leedúlay wee",
e: "You've probably seen this book",
},
{
p: "هغه به کابل ته تللی وي",
f: "haghá ba kaabul ta tlúlay wee",
e: "He's probably gone to Kabul",
},
{
p: "تا به ډوډۍ نه وي خوړلې",
f: "taa ba DoDuy nu wee khoRúle",
e: "I betcha you haven't eaten",
},
{
p: "بازار کې خو به دې لیملی یم",
f: "baazaar ke kho ba de leedúlay yum",
e: "Well surely you will have seen me in the bazar",
},
])}
</Examples>
With this form of perfect people often add an emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> in the <KidsSection />.
@ -217,37 +231,37 @@ With this form of perfect people often add an emphatic <InlinePs opts={opts} ps=
## Past Perfect
<Formula>
Verb Past Participle +{` `}
Past Equative
Verb Past Participle +{` `}
Past Equative
</Formula>
The past perfect is used to say that an event **had been done in the past**. For instance, if you are explaining some events in that past, you can use this to that some event **had been done** back at that point in time.
<Examples opts={opts}>
{psmd([
{
p: "تا هغه مخکې **لیدلی و**؟",
f: "taa haghá mukhke **leedúley wo**?",
e: "Had you seen him before?",
},
{
p: "دوي ما ته د ډوډۍ ست کاو، خوي ما ډوډۍ **خوړلې وه**",
f: "dwee maa ta du DoDúy sat kaawu, kho maa DoDúy **khoRule wa**",
e: "They were inviting me to eat, but I **had eaten**",
},
{
p: "زه ستا کور ته راغلم، خو ته بازار ته **تللی وې**",
f: "zu staa kor ta ráaghlum, kho tu baazaar ta **tlúley we**.",
e: "I came to your house, but you **had gone** to the bazar.",
},
])}
{psmd([
{
p: "تا هغه مخکې **لیدلی و**؟",
f: "taa haghá mukhke **leedúlay wo**?",
e: "Had you seen him before?",
},
{
p: "دوي ما ته د ډوډۍ ست کاو، خوي ما ډوډۍ **خوړلې وه**",
f: "dwee maa ta du DoDúy sat kaawu, kho maa DoDúy **khoRule wa**",
e: "They were inviting me to eat, but I **had eaten**",
},
{
p: "زه ستا کور ته راغلم، خو ته بازار ته **تللی وې**",
f: "zu staa kor ta ráaghlum, kho tu baazaar ta **tlúlay we**.",
e: "I came to your house, but you **had gone** to the bazar.",
},
])}
</Examples>
## "Would be" Perfect
<Formula>
Verb Past Participle +{` `}
"Would be" Equative
Verb Past Participle +{` `}
"Would be" Equative
</Formula>
Just like the <Link to="/equatives/other-equatives/#would-be-equative">"would be" equative</Link>, the "would be" perfect can be used to talk about:
@ -258,25 +272,25 @@ Just like the <Link to="/equatives/other-equatives/#would-be-equative">"would be
- to say that an event should have happened
<Examples opts={opts}>
{psmd([
{
p: "هغه به مخکې دلته راغلې وه.",
f: "haghá ba mukhke dălta raaghúle wa",
e: "She had probably come here before",
},
{
p: "که زه خبر وای، نو **زه به راغلی وم**.",
f: "ku zu khabúr waay, no **zu ba raaghúley wum**.",
e: "If I had known, I (m.) would have come.",
}
])}
{psmd([
{
p: "هغه به مخکې دلته راغلې وه.",
f: "haghá ba mukhke dălta raaghúle wa",
e: "She had probably come here before",
},
{
p: "که زه خبر وای، نو **زه به راغلی وم**.",
f: "ku zu khabúr waay, no **zu ba raaghúlay wum**.",
e: "If I had known, I (m.) would have come.",
},
])}
</Examples>
## Past Subjunctive Perfect
<Formula>
Verb Past Participle +{` `}
"Past Subjunctive" Equative
Verb Past Participle +{` `}
"Past Subjunctive" Equative
</Formula>
Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subjunctive equative</Link>, the past subjunctive perfect is used to say:
@ -286,60 +300,60 @@ Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subju
- If an event should have been done/was necessary in the past
<Examples opts={opts}>
{psmd([
{
p: "ته باید وختي راغلی وای",
f: "tu baayad wakhtee raaghúley waay",
e: "You (m.) should have come early",
},
{
p: "ته باید وختي راغلې وای",
f: "tu baayad wakhtee raaghúle waay",
e: "You (f.) should have come early",
},
{
p: "پرون ما کار کړی وای",
f: "paróon maa kaar kúRey waay",
e: "Yesterday I had to work",
},
{
p: "که ما ډوډۍ نه وای خوړلې...",
f: "ku maa DoDúy nu waay khóRule...",
e: "If I hadn't eaten food...",
},
{
p: "کاشکې ما دا پیسې نه وای اخستې",
f: "kaashke maa daa peyse nu waay akhíste",
e: "I wish I hadn't taken that money!",
},
])}
{psmd([
{
p: "ته باید وختي راغلی وای",
f: "tu baayad wakhtee raaghúlay waay",
e: "You (m.) should have come early",
},
{
p: "ته باید وختي راغلې وای",
f: "tu baayad wakhtee raaghúle waay",
e: "You (f.) should have come early",
},
{
p: "پرون ما کار کړی وای",
f: "paróon maa kaar kúRay waay",
e: "Yesterday I had to work",
},
{
p: "که ما ډوډۍ نه وای خوړلې...",
f: "ku maa DoDúy nu waay khóRule...",
e: "If I hadn't eaten food...",
},
{
p: "کاشکې ما دا پیسې نه وای اخستې",
f: "kaashke maa daa payse nu waay akhíste",
e: "I wish I hadn't taken that money!",
},
])}
</Examples>
## "Would have been" Perfect
<Formula>
Verb Past Participle +{` `}
"Would have been" Equative
Verb Past Participle +{` `}
"Would have been" Equative
</Formula>
Just like the <Link to="/equatives/other-equatives/#would-have-been-equative">"would have been" equative</Link>, the "would have been" perfect is used to say:
- If some hypothetical condition were true, an event *would have been* done
- If some hypothetical condition were true, an event _would have been_ done
- Some event should have been done, it would have been good if some event was done
<Examples opts={opts}>
{psmd([
{
p: "که ما پیسې درلودای، نو **نوي کالي به مې اخستي وای**",
f: "ku maa peyse darlodaay, no **nuwee kaalee ba me akhiste waay**",
e: "If I had money, **I would have bought new clothes**",
},
{
p: "نو ته به راغلې وای که نه!",
f: "no tu ba raaghúle waay ku nu!",
e: "Ah, you (f.) should have come!",
},
])}
{psmd([
{
p: "که ما پیسې درلودای، نو **نوي کالي به مې اخستي وای**",
f: "ku maa payse darlodaay, no **nuwee kaalee ba me akhiste waay**",
e: "If I had money, **I would have bought new clothes**",
},
{
p: "نو ته به راغلې وای که نه!",
f: "no tu ba raaghúle waay ku nu!",
e: "Ah, you (f.) should have come!",
},
])}
</Examples>
<GameDisplay record={perfectGameOne} />

View File

@ -1,28 +1,26 @@
import {
Types as T,
} from "@lingdocs/ps-react";
import { Types as T } from "@lingdocs/ps-react";
import { wordQuery } from "../../words/words";
export const basicVerbs: T.VerbEntry[] = wordQuery("verbs", [
"leekul",
"wahul",
"skul",
"kawul",
"leedul",
"awredul",
"khoRul",
"leekul",
"wahul",
"skul",
"kawul",
"leedul",
"awredul",
"khoRul",
]);
export const intransitivePastVerbs: T.VerbEntry[] = wordQuery("verbs", [
"rasedul",
"gurdzedul",
"tuxtedul",
"ghuGedul",
"lwedul",
"raatlúl",
"zeGedul",
"kenaastul",
"alwatul",
"prewatul",
"خوځېدل",
]);
"rasedul",
"gurdzedul",
"tuxtedul",
"ghuGedul",
"lwedul",
"raatlúl",
"zeGedul",
"kenaastul",
"alwatul",
"prewatul",
"خوځېدل",
]);

View File

@ -3,9 +3,9 @@ title: Future
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import { KidsSection } from "../../components/terms-links";
import cousins from "./cousins.png";
@ -15,10 +15,7 @@ import Formula from "../../components/formula/Formula";
import imperfectiveFuture from "./imperfective-future-graph.svg";
import perfectiveFuture from "./perfective-future-graph.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import {
futureVerbGame1,
futureVerbGame2,
} from "../../games/games";
import { futureVerbGame1, futureVerbGame2 } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
There are two kinds of future forms in Pashto:
@ -28,15 +25,15 @@ There are two kinds of future forms in Pashto:
## Imperfective Future
This is used to talk about something happening in the future, while thinking of the event as an ongoing or recurring event. It can also be used to stress the certainty of the event happening.
This is used to talk about something happening in the future, while thinking of the event as an ongoing or recurring event. It can also be used to stress the certainty of the event happening.
<div className="text-center">
<img src={imperfectiveFuture} alt="" className="img-fluid" />
<img src={imperfectiveFuture} alt="" className="img-fluid" />
</div>
<Formula>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link>
</Formula>
<BasicVerbShowCase opts={opts} tense="imperfectiveFuture" />
@ -45,15 +42,15 @@ Notice that the <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the
## Perfective Future
This is used to talk about something happening in the future, while thinking of the event *as a whole* or as a one time event. It can also be used when there is a little less certainty that the event will happen.
This is used to talk about something happening in the future, while thinking of the event _as a whole_ or as a one time event. It can also be used when there is a little less certainty that the event will happen.
<div className="text-center">
<img src={perfectiveFuture} alt="" className="img-fluid" />
<img src={perfectiveFuture} alt="" className="img-fluid" />
</div>
<Formula>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/subjunctive-verbs/">Subjunctive</Link>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/subjunctive-verbs/">Subjunctive</Link>
</Formula>
<BasicVerbShowCase opts={opts} tense="perfectiveFuture" />

View File

@ -3,24 +3,18 @@ title: Imperative
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
removeFVarients,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Carousel from "../../components/Carousel";
import Link from "../../components/Link";
import Formula from "../../components/formula/Formula";
import { verbs } from "../../words/words";
import shuffleArray from "../../lib/shuffle-array";
import imperfectiveImperative from "./imperfective-imperative.svg";
import perfectiveImperative from "./perfective-imperative.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import {
imperativeVerbGame1,
imperativeVerbGame2,
} from "../../games/games";
import { imperativeVerbGame1, imperativeVerbGame2 } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
The imperative form is used for **giving commands** (telling people to do things).
@ -30,18 +24,23 @@ There are two forms of the imperative:
1. <i className="fas fa-video" /> Imperfective Imperative
2. <i className="fas fa-camera" /> Perfective Imperative
export const basicVerbs = verbs.filter((v) => !v.entry.c?.includes("gramm. trans."));
export const basicVerbs = verbs.filter(
(v) => !v.entry.c?.includes("gramm. trans.")
);
## Imperfective Imperative
<Formula name="Imperfective Imperative">
Imperfective Stem + <Link to="/verbs/verb-endings/#imperative-verb-endings">Imperative Ending</Link>
Imperfective Stem +{" "}
<Link to="/verbs/verb-endings/#imperative-verb-endings">
Imperative Ending
</Link>
</Formula>
The <i className="fas fa-video" /> **imperfective imperative** is used when you want to tell someone to something repeatedly, in general, or if you're wanting them to get going on action that will be ongoing.
<div className="text-center">
<img src={imperfectiveImperative} alt="" className="img-fluid" />
<img src={imperfectiveImperative} alt="" className="img-fluid" />
</div>
<BasicVerbShowCase opts={opts} tense="imperfectiveImperative" />
@ -49,126 +48,141 @@ The <i className="fas fa-video" /> **imperfective imperative** is used when you
## Perfective Imperative
<Formula name="Perfective Imperative">
Perfective Stem + <Link to="/verbs/verb-endings/#imperative-verb-endings">Imperative Ending</Link>
Perfective Stem +{" "}
<Link to="/verbs/verb-endings/#imperative-verb-endings">
Imperative Ending
</Link>
</Formula>
The <i className="fas fa-camera" /> **perfective imperative** is used when you want to tell someone to do something is a one time, complete action. You are not thinking of the action as a process or as something that will be repeated, you are just telling the person to *get the action done*.
The <i className="fas fa-camera" /> **perfective imperative** is used when you want to tell someone to do something is a one time, complete action. You are not thinking of the action as a process or as something that will be repeated, you are just telling the person to _get the action done_.
<div className="text-center">
<img src={perfectiveImperative} alt="" className="img-fluid" />
<img src={perfectiveImperative} alt="" className="img-fluid" />
</div>
<BasicVerbShowCase opts={opts} tense="perfectiveImperative" />
## Using Imperatives
For Pashto learners, having a choice between the perfective and imperfective imperatives is *not* something we are accustomed to. And so, it takes a lot of time to get used to the difference, and to choose the right form while speaking.
For Pashto learners, having a choice between the perfective and imperfective imperatives is _not_ something we are accustomed to. And so, it takes a lot of time to get used to the difference, and to choose the right form while speaking.
<div className="my-3" style={{ overflowX: "auto" }}>
<table className="table">
<thead>
<tr>
<th scope="col">
<div><i className="fas fa-video" /> Imperfective</div>
<div><samp>w/ imperfective stem</samp></div>
<div>
<i className="fas fa-video" /> Imperfective
</div>
<div>
<samp>w/ imperfective stem</samp>
</div>
</th>
<th scope="col">
<div><i className="fas fa-camera" /> Perfective</div>
<div><samp>w/ perfective stem</samp></div>
<div>
<i className="fas fa-camera" /> Perfective
</div>
<div>
<samp>w/ perfective stem</samp>
</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "وریژې **خوره**",
f: "wreejze **khorá**",
e: "Eat rice",
sub: "(in general, it's good for you)",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "وریژې **وخوره**",
f: "wreejze **óokhora**",
e: "Eat rice",
sub: "(one time)",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "د کلي عکسونه راته **لېږه**!",
f: "du kulee aksoona raa-ta **leGá**!",
e: "Send me pictures of the village!",
sub: "(send me pictures every once and awhile)",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "د کلي عکسونه راته **ولېږه**!",
f: "du kulee aksoona raa-ta **óoleGa**!",
e: "Send me pictures of the village!",
sub: "(send me a bunch of pictures in one clump, at one time)",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "تاسو هلته **کېنئ**",
f: "taaso halta **kenéyy**",
e: "You sit there",
sub: "(in general, whenever you come)"
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "تاسو هلته **کېنئ**",
f: "taaso halta **kéneyy**",
e: "You sit there",
sub: "(one time, in one instance sit)"
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "وریژې **خوره**",
f: "wreejze **khorá**",
e: "Eat rice",
sub: "(in general, it's good for you)",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "وریژې **وخوره**",
f: "wreejze **óokhora**",
e: "Eat rice",
sub: "(one time)",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "د کلي عکسونه راته **لېږه**!",
f: "du kulee aksoona raa-ta **leGá**!",
e: "Send me pictures of the village!",
sub: "(send me pictures every once and awhile)",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "د کلي عکسونه راته **ولېږه**!",
f: "du kulee aksoona raa-ta **óoleGa**!",
e: "Send me pictures of the village!",
sub: "(send me a bunch of pictures in one clump, at one time)",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{
p: "تاسو هلته **کېنئ**",
f: "taaso halta **kenéy**",
e: "You sit there",
sub: "(in general, whenever you come)",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: "تاسو هلته **کېنئ**",
f: "taaso halta **kéney**",
e: "You sit there",
sub: "(one time, in one instance sit)",
},
])}
</Examples>
</td>
</tr>
</tbody>
</table>
</div>
Notice how the in the perfective form *the accent is always on the front* because it's based on the <Link to="/verbs/roots-and-stems/">perfective stem</Link>.
Notice how the in the perfective form _the accent is always on the front_ because it's based on the <Link to="/verbs/roots-and-stems/">perfective stem</Link>.
### Singular and Plural
You will notice there are only two <Link to="/verbs/verb-endings/#imperative-verb-endings">imperative endings</Link>:
- <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> - used for addressing a singular 2nd person <InlinePs opts={opts} ps={{ p: "ته", f: "tu", e: "you" }} />
- <InlinePs opts={opts} ps={{ p: "ـئ", f: "-eyy" }} /> - used for addressing a plural 2nd person <InlinePs opts={opts} ps={{ p: "تاسو", f: "taaso", e: "you" }} />, either because you're talking to a group of people, or you're being extra respectful with one person.
- <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> - used for addressing a singular
2nd person <InlinePs opts={opts} ps={{ p: "ته", f: "tu", e: "you" }} />
- <InlinePs opts={opts} ps={{ p: "ـئ", f: "-ey" }} /> - used for addressing a plural
2nd person <InlinePs opts={opts} ps={{ p: "تاسو", f: "taaso", e: "you" }} />,
either because you're talking to a group of people, or you're being extra
respectful with one person.
<div className="my-3" style={{ overflowX: "auto" }}>
<table className="table">
@ -181,18 +195,16 @@ You will notice there are only two <Link to="/verbs/verb-endings/#imperative-ver
<tbody>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{ p: "ته راځه!", f: "tu raadzá!", e: "You come!" }
])}
</Examples>
<Examples opts={opts}>
{psmd([{ p: "ته راځه!", f: "tu raadzá!", e: "You come!" }])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{ p: "تاسو راځئ!", f: "taaso radzéyy!", e: "You (pl.) come!" },
])}
</Examples>
<Examples opts={opts}>
{psmd([
{ p: "تاسو راځئ!", f: "taaso radzéy!", e: "You (pl.) come!" },
])}
</Examples>
</td>
</tr>
</tbody>
@ -205,21 +217,32 @@ You will notice there are only two <Link to="/verbs/verb-endings/#imperative-ver
## Negative Imperatives
**In the negative form of commands** (ie. *"Don't ____"*), **the aspect choice dissapears**. There is no imperfective/perfective option with negative imperatives, there's only one form.
**In the negative form of commands** (ie. _"Don't \_\_\_\_"_), **the aspect choice dissapears**. There is no imperfective/perfective option with negative imperatives, there's only one form.
<Formula name="Negative Imperative">
<InlinePs opts={opts} ps={{ p: "مه", f: "mú" }} /> + <Link to="/verbs/imperative-verbs/#imperfective-imperative">Imperfective Imperative</Link>
<InlinePs opts={opts} ps={{ p: "مه", f: "mú" }} /> +{" "}
<Link to="/verbs/imperative-verbs/#imperfective-imperative">
Imperfective Imperative
</Link>
</Formula>
With this form, you can't specify whether you're talking about about the action in a <i className="fas fa-camera" /> perfective or <i className="fas fa-video" /> imperfective way. You're just saying "don't do it!", either one time or in general.
<Examples opts={opts}>
{[
{ p: "مه راځه!", f: "mú raadza", e: "Don't come!" },
{ p: "وریژې مه خوره!", f: "wreejze mú khora!", e: "Don't eat rice!" },
{ p: "عکسونه راته مه لېږه!", f: "aksoona raa-ta mú leGa!", e: "Don't send me pictures!" },
{ p: "تاسو هلته مه کېنئ!", f: "taaso halta mú keneyy!", e: "Don't sit there!" },
]}
{[
{ p: "مه راځه!", f: "mú raadza", e: "Don't come!" },
{ p: "وریژې مه خوره!", f: "wreejze mú khora!", e: "Don't eat rice!" },
{
p: "عکسونه راته مه لېږه!",
f: "aksoona raa-ta mú leGa!",
e: "Don't send me pictures!",
},
{
p: "تاسو هلته مه کېنئ!",
f: "taaso halta mú keney!",
e: "Don't sit there!",
},
]}
</Examples>
Just like with the negative particle <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} /> that we used with other verb forms, the negative <InlinePs opts={opts} ps={{ p: "مه", f: "mú" }} /> marker also takes over the accent of the verb.
Just like with the negative particle <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} /> that we used with other verb forms, the negative <InlinePs opts={opts} ps={{ p: "مه", f: "mú" }} /> marker also takes over the accent of the verb.

View File

@ -3,30 +3,43 @@ title: Jussive and Blessings 🤲
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
defaultTextOptions as opts,
Examples,
InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
} from "@lingdocs/ps-react";
import {
Perfective,
Imperfective,
Servant,
MiniPronoun,
Perfective,
Imperfective,
Servant,
MiniPronoun,
} from "../../components/terms-links";
import Formula from "../../components/formula/Formula";
import Link from "../../components/Link";
import { BlockTerm, KidsSection, PerfectiveHead, VP } from "../../components/terms-links.tsx";
import {
BlockTerm,
KidsSection,
PerfectiveHead,
VP,
} from "../../components/terms-links.tsx";
import deCowboys from "./de-cowboys.jpg";
import deMuCowboysOk from "./de-mu-cowboys-ok.jpg";
import deMuCowboysNotOk from "./de-mu-cowboys-not-ok.jpg";
import psmd from "../../lib/psmd";
export const De = (props) => <InlinePs opts={opts}>{{ p: "دې", f: "de", e: props.e || undefined }}</InlinePs>;
export const MU = (props) => <InlinePs opts={opts}>{{ p: "مو", f: "mU", e: props.e || undefined }}</InlinePs>;
export const De = (props) => (
<InlinePs opts={opts}>
{{ p: "دې", f: "de", e: props.e || undefined }}
</InlinePs>
);
export const MU = (props) => (
<InlinePs opts={opts}>
{{ p: "مو", f: "mU", e: props.e || undefined }}
</InlinePs>
);
In Pashto the [jussive form](https://en.wikipedia.org/wiki/Jussive_mood) is used to make orders or commands directed towards the 3rd person. This is also used for blessings and curses.
@ -35,18 +48,18 @@ In English we would say something like "May he...", "Let them...", "May God..."
In Pashto you encounter phrases like this:
<Examples opts={opts}>
{[
{
p: "خدای دې خیر وکړي",
f: "khUdaay de kheyr ookRee",
e: "May God do what's good/beneficial",
},
{
p: "خدای دې خوشحاله لره",
f: "khUdaay de khosháala lará",
e: "May God have you happy",
},
]}
{[
{
p: "خدای دې خیر وکړي",
f: "khUdaay de khayr ookRee",
e: "May God do what's good/beneficial",
},
{
p: "خدای دې خوشحاله لره",
f: "khUdaay de khosháala lará",
e: "May God have you happy",
},
]}
</Examples>
There are a couple of questions that can confuse learners when they encounter these types of phrases:
@ -59,49 +72,51 @@ In this section, we'll explain how this all works.
<details>
<summary>Spoiler quick answer:</summary>
- *Basic form*: Jussive phrases are made using the jussive <De /> particle with subjunctive or present verbs.
- Verbs end in <InlinePs opts={opts} ps={{ p: "ـي", f: "ee" }} /> (like the first example above)
- *Exception*: when there's a conflict with another 2nd pers mini pronoun like <De />, we leave out the jussive <De /> marker and instead use the 2nd person imperative form.
- Verbs end in <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} /> (like the second example above)
- _Basic form_: Jussive phrases are made using the jussive <De /> particle with subjunctive or present verbs.
- Verbs end in <InlinePs opts={opts} ps={{ p: "ـي", f: "ee" }} /> (like the first example above)
- _Exception_: when there's a conflict with another 2nd pers mini pronoun like <De />, we leave out the jussive <De /> marker and instead use the 2nd person imperative form.
- Verbs end in <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} /> (like the second example above)
</details>
## The jussive دې form
<Formula>
jussive <De /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link> or <Link to="/verbs/subjunctive-verbs/">Subjunctive</Link> verb
jussive <De /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link> or <Link to="/verbs/subjunctive-verbs/">
Subjunctive
</Link> verb
</Formula>
The jussive <De /> is a particle that goes in the <Link to="/phrase-structure/blocks-and-kids/#the-kids-section">kids' section</Link>. And it is **not to be confused with the 2nd person <MiniPronoun /> <De />!**
<Examples opts={opts}>
{psmd([
{
p: "هغه دې راشي",
f: "hagha de ráashee",
e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb",
},
{
p: "را دې شي",
f: "ráa-de-shee",
e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb (shortened)",
},
{
p: "خدای دې شفا ورکړي",
f: "khUdaay de shifaa wárkRee",
e: "May God give him health",
sub: "jussive دې + subjunctive verb",
},
{
p: "خدای دې مونږ له مرضۍ نه ساتي",
f: "khUdaay de moonG la marizúy na saatée",
e: "May God keep us from sickness",
sub: "jussive دې + present verb",
},
])}
{psmd([
{
p: "هغه دې راشي",
f: "hagha de ráashee",
e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb",
},
{
p: "را دې شي",
f: "ráa-de-shee",
e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb (shortened)",
},
{
p: "خدای دې شفا ورکړي",
f: "khUdaay de shifaa wárkRee",
e: "May God give him health",
sub: "jussive دې + subjunctive verb",
},
{
p: "خدای دې مونږ له مرضۍ نه ساتي",
f: "khUdaay de moonG la marizúy na saatée",
e: "May God keep us from sickness",
sub: "jussive دې + present verb",
},
])}
</Examples>
Notice how you can use either:
@ -112,14 +127,14 @@ Notice how you can use either:
You can also use the <Link to="/equatives/other-equatives/#subjunctive-equative">subjunctive equative</Link>. For example:
<Examples opts={opts}>
{psmd([
{
p: "ټولو ته مبارک وي",
f: "Tolo ta mUbaarak wee",
e: "Congratulations to everyone (may it be blessed to everyone)",
sub: "jussive دې + subjunctive equative",
}
])}
{psmd([
{
p: "ټولو ته مبارک وي",
f: "Tolo ta mUbaarak wee",
e: "Congratulations to everyone (may it be blessed to everyone)",
sub: "jussive دې + subjunctive equative",
},
])}
</Examples>
## When it conflicts with the mini-pronoun دې
@ -129,24 +144,24 @@ Earlier we mentioned that this jussive particle <De /> is **not to be confused w
So what happens when we need to use both in a sentence?? They both go in the <Link to="/phrase-structure/blocks-and-kids/">kids' section</Link>, but we can't have two <De />'s in there. We can't ever say, "<InlinePs opts={opts} ps={{ p: "دې دې", f: "de de" }} />."
<div className="mb-3" style={{ maxWidth: "600px" }}>
<img
src={deCowboys}
alt={`دې particles as cowboys saying, "This town aint big enough for the two of us...`}
className="img-fluid"
/>
<img
src={deCowboys}
alt={`دې particles as cowboys saying, "This town aint big enough for the two of us...`}
className="img-fluid"
/>
</div>
First let's look at an example without this دې conflict:
<Examples opts={opts}>
{psmd([
{
p: "خدای دې تا وبخښي",
f: "khUdaay de taa óobakhxee",
e: "May God forgive you",
sub: "jussive دې + subjunctive",
}
])}
{psmd([
{
p: "خدای دې تا وبخښي",
f: "khUdaay de taa óobakhxee",
e: "May God forgive you",
sub: "jussive دې + subjunctive",
},
])}
</Examples>
In this example <InlinePs opts={opts}>{{ p: "تا", f: "taa", e: "you" }}</InlinePs> is the <Servant /> so we can <Link to="/phrase-structure/shortening-vps/">🪄 shrink it</Link> into a <MiniPronoun /> <De />.
@ -154,225 +169,219 @@ In this example <InlinePs opts={opts}>{{ p: "تا", f: "taa", e: "you" }}</Inlin
But now we've got the problem of the two <InlinePs opts={opts}>{{ p: "دې", f: "de", e: "you" }}</InlinePs> particles. We can't say this:
<Examples opts={opts}>
{psmd([
{
p: "❌ خدای دې دې وبخښي ❌",
f: "❌ khUdaay de de óobakhxee ❌",
e: "May God forgive you",
},
])}
{psmd([
{
p: "❌ خدای دې دې وبخښي ❌",
f: "❌ khUdaay de de óobakhxee ❌",
e: "May God forgive you",
},
])}
</Examples>
So here's the solution in Pashto... 🥁 Instead we **get rid of the jussive <De /> and use a 2nd person singular <Link to="/verbs/imperative-verbs/">imperative</Link> form.**
<Examples opts={opts}>
{psmd([
{
p: "خدای دې وبخښه",
f: "khUdaay de óobakhxa",
e: "May God forgive you",
sub: "دې as a *mini-pronoun* + imperative verb",
},
])}
{psmd([
{
p: "خدای دې وبخښه",
f: "khUdaay de óobakhxa",
e: "May God forgive you",
sub: "دې as a *mini-pronoun* + imperative verb",
},
])}
</Examples>
This is interesting, because normally we only use that imperative form when making commands to a **a 2nd person singular** (ie. "you"), but because we lost the ability to use the jussive <De />, we are using to make a *3rd person jussive phrase*.
This is interesting, because normally we only use that imperative form when making commands to a **a 2nd person singular** (ie. "you"), but because we lost the ability to use the jussive <De />, we are using to make a _3rd person jussive phrase_.
Here are more examples of how we use this to resolve the <InlinePs opts={opts}>{{ p: "دې دې", f: "de de" }}</InlinePs> conflict:
<Examples opts={opts}>
{psmd([
{
p: "خدای دې تا له مرضۍ نه ساتي",
f: "khUdaay de taa la marazúy na saatée",
e: "May God keep you from sickness",
sub: "jussive دې + full تا pronoun + present verb",
},
{
p: "❌ خدای دې دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay de de la marazúy na saatée ❌",
e: "May God keep you from sickness",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
},
{
p: "خدای دې له مرضۍ نه ساته",
f: "khUdaa de la marazúy na saatá",
e: "May God keep you from sickness",
sub: "mini-pronoun دې + imperfective imperative",
},
{
p: "الله دې تا په خیر ورسوي",
f: "allah de taa pu kheyr óorasawee",
e: "May God deliver you safely.",
sub: "jussive دې + full تا pronoun + subjunctive verb",
},
{
p: "❌ الله دې دې په خیر ورسوي ❌",
f: "❌ allah de de pu kheyr óorasawee ❌",
e: "May God deliver you safely.",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
},
{
p: "الله دې په خیر ورسوه",
f: "allah de pu kheyr óorasawa",
e: "May God deliver you safely.",
sub: "mini-pronoun دې + perfective imperative",
},
])}
{psmd([
{
p: "خدای دې تا له مرضۍ نه ساتي",
f: "khUdaay de taa la marazúy na saatée",
e: "May God keep you from sickness",
sub: "jussive دې + full تا pronoun + present verb",
},
{
p: "❌ خدای دې دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay de de la marazúy na saatée ❌",
e: "May God keep you from sickness",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
},
{
p: "خدای دې له مرضۍ نه ساته",
f: "khUdaa de la marazúy na saatá",
e: "May God keep you from sickness",
sub: "mini-pronoun دې + imperfective imperative",
},
{
p: "الله دې تا په خیر ورسوي",
f: "allah de taa pu khayr óorasawee",
e: "May God deliver you safely.",
sub: "jussive دې + full تا pronoun + subjunctive verb",
},
{
p: "❌ الله دې دې په خیر ورسوي ❌",
f: "❌ allah de de pu khayr óorasawee ❌",
e: "May God deliver you safely.",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
},
{
p: "الله دې په خیر ورسوه",
f: "allah de pu khayr óorasawa",
e: "May God deliver you safely.",
sub: "mini-pronoun دې + perfective imperative",
},
])}
</Examples>
Remember that mini-pronouns can come from either shrunken servants or shrunken possessives. The same thing happens when resolving conflicts with <De /> when it comes from a shrunken possessive.
<Examples opts={opts}>
{psmd([
{
p: "خدای دې ستا ارمان پوره کړي",
f: "khUdaay de staa armáan póora kRee",
e: "May God fulfill your desire",
sub: "jussive دې + subjunctive",
},
{
p: "خدای دې ارمان پوره کړه",
f: "khUdaay de armáan póora kRa",
e: "May God fulfill your desire",
sub: "mini-pronoun دې + imperfective imperative",
},
{
p: "ستا زوی دې لوی شي",
f: "staa zooy de looy shee",
e: "May your son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی دې لوی شه",
f: "zooy de looy sha",
e: "May your son grow big",
sub: "mini-pronoun دې + imperfective imperative",
},
])}
{psmd([
{
p: "خدای دې ستا ارمان پوره کړي",
f: "khUdaay de staa armáan póora kRee",
e: "May God fulfill your desire",
sub: "jussive دې + subjunctive",
},
{
p: "خدای دې ارمان پوره کړه",
f: "khUdaay de armáan póora kRa",
e: "May God fulfill your desire",
sub: "mini-pronoun دې + imperfective imperative",
},
{
p: "ستا زوی دې لوی شي",
f: "staa zooy de looy shee",
e: "May your son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی دې لوی شه",
f: "zooy de looy sha",
e: "May your son grow big",
sub: "mini-pronoun دې + imperfective imperative",
},
])}
</Examples>
## When it conflicts with the mini-pronoun مو
Things get a little more interesting when the jussive <De /> clashes with the <MiniPronoun /> <MU />. What happens depends on whether <MU /> is:
- <MU e="us/our - 1st person plural" />, or
- <MU e="you/your - 2nd person plural" />
- <MU e="us/our - 1st person plural" />, or
- <MU e="you/your - 2nd person plural" />
### With مو as 2nd person plural
<div className="mb-3" style={{ maxWidth: "600px" }}>
<img
src={deMuCowboysNotOk}
className="img-fluid"
/>
<img src={deMuCowboysNotOk} className="img-fluid" />
</div>
Just like you can't say <InlinePs opts={opts}>{{ p: "دې دې", f: "de de" }}</InlinePs>, you also can't have the jussive <De /> together with the second person plural <MU e="you, your" />.
<Examples opts={opts}>
{psmd([
{
p: "❌ خدای مو دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay mU de la marazúy na saatée ❌",
e: "May God keep you (pl.) from sickness",
sub: "jussive دې + second pers. mini-pronoun مو",
},
{
p: "خدای مو له مرضۍ نه ساته",
f: "khUdaa mU la marazúy na saatá",
e: "May God keep you (pl.) from sickness",
sub: "second pers. pl. mini-pronoun مو + imperfective imperative",
},
{
p: "❌ الله مو دې په خیر ورسوي ❌",
f: "❌ allah mU de pu kheyr óorasawee ❌",
e: "May God deliver you safely.",
sub: "jussive دې + second pers. mini-pronoun مو",
},
{
p: "الله مو په خیر ورسوه",
f: "allah mU pu kheyr óorasawa",
e: "May God deliver you (pl.) safely.",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
{
p: "خدای دې ستاسو ارمان پوره کړي",
f: "khUdaay de staaso armáan póora kRee",
e: "May God fulfill your (pl.) desire",
sub: "jussive دې + subjunctive",
},
{
p: "خدای مو ارمان پوره کړه",
f: "khUdaay mU armáan póora kRa",
e: "May God fulfill your (pl.) desire",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
{
p: "ستاسو زوی دې لوی شي",
f: "staaso zooy de looy shee",
e: "May your (pl.) son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی مو لوی شه",
f: "zooy mU looy sha",
e: "May your son grow big",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
])}
{psmd([
{
p: "❌ خدای مو دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay mU de la marazúy na saatée ❌",
e: "May God keep you (pl.) from sickness",
sub: "jussive دې + second pers. mini-pronoun مو",
},
{
p: "خدای مو له مرضۍ نه ساته",
f: "khUdaa mU la marazúy na saatá",
e: "May God keep you (pl.) from sickness",
sub: "second pers. pl. mini-pronoun مو + imperfective imperative",
},
{
p: "❌ الله مو دې په خیر ورسوي ❌",
f: "❌ allah mU de pu khayr óorasawee ❌",
e: "May God deliver you safely.",
sub: "jussive دې + second pers. mini-pronoun مو",
},
{
p: "الله مو په خیر ورسوه",
f: "allah mU pu khayr óorasawa",
e: "May God deliver you (pl.) safely.",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
{
p: "خدای دې ستاسو ارمان پوره کړي",
f: "khUdaay de staaso armáan póora kRee",
e: "May God fulfill your (pl.) desire",
sub: "jussive دې + subjunctive",
},
{
p: "خدای مو ارمان پوره کړه",
f: "khUdaay mU armáan póora kRa",
e: "May God fulfill your (pl.) desire",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
{
p: "ستاسو زوی دې لوی شي",
f: "staaso zooy de looy shee",
e: "May your (pl.) son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی مو لوی شه",
f: "zooy mU looy sha",
e: "May your son grow big",
sub: "second pers. pl. mini-pronoun مو + perfective imperative",
},
])}
</Examples>
### with مو as 1st person plural
<div className="mb-3" style={{ maxWidth: "600px" }}>
<img
src={deMuCowboysOk}
className="img-fluid"
/>
<img src={deMuCowboysOk} className="img-fluid" />
</div>
But if the is a 1st person plural pronoun, then it *can* co-exist with the jussive <De />.
But if the is a 1st person plural pronoun, then it _can_ co-exist with the jussive <De />.
<Examples opts={opts}>
{psmd([
{
p: "خدای دې مو له مرضۍ نه ساتي",
f: "khUdaa de mU la marazúy na saatée",
e: "May God keep us from sickness",
sub: "first pers. pl. mini-pronoun مو + present",
},
{
p: "الله دې مو په خیر ورسوي",
f: "allah de mU pu kheyr óorasawee",
e: "May God deliver use safely.",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "خدای دې زمونږ ارمان پوره کړي",
f: "khUdaay de zmoonG armáan póora kRee",
e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "خدای دې مو ارمان پوره کړي",
f: "khUdaay de mU armáan póora kRee",
e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "زمونږ زوی دې لوی شي",
f: "zmoonG zooy de looy shee",
e: "May our son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی دې مو لوی شي",
f: "zooy de mU looy shee",
e: "May our son grow big",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
])}
{psmd([
{
p: "خدای دې مو له مرضۍ نه ساتي",
f: "khUdaa de mU la marazúy na saatée",
e: "May God keep us from sickness",
sub: "first pers. pl. mini-pronoun مو + present",
},
{
p: "الله دې مو په خیر ورسوي",
f: "allah de mU pu khayr óorasawee",
e: "May God deliver use safely.",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "خدای دې زمونږ ارمان پوره کړي",
f: "khUdaay de zmoonG armáan póora kRee",
e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "خدای دې مو ارمان پوره کړي",
f: "khUdaay de mU armáan póora kRee",
e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
{
p: "زمونږ زوی دې لوی شي",
f: "zmoonG zooy de looy shee",
e: "May our son grow big",
sub: "jussive دې + subjunctive",
},
{
p: "زوی دې مو لوی شي",
f: "zooy de mU looy shee",
e: "May our son grow big",
sub: "first pers. pl. mini-pronoun مو + subjunctive",
},
])}
</Examples>
Notice for all these examples we never use the 2nd person imperative form, because we are still able to use the jussive <De />.

View File

@ -3,58 +3,113 @@ title: Negatives
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import Link from "../../components/Link";
import { BlockTerm, KidsSection, PerfectiveHead, VP } from "../../components/terms-links.tsx";
import {
BlockTerm,
PerfectiveHead,
VP,
} from "../../components/terms-links.tsx";
import psmd from "../../lib/psmd";
To make verbs negative, we use a negative <BlockTerm />.
- <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "not" }} />
- <InlinePs opts={opts} ps={{ p: "مه", f: "mú", e: "don't" }} /> (for imperative verbs)
- <InlinePs opts={opts} ps={{ p: "مه", f: "mú", e: "don't" }} /> (for imperative
verbs)
### Where the negative goes
The negative goes in front of the verb block at the end of a <VP />.
<Examples opts={opts}>
{psmd([
{ p: "زه ښار ته نه ځم", f: "zu xaar ta nú dzum", e: "I'm not going to the city" },
{ p: "هغه عربي نه زده کوي", f: "haghá arabee nu zda kawee", e: "He's not learning Arabic" },
])}
{psmd([
{
p: "زه ښار ته نه ځم",
f: "zu xaar ta nú dzum",
e: "I'm not going to the city",
},
{
p: "هغه عربي نه زده کوي",
f: "haghá arabee nu zda kawee",
e: "He's not learning Arabic",
},
])}
</Examples>
With the perfective roots and stems, if we have a <PerfectiveHead /> of <InlinePs opts={opts} ps={{ p: "و", f: "oo" }} /> or <InlinePs opts={opts} ps={{ p: "وا", f: "waa" }} />, the <InlinePs opts={opts} ps={{ p: "نه", f: "nú" , e: "not" }} /> always goes *after* the <PerfectiveHead /> block.
With the perfective roots and stems, if we have a <PerfectiveHead /> of <InlinePs opts={opts} ps={{ p: "و", f: "oo" }} /> or <InlinePs opts={opts} ps={{ p: "وا", f: "waa" }} />, the <InlinePs opts={opts} ps={{ p: "نه", f: "nú" , e: "not" }} /> always goes _after_ the <PerfectiveHead /> block.
<Examples opts={opts}>
{psmd([
{ p: "زه ورسره وغږېدم", f: "zu wăr-sara óoghuGedum", e: "I talked with him" },
{ p: "زه ورسره ونه غږېدم", f: "zu wăr-sara oo-nú ghuGedum", e: "I talked with him", sub: "negative block always goes after the perfective head" },
{ p: "ما کتابچه واخسته", f: "maa kitaabchaa wáakhista", e: "I took the booklet" },
{ p: "ما کتابچه وانه خسته", f: "maa kitaabchaa wáa-nu khista", e: "I didn't take the booklet", sub: "negative block always goes after the perfective head" },
])}
{psmd([
{
p: "زه ورسره وغږېدم",
f: "zu wăr-sara óoghuGedum",
e: "I talked with him",
},
{
p: "زه ورسره ونه غږېدم",
f: "zu wăr-sara oo-nú ghuGedum",
e: "I talked with him",
sub: "negative block always goes after the perfective head",
},
{
p: "ما کتابچه واخسته",
f: "maa kitaabchaa wáakhista",
e: "I took the booklet",
},
{
p: "ما کتابچه وانه خسته",
f: "maa kitaabchaa wáa-nu khista",
e: "I didn't take the booklet",
sub: "negative block always goes after the perfective head",
},
])}
</Examples>
But if it's one of those verbs that don't take the <InlinePs opts={opts} ps={{ p: "و", f: "oo" }} /> prefix where the <PerfectiveHead /> is made from splitting off the first syllable of the word, you can put the negative after the perfective head *or* before it.
But if it's one of those verbs that don't take the <InlinePs opts={opts} ps={{ p: "و", f: "oo" }} /> prefix where the <PerfectiveHead /> is made from splitting off the first syllable of the word, you can put the negative after the perfective head _or_ before it.
<Examples opts={opts}>
{psmd([
{ p: "هغه کور ته لاړه", f: "haghá kor ta láaRa", e: "She went home" },
{ p: "هغه کور ته لانه ړه", f: "haghá kor ta laa-nú-Ra", e: "She didn't go home", sub: "negative block after the perfective head" },
{ p: "هغه کور ته نه لانه ړه", f: "haghá kor ta nú laaRa", e: "She didn't go home", sub: "negative block before the perfective head" },
{ p: "زه دلته کېنم؟", f: "zu dălta kenúm?", e: "Do I sit here? (present)" },
{ p: "زه دلته کېنم؟", f: "zu dălta kénum?", e: "Should I sit here? (subjunctive)" },
{ p: "زه دلته نه کېنم؟", f: "zu dălta nú kenum?", e: "Do I not sit here? (present)", sub: "no perfective head, negative block before verb block" },
{ p: "زه دلته نه کېنم؟", f: "zu dălta nú kenum?", e: ":Should I not sit here? (subjunctive)", sub: "negative block before the perfective head" },
{ p: "زه دلته نه کېنه نم؟", f: "zu dălta ke-nú num?", e: "Should I not sit here? (subjunctive)", subj: "negative block after the perfective head" },
])}
{psmd([
{ p: "هغه کور ته لاړه", f: "haghá kor ta láaRa", e: "She went home" },
{
p: "هغه کور ته لانه ړه",
f: "haghá kor ta laa-nú-Ra",
e: "She didn't go home",
sub: "negative block after the perfective head",
},
{
p: "هغه کور ته نه لانه ړه",
f: "haghá kor ta nú laaRa",
e: "She didn't go home",
sub: "negative block before the perfective head",
},
{ p: "زه دلته کېنم؟", f: "zu dălta kenúm?", e: "Do I sit here? (present)" },
{
p: "زه دلته کېنم؟",
f: "zu dălta kénum?",
e: "Should I sit here? (subjunctive)",
},
{
p: "زه دلته نه کېنم؟",
f: "zu dălta nú kenum?",
e: "Do I not sit here? (present)",
sub: "no perfective head, negative block before verb block",
},
{
p: "زه دلته نه کېنم؟",
f: "zu dălta nú kenum?",
e: ":Should I not sit here? (subjunctive)",
sub: "negative block before the perfective head",
},
{
p: "زه دلته نه کېنه نم؟",
f: "zu dălta ke-nú num?",
e: "Should I not sit here? (subjunctive)",
subj: "negative block after the perfective head",
},
])}
</Examples>
Notice how with verbs like <InlinePs opts={opts} ps={{ p: "کېناستل", f: "kenaastúl", e: "" }} /> the only thing indicating a difference between the perfective and imperfective forms is the accent, and therefore when we add the <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "" }} /> we have no way of telling if a verb was perfective or imperfective, because the <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "" }} /> took over the accent.
@ -64,17 +119,33 @@ With stative compounds the complement and verb are considered one or two blocks
With the <i className="fas fa-video" /> **imperfective** aspect, the complement and verb are fused together and considered one indivisable block, so the negative goes before that whole verb block.
<Examples opts={opts}>
{psmd([
{ p: "ما پښتو نه زده کوله", f: "maa puxto nú zda kawula", e: "I wasn't learning Pashto" },
{ p: "هغه ما نه ستړی کوي", f: "hagha maa nú stuRey kawee", e: "He's not making me (m.) tired" },
])}
{psmd([
{
p: "ما پښتو نه زده کوله",
f: "maa puxto nú zda kawula",
e: "I wasn't learning Pashto",
},
{
p: "هغه ما نه ستړی کوي",
f: "hagha maa nú stuRay kawee",
e: "He's not making me (m.) tired",
},
])}
</Examples>
In the <i className="fas fa-camera" /> **perfective** aspect, however the complement breaks out and acts as a <PerfectiveHead />, so the negative goes after it.
<Examples opts={opts}>
{psmd([
{ p: "ما پښتو زده نه کړه", f: "maa puxto zda nú kRa", e: "I didn't learn Pashto" },
{ p: "چې هغه ما نه ستړی نه کړي", f: "che haghá maa stuRey nú kRee", e: "I hope he doesn't make me (m.) tired" },
])}
</Examples>
{psmd([
{
p: "ما پښتو زده نه کړه",
f: "maa puxto zda nú kRa",
e: "I didn't learn Pashto",
},
{
p: "چې هغه ما نه ستړی نه کړي",
f: "che haghá maa stuRay nú kRee",
e: "I hope he doesn't make me (m.) tired",
},
])}
</Examples>

File diff suppressed because it is too large Load Diff

View File

@ -3,70 +3,73 @@ title: Past Tense 😱
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import { KidsSection, VP, KingIcon, ServantIcon } from "../../components/terms-links";
import {
KidsSection,
KingIcon,
ServantIcon,
} from "../../components/terms-links";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
import Formula from "../../components/formula/Formula";
import verbTreePastPresent from "./verb-tree-past-present.svg";
import verbTreeImperfectivePerfective from "./verb-tree-imperfective-perfective.svg";
import simplePast from "./simple-past-in-reality.svg";
import continuousPast from "./continuous-past-in-reality.svg";
import habitualSimplePast from "./habitual-simple-past.svg";
import habitualContinuousPast from "./habitual-continuous-past.svg";
import unoReverseMeme from "./uno-reverse-meme.jpg";
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import {
intransitiveImperfectivePastVerbGame1,
intransitiveImperfectivePastVerbGame2,
intransitivePerfectivePastVerbGame1,
intransitivePerfectivePastVerbGame2,
transitiveImperfectivePastVerbGame1,
transitiveImperfectivePastVerbGame2,
transitivePerfectivePastVerbGame1,
transitivePerfectivePastVerbGame2,
habitualPastVerbGame1,
habitualPastVerbGame2,
intransitiveImperfectivePastVerbGame1,
intransitiveImperfectivePastVerbGame2,
intransitivePerfectivePastVerbGame1,
intransitivePerfectivePastVerbGame2,
transitiveImperfectivePastVerbGame1,
transitiveImperfectivePastVerbGame2,
transitivePerfectivePastVerbGame1,
transitivePerfectivePastVerbGame2,
habitualPastVerbGame1,
habitualPastVerbGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
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.
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.
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={verbTreePastPresent} alt="" className="img-fluid" />
<img src={verbTreePastPresent} alt="" className="img-fluid" />
</div>
And when we use these roots we will have to choose between the <i className="fas fa-video" /> imperfective and <i className="fas fa-camera" /> perfective aspects on the left and right sides.
<div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" />
<img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" />
</div>
We'll use the **imperfective and perfective roots** to make two past tense verb forms:
1. The simple (<i className="fas fa-camera" /> perfective) past
- one time, complete actions
2. The continuous (<i className="fas fa-video" /> imperfective) past
- continuous, ongoing, unfinished in the past
- one time, complete actions
2. The continuous (<i className="fas fa-video" /> imperfective) past
- continuous, ongoing, unfinished in the past
Then, we will see something very simple that, because it's often unknown or misunderstood, really trips people up when learning Pashto. <Link to="/phrase-structure/vp/">The phrase structure totally changes depending on what type of verb we are using</Link>. The whole setup of a sentence will change depending on whether we're using:
Then, we will see something very simple that, because it's often unknown or misunderstood, really trips people up when learning Pashto. <Link to="/phrase-structure/vp/">The phrase structure totally changes depending on what type of verb we are using</Link>. The whole setup of a sentence will change depending on whether we're using:
1. Intransitive verbs
- verbs with no object
- verbs with no object
2. Transitive verbs
- verbs that have an object
- verbs that have an object
**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!
## Past tense with intransitive verbs 😀
We'll start by looking at the *intransitive* verbs in the past tense because it's simpler. We have no object, the subject is the king <KingIcon /> that controls the verb, and there's no weird inflection going on.
We'll start by looking at the _intransitive_ verbs in the past tense because it's simpler. We have no object, the subject is the king <KingIcon /> that controls the verb, and there's no weird inflection going on.
### Simple Past
@ -75,30 +78,30 @@ The simple past tense is used for **single, one-time, complete actions**. It's a
It uses the <i className="fas fa-camera" /> **perfective root** because it's looking at the event in the perfective aspect, as a complete whole.
<div className="text-center">
<img src={simplePast} alt="" className="img-fluid" />
<img src={simplePast} alt="" className="img-fluid" />
</div>
<Formula>
Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula>
<BasicVerbShowCase opts={opts} tense="perfectivePast" />
Notice how when you can use the *short or the long* version of the roots.
Notice how when you can use the _short or the long_ version of the roots.
##### A special use of the simple past
The simple past tense is also used with <InlinePs opts={opts} ps={{ p: "چې...", f: "che..." }} /> clauses to talk about **if/when something happens in the future**.
<Examples opts={opts}>
{psmd([
{
p: "چې ستا ملګری **پیدا شو**، نو ما خبر کړه.",
f: "ku staa malgúrey **peydaa sho**, no maa khabur kRa.",
e: "If/when you friend shows up, let me know.",
},
])}
{psmd([
{
p: "چې ستا ملګری **پیدا شو**، نو ما خبر کړه.",
f: "ku staa malgúray **paydaa sho**, no maa khabur kRa.",
e: "If/when you friend shows up, let me know.",
},
])}
</Examples>
<GameDisplay record={intransitivePerfectivePastVerbGame1} />
@ -112,14 +115,14 @@ The continuous past tense is used for:
- actions that were ongoing, in progress or repeated in the past
- actions that were going to happen (but didn't)
- actions that "would" happen
- as in they *would* happen *if* ...
- or as in they would happen regularly/habitually in the past
- as in they _would_ happen _if_ ...
- or as in they would happen regularly/habitually in the past
The continuous past uses the <i className="fas fa-video" /> **imperfective root** because it's looking at the event in the imperfective aspect, and seeing the action as in progress, ongoing, or incompleted. It's often used to set the background for other events, as in: <InlinePs opts={opts} ps={{ p: "زه کور ته تلم چې...", f: "zu kor ta tlum che...", e: "I was going home when..." }} />
<Formula>
Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula>
<BasicVerbShowCase opts={opts} tense="imperfectivePast" />
@ -133,7 +136,7 @@ The continuous past uses the <i className="fas fa-video" /> **imperfective root*
Here's where things get interesting. **With past tense transitive verbs, the roles of king and servant are reversed!** With past tense transitive verbs in Pashto:
- The **object** is the **king** <KingIcon /> of the phrase
- The *object* commands the verb!
- The _object_ commands the verb!
- The **subject** is the **servant** <ServantIcon /> of the phrase
Also, another weird thing that happens is that the **subject** is inflected.
@ -142,7 +145,11 @@ Also, another weird thing that happens is that the **subject** is inflected.
- The **object** does NOT get inflected
<div className="text-center mb-4">
<img src={unoReverseMeme} alt="uno reverse meme with pashto transitive past tense" className="img-fluid" />
<img
src={unoReverseMeme}
alt="uno reverse meme with pashto transitive past tense"
className="img-fluid"
/>
</div>
This isn't just some insanity unique to Pashto. In linguistics it's known as [ergative alignment](https://en.wikipedia.org/wiki/Ergative%E2%80%93absolutive_alignment). And in Pashto this seemingly "backwards" <Link to="/phrase-structure/vp/">phrase structure</Link> hits us whenever we use a past tense transitive verb.
@ -152,32 +159,272 @@ The tenses (simple and continous past) stay the same and the formulas for making
### Examples with simple past
<Formula>
Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula>
<EditableVPEx opts={opts}>
{
{"blocks":[{"key":0.03311699983526872,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.9335532893306246,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.03311699983526872,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.9335532893306246,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
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.03311699983526872,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.9335532893306246,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":10,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.03311699983526872,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.9335532893306246,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 10, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts} length="long">
{
{"blocks":[{"key":0.021807382558673538,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812881,"i":11709,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},"gender":"masc","genderCanChange":true,"number":"plural","numberCanChange":true,"adjectives":[]}}}},{"key":0.03701805628286148,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815399,"i":14483,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.021807382558673538,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11709,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "masc",
genderCanChange: true,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
},
{
key: 0.03701805628286148,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527815399,
i: 14483,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts} length="long">
{
{"blocks":[{"key":0.7215647271503056,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":3,"distance":"far"}}}},{"key":0.5243897934182491,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812564,"i":6538,"p":"ډوډۍ","f":"DoDúy","g":"DoDuy","e":"bread, food, meal","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812790,"i":5795,"p":"خوړل","f":"khoRul","g":"khoRul","e":"to eat, to bite","c":"v. trans.","psp":"خور","psf":"khor","tppp":"خوړ","tppf":"khoR","ec":"eat,eats,eating,ate,eaten"}},"verbTense":"perfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.7215647271503056,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 3, distance: "far" },
},
},
},
{
key: 0.5243897934182491,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812564,
i: 6538,
p: "ډوډۍ",
f: "DoDúy",
g: "DoDuy",
e: "bread, food, meal",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812790,
i: 5795,
p: "خوړل",
f: "khoRul",
g: "khoRul",
e: "to eat, to bite",
c: "v. trans.",
psp: "خور",
psf: "khor",
tppp: "خوړ",
tppf: "khoR",
ec: "eat,eats,eating,ate,eaten",
},
},
verbTense: "perfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<GameDisplay record={transitivePerfectivePastVerbGame1} />
@ -187,32 +434,272 @@ The tenses (simple and continous past) stay the same and the formulas for making
### Examples with continous past
<Formula>
Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula>
<EditableVPEx opts={opts} long>
{
{"blocks":[{"key":0.03311699983526872,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.9335532893306246,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":2,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.03311699983526872,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.9335532893306246,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 2, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts} long>
{
{"blocks":[{"key":0.03311699983526872,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}},{"key":0.9335532893306246,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":10,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812275,"i":11610,"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":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":true,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.03311699983526872,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
{
key: 0.9335532893306246,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 10, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812275,
i: 11610,
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: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: true,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts} long>
{
{"blocks":[{"key":0.021807382558673538,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812881,"i":11709,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"},"gender":"masc","genderCanChange":true,"number":"plural","numberCanChange":true,"adjectives":[]}}}},{"key":0.03701805628286148,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":0,"distance":"far"}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527815399,"i":14483,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"}},"verbTense":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.021807382558673538,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812881,
i: 11709,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "masc",
genderCanChange: true,
number: "plural",
numberCanChange: true,
adjectives: [],
},
},
},
},
{
key: 0.03701805628286148,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 0, distance: "far" },
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527815399,
i: 14483,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
},
verbTense: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<EditableVPEx opts={opts} long>
{
{"blocks":[{"key":0.7215647271503056,"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person":3,"distance":"far"}}}},{"key":0.5243897934182491,"block":{"type":"objectSelection","selection":{"type":"NP","selection":{"type":"noun","entry":{"ts":1527812564,"i":6538,"p":"ډوډۍ","f":"DoDúy","g":"DoDuy","e":"bread, food, meal","c":"n. f."},"gender":"fem","genderCanChange":false,"number":"singular","numberCanChange":true,"adjectives":[]}}}}],"verb":{"type":"verb","verb":{"entry":{"ts":1527812790,"i":5795,"p":"خوړل","f":"khoRul","g":"khoRul","e":"to eat, to bite","c":"v. trans.","psp":"خور","psf":"khor","tppp":"خوړ","tppf":"khoR","ec":"eat,eats,eating,ate,eaten"}},"verbTense":"imperfectivePast","perfectTense":"presentPerfect","imperativeTense":"imperfectiveImperative","tenseCategory":"basic","transitivity":"transitive","isCompound":false,"voice":"active","negative":false,"canChangeTransitivity":false,"canChangeVoice":true,"canChangeStatDyn":false},"form":{"removeKing":false,"shrinkServant":false}}
}
{{
blocks: [
{
key: 0.7215647271503056,
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: 3, distance: "far" },
},
},
},
{
key: 0.5243897934182491,
block: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812564,
i: 6538,
p: "ډوډۍ",
f: "DoDúy",
g: "DoDuy",
e: "bread, food, meal",
c: "n. f.",
},
gender: "fem",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
],
verb: {
type: "verb",
verb: {
entry: {
ts: 1527812790,
i: 5795,
p: "خوړل",
f: "khoRul",
g: "khoRul",
e: "to eat, to bite",
c: "v. trans.",
psp: "خور",
psf: "khor",
tppp: "خوړ",
tppf: "khoR",
ec: "eat,eats,eating,ate,eaten",
},
},
verbTense: "imperfectivePast",
perfectTense: "presentPerfect",
imperativeTense: "imperfectiveImperative",
tenseCategory: "basic",
transitivity: "transitive",
isCompound: false,
voice: "active",
negative: false,
canChangeTransitivity: false,
canChangeVoice: true,
canChangeStatDyn: false,
},
form: { removeKing: false, shrinkServant: false },
}}
</EditableVPEx>
<GameDisplay record={transitiveImperfectivePastVerbGame1} />
@ -221,31 +708,43 @@ The tenses (simple and continous past) stay the same and the formulas for making
## Habitual Past Tenses
You can add a <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> to either the simple or continuous past to talk about a <strong>habitually recurring action in the past</strong>. (Remember the <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> always goes in the <KidsSection />.) The difference between the two habitual tenses *is slight*, and depends on how we view the events.
You can add a <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> to either the simple or continuous past to talk about a <strong>habitually recurring action in the past</strong>. (Remember the <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> always goes in the <KidsSection />.) The difference between the two habitual tenses _is slight_, and depends on how we view the events.
- Habitual Simple Past <i className="fas fa-camera" />
- an event that occured and finished habitually/repeatedly
- an event that occured and finished habitually/repeatedly
- Habitual Continuous Past <i className="fas fa-video" />
- an event that happened habitually/repeatedly as a process or ongoing activity
- an event that happened habitually/repeatedly as a process or ongoing activity
### Habitual Simple Past
With the habitual simple past (AKA habitual perfective past), we are talking about an action that was habitually repeated in the past, but we look at each event as a complete action, kind of like recurring snapshots taken with a camera. <i className="fas fa-camera" />
<div className="text-center">
<img src={habitualSimplePast} alt="" className="img-fluid" />
<img src={habitualSimplePast} alt="" className="img-fluid" />
</div>
<Formula>
به - ba +{` `}
<Link to="/verbs/past-verbs/#simple-past-i-classnamefas-fa-camera-">simple past</Link>
به - ba +{` `}
<Link to="/verbs/past-verbs/#simple-past-i-classnamefas-fa-camera-">
simple past
</Link>
</Formula>
<Examples opts={opts}>
{[
{ p: "ما به ناوخته ډوډۍ وخوړله", f: "maa ba naawakhta DoDuy óokhoRula", e: "I would eat late", sub: "I would repeatedly/habitually eat my meals at a late time - thinking of eating the meal as a complete event that got done" },
{ p: "مونږ به دلته کېناستو", f: "moonG ba dalta kénaastoo", e: "We would sit down here", sub: "We would repeatedly/habitually sit down at this spot - thinking of the sitting down as a one-time action we did each time" }
]}
{[
{
p: "ما به ناوخته ډوډۍ وخوړله",
f: "maa ba naawakhta DoDuy óokhoRula",
e: "I would eat late",
sub: "I would repeatedly/habitually eat my meals at a late time - thinking of eating the meal as a complete event that got done",
},
{
p: "مونږ به دلته کېناستو",
f: "moonG ba dalta kénaastoo",
e: "We would sit down here",
sub: "We would repeatedly/habitually sit down at this spot - thinking of the sitting down as a one-time action we did each time",
},
]}
</Examples>
### Habitual Continuous Past
@ -253,32 +752,50 @@ With the habitual simple past (AKA habitual perfective past), we are talking abo
With the habitual continuous past (AKA habitual imperfective past), we are talking about an action that was habitually repeated in the past, but we look at each event as an activity that was ongoing or happening, kind of like a a collection of video clips. <i className="fas fas-video" />
<div className="text-center">
<img src={habitualContinuousPast} alt="" className="img-fluid" />
<img src={habitualContinuousPast} alt="" className="img-fluid" />
</div>
<Formula>
به - ba +{` `}
<Link to="/verbs/past-verbs/#continuous-past-i-classnamefas-fa-video-">continuous past</Link>
به - ba +{` `}
<Link to="/verbs/past-verbs/#continuous-past-i-classnamefas-fa-video-">
continuous past
</Link>
</Formula>
<Examples opts={opts}>
{[
{ p: "ما به ناوخته ډوډۍ خوړله", f: "maa ba naawakhta DoDuy khoRúla", e: "I would eat late", sub: "I would repeatedly/habitually eat my meals at a late time - thinking of eating as a process that happened repeatedly" },
{ p: "مونږ به دلته کېناستو", f: "moonG ba dalta kenaastóo", e: "We would sit down here", sub: "We would repeatedly/habitually sit down at this spot - thinking of the sitting down as an activity / process where we would sit together and spend time here habitually" }
]}
{[
{
p: "ما به ناوخته ډوډۍ خوړله",
f: "maa ba naawakhta DoDuy khoRúla",
e: "I would eat late",
sub: "I would repeatedly/habitually eat my meals at a late time - thinking of eating as a process that happened repeatedly",
},
{
p: "مونږ به دلته کېناستو",
f: "moonG ba dalta kenaastóo",
e: "We would sit down here",
sub: "We would repeatedly/habitually sit down at this spot - thinking of the sitting down as an activity / process where we would sit together and spend time here habitually",
},
]}
</Examples>
The habitual continuous past is **also used to say what would happen if some condition were true.**
<Examples opts={opts}>
{psmd([
{ p: "**که ته دلته وای، **مونږ به ډوډۍ خوړله", f: "ku tu dalta waay, **moonG ba DoDuy khoRúla**", e: "If you were here, **we would eat food**." },
{ p: "**که زه ستړې نه وای، **پارک ته به تلم", f: "ku zu stuRe nu waay, **paark ta ba tlum**", e: "If I (f.) wasn't tired, **I would go to the park**." }
])}
{psmd([
{
p: "**که ته دلته وای، **مونږ به ډوډۍ خوړله",
f: "ku tu dalta waay, **moonG ba DoDuy khoRúla**",
e: "If you were here, **we would eat food**.",
},
{
p: "**که زه ستړې نه وای، **پارک ته به تلم",
f: "ku zu stuRe nu waay, **paark ta ba tlum**",
e: "If I (f.) wasn't tired, **I would go to the park**.",
},
])}
</Examples>
<GameDisplay record={habitualPastVerbGame1} />
<GameDisplay record={habitualPastVerbGame2} />

File diff suppressed because it is too large Load Diff

View File

@ -3,9 +3,9 @@ title: 📽 Present
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
@ -13,15 +13,12 @@ import Formula from "../../components/formula/Formula";
import realityGraph from "./reality-graph.svg";
import presentTime from "./present-time.svg";
import BasicVerbShowCase from "./../../components/BasicVerbShowCase";
import {
presentVerbGame1,
presentVerbGame2,
} from "../../games/games";
import { presentVerbGame1, presentVerbGame2 } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
The first verb form we'll learn is the **present**. This will be the first tool in our toolbox of verb forms. 🧰 With each verb form we'll learn two things:
1. 🧪 How to make it
1. 🧪 How to make it
2. 🔨 When to use it
## How to make it
@ -29,7 +26,7 @@ The first verb form we'll learn is the **present**. This will be the first tool
As with all verb forms, the **present form** is made by following a very simple formula which is the same for every single verb.
<Formula>
Imperfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
Imperfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
</Formula>
The <Link to="/verbs/verb-endings/">present ending</Link> will change according to what the subject is. Have a look through the verbs below and see how the present form follows the same formula for all of them. 👇
@ -52,13 +49,13 @@ You use this form to talk about something that:
So if we think of a graph of reality like this,
<div className="text-center">
<img src={realityGraph} alt="" className="img-fluid" />
<img src={realityGraph} alt="" className="img-fluid" />
</div>
The **present form** would look something like this:
The **present form** would look something like this:
<div className="text-center">
<img src={presentTime} alt="" className="img-fluid" />
<img src={presentTime} alt="" className="img-fluid" />
</div>
Here are some examples of how the present form is used in different situations:
@ -66,71 +63,69 @@ Here are some examples of how the present form is used in different situations:
### Happens generally
<Examples opts={opts}>
{psmd([
{
p: "مونږ هره ورځ چای **سکو**.",
f: "moonG hăra wradz chaay **skoo**.",
e: "We **drink** tea every day.",
},
{
p: "زما پلار پتلون **اغوندي**.",
f: "zmaa plaar patloon **aghondee**.",
e: "My dad **wears** pants."
},
{
p: "زه په عربي **نه پوهېږم**.",
f: "zu pu arabee **nú poheGum**.",
e: "I **don't understand** Arabic.",
},
{
p: "ته له مرګه **وېرېږې**؟",
f: "tu la marga **weréGe**?",
e: "**Are** you **afraid** of death?"
},
])}
{psmd([
{
p: "مونږ هره ورځ چای **سکو**.",
f: "moonG hăra wradz chaay **skoo**.",
e: "We **drink** tea every day.",
},
{
p: "زما پلار پتلون **اغوندي**.",
f: "zmaa plaar patloon **aghondee**.",
e: "My dad **wears** pants.",
},
{
p: "زه په عربي **نه پوهېږم**.",
f: "zu pu arabee **nú poheGum**.",
e: "I **don't understand** Arabic.",
},
{
p: "ته له مرګه **وېرېږې**؟",
f: "tu la marga **weréGe**?",
e: "**Are** you **afraid** of death?",
},
])}
</Examples>
### Is currently happening
<Examples opts={opts}>
{psmd([
{
p: "نن شپه ستوري **ځلېږي**.",
f: "nun shpa storee **dzaléGee**.",
e: "The stars **are shining** tonight.",
},
{
p: "زه بازار ته **ځم**.",
f: "zu baazaar ta **dzum**.",
e: "I'm **going** to the bazaar."
},
{
p: "هغوي اوس ډوډۍ **خوري**",
f: "haghwee oos DoDuy **khoree**.",
e: "They are **eating** food now.",
},
{
p: "ته څه **کوې**؟",
f: "tu tsu **kawe**?",
e: "What **are** you **doing**?"
},
])}
{psmd([
{
p: "نن شپه ستوري **ځلېږي**.",
f: "nun shpa storee **dzaléGee**.",
e: "The stars **are shining** tonight.",
},
{
p: "زه بازار ته **ځم**.",
f: "zu baazaar ta **dzum**.",
e: "I'm **going** to the bazaar.",
},
{
p: "هغوي اوس ډوډۍ **خوري**",
f: "haghwee oos DoDuy **khoree**.",
e: "They are **eating** food now.",
},
{
p: "ته څه **کوې**؟",
f: "tu tsu **kawe**?",
e: "What **are** you **doing**?",
},
])}
</Examples>
### Is definately about to happen
<Examples opts={opts}>
{psmd([
{
p: "**هغه نن **راځي.",
f: "haghá nun **raadzée**.",
e: "**He's coming** today.",
},
])}
{psmd([
{
p: "**هغه نن **راځي.",
f: "haghá nun **raadzée**.",
e: "**He's coming** today.",
},
])}
</Examples>
<GameDisplay record={presentVerbGame1} />
<GameDisplay record={presentVerbGame2} />

View File

@ -2,17 +2,14 @@
title: 🌳 Roots and Stems
---
import {
defaultTextOptions,
Examples,
InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
defaultTextOptions,
Examples,
InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
} from "@lingdocs/ps-react";
import shuffle from "../../lib/shuffle-array";
import Carousel from "../../components/Carousel";
@ -21,66 +18,76 @@ import Link from "../../components/Link";
import verbTreeBase from "./verb-tree-base.svg";
import verbTreePastPresent from "./verb-tree-past-present.svg";
import verbTreeImperfectivePerfective from "./verb-tree-imperfective-perfective.svg";
import { BlockTerm, KidsSection, PerfectiveHead, VP } from "../../components/terms-links.tsx";
import { BlockTerm, PerfectiveHead } from "../../components/terms-links.tsx";
import psmd from "../../lib/psmd";
export const opts = defaultTextOptions;
export const verbs = verbsRaw.filter(v => !("complement" in v));
export const verbs = verbsRaw.filter((v) => !("complement" in v));
export function InfoCarousel({ items, highlighted, hidePastParticiple }) {
return (
<Carousel items={shuffle(items)} render={(item) => {
let inf = getVerbInfo(item.entry);
const info = (inf.transitive)
? inf.transitive
: inf.stative
? inf.stative
: inf;
return {
title: <InlinePs opts={opts} ps={{
...removeFVarients(item.entry),
e: item.def,
}} />,
body: <RootsAndStems
info={info}
textOptions={opts}
highlighted={highlighted}
hidePastParticiple={hidePastParticiple}
/>,
};
}}/>
);
}
return (
<Carousel
items={shuffle(items)}
render={(item) => {
let inf = getVerbInfo(item.entry);
const info = inf.transitive
? inf.transitive
: inf.stative
? inf.stative
: inf;
return {
title: (
<InlinePs
opts={opts}
ps={{
...removeFVarients(item.entry),
e: item.def,
}}
/>
),
body: (
<RootsAndStems
info={info}
textOptions={opts}
highlighted={highlighted}
hidePastParticiple={hidePastParticiple}
/>
),
};
}}
/>
);
}
All verbs have **a set of two roots and two stems**, and these roots and stems are the building blocks that we use to make all the different verb forms.
## Introducing the Verb Tree
<div style={{ maxWidth: "350px", margin: "0 auto" }}>
<img src={verbTreeBase} alt="" className="img-fluid" />
<img src={verbTreeBase} alt="" className="img-fluid" />
</div>
You can think of the roots and stems as a tree that exists for every verb form. There are two stems (like branches) on the top, and two roots on the bottom. The root on the bottom left is the *dictionary form* or the *infinitive* of the verb, which is how you'd find it in a dictionary.
You can think of the roots and stems as a tree that exists for every verb form. There are two stems (like branches) on the top, and two roots on the bottom. The root on the bottom left is the _dictionary form_ or the _infinitive_ of the verb, which is how you'd find it in a dictionary.
These four items are the basic building blocks for making different verb forms. Whenever we make a verb form, we just have to take the right root or stem, and attach some endings to it. This means **Pashto verbs are extremely simple, regular, and predictable**, really! 👍
The tree is divided from top to bottom. On the top are the *stems*, which are used for present and future tense verb forms, and on the bottom are the *roots* which are used for past tense verb forms.
The tree is divided from top to bottom. On the top are the _stems_, which are used for present and future tense verb forms, and on the bottom are the _roots_ which are used for past tense verb forms.
<div className="mb-4" style={{ maxWidth: "500px", margin: "0 auto" }}>
<img src={verbTreePastPresent} alt="" className="img-fluid" />
<img src={verbTreePastPresent} alt="" className="img-fluid" />
</div>
The tree is also divided from left to right. On the left we have the [*imperfective* aspect](/verbs/verb-aspect/#i-classnamefas-fa-video--imperfective-aspect), and on the right we have the [*perfective* aspect](/verbs/verb-aspect/#i-classnamefas-fa-camera--perfective-aspect). Remember, the [aspect](/verbs/verb-aspect/) is like the perspective we take in looking at the action.
The tree is also divided from left to right. On the left we have the [_imperfective_ aspect](/verbs/verb-aspect/#i-classnamefas-fa-video--imperfective-aspect), and on the right we have the [_perfective_ aspect](/verbs/verb-aspect/#i-classnamefas-fa-camera--perfective-aspect). Remember, the [aspect](/verbs/verb-aspect/) is like the perspective we take in looking at the action.
<div className="mb-4" style={{ maxWidth: "400px", margin: "0 auto" }}>
<img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" />
<img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" />
</div>
On the <i className="fas fa-camera" /> **perfective** side of the tree:
- The accent/emphasis **always** goes on the first syllable
- The verb has a <PerfectiveHead /> that splits off into a seperate <BlockTerm />
- The accent/emphasis **always** goes on the first syllable
- The verb has a <PerfectiveHead /> that splits off into a seperate <BlockTerm />
## Making the Verb Tree
@ -91,17 +98,25 @@ Many verbs follow a very clear pattern of how the roots and stems grow out from
With regular verbs, knowing all the roots and stems is simple:
- The perfective root is made by:
- **adding the <InlinePs opts={opts} ps={grammarUnits.ooPrefix} /> prefix** as the <PerfectiveHead />
- **shifting the accent to the front**
- **adding the <InlinePs opts={opts} ps={grammarUnits.ooPrefix} /> prefix** as the <PerfectiveHead />
- **shifting the accent to the front**
- The stems are just the **shorter version** of the roots
Flip through all these regular verbs and notice the pattern of how they're all built.
export const regularVerbs = verbs.filter((verb) => (
!verb.entry.psp && !verb.entry.ssp && !verb.entry.prp && !verb.entry.pprtp && !verb.entry.noOo && !verb.entry.sepOo
));
export const regularVerbs = verbs.filter(
(verb) =>
!verb.entry.psp &&
!verb.entry.ssp &&
!verb.entry.prp &&
!verb.entry.pprtp &&
!verb.entry.noOo &&
!verb.entry.sepOo
);
export const regularTrans = regularVerbs.filter((verb) => verb.entry.c && verb.entry.c.includes("v. trans."));
export const regularTrans = regularVerbs.filter(
(verb) => verb.entry.c && verb.entry.c.includes("v. trans.")
);
<InfoCarousel items={regularTrans} hidePastParticiple />
@ -116,7 +131,9 @@ Regular intransitive verb work the same except that:
- the stems change the <InlinePs opts={opts} ps={{ p: "ـېد", f: "-ed" }} /> in the roots to a <InlinePs opts={opts} ps={{ p: "ـېږ", f: "-eG" }} />
- Some of these verbs can also leave the <InlinePs opts={opts} ps={{ p: "ـېږ", f: "-eG" }} /> out completely for a short version
export const regularIntrans = regularVerbs.filter((verb) => verb.entry.c && verb.entry.c.includes("v. intrans."));
export const regularIntrans = regularVerbs.filter(
(verb) => verb.entry.c && verb.entry.c.includes("v. intrans.")
);
<InfoCarousel items={regularIntrans} hidePastParticiple />
@ -124,11 +141,21 @@ export const regularIntrans = regularVerbs.filter((verb) => verb.entry.c && verb
There are many verbs where the top half (the stems/present form) is totally different from the bottom half (the roots/past form).
export const irregularPresentFormVerbs = verbs.filter((verb) => (
verb.entry.psp && !verb.entry.ssp && !verb.entry.prp && !verb.entry.pprtp && !verb.entry.noOo && !verb.entry.sepO
));
export const irregularPresentFormVerbs = verbs.filter(
(verb) =>
verb.entry.psp &&
!verb.entry.ssp &&
!verb.entry.prp &&
!verb.entry.pprtp &&
!verb.entry.noOo &&
!verb.entry.sepO
);
<InfoCarousel items={irregularPresentFormVerbs} highlighted={["imperfective stem", "perfective stem"]} hidePastParticiple />
<InfoCarousel
items={irregularPresentFormVerbs}
highlighted={["imperfective stem", "perfective stem"]}
hidePastParticiple
/>
### Verbs with no و - óo prefix
@ -138,16 +165,12 @@ It's super important to remember that even though we can't add a <InlinePs opts=
Notice how the only difference between the imperfective and perfective aspects is where the emphasis falls. The accent totally changes the meaning of the verb form! 🤯
export const separableVerbs = verbs.filter((verb) => (
verb.entry.separationAtP && [
"پرې",
"کې",
"بو",
"څم",
"را",
].some(x => verb.entry.p.startsWith(x)) &&
export const separableVerbs = verbs.filter(
(verb) =>
verb.entry.separationAtP &&
["پرې", "کې", "بو", "څم", "را"].some((x) => verb.entry.p.startsWith(x)) &&
!verb.entry.ssp
));
);
The other fascinating part about these types of verbs is that the first syllable gets split off as the <Link to="/verbs/roots-and-stems/#introducing-the-perfective-head">perfective head</Link>.
@ -158,21 +181,25 @@ The other fascinating part about these types of verbs is that the first syllable
There are a few more verbs which are even more irregular, and these just have to be memorized. Here are some of them.
export const irregularVerbs = verbs.filter((verb) => {
let score = 0;
if (verb.entry.psp) score = score + 1;
if (verb.entry.ssp) score = score + 1;
if (verb.entry.prp) score = score + 1;
if (verb.entry.pprtp) score = score + 1;
return score > 1 && !verb.entry.l;
let score = 0;
if (verb.entry.psp) score = score + 1;
if (verb.entry.ssp) score = score + 1;
if (verb.entry.prp) score = score + 1;
if (verb.entry.pprtp) score = score + 1;
return score > 1 && !verb.entry.l;
});
<InfoCarousel items={irregularVerbs} hidePastParticiple highlighted={["imperfective stem", "perfective stem", "perfective root"]} />
<InfoCarousel
items={irregularVerbs}
hidePastParticiple
highlighted={["imperfective stem", "perfective stem", "perfective root"]}
/>
## The past participle
There's one more element we need to add to the verb tree: **the past participle**. The past particple is used for making perfect verb forms, adjectival verbs etc. We put this at the bottom in the middle because **it doesn't fit into either aspect** and is seperate from the perfective/imperfective divide.
In almost all verbs, the past participle is just the imperfective root plus a <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /> tail that inflects. The <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> and <InlinePs opts={opts} ps={{ p: "کېدل", f: "kedul" }} /> verbs are the only ones that have irregular past participles.
In almost all verbs, the past participle is just the imperfective root plus a <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} /> tail that inflects. The <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> and <InlinePs opts={opts} ps={{ p: "کېدل", f: "kedul" }} /> verbs are the only ones that have irregular past participles.
<InfoCarousel items={verbs} />
@ -185,10 +212,18 @@ The negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú" , e: "not" }} /> is
When one of these negatives is used **it always takes over the accent from the verb**.
<Examples opts={opts}>
{psmd([
{ p: "دتله **کېنه**", f: "dălta **kéna**", e: "sit here" },
{ p: "دلته **مه کېنه**", f: "dălta **mú kena**", e: "don't sit here" },
{ p: "زه ورسره **غږېدم**", f: "zu wăr-sara **ghuGedúm**", e: "I was talking with him" },
{ p: "زه ورسره **نه غږېدم**", f: "zu wăr-sara **nú ghuGedum**", e: "I was not talking with him" },
])}
{psmd([
{ p: "دتله **کېنه**", f: "dălta **kéna**", e: "sit here" },
{ p: "دلته **مه کېنه**", f: "dălta **mú kena**", e: "don't sit here" },
{
p: "زه ورسره **غږېدم**",
f: "zu wăr-sara **ghuGedúm**",
e: "I was talking with him",
},
{
p: "زه ورسره **نه غږېدم**",
f: "zu wăr-sara **nú ghuGedum**",
e: "I was not talking with him",
},
])}
</Examples>

View File

@ -3,10 +3,9 @@ title: 📷 Subjunctive
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
removeFVarients,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import cousins from "./cousins.png";
import psmd from "../../lib/psmd";
@ -15,10 +14,7 @@ import Formula from "../../components/formula/Formula";
import presentInReality from "./present-in-reality.svg";
import subjunctiveAboveReality from "./subjunctive-above-reality.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import {
subjunctiveVerbGame1,
subjunctiveVerbGame2,
} from "../../games/games";
import { subjunctiveVerbGame1, subjunctiveVerbGame2 } from "../../games/games";
import GameDisplay from "../../games/GameDisplay";
The **subjunctive** is a very important verb form in Pashto, but it's often ignored by English-speaking learners because we don't really have anything like it in English. So, we need to understand what it is, and then train our brains to reach for it and use it in the right situations!
@ -28,19 +24,19 @@ The **subjunctive** is a very important verb form in Pashto, but it's often igno
The subjunctive is like the <i className="fas fa-camera" /> perfective cousin of the <Link to="/verbs/present-verbs">present</Link> form.
<div className="text-center">
<img src={cousins} alt="" className="img-fluid" />
<img src={cousins} alt="" className="img-fluid" />
</div>
We said we use the <Link to="/verbs/present-verbs">present</Link> form to talk about things that are happening, or generally happen in reality. Naturally this was <i className="fas fa-video" /> imperfective because the event is either ongoing or reccuring.
<div className="text-center">
<img src={presentInReality} alt="" className="img-fluid" />
<img src={presentInReality} alt="" className="img-fluid" />
</div>
But the subjunctive is <i className="fas fa-camera" /> perfective because instead of talking about something happening in reality, we're talking **about the idea of something happening or not**. We're looking about the action or event *from the outside as a whole*.
But the subjunctive is <i className="fas fa-camera" /> perfective because instead of talking about something happening in reality, we're talking **about the idea of something happening or not**. We're looking about the action or event _from the outside as a whole_.
<div className="text-center">
<img src={subjunctiveAboveReality} alt="" className="img-fluid" />
<img src={subjunctiveAboveReality} alt="" className="img-fluid" />
</div>
As we read on [wikipedia](https://en.wikipedia.org/wiki/Subjunctive_mood):
@ -49,10 +45,10 @@ As we read on [wikipedia](https://en.wikipedia.org/wiki/Subjunctive_mood):
## How to make it
The subjunctive is made the same way as its cousin the <Link to="/verbs/present-verbs">present</Link>, except this time we use the *perfective* stem.
The subjunctive is made the same way as its cousin the <Link to="/verbs/present-verbs">present</Link>, except this time we use the _perfective_ stem.
<Formula>
Perfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
Perfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
</Formula>
<BasicVerbShowCase opts={opts} tense="subjunctiveVerb" />
@ -62,13 +58,25 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
### Should or shouldn't
<Examples opts={opts}>
{psmd([
{ p: "زه یې واخلم؟", f: "zu ye **wáakhlum?**", e: "Should I take it?" },
{ p: "هغه دې **راشي**.", f: "haghá de **ráashee**.", e: "He should come." },
{ p: "ډوډۍ **وخورو**؟", f: "DoDuy **óokhoroo**?", e: "Should we eat food?" },
{ p: "په کار دی چې مونږ انګیلسي **زده کړو**.", f: "pu kaar dey che moonG ingleesee **zdá kRoo**.", e: "We need to learn English." },
{ p: "چې ورسره خبرې **و**نه **کړې**!", f: "che wăr-sara khabure **oo**-nú-**kRe**!", e: "You'd better not talk to him!" },
])}
{psmd([
{ p: "زه یې واخلم؟", f: "zu ye **wáakhlum?**", e: "Should I take it?" },
{ p: "هغه دې **راشي**.", f: "haghá de **ráashee**.", e: "He should come." },
{
p: "ډوډۍ **وخورو**؟",
f: "DoDuy **óokhoroo**?",
e: "Should we eat food?",
},
{
p: "په کار دی چې مونږ انګیلسي **زده کړو**.",
f: "pu kaar day che moonG ingleesee **zdá kRoo**.",
e: "We need to learn English.",
},
{
p: "چې ورسره خبرې **و**نه **کړې**!",
f: "che wăr-sara khabure **oo**-nú-**kRe**!",
e: "You'd better not talk to him!",
},
])}
</Examples>
**Note**: the subjunctive can be used almost like an imperative in situations like this.
@ -76,20 +84,40 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
### Possibility
<Examples opts={opts}>
{psmd([
{ p: "امکان شته چې **لاړ شي**.", f: "imkaan shta che **láaR shee**.", e: "There's a possibility that he'll go." },
{ p: "شاید هغه نن **ووینم**.", f: "shaayid haghá nun **óoweenum**.", e: "Maybe I'll see him today." },
{ p: "کېدی شي چې پولیس یې **ونیسي**.", f: "kedey shee che polees ye **óoneesee**", e: "The police could catch him." },
])}
{psmd([
{
p: "امکان شته چې **لاړ شي**.",
f: "imkaan shta che **láaR shee**.",
e: "There's a possibility that he'll go.",
},
{
p: "شاید هغه نن **ووینم**.",
f: "shaayid haghá nun **óoweenum**.",
e: "Maybe I'll see him today.",
},
{
p: "کېدی شي چې پولیس یې **ونیسي**.",
f: "keday shee che polees ye **óoneesee**",
e: "The police could catch him.",
},
])}
</Examples>
### Purpose
<Examples opts={opts}>
{psmd([
{ p: "هغه ورو ورو خبرې کوي، چې **پوه شي**.", f: "haghá wro wro khabure kawee, che **póh shee**.", e: "She speaks slowly so that she'll understand." },
{ p: "زه ورته کتابونه ورکوم، چې **و**یې **لولي**.", f: "zu wăr-ta kitaaboona wăr-kawum, che **óo**-ye-**lwulee**.", e: "I'm giving him books so that he'll read them." },
])}
{psmd([
{
p: "هغه ورو ورو خبرې کوي، چې **پوه شي**.",
f: "haghá wro wro khabure kawee, che **póh shee**.",
e: "She speaks slowly so that she'll understand.",
},
{
p: "زه ورته کتابونه ورکوم، چې **و**یې **لولي**.",
f: "zu wăr-ta kitaaboona wăr-kawum, che **óo**-ye-**lwulee**.",
e: "I'm giving him books so that he'll read them.",
},
])}
</Examples>
**Note**: Because the subjunctive is made from the perfect stem, the front part of it (usually <InlinePs opts={opts} ps={{ p: "و", f: "óo" }} />) can be split off and you can put little particles like <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} />, <InlinePs opts={opts} ps={{ p: "هم", f: "hum" }} />, and <Link to="/pronouns/pronouns-mini/">mini-pronouns</Link> in between it and the rest of the verb. See the <Link to="/verbs/roots-and-stems/">verb trees</Link> 🌳 and click on the split button to see where this split happens.
@ -97,23 +125,60 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
When you use the negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} /> particle, it <strong>always</strong> has to go in this split. (And <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} /> always takes over the emphasis/accent on the word.)
<Examples opts={opts}>
{psmd([
{ p: "هغه وتړه چې **و**نه **تښتي**.", f: "hagha óotaRa che **oo**-nú-**tuxtee**.", e: "Tie him up so that he doesn't escape." },
{ p: "کړګۍ بنده کړه چې هوا دننه **را**نه **شي**", f: "kiRkúy banda kRa che hawaa dununa **raa**-nú-**shee**", e: "Close the window so the air doesn't come inside." },
])}
{psmd([
{
p: "هغه وتړه چې **و**نه **تښتي**.",
f: "hagha óotaRa che **oo**-nú-**tuxtee**.",
e: "Tie him up so that he doesn't escape.",
},
{
p: "کړګۍ بنده کړه چې هوا دننه **را**نه **شي**",
f: "kiRkúy banda kRa che hawaa dununa **raa**-nú-**shee**",
e: "Close the window so the air doesn't come inside.",
},
])}
</Examples>
## With Subordinate Clauses
As you can see, the subjunctive is often used in [subordinate clauses](https://en.wikipedia.org/wiki/Dependent_clause) that come after phrases like:
As you can see, the subjunctive is often used in [subordinate clauses](https://en.wikipedia.org/wiki/Dependent_clause) that come after phrases like:
- <InlinePs opts={opts} ps={{ p: "چې ...", f: "che ...", e: "so that/if..." }} />
- <InlinePs opts={opts} ps={{ p: "کېدی شي چې...", f: "kedey shee che...", e: "it could be that..." }} />
- <InlinePs opts={opts} ps={{ p: "هسې نه چې...", f: "hase na che...", e: "lest..." }} />
- <InlinePs opts={opts} ps={{ p: "امید لرم چې...", f: "Umeed larum che...", e: "I hope that..." }} />
- <InlinePs opts={opts} ps={{ p: "زه غواړم چې...", f: "zu ghwaaRum che...", e: "I want to..." }} />
- <InlinePs opts={opts} ps={{ p: "ته باید ...", f: "tu baayad ...", e: "You have to ..." }} />
- <InlinePs opts={opts} ps={{ p: "په کار دی چې ...", f: "pu kaar dey che ...", e: "It's necessary that ..." }} />
- <InlinePs
opts={opts}
ps={{ p: "چې ...", f: "che ...", e: "so that/if..." }}
/>
- <InlinePs
opts={opts}
ps={{
p: "کېدی شي چې...",
f: "keday shee che...",
e: "it could be that...",
}}
/>
- <InlinePs
opts={opts}
ps={{ p: "هسې نه چې...", f: "hase na che...", e: "lest..." }}
/>
- <InlinePs
opts={opts}
ps={{ p: "امید لرم چې...", f: "Umeed larum che...", e: "I hope that..." }}
/>
- <InlinePs
opts={opts}
ps={{ p: "زه غواړم چې...", f: "zu ghwaaRum che...", e: "I want to..." }}
/>
- <InlinePs
opts={opts}
ps={{ p: "ته باید ...", f: "tu baayad ...", e: "You have to ..." }}
/>
- <InlinePs
opts={opts}
ps={{
p: "په کار دی چې ...",
f: "pu kaar day che ...",
e: "It's necessary that ...",
}}
/>
...etc.

View File

@ -1,12 +1,8 @@
---
title: 📽 Verb Aspect 📸
title: 📽 Verb Aspect 📸
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import { defaultTextOptions as opts, Examples } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import imperfectiveTimeline from "./imperfective-time.svg";
import perfectiveTimeline from "./perfective-time.svg";
@ -15,18 +11,24 @@ Pashto verbs express actions by looking at them from two different [aspects](htt
## Introducing the Two Aspects
The aspects can be thought of as two different *perspectives* or *ways of looking* at an action:
The aspects can be thought of as two different _perspectives_ or _ways of looking_ at an action:
<table className="table">
<thead>
<tr>
<th scope="col"><i className="fas fa-video" /> Imperfective</th>
<th scope="col"><i className="fas fa-camera" /> Perfective</th>
<th scope="col">
<i className="fas fa-video" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera" /> Perfective
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Looking from inside at ongoing or repeated event - think of a video</td>
<td>
Looking from inside at ongoing or repeated event - think of a video
</td>
<td>Looking from outside at single, whole event - think of a photo</td>
</tr>
</tbody>
@ -34,27 +36,43 @@ The aspects can be thought of as two different *perspectives* or *ways of lookin
### Imperfective Aspect
The imperfective <i className="fas fa-video" /> aspect is used for looking at the action as a process that's continuous or repeating over time, kind of like a video.
The imperfective <i className="fas fa-video" /> aspect is used for looking at the action as a process that's continuous or repeating over time, kind of like a video.
<div className="text-center">
<img className="img-fluid mb-2" src={imperfectiveTimeline} alt="imperfective aspect in time" />
<img
className="img-fluid mb-2"
src={imperfectiveTimeline}
alt="imperfective aspect in time"
/>
</div>
For example:
<Examples opts={opts}>
{psmd([
{ p: `ما ډوډۍ **خوړله**`, f: `maa DoDuy **khoRúla**`, e: "I was eating food" },
{ p: `زه په پارک کې **ګرځېدم**`, f: `zu pu paark ke **gurdzedúm**`, e: "I was walking in the park" },
{
p: `ما ډوډۍ **خوړله**`,
f: `maa DoDuy **khoRúla**`,
e: "I was eating food",
},
{
p: `زه په پارک کې **ګرځېدم**`,
f: `zu pu paark ke **gurdzedúm**`,
e: "I was walking in the park",
},
])}
</Examples>
### Perfective Aspect
The perfective <i className="fas fa-camera" /> aspect is used for looking at the action as a complete whole, without thinking about repititon or the flow of time, kind of like a photo.
The perfective <i className="fas fa-camera" /> aspect is used for looking at the action as a complete whole, without thinking about repititon or the flow of time, kind of like a photo.
<div className="text-center">
<img className="img-fluid mb-2" src={perfectiveTimeline} alt="perfective aspect in time" />
<img
className="img-fluid mb-2"
src={perfectiveTimeline}
alt="perfective aspect in time"
/>
</div>
For example:
@ -62,43 +80,65 @@ For example:
<Examples opts={opts}>
{psmd([
{ p: `ما ډوډۍ **وخوړله**`, f: `maa DoDuy **óokhoRula**`, e: "I ate food" },
{ p: `زه په پارک کې **وګرځېدم**`, f: `zu pu paark ke **óogurdzedum**`, e: "I took a walk in the park" },
{
p: `زه په پارک کې **وګرځېدم**`,
f: `zu pu paark ke **óogurdzedum**`,
e: "I took a walk in the park",
},
])}
</Examples>
## Pashto Uses Aspects Everywhere!
As we saw in the examples above, in English we are used to using these two different aspects with the past tense. But **Pashto uses these two aspects for almost *everything!*** This is very import to remember and it takes a while for learners to get used to.
As we saw in the examples above, in English we are used to using these two different aspects with the past tense. But **Pashto uses these two aspects for almost _everything!_** This is very import to remember and it takes a while for learners to get used to.
For example, when making commands in Pashto we have to choose which aspect we are talking about. In English we can only say "clean your room!" But in Pashto we have to think, are we talking about a one-time request to get something done (perfective <i className="fas fa-camera" />), or asking someone to work on something as on ongoing, repeated thing (imperfective <i className="fas fa-video" />)?
<table className="table" style={{ tableLayout: "fixed" }}>
<thead>
<tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th>
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th>
<th scope="col">
<i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{ p: `خبله کوټه **صفا کوه**!`, f: `khpula koTa **safaa kawa**`, e: "Clean your room!" },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{ p: `خبله کوټه **صفا کړه**!`, f: `khpula koTa **safaa kRa**!`, e: "Clean your room!" },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `خبله کوټه **صفا کوه**!`,
f: `khpula koTa **safaa kawa**`,
e: "Clean your room!",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `خبله کوټه **صفا کړه**!`,
f: `khpula koTa **safaa kRa**!`,
e: "Clean your room!",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>"Do it generally, or get going on it." (Asking someone to clean their room as an ongoing or repeated task.)</td>
<td>"Just get it done, once." (Asking someone to clean their room as a one-time task. Just get it done, once.)</td>
<td>
"Do it generally, or get going on it." (Asking someone to clean their
room as an ongoing or repeated task.)
</td>
<td>
"Just get it done, once." (Asking someone to clean their room as a
one-time task. Just get it done, once.)
</td>
</tr>
</tbody>
</table>
@ -108,30 +148,47 @@ Or when talking about things in the future tense, we face the same choice of asp
<table className="table" style={{ tableLayout: "fixed" }}>
<thead>
<tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th>
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th>
<th scope="col">
<i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{ p: `مونږ به **کېنو** او **خبرې کوو**`, f: `moonG ba **keenóo** aw **khabure kawoo**`, e: "We'll sit and talk" },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{ p: `مونږ به **کېنو** او **خبرې وکړو**`, f: `moonG ba **kéenoo** aw **khabure ookRoo**`, e: "We'll sit and talk" },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `مونږ به **کېنو** او **خبرې کوو**`,
f: `moonG ba **keenóo** aw **khabure kawoo**`,
e: "We'll sit and talk",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `مونږ به **کېنو** او **خبرې وکړو**`,
f: `moonG ba **kéenoo** aw **khabure ookRoo**`,
e: "We'll sit and talk",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>We'll have a process of sitting and talking together (this will happen repeatedly or will take time)</td>
<td>We'll sit down and have a talk (a one time event, thought of as a whole)</td>
<td>
We'll have a process of sitting and talking together (this will happen
repeatedly or will take time)
</td>
<td>
We'll sit down and have a talk (a one time event, thought of as a whole)
</td>
</tr>
</tbody>
</table>
@ -141,29 +198,44 @@ Even when talking about ability in the past tense, you still have to choose an a
<table className="table" style={{ tableLayout: "fixed" }}>
<thead>
<tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th>
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th>
<th scope="col">
<i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<Examples opts={opts}>
{psmd([
{ p: `هغه له کوره **وتلی شوه**`, f: `haghá la kora **watuley shwa**`, e: "She was able to leave the house." },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{ p: `هغه له کوره **ووتلی شوه**`, f: `haghá la kora **óowatuley shwa**`, e: "She was able to leave the house." },
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `هغه له کوره **وتلی شوه**`,
f: `haghá la kora **watulay shwa**`,
e: "She was able to leave the house.",
},
])}
</Examples>
</td>
<td>
<Examples opts={opts}>
{psmd([
{
p: `هغه له کوره **ووتلی شوه**`,
f: `haghá la kora **óowatulay shwa**`,
e: "She was able to leave the house.",
},
])}
</Examples>
</td>
</tr>
<tr>
<td>She had permission to go and could go whenever she wanted, repeatedly or in general.</td>
<td>
She had permission to go and could go whenever she wanted, repeatedly or
in general.
</td>
<td>In one particular instance, she was able to get out of the house.</td>
</tr>
</tbody>

View File

@ -2,20 +2,17 @@
title: Verb Endings
---
import {
addToForm,
defaultTextOptions as opts,
grammarUnits,
VerbFormDisplay,
InlinePs,
addToForm,
defaultTextOptions as opts,
grammarUnits,
VerbFormDisplay,
InlinePs,
} from "@lingdocs/ps-react";
import Link from "../../components/Link";
export function addTail(form) {
return addToForm([{ p: "ـ", f: "-" }], form, true);
return addToForm([{ p: "ـ", f: "-" }], form, true);
}
## Present Verb Endings
@ -23,8 +20,8 @@ export function addTail(form) {
These endings are added on to the ends of <Link to="/verbs/roots-and-stems/">verb stems</Link> to make present, subjunctive, and future verbs.
<VerbFormDisplay
displayForm={addTail(grammarUnits.presentEndings)}
textOptions={opts}
displayForm={addTail(grammarUnits.presentEndings)}
textOptions={opts}
/>
## Imperative Verb Endings
@ -32,8 +29,8 @@ These endings are added on to the ends of <Link to="/verbs/roots-and-stems/">ver
These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb stems</Link> to make imperative verbs.
<VerbFormDisplay
displayForm={addTail(grammarUnits.imperativeEndings)}
textOptions={opts}
displayForm={addTail(grammarUnits.imperativeEndings)}
textOptions={opts}
/>
## Past Verb Endings
@ -41,8 +38,8 @@ These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb s
These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb roots</Link> to make past-tense verbs.
<VerbFormDisplay
displayForm={addTail(grammarUnits.pastEndings.short)}
textOptions={opts}
displayForm={addTail(grammarUnits.pastEndings.short)}
textOptions={opts}
/>
### Notes about past verb endings
@ -51,6 +48,5 @@ These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb r
- The **short form of the 3rd pers. masc. sing.** verbs in the past is a bit interesting. The ending is often left off (if it ends in a consanant like <InlinePs opts={opts} ps={{ p: "ولید", f: "óoleed", e: "" }} /> or is irregular like <InlinePs opts={opts} ps={{ p: "کاوه", f: "kaawú" }} /> from <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> or <InlinePs opts={opts} ps={{ p: "خوت", f: "khot" }} /> from <InlinePs opts={opts} ps={{ p: "ختل", f: "khatúl" }} />
- The **3rd pers. masc. plur.** form of verbs is the same regardless of whether the short or long roots are used.
- In the **Kandahari dialect** some different endings are used;
- 3rd pers. masc. sing.: <InlinePs opts={opts} ps={{ p: "ـی", f: "ey", e: "" }} />
- 3rd pers. masc. plur.: <InlinePs opts={opts} ps={{ p: "ـله", f: "ulu", e: "" }} />
- 3rd pers. masc. sing.: <InlinePs opts={opts} ps={{ p: "ـی", f: "ay", e: "" }} />
- 3rd pers. masc. plur.: <InlinePs opts={opts} ps={{ p: "ـله", f: "ulu", e: "" }} />

View File

@ -17,53 +17,61 @@ In any language we have different **verb forms** that are used for different rea
- I've gone
- I'll have gone
These **different verb forms are like tools 🔨🔧✂ that you can use in different situations**.
These **different verb forms are like tools 🔨🔧✂ that you can use in different situations**.
Here's the trick: ⚠ **Different languages have different sets of tools that are used in different ways**. When learning a new language it's important to remember that _you are getting a totally new toolbox full of new tools_ 🆕🧰🗜⚒✨
Here's the trick: ⚠ **Different languages have different sets of tools that are used in different ways**. When learning a new language it's important to remember that _you are getting a totally new toolbox full of new tools_ 🆕🧰🗜⚒✨
When you get a new set of tools you need to make sure you understand:
1. **What they are**
How to make the verb forms and recognize them
2. **When to use them**
What they mean and what situations they're used in
How to make the verb forms and recognize them
2. **When to use them**
What they mean and what situations they're used in
If we don't think carefully about this, 🤔 we will often just assume that we can use the new tools (verb forms) just like we did in our first language, and then we have problems. As adults, there is a massive temptation to try to use the tools like we did before in our native language. We can think we know the tool, but because it's actually different we end up using it wrongly.
For example, you may have met a German who's learned excellent English, but when the doorbell rings they jump up and say, _"I get the door!"_ 🔔🚪🏃‍♂️. In English you have to use a different verb form and say, "I'll get the door." So why do they make this mistake when they seem so fluent in English? Let's look at the different tools/verb forms we have in English in German:
<table className="table table-bordered" style={{ tableLayout: "fixed" }}>
<thead>
<tr>
<th scope="col">English</th>
<th scope="col">German</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div>I'll open the door (right now)</div>
<div className="text-muted">Simple Future</div>
</td>
<td rowspan={2} style={{ verticalAlign: "middle"}}>
<div>Ich öffne die Tür</div>
<div className="text-muted">Präsens</div>
</td>
</tr>
<tr>
<td>
<div>I open the door (always, it's my job)</div>
<div className="text-muted">Present Simple</div>
</td>
</tr>
</tbody>
<thead>
<tr>
<th scope="col">English</th>
<th scope="col">German</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div>I'll open the door (right now)</div>
<div className="text-muted">Simple Future</div>
</td>
<td rowspan={2} style={{ verticalAlign: "middle" }}>
<div>Ich öffne die Tür</div>
<div className="text-muted">Präsens</div>
</td>
</tr>
<tr>
<td>
<div>I open the door (always, it's my job)</div>
<div className="text-muted">Present Simple</div>
</td>
</tr>
</tbody>
</table>
See what's happening to the German speakers? 🧠 Their brain wants to use the same categories/tools for things that they grow up with, and so they use the English present form in both situations. They're so used to using _their_ present tense for everything that it still "feels right" for them to use it for everthying while speaking English. But new languages come with new tools, and we need to be careful to learn what they are and when they are used. 🧰🤓👍
<details>
<summary>Another example...</summary>
Not understanding how to use your new verb form tools may make you sound funny, but sometimes it can make you sound downright rude! 😯 For example, in languages like Urdu or Korean you have different imperative verb forms. You can make commands nicer by adding extra endings to make sure that you are sounding polite and considerate. But English doesn't have this feature. A command is just a command, with all of it's harshness. So sometimes when these people speak English they will make very rude-sounding commands like "Give me some water!" because they assume that they should use the imperative like they do in their own language, instead of using a question like, "Could I please have some water?"
<summary>Another example...</summary>
Not understanding how to use your new verb form tools may make you sound funny,
but sometimes it can make you sound downright rude! 😯 For example, in languages
like Urdu or Korean you have different imperative verb forms. You can make commands
nicer by adding extra endings to make sure that you are sounding polite and considerate.
But English doesn't have this feature. A command is just a command, with all of
it's harshness. So sometimes when these people speak English they will make very
rude-sounding commands like "Give me some water!" because they assume that they
should use the imperative like they do in their own language, instead of using
a question like, "Could I please have some water?"
</details>
In the chapters ahead we will try to explain what the different forms of the verbs are and when to use them. But first, it's important to understand a little bit about something very important in Pashto: <Link to="/verbs/verb-aspect/">verb aspect</Link>.

View File

@ -3,21 +3,19 @@ title: Diacritics
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
You've probably noticed that there are some ambiguities when reading and writing with the Pashto script.
- When the short vowels (a, i, u, U) come in the middle if the word, they're not written.
- They are written with a "ا" at the beginning or a "ـه" at the end of a word, but we still have no idea which of the 4 short vowels it is!
- The letter "و" can make a "w", "o", or "oo" sound.
- The letter "ـیـ" in the middle of a word can be either a "ee", "ey", or "ee" sound.
- The letter "ـیـ" in the middle of a word can be either a "ee", "ay", or "ee" sound.
For example, if we see the word کوم written out, we literally don't know if it's pronounced *koom*, *kom*, *kwam*, *kwim*, *kwum*, *kwUm*, *kawam*, *kiwm*, *kuwm*, *kUwm*, *kawam*, *kawim*, *kawum*, *kawUm*, *kiwam*, *kiwim*, *kiwum*, *kiwUm*, *kuwam*, *kuwim*, *kuwum*, *kuwUm*, *kUwam*, *kUwim*, *kUwum*, *kUwUm*, *kawwam*, *kawwim*, *kawwum*, *kawwUm*, *kiwwam*, *kiwwim*, *kiwwum*, *kiwwUm*, *kuwwam*, *kuwwim*, *kuwwum*, *kuwwUm*, *kUwwam*, *kUwwim*, *kUwwum*, or *kUwwUm*. 😫
For example, if we see the word کوم written out, we literally don't know if it's pronounced _koom_, _kom_, _kwam_, _kwim_, _kwum_, _kwUm_, _kawam_, _kiwm_, _kuwm_, _kUwm_, _kawam_, _kawim_, _kawum_, _kawUm_, _kiwam_, _kiwim_, _kiwum_, _kiwUm_, _kuwam_, _kuwim_, _kuwum_, _kuwUm_, _kUwam_, _kUwim_, _kUwum_, _kUwUm_, _kawwam_, _kawwim_, _kawwum_, _kawwUm_, _kiwwam_, _kiwwim_, _kiwwum_, _kiwwUm_, _kuwwam_, _kuwwim_, _kuwwum_, _kuwwUm_, _kUwwam_, _kUwwim_, _kUwwum_, or _kUwwUm_. 😫
In order to deal with these ambiguities in the Arabic script, little **optional** markings called [diacritics](https://en.wikipedia.org/wiki/Diacritic) can be used above the letters to help the reader and show which vowels are being used.
@ -26,16 +24,16 @@ In order to deal with these ambiguities in the Arabic script, little **optional*
The most common diacritic marking you will see is a little ◌ٔ (hamza) above the ـه on the end of the word. This is because the ـه at the end of a word can represent any short vowel (a, i, u, U), but most Pashto words will either end with "a" or "u" on the end. When written with an (optional) little hamza on the end (ـهٔ), it indicates that **the shwa sound "u" is being used, not "a."**
<Examples opts={opts}>
{[
{ p: "ته", f: "ta", e: "to" },
{ p: "تهٔ", f: "tu", e: "you" },
{ p: "کارګهٔ", f: "kaargu", e: "crow" },
{ p: "ویدهٔ", f: "weedu", e: "asleep (masc.)" },
{ p: "ویده", f: "weeda", e: "asleep (fem.)" },
]}
{[
{ p: "ته", f: "ta", e: "to" },
{ p: "تهٔ", f: "tu", e: "you" },
{ p: "کارګهٔ", f: "kaargu", e: "crow" },
{ p: "ویدهٔ", f: "weedu", e: "asleep (masc.)" },
{ p: "ویده", f: "weeda", e: "asleep (fem.)" },
]}
</Examples>
It's more common to see this being used in Pakistan. You don't need to use it, but if you do, the word *must* end with a "u" sound.
It's more common to see this being used in Pakistan. You don't need to use it, but if you do, the word _must_ end with a "u" sound.
- **correct** ✅ <InlinePs opts={opts} ps={{ p: "زه", f: "zu" }} />, <InlinePs opts={opts} ps={{ p: "زهٔ", f: "zu" }} />, <InlinePs opts={opts} ps={{ p: "اته", f: "atu" }} />, <InlinePs opts={opts} ps={{ p: "اتهٔ", f: "atu" }} />, <InlinePs opts={opts} ps={{ p: "پورته", f: "porta" }} />
- **incorrect** ❌ <InlinePs opts={opts} ps={{ p: "پورتهٔ", f: "porta" }} />
@ -45,31 +43,31 @@ THE REST OF THIS PAGE IS INCOMPLETE, MORE COMING SOON 👷‍♂️
## The four main diacritics
export const diacritics = [
{ diacritic: "َ", name: "zwar", sound: "a" },
{ diacritic: "ٙ", name: "zwarakey", sound: "u" },
{ diacritic: "ِ", name: "zer", sound: "i" },
{ diacritic: "ُ", name: "pesh", sound: "U" },
]
{ diacritic: "َ", name: "zwar", sound: "a" },
{ diacritic: "ٙ", name: "zwarakay", sound: "u" },
{ diacritic: "ِ", name: "zer", sound: "i" },
{ diacritic: "ُ", name: "pesh", sound: "U" },
];
<table className="table">
<thead>
<tr>
<th scope="col">Diacritic</th>
<th scope="col">Name</th>
<th scope="col">Sound</th>
</tr>
</thead>
<tbody>
{diacritics.map((d) => (
<tr key={d.diacritic}>
<td>
<div className="h2">◌{d.diacritic}</div>
</td>
<td>{d.name}</td>
<td>{d.sound}</td>
</tr>
))}
</tbody>
<thead>
<tr>
<th scope="col">Diacritic</th>
<th scope="col">Name</th>
<th scope="col">Sound</th>
</tr>
</thead>
<tbody>
{diacritics.map((d) => (
<tr key={d.diacritic}>
<td>
<div className="h2">◌{d.diacritic}</div>
</td>
<td>{d.name}</td>
<td>{d.sound}</td>
</tr>
))}
</tbody>
</table>
## Other diacritics
## Other diacritics

View File

@ -7,8 +7,8 @@ import Link from "../../components/Link";
import { translatePhonetics } from "@lingdocs/ps-react";
export const exText = {
p: "دا خو ډېره ښه خبره ده چې ټول په پښتو کې لیکلی شي.",
f: "daa kho Dera xa khabura da che Tol pu puxto ke leekuley shee",
p: "دا خو ډېره ښه خبره ده چې ټول په پښتو کې لیکلی شي.",
f: "daa kho Dera xa khabura da che Tol pu puxto ke leekulay shee",
};
Although Pashto is written using the Arabic script, it is often written with latin-based phonetics in dictionaries or other places to show more information about how to pronounce the vowels of the word, or to show where the emphasis of the word is placed.
@ -21,9 +21,7 @@ There have been many of different systems or conventions for writing Pashto in p
##### In Pashto
<p dir="rtl">
{exText.p}
</p>
<p dir="rtl">{exText.p}</p>
##### In LingDocs Pashto Phonetics
@ -31,10 +29,12 @@ There have been many of different systems or conventions for writing Pashto in p
##### In IPA
<p>{translatePhonetics(exText.f, {
<p>
{translatePhonetics(exText.f, {
system: "ipa",
dialect: "standard",
})}</p>
})}
</p>
A couple of things to note about this system:
@ -53,4 +53,4 @@ In order to show which syllable the emphasis falls on in a word, an accent (´)
### Seperating sounds with `
If two sounds need to go right next to each other without blending a backtick (\`) is used to keep them apart. For example, **fas\`ha** is pronounced "fas-ha", not "fasha".
If two sounds need to go right next to each other without blending a backtick (\`) is used to keep them apart. For example, **fas\`ha** is pronounced "fas-ha", not "fasha".

View File

@ -3,9 +3,9 @@ title: The Five ی's
---
import {
defaultTextOptions as opts,
Examples,
InlinePs,
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link";
@ -16,7 +16,12 @@ The five ی letters (<InlinePs opts={opts} ps={{ p: "پینځه یېګانې", f
Below are the five ی's as they are used in most dictionaries, written material, and in education and official language in Afghanistan. Click to hear the sound of each letter.
<table className="table table-bordered my-3 text-center" style={{ margin: "0 auto", maxWidth: "400px" }}>
#### Pure vowels (mouth stays still)
<table
className="table table-bordered my-3 text-center"
style={{ margin: "0 auto", maxWidth: "400px" }}
>
<thead>
<tr>
<th scope="col">Letter</th>
@ -25,68 +30,126 @@ Below are the five ی's as they are used in most dictionaries, written material,
</tr>
</thead>
<tbody>
<tr className="clickable" onClick={() => document.getElementById("ey").play()}>
<td className="h4">ی</td>
<td className="h5">ey</td>
<td>ai</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("e").play()}>
<td className="h4">ې</td>
<td className="h5">e</td>
<td>e</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("ee").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("ee").play()}
>
<td className="h4">ي</td>
<td className="h5">ee</td>
<td>i</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("uy").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("e").play()}
>
<td className="h4">ې</td>
<td className="h5">e</td>
<td>e</td>
</tr>
</tbody>
</table>
#### Dipthongs (pure vowel + y)
<table
className="table table-bordered my-3 text-center"
style={{ margin: "0 auto", maxWidth: "400px" }}
>
<thead>
<tr>
<th scope="col">Letter</th>
<th scope="col">Phonetics</th>
<th scope="col">IPA Approx.</th>
</tr>
</thead>
<tbody>
<tr
className="clickable"
onClick={() => document.getElementById("ay").play()}
>
<td className="h4">ی</td>
<td className="h5">ay</td>
<td>aj</td>
</tr>
<tr
className="clickable"
onClick={() => document.getElementById("uy").play()}
>
<td className="h4">ۍ</td>
<td className="h5">uy</td>
<td>əj</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("eyy").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("ey").play()}
>
<td className="h4">ئ</td>
<td className="h5">eyy</td>
<td className="h5">ey</td>
<td>ɛ̝j</td>
</tr>
</tbody>
</table>
<audio id="ey" preload="auto"><source src="/audio/ey.m4a" /></audio>
<audio id="e" preload="auto"><source src="/audio/e.m4a" /></audio>
<audio id="ee" preload="auto"><source src="/audio/ee.m4a" /></audio>
<audio id="uy" preload="auto"><source src="/audio/uy.m4a" /></audio>
<audio id="eyy" preload="auto"><source src="/audio/eyy.m4a" /></audio>
<audio id="ay" preload="auto">
<source src="/audio/ey.m4a" />
</audio>
<audio id="e" preload="auto">
<source src="/audio/e.m4a" />
</audio>
<audio id="ee" preload="auto">
<source src="/audio/ee.m4a" />
</audio>
<audio id="uy" preload="auto">
<source src="/audio/uy.m4a" />
</audio>
<audio id="ey" preload="auto">
<source src="/audio/eyy.m4a" />
</audio>
Now let's take a look at the different letters. For each letter we'll see what it's called and where it's used:
### ی - ey
### ی - ay
#### Names:
- <InlinePs opts={opts} ps={{ p: "نارینه یې", f: "naareená ye" }} />
- <InlinePs opts={opts} ps={{ p: "بې ټکو یې", f: "be Túko ye" }} />
- <InlinePs opts={opts} ps={{ p: "نرمه یې", f: "narma ye" }} />
- <InlinePs opts={opts} ps={{ p: "نارینه یې", f: "naareená ye" }} />
- <InlinePs opts={opts} ps={{ p: "بې ټکو یې", f: "be Túko ye" }} />
- <InlinePs opts={opts} ps={{ p: "نرمه یې", f: "narma ye" }} />
#### Used in:
- the end of *masculine singular* nouns, adjectives, and participles
- the end of _masculine singular_ nouns, adjectives, and participles
- <InlinePs opts={opts} ps={{ p: "سړی", f: "saRéy", e: "man" }} />
- <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRey", e: "tired" }} />
- <InlinePs opts={opts} ps={{ p: "ما ته لیدلی", f: "maa tu leedúley", e: "I've seen you (masc.)" }} />
- <InlinePs opts={opts} ps={psmd({ p: "هغه هلته دی", f: "hagha halta dey", e: "He is there" })} />
- <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRay", e: "tired" }} />
- <InlinePs
opts={opts}
ps={{
p: "ما ته لیدلی",
f: "maa tu leedúlay",
e: "I've seen you (masc.)",
}}
/>
- <InlinePs
opts={opts}
ps={psmd({ p: "هغه هلته دی", f: "hagha halta day", e: "He is there" })}
/>
- the middle of words
- <InlinePs opts={opts} ps={{ p: "خیر", f: "kheyr" }} />
- <InlinePs opts={opts} ps={{ p: "پیل", f: "peyl" }} />
- <InlinePs opts={opts} ps={{ p: "خیر", f: "khayr" }} />
- <InlinePs opts={opts} ps={{ p: "پیل", f: "payl" }} />
- the non-inflecting tail in modal verbs
- <InlinePs opts={opts} ps={psmd({ p: "زه تل**ی** شم", f: "zu tl**éy** shum", e: "I can go" })} />
- <InlinePs opts={opts} ps={psmd({ p: "زه تل**ی** شي", f: "zu tl**éy** shee", e: "She can go" })} />
- <InlinePs
opts={opts}
ps={psmd({ p: "زه تل**ی** شم", f: "zu tl**éy** shum", e: "I can go" })}
/>
- <InlinePs
opts={opts}
ps={psmd({ p: "زه تل**ی** شي", f: "zu tl**éy** shee", e: "She can go" })}
/>
**Note:** This letter is also used as "y" sound (second part of a dipthong) after long vowels at the end of words. For example:
- <InlinePs opts={opts} ps={{ p: "چای", f: "chaay", e: "tea" }} />
- <InlinePs opts={opts} ps={{ p: "زوی", f: "zooy", e: "son" }} />
- <InlinePs opts={opts} ps={{ p: "چای", f: "chaay", e: "tea" }} />
- <InlinePs opts={opts} ps={{ p: "زوی", f: "zooy", e: "son" }} />
### ې - e
@ -94,33 +157,61 @@ Now let's take a look at the different letters. For each letter we'll see what i
- <InlinePs opts={opts} ps={{ p: "اوږده یې", f: "ooGda ye" }} />
#### Used in:
#### Used in:
- the end of feminine nouns, adjectives, and participles
- <InlinePs opts={opts} ps={{ p: "ملګرې", f: "malgúre", e: "female friend" }} />
- <InlinePs
opts={opts}
ps={{ p: "ملګرې", f: "malgúre", e: "female friend" }}
/>
- <InlinePs opts={opts} ps={{ p: "ښځې", f: "xúdze", e: "women" }} />
- <InlinePs opts={opts} ps={{ p: "ستړې", f: "stúRe", e: "tired" }} />
- <InlinePs opts={opts} ps={{ p: "ما ته لیدلې", f: "maa tu leedúle", e: "I've seen you (fem.)" }} />
- <InlinePs
opts={opts}
ps={{ p: "ما ته لیدلې", f: "maa tu leedúle", e: "I've seen you (fem.)" }}
/>
- the end of the second person singular verbs and equatives
- <InlinePs opts={opts} ps={{ p: "چېرته ځې؟", f: "cherta dze?", e: "Where are you going?" }} />
- <InlinePs opts={opts} ps={{ p: "ته چېرته یې؟", f: "tu cherta ye?", e: "Where are you?" }} />
- <InlinePs opts={opts} ps={{ p: "ته چېرته وې؟", f: "tu cherta we?", e: "Where were you?" }} />
- <InlinePs
opts={opts}
ps={{ p: "چېرته ځې؟", f: "cherta dze?", e: "Where are you going?" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "ته چېرته یې؟", f: "tu cherta ye?", e: "Where are you?" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "ته چېرته وې؟", f: "tu cherta we?", e: "Where were you?" }}
/>
- the end of third person feminine plural past-tense verbs
- <InlinePs opts={opts} ps={{ p: "انجونې کېناستې", f: "injóone kénaaste", e: "The girls sat down." }} />
- <InlinePs
opts={opts}
ps={{
p: "انجونې کېناستې",
f: "injóone kénaaste",
e: "The girls sat down.",
}}
/>
- the end of particles, mini-pronouns, and sandwiches
- <InlinePs opts={opts} ps={{ p: "بې", f: "be", e: "without-" }} />
- <InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st Pers. Sing. Mini-Pronoun" }} />
- <InlinePs opts={opts} ps={{ p: "په ... کې", f: "pu ... ke", e: "in ..." }} />
- <InlinePs
opts={opts}
ps={{ p: "مې", f: "me", e: "1st Pers. Sing. Mini-Pronoun" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "په ... کې", f: "pu ... ke", e: "in ..." }}
/>
- the middle of words
- <InlinePs opts={opts} ps={{ p: "وېره", f: "wéra", e: "fear" }} />
- <InlinePs opts={opts} ps={{ p: "تېر", f: "ter", e: "last" }} />
### ي - ee
### ي - ee
#### Names:
- <InlinePs opts={opts} ps={{ p: "څرګنده یې", f: "tsargúnda ye" }} />
- <InlinePs opts={opts} ps={{ p: "لنډه یې", f: "lúnDa ye" }} />
- <InlinePs opts={opts} ps={{ p: "څرګنده یې", f: "tsargúnda ye" }} />
- <InlinePs opts={opts} ps={{ p: "لنډه یې", f: "lúnDa ye" }} />
#### Used in:
@ -128,11 +219,27 @@ Now let's take a look at the different letters. For each letter we'll see what i
- <InlinePs opts={opts} ps={{ p: "دوستي", f: "dostee", e: "friendship" }} />
- <InlinePs opts={opts} ps={{ p: "قانوني", f: "qaanóonee", e: "legal" }} />
- the end of third person verbs
- <InlinePs opts={opts} ps={{ p: "هغه ځي", f: "hagha dzee", e: "He is going" }} />
- <InlinePs opts={opts} ps={{ p: "هغوي څه وکړي؟", f: "haghwee tsu óokRee?", e: "What should they do?" }} />
- <InlinePs
opts={opts}
ps={{ p: "هغه ځي", f: "hagha dzee", e: "He is going" }}
/>
- <InlinePs
opts={opts}
ps={{
p: "هغوي څه وکړي؟",
f: "haghwee tsu óokRee?",
e: "What should they do?",
}}
/>
- the end of inflected masculine nouns, adjectives, and participles
- <InlinePs opts={opts} ps={{ p: "د سړي نوم", f: "du saRee noom", e: "the man's name" }} />
- <InlinePs opts={opts} ps={{ p: "مونږ تللي یو", f: "moonG tlúlee yoo", e: "We've gone" }} />
- <InlinePs
opts={opts}
ps={{ p: "د سړي نوم", f: "du saRee noom", e: "the man's name" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "مونږ تللي یو", f: "moonG tlúlee yoo", e: "We've gone" }}
/>
- the middle of words
- <InlinePs opts={opts} ps={{ p: "ویده", f: "weedú", e: "asleep" }} />
- <InlinePs opts={opts} ps={{ p: "لیدل", f: "leedúl", e: "to see" }} />
@ -141,49 +248,78 @@ Now let's take a look at the different letters. For each letter we'll see what i
#### Names:
- <InlinePs opts={opts} ps={{ p: "ښځینه یې", f: "xudzeená ye" }} />
- <InlinePs opts={opts} ps={{ p: "لکۍ لرونکې یې", f: "lakúy laróonke ye" }} />
- <InlinePs opts={opts} ps={{ p: "تانیڅه یې", f: "taaneesa ye" }} />
- <InlinePs opts={opts} ps={{ p: "ښځینه یې", f: "xudzeená ye" }} />
- <InlinePs opts={opts} ps={{ p: "لکۍ لرونکې یې", f: "lakúy laróonke ye" }} />
- <InlinePs opts={opts} ps={{ p: "تانیڅه یې", f: "taaneesa ye" }} />
#### Used in:
- the end of feminine nouns and adjectives
- <InlinePs opts={opts} ps={{ p: "انجلۍ", f: "injulúy", e: "girl" }} />
- <InlinePs opts={opts} ps={{ p: "افغانۍ", f: "afghaanúy", e: "A female Afghan" }} />
- <InlinePs opts={opts} ps={{ p: "لومرۍ برخه", f: "loomRúy barkha", e: "The first section" }} />
- <InlinePs
opts={opts}
ps={{ p: "افغانۍ", f: "afghaanúy", e: "A female Afghan" }}
/>
- <InlinePs
opts={opts}
ps={{ p: "لومرۍ برخه", f: "loomRúy barkha", e: "The first section" }}
/>
**Note**: This is only used in nouns and adjectives when the accent is on the last syllable.
### ئ - eyy
### ئ - ey
#### Names:
- <InlinePs opts={opts} ps={{ p: "فعلي", f: "fi'lee ye" }} />
- <InlinePs opts={opts} ps={{ p: "امریه یې", f: "amriya ye" }} />
- <InlinePs opts={opts} ps={{ p: "فعلي", f: "fi'lee ye" }} />
- <InlinePs opts={opts} ps={{ p: "امریه یې", f: "amriya ye" }} />
#### Used in:
- the end of second person plural verbs and equatives
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته یئ؟", f: "taaso cherta yeyy?", e: "Where are you (pl.)?" }} />
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته وئ؟", f: "taaso cherta weyy?", e: "Where were you (pl.)?" }} />
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته ځئ؟", f: "taaso chetra dzeyy?", e: "Where are you going?" }} />
- <InlinePs opts={opts} ps={{ p: "جګ شئ!", f: "jig sheyy!", e: "Get up!" }} />
- <InlinePs
opts={opts}
ps={{
p: "تاسو چېرته یئ؟",
f: "taaso cherta yey?",
e: "Where are you (pl.)?",
}}
/>
- <InlinePs
opts={opts}
ps={{
p: "تاسو چېرته وئ؟",
f: "taaso cherta wey?",
e: "Where were you (pl.)?",
}}
/>
- <InlinePs
opts={opts}
ps={{
p: "تاسو چېرته ځئ؟",
f: "taaso chetra dzey?",
e: "Where are you going?",
}}
/>
- <InlinePs opts={opts} ps={{ p: "جګ شئ!", f: "jig shey!", e: "Get up!" }} />
## Some Important Notes
#### The ۍ vs. ئ confusion
Because the <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> and <InlinePs opts={opts} ps={{ p: "ئ", f: "eyy" }} /> sound so similar (and in some dialects may be identical in pronunciation) people often confuse them in writing. To avoid this confustion it's important to remember this *very simple rule*: ⚖
Because the <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> and <InlinePs opts={opts} ps={{ p: "ئ", f: "ey" }} /> sound similar people often confuse them in writing. To avoid this confustion it's important to remember this _very simple rule_: ⚖
- <InlinePs opts={opts} ps={{ p: "ئ", f: "eyy" }} /> is only used for 2nd person plural verb endings
- <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> is only used at the end of feminine nouns and adjectives
- <InlinePs opts={opts} ps={{ p: "ئ", f: "ey" }} /> is only used for 2nd person plural
verb endings
- <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> is only used at the end of feminine
nouns and adjectives
#### The ـئـ in loan-words
You will also see the ئ letter *in the middle* of some loan words where it indicates a glottal stop or "y" connecting sound, for example:
You will also see the ئ letter _in the middle_ of some loan words where it indicates a glottal stop or "y" connecting sound, for example:
- <InlinePs opts={opts} ps={{ p: "جائز", f: "jaa'iz", e: "permitted" }} />
- <InlinePs opts={opts} ps={{ p: "رئس", f: "ra'ees", e: "chief" }} />
- <InlinePs opts={opts} ps={{ p: "جائز", f: "jaa'iz", e: "permitted" }} />
- <InlinePs opts={opts} ps={{ p: "رئس", f: "ra'ees", e: "chief" }} />
## Writing Systems in Pakistan
@ -196,7 +332,10 @@ Here's a chart of 3 different systems used in Pakistan, with the differences fro
### Comparison Chart
<div className="my-3" style={{ overflowX: "auto" }}>
<table className="table table-bordered text-center" style={{ maxWidth: "500px", tableLayout: "fixed", margin: "0 auto" }}>
<table
className="table table-bordered text-center"
style={{ maxWidth: "500px", tableLayout: "fixed", margin: "0 auto" }}
>
<thead>
<tr>
<th scope="col">AF</th>
@ -207,37 +346,66 @@ Here's a chart of 3 different systems used in Pakistan, with the differences fro
</tr>
</thead>
<tbody>
<tr className="clickable" onClick={() => document.getElementById("ey").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("ay").play()}
>
<td className="h5">ی</td>
<td className="h5">ey</td>
<td className="h5" style={highlight}>ے</td>
<td className="h5" style={highlight}>ے</td>
<td className="h5" style={highlight}>ے</td>
<td className="h5">ay</td>
<td className="h5" style={highlight}>
ے
</td>
<td className="h5" style={highlight}>
ے
</td>
<td className="h5" style={highlight}>
ے
</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("e").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("e").play()}
>
<td className="h5">ې</td>
<td className="h5">e</td>
<td className="h5">ې</td>
<td className="h5">ې</td>
<td className="h5" style={highlight}>ے</td>
<td className="h5" style={highlight}>
ے
</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("ee").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("ee").play()}
>
<td className="h5">ي</td>
<td className="h5">ee</td>
<td className="h5">ي</td>
<td className="h5" style={highlight}>ی</td>
<td className="h5" style={highlight}>ی</td>
<td className="h5" style={highlight}>
ی
</td>
<td className="h5" style={highlight}>
ی
</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("uy").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("uy").play()}
>
<td className="h5">ۍ</td>
<td className="h5">uy</td>
<td className="h5">ۍ</td>
<td className="h5">ۍ</td>
<td className="h5" style={highlight}>ئ</td>
<td className="h5" style={highlight}>
ئ
</td>
</tr>
<tr className="clickable" onClick={() => document.getElementById("eyy").play()}>
<tr
className="clickable"
onClick={() => document.getElementById("ey").play()}
>
<td className="h5">ئ</td>
<td className="h5">eyy</td>
<td className="h5">ey</td>
<td className="h5">ئ</td>
<td className="h5">ئ</td>
<td className="h5">ئ</td>
@ -248,9 +416,9 @@ Here's a chart of 3 different systems used in Pakistan, with the differences fro
##### Pakistani with ي
This is used by the [Pashto Academy of Peshawer University](http://khyber.org/pacademy/#) and in many current publications. The only big difference from standard Afghan spelling is that for the "ey" sound the Urdu ے letter is used instead of ی.
This is used by the [Pashto Academy of Peshawer University](http://khyber.org/pacademy/#) and in many current publications. The only big difference from standard Afghan spelling is that for the "ay" sound the Urdu ے letter is used instead of ی.
##### Pakistani with ی
##### Pakistani with ی
This is used in [Speaking Pakistani Pukhto](https://www.speakingpashto.com) and in much written material in Pakistan. This system differs more from standard Afghan spelling because in addition to the Urdu ے being used, the ی is used for "ee" instead.
@ -273,8 +441,12 @@ Earlier we noted that ـئـ shows up in the middle of loan words, but in Pakist
</thead>
<tbody>
<tr>
<td><InlinePs opts={opts} ps={{ p: "هغه وایي", f: "haghá waayee" }} /></td>
<td><InlinePs opts={opts} ps={{ p: "هغه وائي", f: "haghá waayee" }} /></td>
<td>
<InlinePs opts={opts} ps={{ p: "هغه وایي", f: "haghá waayee" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "هغه وائي", f: "haghá waayee" }} />
</td>
</tr>
</tbody>
</table>
@ -292,16 +464,28 @@ Instead of the ی at the end of long-vowel dipthongs, the letter ئ is used in P
</thead>
<tbody>
<tr>
<td><InlinePs opts={opts} ps={{ p: "چای", f: "chaay" }} /></td>
<td><InlinePs opts={opts} ps={{ p: "چائ", f: "chaay" }} /></td>
<td>
<InlinePs opts={opts} ps={{ p: "چای", f: "chaay" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "چائ", f: "chaay" }} />
</td>
</tr>
<tr>
<td><InlinePs opts={opts} ps={{ p: "زوی", f: "zooy" }} /></td>
<td><InlinePs opts={opts} ps={{ p: "زوئ", f: "zooy" }} /></td>
<td>
<InlinePs opts={opts} ps={{ p: "زوی", f: "zooy" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "زوئ", f: "zooy" }} />
</td>
</tr>
<tr>
<td><InlinePs opts={opts} ps={{ p: "خدای", f: "khUdaay" }} /></td>
<td><InlinePs opts={opts} ps={{ p: "خدائ", f: "khUdaay" }} /></td>
<td>
<InlinePs opts={opts} ps={{ p: "خدای", f: "khUdaay" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "خدائ", f: "khUdaay" }} />
</td>
</tr>
</tbody>
</table>
@ -312,7 +496,7 @@ In Pakistan, Pashto is more of a spoken language than a written one. Because of
#### ے vs ې
One very common mistake in Pakistan is the use of ے instead of ې. This might be because in the old writing system the letter ے was used for both <InlinePs opts={opts} ps={{ p: "ے", f: "ey" }} /> and <InlinePs opts={opts} ps={{ p: "ې", f: "e" }} />, but it is probably also due to a habit of <strong>inflecting words with ے as they are in Urdu</strong>.
One very common mistake in Pakistan is the use of ے instead of ې. This might be because in the old writing system the letter ے was used for both <InlinePs opts={opts} ps={{ p: "ے", f: "ay" }} /> and <InlinePs opts={opts} ps={{ p: "ې", f: "e" }} />, but it is probably also due to a habit of <strong>inflecting words with ے as they are in Urdu</strong>.
<table className="table">
<thead>
@ -326,16 +510,24 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<td>
<Examples opts={opts}>
{[
{ p: "د زپې او لهجې په حواله به خبرې کېږي", f: "du jzube aw lahje pu hawaala ba khabure keGee", e: "There will be talk about language and dialect" }
{
p: "د زپې او لهجې په حواله به خبرې کېږي",
f: "du jzube aw lahje pu hawaala ba khabure keGee",
e: "There will be talk about language and dialect",
},
]}
</Examples>
</td>
<td>
<Examples opts={opts}>
{[
{ p: "د زپې او لهجے په حواله به خبرے کېږي", f: "du jzube aw lahje pu hawaala ba khabure keGee", e: "There will be talk about language and dialect" }
]}
</Examples>
<Examples opts={opts}>
{[
{
p: "د زپې او لهجے په حواله به خبرے کېږي",
f: "du jzube aw lahje pu hawaala ba khabure keGee",
e: "There will be talk about language and dialect",
},
]}
</Examples>
</td>
</tr>
</tbody>
@ -347,10 +539,19 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}>
{[
{ p: "دانه دانه چې یو ځای شي، غر ترې جوړ شي", f: "daana daana che yo dzaay shee, ghur tre joR shee" },
{ p: "په پوښتنه پوښتنه سړی کابل ته رسېدی شي", f: "pu poxtuna poxtuna, saRey kaabul ta rasedey shee" },
{ p: `د کوچي ښځه وايي، زما خاوند کوچی دی، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` },
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` },
{
p: "دانه دانه چې یو ځای شي، غر ترې جوړ شي",
f: "daana daana che yo dzaay shee, ghur tre joR shee",
},
{
p: "په پوښتنه پوښتنه سړی کابل ته رسېدی شي",
f: "pu poxtuna poxtuna, saRay kaabul ta raseday shee",
},
{
p: `د کوچي ښځه وايي، زما خاوند کوچی دی، او زه هم کوچۍ یم `,
f: `du kochee xudza waayee, zmaa khaawund kochéy day, aw zu hum kochúy yum.`,
},
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keney` },
]}
</Examples>
@ -358,21 +559,39 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}>
{[
{ p: "دانه دانه چې یو ځائ شي، غر ترې جوړ شي", f: "daana daana che yo dzaay shee, ghur tre joR shee" },
{ p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شي", f: "pu poxtuna poxtuna, saRey kaabul ta rasedey shee" },
{ p: `د کوچي ښځه وائي، زما خاوند کوچے دے، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` },
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` },
{
p: "دانه دانه چې یو ځائ شي، غر ترې جوړ شي",
f: "daana daana che yo dzaay shee, ghur tre joR shee",
},
{
p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شي",
f: "pu poxtuna poxtuna, saRay kaabul ta raseday shee",
},
{
p: `د کوچي ښځه وائي، زما خاوند کوچے دے، او زه هم کوچۍ یم `,
f: `du kochee xudza waayee, zmaa khaawund kochéy day, aw zu hum kochúy yum.`,
},
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keney` },
]}
</Examples>
##### Pakistani with ی
##### Pakistani with ی
<Examples opts={opts}>
{[
{ p: "دانه دانه چې یو ځائ شی، غر ترې جوړ شی", f: "daana daana che yo dzaay shee, ghur tre joR shee" },
{ p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شی", f: "pu poxtuna poxtuna, saRey kaabul ta rasedey shee" },
{ p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` },
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` },
{
p: "دانه دانه چې یو ځائ شی، غر ترې جوړ شی",
f: "daana daana che yo dzaay shee, ghur tre joR shee",
},
{
p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شی",
f: "pu poxtuna poxtuna, saRay kaabul ta raseday shee",
},
{
p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچۍ یم `,
f: `du kochee xudza waayee, zmaa khaawund kochéy day, aw zu hum kochúy yum.`,
},
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keney` },
]}
</Examples>
@ -380,9 +599,18 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}>
{[
{ p: "دانه دانه چه یو ځائ شی، غر ترے جوړ شی", f: "daana daana che yo dzaay shee, ghur tre joR shee" },
{ p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شی", f: "pu poxtuna poxtuna, saRey kaabul ta rasedey shee" },
{ p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچئ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` },
{ p: `تاسو کرسئ کے کېنئ`, f: `taaso kUrsúy ke keneyy` },
{
p: "دانه دانه چه یو ځائ شی، غر ترے جوړ شی",
f: "daana daana che yo dzaay shee, ghur tre joR shee",
},
{
p: "په پوښتنه پوښتنه سړے کابل ته رسېدے شی",
f: "pu poxtuna poxtuna, saRay kaabul ta raseday shee",
},
{
p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچئ یم `,
f: `du kochee xudza waayee, zmaa khaawund kochéy day, aw zu hum kochúy yum.`,
},
{ p: `تاسو کرسئ کے کېنئ`, f: `taaso kUrsúy ke keney` },
]}
</Examples>

View File

@ -2,10 +2,7 @@
title: Typing Issues ⌨
---
import {
defaultTextOptions as opts,
InlinePs,
} from "@lingdocs/ps-react";
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
## Finding a good keyboard 📱
@ -18,18 +15,18 @@ Typing proper Pashto on a phone can be difficult, and so many people make do wit
When you write a ی or a ي, they both appear as a ـیـ in the middle of words. So when you see a ـیـ it can be either:
- a "ey" sound
- a "ay" sound
- a "ee" sound
- a "y" sound
This can lead to confusion when typing or searching for things online. For example when typing the word <InlinePs opts={opts} ps={{ p: "مینه", f: "meena" }} /> should you use a ی or a ي in the middle of the word? 🤷‍♂️ Does it matter? Both look exactly the same, but when you type <kbd>ctrl</kbd> + <kbd>f</kbd> and try to search for it, it makes a big difference! Try it on these words:
This can lead to confusion when typing or searching for things online. For example when typing the word <InlinePs opts={opts} ps={{ p: "مینه", f: "meena" }} /> should you use a ی or a ي in the middle of the word? 🤷‍♂️ Does it matter? Both look exactly the same, but when you type <kbd>ctrl</kbd> + <kbd>f</kbd> and try to search for it, it makes a big difference! Try it on these words:
- مینه (spelled with ی)
- مينه (spelled with ي)
It seems best to always **use ی when typing in the middle of words**, to avoid confusion. This seems to be the most common practice, but it's not always the case. If you use [qamosona.com](https://qamosona.com/), for example, you will find that the middle of words are often spelled with a ي and so you will need to keep that in mind and use ي in the middle when searching.
It seems best to always **use ی when typing in the middle of words**, to avoid confusion. This seems to be the most common practice, but it's not always the case. If you use [qamosona.com](https://qamosona.com/), for example, you will find that the middle of words are often spelled with a ي and so you will need to keep that in mind and use ي in the middle when searching.
## ی vs. ى
## ی vs. ى
Depending on the keyboard used, you might get one of two basically identical looking versions of ی. This can cause massive confusion when you search for words. 😖

View File

@ -1,17 +1,15 @@
import { useState } from "react";
import {
comparePs,
} from "../../lib/game-utils";
import { comparePs } from "../../lib/game-utils";
import GameCore from "../GameCore";
import {
Types as T,
renderEP,
compileEP,
randFromArray,
defaultTextOptions as opts,
Examples,
blank,
isPashtoScript,
Types as T,
renderEP,
compileEP,
randFromArray,
defaultTextOptions as opts,
Examples,
blank,
isPashtoScript,
} from "@lingdocs/ps-react";
import { wordQuery } from "../../words/words";
import { makePool } from "../../lib/pool";
@ -21,204 +19,237 @@ import WordCard from "../../components/WordCard";
const amount = 12;
const timeLimit = 140;
const pronouns: T.Person[] = [
0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11,
];
const pronouns: T.Person[] = [0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11];
const adjectives = wordQuery("adjectives", [
"muR",
"sheen",
"soor",
"rixtooney",
"stuRey",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGey",
"koochney",
"pradey",
"zoR",
"moR",
"khoG",
"droond",
"loomRey",
"Roond",
"prot",
"soR",
"post",
"pokh",
"rooN",
"woR",
"kooN",
"koG",
"muR",
"sheen",
"soor",
"rixtoonay",
"stuRay",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGay",
"koochnay",
"praday",
"zoR",
"moR",
"khoG",
"droond",
"loomRay",
"Roond",
"prot",
"soR",
"post",
"pokh",
"rooN",
"woR",
"kooN",
"koG",
]);
type Question = {
EPS: T.EPSelectionComplete,
phrase: { ps: T.PsString[], e?: string[] },
adjective: T.Rendered<T.AdjectiveSelection>,
EPS: T.EPSelectionComplete;
phrase: { ps: T.PsString[]; e?: string[] };
adjective: T.Rendered<T.AdjectiveSelection>;
};
export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: boolean, id: string, link: string, level: "hints" | "no-hints" }) {
const pronounPool = makePool(pronouns);
const adjPool = makePool(adjectives);
function getQuestion(): Question {
const subject: T.NPSelection = {
type: "NP",
selection: {
type: "pronoun",
person: pronounPool(),
distance: randFromArray(["far", "far", "near"]),
},
};
const EPS = makeEPS(subject, adjPool(), "present");
const EP = renderEP(EPS);
const compiled = compileEP(
EP,
true,
{ predicate: true },
);
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
EPS,
phrase,
adjective: getAdjectiveFromRendered(EP),
};
export default function EPAdjGame({
inChapter,
id,
link,
level,
}: {
inChapter: boolean;
id: string;
link: string;
level: "hints" | "no-hints";
}) {
const pronounPool = makePool(pronouns);
const adjPool = makePool(adjectives);
function getQuestion(): Question {
const subject: T.NPSelection = {
type: "NP",
selection: {
type: "pronoun",
person: pronounPool(),
distance: randFromArray(["far", "far", "near"]),
},
};
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(value);
}
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct = comparePs(answer, question.adjective.ps);
if (correct) {
setAnswer("");
}
callback(correct);
}
return <div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples lineHeight={1} opts={opts}>{
addUserAnswer(answer, question.phrase.ps[0])
}</Examples>
{question.phrase.e && question.phrase.e.map((e, i) => (
<div key={e+i} className="text-muted">{e}</div>
))}
</div>
<div className="d-flex flex-row justify-content-center mb-3">
<WordCard
entry={question.adjective.entry}
showHint={level === "hints"}
selection={undefined}
/>
</div>
<form onSubmit={handleSubmit}>
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
<button className="btn btn-primary" type="submit">submit </button>
</div>
</form>
</div>
}
function Instructions() {
return <div>
<p className="lead">
Fill in the blank with the correct inflection of the adjective
</p>
</div>;
}
const EPS = makeEPS(subject, adjPool(), "present");
const EP = renderEP(EPS);
const compiled = compileEP(EP, true, { predicate: true });
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
EPS,
phrase,
adjective: getAdjectiveFromRendered(EP),
};
}
return <GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const handleInput = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(value);
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct = comparePs(answer, question.adjective.ps);
if (correct) {
setAnswer("");
}
callback(correct);
};
return (
<div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples lineHeight={1} opts={opts}>
{addUserAnswer(answer, question.phrase.ps[0])}
</Examples>
{question.phrase.e &&
question.phrase.e.map((e, i) => (
<div key={e + i} className="text-muted">
{e}
</div>
))}
</div>
<div className="d-flex flex-row justify-content-center mb-3">
<WordCard
entry={question.adjective.entry}
showHint={level === "hints"}
selection={undefined}
/>
</div>
<form onSubmit={handleSubmit}>
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
<button className="btn btn-primary" type="submit">
submit
</button>
</div>
</form>
</div>
);
}
function Instructions() {
return (
<div>
<p className="lead">
Fill in the blank with the correct inflection of the adjective
</p>
</div>
);
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/>
};
);
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
return <div>
<div>
{question.adjective.ps.reduce(((accum, curr, i): JSX.Element[] => (
[
...accum,
...i > 0 ? [<span className="text-muted"> or </span>] : [],
<span key={i}>{curr.p}</span>,
]
)), [] as JSX.Element[])}
</div>
</div>;
function DisplayCorrectAnswer({
question,
}: {
question: Question;
}): JSX.Element {
return (
<div>
<div>
{question.adjective.ps.reduce(
(accum, curr, i): JSX.Element[] => [
...accum,
...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>{curr.p}</span>,
],
[] as JSX.Element[]
)}
</div>
</div>
);
}
function addUserAnswer(a: string, ps: T.PsString): T.PsString {
if (!a) return ps;
const field = isPashtoScript(a) ? "p" : "f";
return {
...ps,
[field]: ps[field].replace(blank[field], a),
};
if (!a) return ps;
const field = isPashtoScript(a) ? "p" : "f";
return {
...ps,
[field]: ps[field].replace(blank[field], a),
};
}
function getAdjectiveFromRendered(EP: T.EPRendered): T.Rendered<T.AdjectiveSelection> {
const pred = getPredicateSelectionFromBlocks(EP.blocks);
if (pred.selection.type !== "complement" || pred.selection.selection.type !== "adjective") {
throw new Error("adjective not found in predicate");
}
return pred.selection.selection;
function getAdjectiveFromRendered(
EP: T.EPRendered
): T.Rendered<T.AdjectiveSelection> {
const pred = getPredicateSelectionFromBlocks(EP.blocks);
if (
pred.selection.type !== "complement" ||
pred.selection.selection.type !== "adjective"
) {
throw new Error("adjective not found in predicate");
}
return pred.selection.selection;
}
function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry, tense: T.EquativeTense): T.EPSelectionComplete {
return {
blocks: [
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
},
],
predicate: {
type: "predicateSelection",
selection: {
type: "complement",
selection: {
type: "adjective",
entry: predicate,
sandwich: undefined,
},
},
function makeEPS(
subject: T.NPSelection,
predicate: T.AdjectiveEntry,
tense: T.EquativeTense
): T.EPSelectionComplete {
return {
blocks: [
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
equative: {
tense,
negative: false,
},
],
predicate: {
type: "predicateSelection",
selection: {
type: "complement",
selection: {
type: "adjective",
entry: predicate,
sandwich: undefined,
},
omitSubject: false,
};
}
},
},
equative: {
tense,
negative: false,
},
omitSubject: false,
};
}

View File

@ -1,16 +1,16 @@
import genderColors from "../../lib/gender-colors";
import GameCore from "../GameCore";
import {
Types as T,
Examples,
defaultTextOptions as opts,
endsWith,
pashtoConsonants,
inflectWord,
isUnisexSet,
typePredicates as tp,
firstVariation,
randFromArray,
Types as T,
Examples,
defaultTextOptions as opts,
endsWith,
pashtoConsonants,
inflectWord,
isUnisexSet,
typePredicates as tp,
firstVariation,
randFromArray,
} from "@lingdocs/ps-react";
import { nouns } from "../../words/words";
import { categorize } from "../../lib/categorize";
@ -19,138 +19,199 @@ const genders: T.Gender[] = ["masc", "fem"];
const mascNouns = nouns.filter(tp.isMascNounEntry);
const femNouns = [
...nouns.filter(tp.isFemNounEntry),
...getFemVersions(mascNouns.filter(tp.isUnisexNounEntry)),
...nouns.filter(tp.isFemNounEntry),
...getFemVersions(mascNouns.filter(tp.isUnisexNounEntry)),
];
const types = {
masc: categorize<T.MascNounEntry, {
consonantMasc: T.MascNounEntry[],
eyMasc: T.MascNounEntry[],
uMasc: T.MascNounEntry[],
yMasc: T.MascNounEntry[],
}>(mascNouns, {
consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]),
eyMasc: endsWith({ p: "ی", f: "ey" }),
uMasc: endsWith({ p: "ه", f: "u" }),
yMasc: endsWith([{ p: "ای", f: "aay" }, { p: "وی", f: "ooy" }]),
}),
fem: categorize<T.FemNounEntry, {
aaFem: T.FemNounEntry[],
eeFem: T.FemNounEntry[],
uyFem: T.FemNounEntry[],
aFem: T.FemNounEntry[],
eFem: T.FemNounEntry[],
}>(femNouns, {
aaFem: endsWith({ p: "ا", f: "aa" }),
eeFem: endsWith({ p: "ي", f: "ee" }),
uyFem: endsWith({ p: "ۍ" }),
aFem: endsWith([{ p: "ه", f: "a" }, { p: "ح", f: "a" }]),
eFem: endsWith({ p: "ې" }),
}),
masc: categorize<
T.MascNounEntry,
{
consonantMasc: T.MascNounEntry[];
eyMasc: T.MascNounEntry[];
uMasc: T.MascNounEntry[];
yMasc: T.MascNounEntry[];
}
>(mascNouns, {
consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]),
eyMasc: endsWith({ p: "ی", f: "ey" }),
uMasc: endsWith({ p: "ه", f: "u" }),
yMasc: endsWith([
{ p: "ای", f: "aay" },
{ p: "وی", f: "ooy" },
]),
}),
fem: categorize<
T.FemNounEntry,
{
aaFem: T.FemNounEntry[];
eeFem: T.FemNounEntry[];
uyFem: T.FemNounEntry[];
aFem: T.FemNounEntry[];
eFem: T.FemNounEntry[];
}
>(femNouns, {
aaFem: endsWith({ p: "ا", f: "aa" }),
eeFem: endsWith({ p: "ي", f: "ee" }),
uyFem: endsWith({ p: "ۍ" }),
aFem: endsWith([
{ p: "ه", f: "a" },
{ p: "ح", f: "a" },
]),
eFem: endsWith({ p: "ې" }),
}),
};
function getFemVersions(uns: T.UnisexNounEntry[]): T.FemNounEntry[] {
return uns.map((n) => {
const infs = inflectWord(n);
if (!infs || !infs.inflections) return undefined;
if (!isUnisexSet(infs.inflections)) return undefined;
return {
e: n.e,
...infs.inflections.fem[0][0],
} as T.DictionaryEntry;
}).filter(n => !!n) as T.FemNounEntry[];
return uns
.map((n) => {
const infs = inflectWord(n);
if (!infs || !infs.inflections) return undefined;
if (!isUnisexSet(infs.inflections)) return undefined;
return {
e: n.e,
...infs.inflections.fem[0][0],
} as T.DictionaryEntry;
})
.filter((n) => !!n) as T.FemNounEntry[];
}
function flatten<T>(o: Record<string, T[]>): T[] {
return Object.values(o).flat();
return Object.values(o).flat();
}
function nounNotIn(st: T.NounEntry[]): (n: T.NounEntry | T.DictionaryEntry) => boolean {
return (n: T.DictionaryEntry) => !st.find(x => x.ts === n.ts);
function nounNotIn(
st: T.NounEntry[]
): (n: T.NounEntry | T.DictionaryEntry) => boolean {
return (n: T.DictionaryEntry) => !st.find((x) => x.ts === n.ts);
}
type CategorySet = Record<string, T.NounEntry[]>;
// for some reason we need to use this CategorySet type here... 🤷‍♂️
const exceptions: Record<string, CategorySet> = {
masc: {
exceptionMasc: mascNouns.filter(nounNotIn(flatten(types.masc))),
},
fem: {
exceptionFem: femNouns.filter(nounNotIn(flatten(types.fem))),
},
masc: {
exceptionMasc: mascNouns.filter(nounNotIn(flatten(types.masc))),
},
fem: {
exceptionFem: femNouns.filter(nounNotIn(flatten(types.fem))),
},
};
const amount = 25;
type Question = T.DictionaryEntry;
export default function GenderGame({level, id, link, inChapter }: {
inChapter: boolean,
level: 1 | 2, id: string,
link: string,
export default function GenderGame({
level,
id,
link,
inChapter,
}: {
inChapter: boolean;
level: 1 | 2;
id: string;
link: string;
}) {
const wordPool = {...types};
const exceptionsPool = {...exceptions};
function getQuestion(): Question {
const base = level === 1
? wordPool
: randFromArray([wordPool, exceptionsPool]);
const gender = randFromArray(genders);
let typeToUse: string;
do {
typeToUse = randFromArray(Object.keys(base[gender]));
} while (!base[gender][typeToUse].length);
const question = randFromArray(base[gender][typeToUse]);
base[gender][typeToUse] = base[gender][typeToUse].filter((entry) => entry.ts !== question.ts);
return question;
const wordPool = { ...types };
const exceptionsPool = { ...exceptions };
function getQuestion(): Question {
const base =
level === 1 ? wordPool : randFromArray([wordPool, exceptionsPool]);
const gender = randFromArray(genders);
let typeToUse: string;
do {
typeToUse = randFromArray(Object.keys(base[gender]));
// @ts-ignore
} while (!base[gender][typeToUse].length);
// @ts-ignore
const question = randFromArray(base[gender][typeToUse]);
// @ts-ignore
base[gender][typeToUse] = base[gender][typeToUse].filter(
// @ts-ignore
(entry) => entry.ts !== question.ts
);
// @ts-ignore
return question;
}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
function check(gender: T.Gender) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question)
? "fem"
: "masc";
callback(gender === nounGender);
}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
function check(gender: T.Gender) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc";
callback(gender === nounGender);
}
return <div>
<div className="mb-4" style={{ fontSize: "larger" }}>
<Examples opts={opts}>{[
{
p: firstVariation(question.p),
f: firstVariation(question.f),
e: level === 2 ? firstVariation(question.e) : undefined,
}
]}</Examples>
</div>
<div className="mt-4">
<button style={{ background: genderColors.f, color: "black" }} className="btn btn-lg mr-3" onClick={() => check("fem")}>Feminine</button>
<button style={{ background: genderColors.m, color: "black" }} className="btn btn-lg ml-3" onClick={() => check("masc")}>Masculine</button>
</div>
return (
<div>
<div className="mb-4" style={{ fontSize: "larger" }}>
<Examples opts={opts}>
{[
{
p: firstVariation(question.p),
f: firstVariation(question.f),
e: level === 2 ? firstVariation(question.e) : undefined,
},
]}
</Examples>
</div>
}
function Instructions() {
return <div>
<h5>Choose the right gender for each word</h5>
{level === 2 && <div> Exceptions included...</div>}
<div className="mt-4">
<button
style={{ background: genderColors.f, color: "black" }}
className="btn btn-lg mr-3"
onClick={() => check("fem")}
>
Feminine
</button>
<button
style={{ background: genderColors.m, color: "black" }}
className="btn btn-lg ml-3"
onClick={() => check("masc")}
>
Masculine
</button>
</div>
}
</div>
);
}
function DisplayCorrectAnswer({ question }: { question: Question}) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc";
return <div className="my-2 text-center">
<button style={{ background: genderColors[nounGender === "masc" ? "m" : "f"], color: "black" }} className="btn btn-lg" disabled>
{nounGender === "masc" ? "Masculine" : "Feminine"}
</button>
</div>;
}
function Instructions() {
return (
<div>
<h5>Choose the right gender for each word</h5>
{level === 2 && <div> Exceptions included...</div>}
</div>
);
}
return <GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
amount={amount}
timeLimit={level === 1 ? 70 : 80}
Instructions={Instructions}
function DisplayCorrectAnswer({ question }: { question: Question }) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question)
? "fem"
: "masc";
return (
<div className="my-2 text-center">
<button
style={{
background: genderColors[nounGender === "masc" ? "m" : "f"],
color: "black",
}}
className="btn btn-lg"
disabled
>
{nounGender === "masc" ? "Masculine" : "Feminine"}
</button>
</div>
);
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
amount={amount}
timeLimit={level === 1 ? 70 : 80}
Instructions={Instructions}
/>
};
);
}

View File

@ -1,10 +1,10 @@
import GameCore from "../GameCore";
import {
Types as T,
getInflectionPattern,
Examples,
defaultTextOptions as opts,
firstVariation,
Types as T,
getInflectionPattern,
Examples,
defaultTextOptions as opts,
firstVariation,
} from "@lingdocs/ps-react";
import { makePool } from "../../lib/pool";
import { nouns, adjectives } from "../../words/words";
@ -14,137 +14,178 @@ const amount = 20;
const timeLimit = 150;
type Question = {
entry: T.NounEntry | T.AdjectiveEntry,
pattern: T.InflectionPattern,
}
const categories: { label: string, value: T.InflectionPattern }[] = [
{
label: "#1 Basic",
value: T.InflectionPattern.Basic,
},
{
label: "#2 Unstressed ی",
value: T.InflectionPattern.UnstressedEy,
},
{
label: "#3 Stressed ی",
value: T.InflectionPattern.StressedEy,
},
{
label: `#4 "Pashtoon"`,
value: T.InflectionPattern.Pashtun,
},
{
label: `#5 Short Squish`,
value: T.InflectionPattern.Squish,
},
{
label: "#6 Inan. Fem. ي",
value: T.InflectionPattern.FemInanEe,
},
{
label: "No Inflection",
value: T.InflectionPattern.None,
},
];
export default function InflectionPatterns({ inChapter, id, link, level }: { inChapter: boolean, id: string, link: string, level: 1 | 2 }) {
const w = [...nouns, ...adjectives]
.filter(level === 2 ? x => x : x => (tp.isUnisexNounEntry(x) || tp.isAdjectiveEntry(x) || (tp.isFemNounEntry(x) && tp.isPattern6FemEntry(x))))
.map(x => ({ entry: x, pattern: getInflectionPattern(x) }));
const words: Record<T.InflectionPattern, (T.NounEntry | T.AdjectiveEntry)[]> = {
0: w.filter(x => x.pattern === 0).map(x => x.entry),
1: w.filter(x => x.pattern === 1).map(x => x.entry),
2: w.filter(x => x.pattern === 2).map(x => x.entry),
3: w.filter(x => x.pattern === 3).map(x => x.entry),
4: w.filter(x => x.pattern === 4).map(x => x.entry),
5: w.filter(x => x.pattern === 5).map(x => x.entry),
6: w.filter(x => x.pattern === 6).map(x => x.entry),
};
const pools: Record<T.InflectionPattern, () => (T.NounEntry | T.AdjectiveEntry)> = {
0: makePool(words[0]),
1: makePool(words[1]),
2: makePool(words[2]),
3: makePool(words[3]),
4: makePool(words[4]),
5: makePool(words[5]),
6: makePool(words[6]),
}
const patternPool = makePool([
T.InflectionPattern.None,
T.InflectionPattern.Basic,
T.InflectionPattern.UnstressedEy,
T.InflectionPattern.StressedEy,
T.InflectionPattern.Pashtun,
T.InflectionPattern.Squish,
T.InflectionPattern.FemInanEe,
]);
function getQuestion(): Question {
const pattern = patternPool();
const entry = pools[pattern]();
if (getInflectionPattern(entry) !== pattern) {
throw Error("wrong pattern on word");
}
return { entry, pattern };
};
function Display({ question, callback }: QuestionDisplayProps<Question>) {
function handleChoice(ic: T.InflectionPattern) {
return callback(ic === question.pattern);
}
return <div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples opts={opts}>{[
{
p: firstVariation(question.entry.p),
f: firstVariation(question.entry.f),
e: `${firstVariation(question.entry.e)} - ${question.entry.c}`,
}
]}</Examples>
</div>
<div className="text-center">
<div className="row">
{categories.map(c => <div className="col" key={Math.random()}>
<button
style={{ width: "8rem", height: "4rem" }}
className="btn btn-outline-secondary mb-3"
onClick={() => handleChoice(c.value)}
>
{c.label}
</button>
</div>)}
</div>
</div>
</div>
}
function Instructions() {
return <div>
<p className="lead">Choose the inflection pattern that each noun/adjective follows</p>
</div>
}
return <GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/>
entry: T.NounEntry | T.AdjectiveEntry;
pattern: T.InflectionPattern;
};
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
const categories: { label: string; value: T.InflectionPattern }[] = [
{
label: "#1 Basic",
value: 1, // T.InflectionPattern.Basic,
},
{
label: "#2 Unstressed ی",
value: 2, // T.InflectionPattern.UnstressedAy,
},
{
label: "#3 Stressed ی",
value: 3, // T.InflectionPattern.StressedAy,
},
{
label: `#4 "Pashtoon"`,
value: 4, // T.InflectionPattern.Pashtun,
},
{
label: `#5 Short Squish`,
value: 5, // T.InflectionPattern.Squish,
},
{
label: "#6 Inan. Fem. ي",
value: 6, // T.InflectionPattern.FemInanEe,
},
{
label: "No Inflection",
value: 0, // T.InflectionPattern.None,
},
];
// callback(<div className="lead">
// {possibleCorrect.map(humanReadableTense).join(" or ")}
// </div>)
return <div>
<p className="lead">{categories.find(c => c.value === question.pattern)?.label}</p>
</div>;
export default function InflectionPatterns({
inChapter,
id,
link,
level,
}: {
inChapter: boolean;
id: string;
link: string;
level: 1 | 2;
}) {
const w = [...nouns, ...adjectives]
.filter(
level === 2
? (x) => x
: (x) =>
tp.isUnisexNounEntry(x) ||
tp.isAdjectiveEntry(x) ||
(tp.isFemNounEntry(x) && tp.isPattern6FemEntry(x))
)
.map((x) => ({ entry: x, pattern: getInflectionPattern(x) }));
const words: Record<T.InflectionPattern, (T.NounEntry | T.AdjectiveEntry)[]> =
{
0: w.filter((x) => x.pattern === 0).map((x) => x.entry),
1: w.filter((x) => x.pattern === 1).map((x) => x.entry),
2: w.filter((x) => x.pattern === 2).map((x) => x.entry),
3: w.filter((x) => x.pattern === 3).map((x) => x.entry),
4: w.filter((x) => x.pattern === 4).map((x) => x.entry),
5: w.filter((x) => x.pattern === 5).map((x) => x.entry),
6: w.filter((x) => x.pattern === 6).map((x) => x.entry),
};
const pools: Record<
T.InflectionPattern,
() => T.NounEntry | T.AdjectiveEntry
> = {
0: makePool(words[0]),
1: makePool(words[1]),
2: makePool(words[2]),
3: makePool(words[3]),
4: makePool(words[4]),
5: makePool(words[5]),
6: makePool(words[6]),
};
const patternPool = makePool([
0, 1, 2, 3, 4, 5, 6,
// T.InflectionPattern.None,
// T.InflectionPattern.Basic,
// T.InflectionPattern.UnstressedAy,
// T.InflectionPattern.StressedAy,
// T.InflectionPattern.Pashtun,
// T.InflectionPattern.Squish,
// T.InflectionPattern.FemInanEe,
]);
function getQuestion(): Question {
const pattern = patternPool();
// @ts-ignore
const entry = pools[pattern]();
if (getInflectionPattern(entry) !== pattern) {
throw Error("wrong pattern on word");
}
return { entry, pattern };
}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
function handleChoice(ic: T.InflectionPattern) {
return callback(ic === question.pattern);
}
return (
<div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples opts={opts}>
{[
{
p: firstVariation(question.entry.p),
f: firstVariation(question.entry.f),
e: `${firstVariation(question.entry.e)} - ${question.entry.c}`,
},
]}
</Examples>
</div>
<div className="text-center">
<div className="row">
{categories.map((c) => (
<div className="col" key={Math.random()}>
<button
style={{ width: "8rem", height: "4rem" }}
className="btn btn-outline-secondary mb-3"
onClick={() => handleChoice(c.value)}
>
{c.label}
</button>
</div>
))}
</div>
</div>
</div>
);
}
function Instructions() {
return (
<div>
<p className="lead">
Choose the inflection pattern that each noun/adjective follows
</p>
</div>
);
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/>
);
}
function DisplayCorrectAnswer({
question,
}: {
question: Question;
}): JSX.Element {
// callback(<div className="lead">
// {possibleCorrect.map(humanReadableTense).join(" or ")}
// </div>)
return (
<div>
<p className="lead">
{categories.find((c) => c.value === question.pattern)?.label}
</p>
</div>
);
}

View File

@ -1,41 +1,30 @@
import { useState } from "react";
import {
comparePs,
} from "../../lib/game-utils";
import { comparePs } from "../../lib/game-utils";
import GameCore from "../GameCore";
import {
Types as T,
defaultTextOptions as opts,
makeNounSelection,
randFromArray,
flattenLengths,
randomPerson,
InlinePs,
grammarUnits,
renderVP,
makeVPSelectionState,
compileVP,
blockUtils,
concatPsString,
isInvalidSubjObjCombo,
removeFVarients,
getEnglishVerb,
RootsAndStems,
getVerbInfo,
defaultTextOptions,
humanReadableVerbForm,
blank,
kidsBlank,
isPashtoScript,
Types as T,
defaultTextOptions as opts,
makeNounSelection,
randFromArray,
randomPerson,
InlinePs,
grammarUnits,
renderVP,
makeVPSelectionState,
compileVP,
isInvalidSubjObjCombo,
blank,
kidsBlank,
isPashtoScript,
} from "@lingdocs/ps-react";
import { isPastTense, isThirdPerson } from "@lingdocs/ps-react";
import { maybeShuffleArray } from "../../lib/shuffle-array";
import { getVerbFromBlocks } from "@lingdocs/ps-react/dist/lib/src/phrase-building/blocks-utils";
import { baParticle } from "@lingdocs/ps-react/dist/lib/src/grammar-units";
import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs";
import { makePool } from "../../lib/pool";
import { wordQuery } from "../../words/words";
import { isImperativeTense } from "@lingdocs/ps-react/dist/lib/src/type-predicates";
import { getVerbPs, verbHasBa, QuestionDisplay } from "./VerbGame";
const kidsColor = "#017BFE";
@ -43,311 +32,331 @@ const amount = 12;
const timeLimit = 160;
type Question = {
rendered: T.VPRendered,
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>, e?: string[] },
tense: T.VerbFormName;
verb: T.VerbEntry;
negative: boolean;
rendered: T.VPRendered;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>; e?: string[] };
};
const transitivePastVerbs = wordQuery("verbs", [
"leedul",
"wahul",
"khoRul",
"shărmawul",
"pejzandul",
"taRul",
"leedul",
"wahul",
"khoRul",
"shărmawul",
"pejzandul",
"taRul",
]);
const verbs = wordQuery("verbs", [
"leekul",
"wahul",
"leedul",
"awredul",
"khoRul",
"akhistul",
"katul",
"lwedul",
"leekul",
"wahul",
"leedul",
"awredul",
"khoRul",
"akhistul",
"katul",
"lwedul",
]);
const nouns = wordQuery("nouns", [
"saRey",
"xudza",
"maashoom",
"puxtoon",
"Ustaaz",
"DaakTar",
"halik",
"saRay",
"xudza",
"maashoom",
"puxtoon",
"Ustaaz",
"DaakTar",
"halik",
]);
const persons: T.Person[] = [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
];
const persons: T.Person[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
type PerfectGameLevel = {
/* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2,
type: "intransitive" | "transitive-intransitive" | "all-tenses",
}
type VerbPoolName = "basic" | "transitivePast" | "intransitivePast" | "mixedPast" | "mixedAll";
/* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2;
type: "intransitive" | "transitive-intransitive" | "all-tenses";
};
type VerbPoolName =
| "basic"
| "transitivePast"
| "intransitivePast"
| "mixedPast"
| "mixedAll";
type LevelInfo = {
description: string | JSX.Element,
tense: T.PerfectTense | "allTenses",
pool: VerbPoolName,
}
description: string | JSX.Element;
tense: T.PerfectTense | "allTenses";
pool: VerbPoolName;
};
const levelInfos: Record<PerfectGameLevel["type"], LevelInfo> = {
"intransitive": {
description: "present perfect form of the verb",
tense: "presentPerfect",
pool: "intransitivePast",
},
"transitive-intransitive": {
description: "present perfect form of the verb",
tense: "presentPerfect",
pool: "mixedPast",
},
"all-tenses": {
description: "correct perfect form of the verb",
tense: "allTenses",
pool: "mixedPast",
},
}
intransitive: {
description: "present perfect form of the verb",
tense: "presentPerfect",
pool: "intransitivePast",
},
"transitive-intransitive": {
description: "present perfect form of the verb",
tense: "presentPerfect",
pool: "mixedPast",
},
"all-tenses": {
description: "correct perfect form of the verb",
tense: "allTenses",
pool: "mixedPast",
},
};
// TODO: Level where you create the formulas (seperate file)
// level where you choose the right situation
const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }: {
inChapter: boolean,
id: string,
link: string,
level: PerfectGameLevel,
}) => {
const levelInfo = levelInfos[level.type];
const personPool = makePool(persons);
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
basic: makePool(verbs, 15),
transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15),
const VerbGame: GameSubCore<PerfectGameLevel> = ({
id,
link,
level,
inChapter,
}: {
inChapter: boolean;
id: string;
link: string;
level: PerfectGameLevel;
}) => {
const levelInfo = levelInfos[level.type];
const personPool = makePool(persons);
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
basic: makePool(verbs, 15),
transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool(
[...verbs, ...transitivePastVerbs, ...intransitivePastVerbs],
15
),
};
const tensePool = makePool<T.PerfectTense>([
"presentPerfect",
"pastPerfect",
"subjunctivePerfect",
"habitualPerfect",
"pastPerfect",
"futurePerfect",
"wouldBePerfect",
"pastSubjunctivePerfect",
"wouldHaveBeenPerfect",
]);
const oneVerb: T.VerbEntry = verbPools[levelInfo.pool]();
const getVerb =
level.level === 1 ? () => oneVerb : () => verbPools[levelInfo.pool]();
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(randFromArray(nouns), undefined);
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange
? randFromArray(["singular", "plural"])
: n.number,
};
const tensePool = makePool<T.PerfectTense>([
"presentPerfect", "pastPerfect", "subjunctivePerfect", "habitualPerfect",
"pastPerfect", "futurePerfect", "wouldBePerfect", "pastSubjunctivePerfect",
"wouldHaveBeenPerfect",
]);
const oneVerb: T.VerbEntry = verbPools[levelInfo.pool]();
const getVerb = level.level === 1
? () => oneVerb
: () => verbPools[levelInfo.pool]();
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(randFromArray(nouns), undefined);
}
function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete {
function personToNPSelection(p: T.Person): T.NPSelection {
if (isThirdPerson(p)) {
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number,
type: "NP",
selection: randFromArray([
() => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
};
}
return {
type: "NP",
selection: makePronounS(p),
};
}
function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete {
function personToNPSelection(p: T.Person): T.NPSelection {
if (isThirdPerson(p)) {
return {
type: "NP",
selection: randFromArray([
() => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
};
}
return {
type: "NP",
selection: makePronounS(p),
};
}
function makePronounS(p: T.Person): T.PronounSelection {
return {
type: "pronoun",
person: p,
distance: randFromArray(["far", "near", "far"]),
};
}
const verb = getVerb();
const king = personPool();
let servant: T.Person;
do {
servant = randomPerson();
} while (isInvalidSubjObjCombo(king, servant));
return makeVPS({
verb,
king: personToNPSelection(king),
servant: personToNPSelection(servant),
tense,
defaultTransitivity: level.type.startsWith("transitive")
? "transitive"
: "grammatically transitive",
});
}
function getQuestion(): Question {
const VPS = makeRandomVPS(levelInfo.tense === "allTenses"
? tensePool()
: levelInfo.tense
);
const VP = renderVP(VPS);
const compiled = compileVP(
VP,
{ removeKing: false, shrinkServant: false },
true,
{ ba: levelInfo.tense === "allTenses", verb: true, negative: true },
);
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
rendered: VP,
phrase,
};
function makePronounS(p: T.Person): T.PronounSelection {
return {
type: "pronoun",
person: p,
distance: randFromArray(["far", "near", "far"]),
};
}
const verb = getVerb();
const king = personPool();
let servant: T.Person;
do {
servant = randomPerson();
} while (isInvalidSubjObjCombo(king, servant));
return makeVPS({
verb,
king: personToNPSelection(king),
servant: personToNPSelection(servant),
tense,
defaultTransitivity: level.type.startsWith("transitive")
? "transitive"
: "grammatically transitive",
});
}
function getQuestion(): Question {
const VPS = makeRandomVPS(
levelInfo.tense === "allTenses" ? tensePool() : levelInfo.tense
);
const VP = renderVP(VPS);
const compiled = compileVP(
VP,
{ removeKing: false, shrinkServant: false },
true,
{ ba: levelInfo.tense === "allTenses", verb: true, negative: true }
);
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
negative: VPS.verb.negative,
verb: VPS.verb.verb,
tense: VPS.verb.tense,
rendered: VP,
phrase,
};
}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") {
setWithBa(true);
setAnswer("");
return;
}
setAnswer(value);
}
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct = comparePs(answer, getVerbPs(question.rendered))
&& (withBa === verbHasBa(question.rendered));
if (correct) {
setAnswer("");
}
callback(correct);
}
// useEffect(() => {
// if (level === "allProduce") setWithBa(false);
// }, [question]);
return <div>
<QuestionDisplay question={question} userAnswer={{
withBa,
answer,
}} />
<form onSubmit={handleSubmit}>
{level.type === "all-tenses" && <div className="form-check mt-1">
<input
id="baCheckbox"
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={e => setWithBa(e.target.checked)}
/>
<label className="form-check-label text-muted" htmlFor="baCheckbox">
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span>
</label>
</div>}
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
{/* <div> */}
<button className="btn btn-primary" type="submit">submit </button>
{/* </div> */}
{/* <div className="text-muted small text-center mt-2">
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") {
setWithBa(true);
setAnswer("");
return;
}
setAnswer(value);
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct =
comparePs(answer, getVerbPs(question.rendered)) &&
withBa === verbHasBa(question.rendered);
if (correct) {
setAnswer("");
}
callback(correct);
};
// useEffect(() => {
// if (level === "allProduce") setWithBa(false);
// }, [question]);
return (
<div>
<QuestionDisplay
question={question}
userAnswer={{
withBa,
answer,
}}
/>
<form onSubmit={handleSubmit}>
{level.type === "all-tenses" && (
<div className="form-check mt-1">
<input
id="baCheckbox"
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={(e) => setWithBa(e.target.checked)}
/>
<label
className="form-check-label text-muted"
htmlFor="baCheckbox"
>
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs>{" "}
in the <span style={{ color: kidsColor }}>kids' section</span>
</label>
</div>
)}
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
{/* <div> */}
<button className="btn btn-primary" type="submit">
submit
</button>
{/* </div> */}
{/* <div className="text-muted small text-center mt-2">
Type <kbd>Enter</kbd> to check
</div> */}
</div>
</form>
</div>
}
function Instructions() {
const desc = levelInfo.description;
return <div>
<p className="lead">
Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"}
</p>
</div>
}
</div>
</form>
</div>
);
}
return <GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
function Instructions() {
const desc = levelInfo.description;
return (
<div>
<p className="lead">
Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"}
</p>
</div>
);
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/>
);
};
export default VerbGame;
function QuestionDisplay({ question, userAnswer }: {
question: Question,
userAnswer: { withBa: boolean, answer: string },
}) {
const ps = addUserAnswer(
userAnswer,
flattenLengths(question.phrase.ps)[0]
);
const v = getVerbFromBlocks(question.rendered.blocks);
const vEntry = v.block.verb.entry;
const infoV = getVerbInfo(vEntry)
const info = "grammaticallyTransitive" in infoV
? infoV.grammaticallyTransitive
: "stative" in infoV
? infoV.stative
: infoV;
return <div className="mb-3 mt-2">
<div className="mb-2">
<div>{vEntry.p} - {removeFVarients(vEntry.f)} <span className="text-muted">{vEntry.c}</span></div>
<div>"{getEnglishVerb(vEntry)}"</div>
</div>
<details style={{ marginBottom: 0 }}>
<summary>🌳 Show roots and stems</summary>
<RootsAndStems info={info} textOptions={defaultTextOptions} />
</details>
<div dir="rtl">{ps.p}</div>
<div dir="ltr">{ps.f}</div>
{question.phrase.e && <div className="text-muted mt-2">
{question.phrase.e.map(x => <div key={Math.random()}>
{x}
</div>)}
</div>}
<div>{humanReadableVerbForm(v.block.tense)}</div>
</div>;
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
return <div>
<div>
{getVerbPs(question.rendered).reduce(((accum, curr, i): JSX.Element[] => (
[
...accum,
...i > 0 ? [<span className="text-muted"> or </span>] : [],
<span key={i}>{curr.p} - {curr.f}</span>,
]
)), [] as JSX.Element[])}
</div>
<div><strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids' section.</div>
</div>;
function DisplayCorrectAnswer({
question,
}: {
question: Question;
}): JSX.Element {
return (
<div>
<div>
{getVerbPs(question.rendered).reduce(
(accum, curr, i): JSX.Element[] => [
...accum,
...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>
{curr.p} - {curr.f}
</span>,
],
[] as JSX.Element[]
)}
</div>
<div>
<strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a{" "}
<InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids'
section.
</div>
</div>
);
}
// function modExs(exs: T.PsString[], withBa: boolean): { p: JSX.Element, f: JSX.Element }[] {
// return exs.map(ps => {
@ -366,88 +375,80 @@ function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element
// });
// }
function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString): T.PsString {
function addBa(x: T.PsString) {
if (!a.withBa) return x;
return {
p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f),
}
}
function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x;
const field = isPashtoScript(a.answer) ? "p" : "f";
return {
...x,
[field]: x[field].replace(blank[field], a.answer),
};
}
return addAnswer(addBa(ps));
}
function makeVPS({ verb, king, servant, tense, defaultTransitivity }: {
verb: T.VerbEntry,
king: T.NPSelection,
servant: T.NPSelection,
tense: T.PerfectTense,
defaultTransitivity: "transitive" | "grammatically transitive"
}): T.VPSelectionComplete {
const vps = makeVPSelectionState(verb);
const transitivity = (vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity)
? defaultTransitivity
: vps.verb.transitivity;
const ergative = vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king;
const object = ergative ? king : servant;
function addUserAnswer(
a: { withBa: boolean; answer: string },
ps: T.PsString
): T.PsString {
function addBa(x: T.PsString) {
if (!a.withBa) return x;
return {
...vps,
verb: {
...vps.verb,
negative: isImperativeTense(tense)
? randFromArray([false, false, true])
: false,
transitivity,
tense,
},
blocks: maybeShuffleArray([
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
},
{
key: Math.random(),
block: {
type: "objectSelection",
selection: transitivity === "intransitive"
? "none"
: transitivity === "grammatically transitive"
? T.Person.ThirdPlurMale
: object,
},
},
]),
p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f),
};
}
function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x;
const field = isPashtoScript(a.answer) ? "p" : "f";
return {
...x,
[field]: x[field].replace(blank[field], a.answer),
};
}
return addAnswer(addBa(ps));
}
function getVerbPs({ blocks }: T.VPRendered): T.PsString[] {
const { perfectiveHead, verb } = blockUtils.getVerbAndHeadFromBlocks(blocks);
const mU = blocks[0].find(b => b.block.type === "negative" && b.block.imperative);
function vBase() {
if (!perfectiveHead) {
return flattenLengths(verb.block.ps);
}
return flattenLengths(verb.block.ps).map(r => concatPsString(perfectiveHead.ps, r));
}
if (mU) {
return vBase().map(b => concatPsString({ p: "مه", f: "mú" }, " ", b));
}
return vBase();
function makeVPS({
verb,
king,
servant,
tense,
defaultTransitivity,
}: {
verb: T.VerbEntry;
king: T.NPSelection;
servant: T.NPSelection;
tense: T.PerfectTense;
defaultTransitivity: "transitive" | "grammatically transitive";
}): T.VPSelectionComplete {
const vps = makeVPSelectionState(verb);
const transitivity =
vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity
? defaultTransitivity
: vps.verb.transitivity;
const ergative =
vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king;
const object = ergative ? king : servant;
return {
...vps,
verb: {
...vps.verb,
negative: isImperativeTense(tense)
? randFromArray([false, false, true])
: false,
transitivity,
tense,
},
blocks: maybeShuffleArray([
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
},
{
key: Math.random(),
block: {
type: "objectSelection",
selection:
transitivity === "intransitive"
? "none"
: transitivity === "grammatically transitive"
? 10
: object,
},
},
]),
};
}
function verbHasBa({ blocks }: T.VPRendered): boolean {
const verb = blockUtils.getVerbFromBlocks(blocks);
return verb.block.hasBa;
}

View File

@ -1,36 +1,32 @@
import { useState } from "react";
import {
comparePs,
} from "../../lib/game-utils";
import { comparePs } from "../../lib/game-utils";
import GameCore from "../GameCore";
import {
Types as T,
defaultTextOptions as opts,
makeNounSelection,
randFromArray,
flattenLengths,
randomPerson,
InlinePs,
grammarUnits,
renderVP,
makeVPSelectionState,
compileVP,
blockUtils,
concatPsString,
isInvalidSubjObjCombo,
removeFVarients,
getEnglishVerb,
RootsAndStems,
getVerbInfo,
defaultTextOptions,
humanReadableVerbForm,
blank,
kidsBlank,
isPashtoScript,
Types as T,
defaultTextOptions as opts,
makeNounSelection,
randFromArray,
flattenLengths,
randomPerson,
InlinePs,
grammarUnits,
renderVP,
makeVPSelectionState,
compileVP,
isInvalidSubjObjCombo,
removeFVarients,
getEnglishVerb,
RootsAndStems,
getVerbInfo,
defaultTextOptions,
humanReadableVerbForm,
blank,
kidsBlank,
isPashtoScript,
combineIntoText,
} from "@lingdocs/ps-react";
import { isPastTense, isThirdPerson } from "@lingdocs/ps-react";
import { maybeShuffleArray } from "../../lib/shuffle-array";
import { getVerbFromBlocks } from "@lingdocs/ps-react/dist/lib/src/phrase-building/blocks-utils";
import { baParticle } from "@lingdocs/ps-react/dist/lib/src/grammar-units";
import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs";
import { makePool } from "../../lib/pool";
@ -43,447 +39,519 @@ const amount = 12;
const timeLimit = 140;
type Question = {
rendered: T.VPRendered,
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>, e?: string[] },
tense: T.VerbFormName;
verb: T.VerbEntry;
negative: boolean;
rendered: T.VPRendered;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>; e?: string[] };
};
const transitivePastVerbs = wordQuery("verbs", [
"leedul",
"wahul",
"khoRul",
"shărmawul",
"pejzandul",
"taRul",
"leedul",
"wahul",
"khoRul",
"shărmawul",
"pejzandul",
"taRul",
]);
const verbs = wordQuery("verbs", [
"leekul",
"wahul",
"leedul",
"awredul",
"khoRul",
"akhistul",
"katul",
"lwedul",
"leekul",
"wahul",
"leedul",
"awredul",
"khoRul",
"akhistul",
"katul",
"lwedul",
]);
const nouns = wordQuery("nouns", [
"saRey",
"xudza",
"maashoom",
"puxtoon",
"Ustaaz",
"DaakTar",
"halik",
"saRay",
"xudza",
"maashoom",
"puxtoon",
"Ustaaz",
"DaakTar",
"halik",
]);
const persons: T.Person[] = [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
];
const persons: T.Person[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
const secondPersons = [
T.Person.SecondSingMale,
T.Person.SecondSingFemale,
T.Person.SecondPlurMale,
T.Person.SecondPlurFemale,
];
const secondPersons = [2, 3, 8, 9];
type VerbGameLevel = {
/* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2,
type: "presentVerb" | "subjunctiveVerb"
| "futureVerb" | "imperative" | "intransitivePerfectivePast"
| "intransitiveImperfectivePast" | "transitivePerfectivePast" | "transitiveImperfectivePast"
| "allPast" | "habitualPast" | "allTenses";
}
type VerbPoolName = "basic" | "transitivePast" | "intransitivePast" | "mixedPast" | "mixedAll";
/* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2;
type:
| "presentVerb"
| "subjunctiveVerb"
| "futureVerb"
| "imperative"
| "intransitivePerfectivePast"
| "intransitiveImperfectivePast"
| "transitivePerfectivePast"
| "transitiveImperfectivePast"
| "allPast"
| "habitualPast"
| "allTenses";
};
type VerbPoolName =
| "basic"
| "transitivePast"
| "intransitivePast"
| "mixedPast"
| "mixedAll";
function selectVerbPool({ type }: VerbGameLevel): VerbPoolName {
return type === "presentVerb"
? "basic"
: type === "futureVerb"
? "basic"
: type === "subjunctiveVerb"
? "basic"
: type === "imperative"
? "basic"
: type === "intransitiveImperfectivePast"
? "intransitivePast"
: type === "intransitivePerfectivePast"
? "intransitivePast"
: type === "transitiveImperfectivePast"
? "transitivePast"
: type === "transitivePerfectivePast"
? "transitivePast"
: type === "habitualPast" || type === "allPast"
? "mixedPast"
: "mixedAll";
return type === "presentVerb"
? "basic"
: type === "futureVerb"
? "basic"
: type === "subjunctiveVerb"
? "basic"
: type === "imperative"
? "basic"
: type === "intransitiveImperfectivePast"
? "intransitivePast"
: type === "intransitivePerfectivePast"
? "intransitivePast"
: type === "transitiveImperfectivePast"
? "transitivePast"
: type === "transitivePerfectivePast"
? "transitivePast"
: type === "habitualPast" || type === "allPast"
? "mixedPast"
: "mixedAll";
}
// TODO: Level where you create the formulas (seperate file)
// level where you choose the right situation
const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
inChapter: boolean,
id: string,
link: string,
level: VerbGameLevel,
}) => {
const personPool = makePool(level.type === "imperative"
? secondPersons
: persons
);
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
basic: makePool(verbs, 15),
transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15),
const VerbGame: GameSubCore<VerbGameLevel> = ({
id,
link,
level,
inChapter,
}: {
inChapter: boolean;
id: string;
link: string;
level: VerbGameLevel;
}) => {
const personPool = makePool(
level.type === "imperative" ? secondPersons : persons
);
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
basic: makePool(verbs, 15),
transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool(
[...verbs, ...transitivePastVerbs, ...intransitivePastVerbs],
15
),
};
const oneVerb: T.VerbEntry = verbPools[selectVerbPool(level)]();
const getVerb =
level.level === 1
? () => oneVerb
: () => verbPools[selectVerbPool(level)]();
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(randFromArray(nouns), undefined);
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange
? randFromArray(["singular", "plural"])
: n.number,
};
const oneVerb: T.VerbEntry = verbPools[selectVerbPool(level)]();
const getVerb = level.level === 1
? () => oneVerb
: () => verbPools[selectVerbPool(level)]();
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(randFromArray(nouns), undefined);
}
function makeRandomVPS(
tense: T.VerbTense | T.ImperativeTense
): T.VPSelectionComplete {
function personToNPSelection(p: T.Person): T.NPSelection {
if (isThirdPerson(p)) {
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number,
type: "NP",
selection: randFromArray([
() => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
};
}
return {
type: "NP",
selection: makePronounS(p),
};
}
function makeRandomVPS(tense: T.VerbTense | T.ImperativeTense): T.VPSelectionComplete {
function personToNPSelection(p: T.Person): T.NPSelection {
if (isThirdPerson(p)) {
return {
type: "NP",
selection: randFromArray([
() => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
};
}
return {
type: "NP",
selection: makePronounS(p),
};
}
function makePronounS(p: T.Person): T.PronounSelection {
return {
type: "pronoun",
person: p,
distance: randFromArray(["far", "near", "far"]),
};
}
const verb = getVerb();
const king = personPool();
let servant: T.Person;
do {
servant = randomPerson();
} while (isInvalidSubjObjCombo(king, servant));
return makeVPS({
verb,
king: personToNPSelection(king),
servant: personToNPSelection(servant),
tense,
defaultTransitivity: level.type.startsWith("transitive")
? "transitive"
: "grammatically transitive",
});
}
function getQuestion(): Question {
const VPS = makeRandomVPS(levelToTense(level));
const VP = renderVP(VPS);
const compiled = compileVP(
VP,
{ removeKing: false, shrinkServant: false },
true,
{ ba: true, verb: true, negative: true },
);
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
rendered: VP,
phrase,
};
function makePronounS(p: T.Person): T.PronounSelection {
return {
type: "pronoun",
person: p,
distance: randFromArray(["far", "near", "far"]),
};
}
const verb = getVerb();
const king = personPool();
let servant: T.Person;
do {
servant = randomPerson();
} while (isInvalidSubjObjCombo(king, servant));
return makeVPS({
verb,
king: personToNPSelection(king),
servant: personToNPSelection(servant),
tense,
defaultTransitivity: level.type.startsWith("transitive")
? "transitive"
: "grammatically transitive",
});
}
function getQuestion(): Question {
const VPS = makeRandomVPS(levelToTense(level));
const VP = renderVP(VPS);
const compiled = compileVP(
VP,
{ removeKing: false, shrinkServant: false },
true,
{ ba: true, verb: true, negative: true }
);
const phrase = {
ps: compiled.ps,
e: compiled.e,
};
return {
tense: VPS.verb.tense,
negative: VPS.verb.negative,
verb: VPS.verb.verb,
rendered: VP,
phrase,
};
}
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") {
setWithBa(true);
setAnswer("");
return;
}
setAnswer(value);
}
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct = comparePs(answer, getVerbPs(question.rendered))
&& (withBa === verbHasBa(question.rendered));
if (correct) {
setAnswer("");
}
callback(correct);
}
// useEffect(() => {
// if (level === "allProduce") setWithBa(false);
// }, [question]);
return <div>
<QuestionDisplay question={question} userAnswer={{
withBa,
answer,
}} />
<form onSubmit={handleSubmit}>
<div className="form-check mt-1">
<input
id="baCheckbox"
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={e => setWithBa(e.target.checked)}
/>
<label className="form-check-label text-muted" htmlFor="baCheckbox">
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span>
</label>
</div>
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
{/* <div> */}
<button className="btn btn-primary" type="submit">submit </button>
{/* </div> */}
{/* <div className="text-muted small text-center mt-2">
function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") {
setWithBa(true);
setAnswer("");
return;
}
setAnswer(value);
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const correct =
comparePs(answer, getVerbPs(question.rendered)) &&
withBa === verbHasBa(question.rendered);
if (correct) {
setAnswer("");
}
callback(correct);
};
// useEffect(() => {
// if (level === "allProduce") setWithBa(false);
// }, [question]);
return (
<div>
<QuestionDisplay
question={question}
userAnswer={{
withBa,
answer,
}}
/>
<form onSubmit={handleSubmit}>
<div className="form-check mt-1">
<input
id="baCheckbox"
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={(e) => setWithBa(e.target.checked)}
/>
<label className="form-check-label text-muted" htmlFor="baCheckbox">
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in
the <span style={{ color: kidsColor }}>kids' section</span>
</label>
</div>
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input
type="text"
className="form-control"
autoComplete="off"
autoCapitalize="off"
spellCheck="false"
dir="auto"
value={answer}
onChange={handleInput}
/>
</div>
<div className="text-center my-2">
{/* <div> */}
<button className="btn btn-primary" type="submit">
submit
</button>
{/* </div> */}
{/* <div className="text-muted small text-center mt-2">
Type <kbd>Enter</kbd> to check
</div> */}
</div>
</form>
</div>
}
function Instructions() {
const desc = levelToDescription(level);
return <div>
<p className="lead">
Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"}
</p>
</div>
}
</div>
</form>
</div>
);
}
return <GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
function Instructions() {
const desc = levelToDescription(level);
return (
<div>
<p className="lead">
Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"}
</p>
</div>
);
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/>
);
};
export default VerbGame;
function QuestionDisplay({ question, userAnswer }: {
question: Question,
userAnswer: { withBa: boolean, answer: string },
export function QuestionDisplay({
question,
userAnswer,
}: {
question: Question;
userAnswer: { withBa: boolean; answer: string };
}) {
const ps = addUserAnswer(
userAnswer,
flattenLengths(question.phrase.ps)[0]
);
const v = getVerbFromBlocks(question.rendered.blocks);
const vEntry = v.block.verb.entry;
const infoV = getVerbInfo(vEntry)
const info = "grammaticallyTransitive" in infoV
? infoV.grammaticallyTransitive
: "stative" in infoV
? infoV.stative
: infoV;
return <div className="mb-3">
<div className="mb-2">{vEntry.p} - {removeFVarients(vEntry.f)} "{getEnglishVerb(vEntry)}"</div>
<details style={{ marginBottom: 0 }}>
<summary>🌳 Show roots and stems</summary>
<RootsAndStems info={info} textOptions={defaultTextOptions} />
</details>
<div dir="rtl">{ps.p}</div>
<div dir="ltr">{ps.f}</div>
{question.phrase.e && <div className="text-muted mt-2">
{question.phrase.e.map(x => <div key={Math.random()}>
{x}
</div>)}
</div>}
<div>{(isImperativeTense(v.block.tense) && v.block.negative)
? "Negative Imperative"
: humanReadableVerbForm(v.block.tense)}</div>
</div>;
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
return <div>
<div>
{getVerbPs(question.rendered).reduce(((accum, curr, i): JSX.Element[] => (
[
...accum,
...i > 0 ? [<span className="text-muted"> or </span>] : [],
<span key={i}>{curr.p} - {curr.f}</span>,
]
)), [] as JSX.Element[])}
const ps = addUserAnswer(userAnswer, flattenLengths(question.phrase.ps)[0]);
const infoV = getVerbInfo(question.verb.entry, question.verb.complement);
const info =
"grammaticallyTransitive" in infoV
? infoV.grammaticallyTransitive
: "stative" in infoV
? infoV.stative
: infoV;
return (
<div className="mb-3">
<div className="mb-2">
{question.verb.entry.p} - {removeFVarients(question.verb.entry.f)} "
{getEnglishVerb(question.verb.entry)}"
</div>
<details style={{ marginBottom: 0 }}>
<summary>🌳 Show roots and stems</summary>
<RootsAndStems info={info} textOptions={defaultTextOptions} />
</details>
<div dir="rtl">{ps.p}</div>
<div dir="ltr">{ps.f}</div>
{question.phrase.e && (
<div className="text-muted mt-2">
{question.phrase.e.map((x) => (
<div key={Math.random()}>{x}</div>
))}
</div>
<div><strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids' section.</div>
</div>;
)}
<div>
{isImperativeTense(question.tense) && question.negative
? "Negative Imperative"
: humanReadableVerbForm(question.tense)}
</div>
</div>
);
}
function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString): T.PsString {
function addBa(x: T.PsString) {
if (!a.withBa) return x;
return {
p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f),
}
}
function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x;
const field = isPashtoScript(a.answer) ? "p" : "f";
return {
...x,
[field]: x[field].replace(blank[field], a.answer),
};
}
return addAnswer(addBa(ps));
function DisplayCorrectAnswer({
question,
}: {
question: Question;
}): JSX.Element {
return (
<div>
<div>
{getVerbPs(question.rendered).reduce(
(accum, curr, i): JSX.Element[] => [
...accum,
...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>
{curr.p} - {curr.f}
</span>,
],
[] as JSX.Element[]
)}
</div>
<div>
<strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a{" "}
<InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids'
section.
</div>
</div>
);
}
function addUserAnswer(
a: { withBa: boolean; answer: string },
ps: T.PsString
): T.PsString {
function addBa(x: T.PsString) {
if (!a.withBa) return x;
return {
p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f),
};
}
function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x;
const field = isPashtoScript(a.answer) ? "p" : "f";
return {
...x,
[field]: x[field].replace(blank[field], a.answer),
};
}
return addAnswer(addBa(ps));
}
function levelToDescription({ type }: VerbGameLevel): string {
return type === "presentVerb"
? "present"
: type === "subjunctiveVerb"
? "subjunctive"
: type === "futureVerb"
? "imperfective future or perfective future"
: type === "intransitivePerfectivePast"
? "simple past intransitive"
: type === "intransitiveImperfectivePast"
? "continuous past intransitive"
: type === "transitiveImperfectivePast"
? "continuous past transitive"
: type === "transitivePerfectivePast"
? "simple past transitive"
: type === "imperative"
? "imperfective imperative or perfective imperative"
: type === "allPast"
? "past tense"
: type === "habitualPast"
? "habitual past"
// : type === "allTenses"
: "";
return type === "presentVerb"
? "present"
: type === "subjunctiveVerb"
? "subjunctive"
: type === "futureVerb"
? "imperfective future or perfective future"
: type === "intransitivePerfectivePast"
? "simple past intransitive"
: type === "intransitiveImperfectivePast"
? "continuous past intransitive"
: type === "transitiveImperfectivePast"
? "continuous past transitive"
: type === "transitivePerfectivePast"
? "simple past transitive"
: type === "imperative"
? "imperfective imperative or perfective imperative"
: type === "allPast"
? "past tense"
: type === "habitualPast"
? "habitual past"
: // : type === "allTenses"
"";
}
function levelToTense({ type }: VerbGameLevel): T.VerbTense | T.ImperativeTense {
return type === "presentVerb"
? type
: type === "subjunctiveVerb"
? type
: type === "futureVerb"
? randFromArray(["perfectiveFuture", "imperfectiveFuture"])
: type === "imperative"
? randFromArray(["perfectiveImperative", "imperfectiveImperative"])
: (type === "intransitiveImperfectivePast" || type === "transitiveImperfectivePast")
? "imperfectivePast"
: (type === "intransitivePerfectivePast" || type === "transitivePerfectivePast")
? "perfectivePast"
: type === "habitualPast"
? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"])
// : type === "allPast"
: randFromArray([
"perfectivePast",
"imperfectivePast",
"habitualPerfectivePast",
"habitualImperfectivePast",
]);
function levelToTense({
type,
}: VerbGameLevel): T.VerbTense | T.ImperativeTense {
return type === "presentVerb"
? type
: type === "subjunctiveVerb"
? type
: type === "futureVerb"
? randFromArray(["perfectiveFuture", "imperfectiveFuture"])
: type === "imperative"
? randFromArray(["perfectiveImperative", "imperfectiveImperative"])
: type === "intransitiveImperfectivePast" ||
type === "transitiveImperfectivePast"
? "imperfectivePast"
: type === "intransitivePerfectivePast" ||
type === "transitivePerfectivePast"
? "perfectivePast"
: type === "habitualPast"
? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"])
: // : type === "allPast"
randFromArray([
"perfectivePast",
"imperfectivePast",
"habitualPerfectivePast",
"habitualImperfectivePast",
]);
}
function makeVPS({ verb, king, servant, tense, defaultTransitivity }: {
verb: T.VerbEntry,
king: T.NPSelection,
servant: T.NPSelection,
tense: T.VerbTense | T.ImperativeTense,
defaultTransitivity: "transitive" | "grammatically transitive"
function makeVPS({
verb,
king,
servant,
tense,
defaultTransitivity,
}: {
verb: T.VerbEntry;
king: T.NPSelection;
servant: T.NPSelection;
tense: T.VerbTense | T.ImperativeTense;
defaultTransitivity: "transitive" | "grammatically transitive";
}): T.VPSelectionComplete {
const vps = makeVPSelectionState(verb);
const transitivity = (vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity)
? defaultTransitivity
: vps.verb.transitivity;
const ergative = vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king;
const object = ergative ? king : servant;
return {
...vps,
verb: {
...vps.verb,
negative: isImperativeTense(tense)
? randFromArray([false, false, true])
: false,
transitivity,
tense,
const vps = makeVPSelectionState(verb);
const transitivity =
vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity
? defaultTransitivity
: vps.verb.transitivity;
const ergative =
vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king;
const object = ergative ? king : servant;
return {
...vps,
verb: {
...vps.verb,
negative: isImperativeTense(tense)
? randFromArray([false, false, true])
: false,
transitivity,
tense,
},
blocks: maybeShuffleArray([
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
blocks: maybeShuffleArray([
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
},
{
key: Math.random(),
block: {
type: "objectSelection",
selection: transitivity === "intransitive"
? "none"
: transitivity === "grammatically transitive"
? T.Person.ThirdPlurMale
: object,
},
},
]),
};
},
{
key: Math.random(),
block: {
type: "objectSelection",
selection:
transitivity === "intransitive"
? "none"
: transitivity === "grammatically transitive"
? 10
: object,
},
},
]),
};
}
function getVerbPs({ blocks }: T.VPRendered): T.PsString[] {
const { perfectiveHead, verb } = blockUtils.getVerbAndHeadFromBlocks(blocks);
const mU = blocks[0].find(b => b.block.type === "negative" && b.block.imperative);
function vBase() {
if (!perfectiveHead) {
return flattenLengths(verb.block.ps);
}
return flattenLengths(verb.block.ps).map(r => concatPsString(perfectiveHead.ps, r));
}
if (mU) {
return vBase().map(b => concatPsString({ p: "مه", f: "mú" }, " ", b));
}
return vBase();
export function getVerbPs({ blocks }: T.VPRendered): T.PsString[] {
const verbBlocks = blocks.map((x) =>
x.filter(
(b) =>
b.block.type === "PH" ||
b.block.type === "VB" ||
b.block.type === "NComp" ||
b.block.type === "welded" ||
b.block.type === "negative"
)
);
return combineIntoText(verbBlocks, 0);
}
function verbHasBa({ blocks }: T.VPRendered): boolean {
const verb = blockUtils.getVerbFromBlocks(blocks);
return verb.block.hasBa;
}
export function verbHasBa({ kids }: T.VPRendered): boolean {
return kids.some((k) => k.kid.type === "ba");
}

View File

@ -1,119 +1,125 @@
import {
Types as T,
typePredicates as tp,
makeNounSelection,
randFromArray,
Types as T,
typePredicates as tp,
makeNounSelection,
randFromArray,
} from "@lingdocs/ps-react";
import { makePool } from "../../lib/pool";
import { wordQuery } from "../../words/words";
const pronouns: T.Person[] = [
0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11,
];
const pronouns: T.Person[] = [0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11];
const tenses: T.EquativeTense[] = [
"present", "habitual", "subjunctive", "future", "past", "wouldBe", "pastSubjunctive", "wouldHaveBeen"
"present",
"habitual",
"subjunctive",
"future",
"past",
"wouldBe",
"pastSubjunctive",
"wouldHaveBeen",
];
const nouns = wordQuery("nouns", [
"saRey",
"xudza",
"maashoom",
"Ustaaz",
"puxtoon",
"DaakTar",
"halik",
"saRay",
"xudza",
"maashoom",
"Ustaaz",
"puxtoon",
"DaakTar",
"halik",
]);
const adjectives = wordQuery("adjectives", [
"stuRey",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGey",
"koochney",
"zoR",
"moR",
"stuRay",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGay",
"koochnay",
"zoR",
"moR",
]);
const adverbs = wordQuery("adverbs", [
"دلته",
"هلته",
]);
const adverbs = wordQuery("adverbs", ["دلته", "هلته"]);
const locAdverbs = adverbs.filter(tp.isLocativeAdverbEntry);
export function randomEPSPool(l: T.EquativeTense | "allTenses") {
const pronounPool = makePool(pronouns);
const nounPool = makePool(nouns, 20);
const predPool = makePool([...adjectives, ...locAdverbs], 20);
const tensePool = makePool(tenses, 15);
function makeRandPronoun(): T.PronounSelection {
return {
type: "pronoun",
distance: "far",
person: pronounPool(),
};
}
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(nounPool(), undefined);
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number,
};
}
return function makeRandomEPS(): T.EPSelectionComplete {
const subj: T.NPSelection = {
type: "NP",
selection: randFromArray([
makeRandPronoun,
makeRandPronoun,
makeRandomNoun,
makeRandPronoun,
])(),
};
const pred = predPool();
const tense = (l === "allTenses")
? tensePool()
: l;
return makeEPS(subj, pred, tense);
}
const pronounPool = makePool(pronouns);
const nounPool = makePool(nouns, 20);
const predPool = makePool([...adjectives, ...locAdverbs], 20);
const tensePool = makePool(tenses, 15);
function makeRandPronoun(): T.PronounSelection {
return {
type: "pronoun",
distance: "far",
person: pronounPool(),
};
}
function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(nounPool(), undefined);
return {
...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange
? randFromArray(["singular", "plural"])
: n.number,
};
}
return function makeRandomEPS(): T.EPSelectionComplete {
const subj: T.NPSelection = {
type: "NP",
selection: randFromArray([
makeRandPronoun,
makeRandPronoun,
makeRandomNoun,
makeRandPronoun,
])(),
};
const pred = predPool();
const tense = l === "allTenses" ? tensePool() : l;
return makeEPS(subj, pred, tense);
};
}
function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry | T.LocativeAdverbEntry, tense: T.EquativeTense): T.EPSelectionComplete {
return {
blocks: [
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
},
],
predicate: {
type: "predicateSelection",
selection: {
type: "complement",
selection: tp.isAdjectiveEntry(predicate) ? {
type: "adjective",
entry: predicate,
sandwich: undefined,
} : {
type: "loc. adv.",
entry: predicate,
},
},
function makeEPS(
subject: T.NPSelection,
predicate: T.AdjectiveEntry | T.LocativeAdverbEntry,
tense: T.EquativeTense
): T.EPSelectionComplete {
return {
blocks: [
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
},
equative: {
tense,
negative: false,
},
omitSubject: false,
};
}
},
],
predicate: {
type: "predicateSelection",
selection: {
type: "complement",
selection: tp.isAdjectiveEntry(predicate)
? {
type: "adjective",
entry: predicate,
sandwich: undefined,
}
: {
type: "loc. adv.",
entry: predicate,
},
},
},
equative: {
tense,
negative: false,
},
omitSubject: false,
};
}

View File

@ -1,99 +1,108 @@
import {
Types as T,
makeNounSelection,
makeAdjectiveSelection,
randFromArray,
Types as T,
makeNounSelection,
makeAdjectiveSelection,
randFromArray,
} from "@lingdocs/ps-react";
import { makePool } from "../pool";
import { wordQuery } from "../../words/words";
const nouns = wordQuery("nouns", [
"saRey",
"xudza",
"maashoom",
"Ustaaz",
"puxtoon",
"DaakTar",
"halik",
"tajriba",
"melma",
"khabura",
"kitaab",
"oobu",
"korba",
"shpoon",
"gaawanDey",
"lmasey",
"lobghaaRey",
"sandurghaaRey",
"malgurey",
"shpoonkey",
"khalk",
"ghul",
"khur",
"saRay",
"xudza",
"maashoom",
"Ustaaz",
"puxtoon",
"DaakTar",
"halik",
"tajriba",
"melma",
"khabura",
"kitaab",
"oobu",
"korba",
"shpoon",
"gaawanDay",
"lmasay",
"lobghaaRay",
"sandurghaaRay",
"malguray",
"shpoonkay",
"khalk",
"ghul",
"khur",
]);
const adjectives = wordQuery("adjectives", [
"muR",
"jzwundey",
"sheen",
"soor",
"rixtooney",
"pakhwaaney",
"stuRey",
"ooGd",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGey",
"koochney",
"wroostey",
"pradey",
"treew",
"zoR",
"moR",
"treekh",
"oom",
"khoG",
"droond",
"loomRey",
"Roond",
"prot",
"soR",
"post",
"pokh",
"rooN",
"woR",
"tod",
"khpor",
"kooN",
"koG",
"zeeG",
"naast",
"muR",
"jzwunday",
"sheen",
"soor",
"rixtoonay",
"pakhwaanay",
"stuRay",
"ooGd",
"ghuT",
"xu",
"khufa",
"takRa",
"puT",
"tuGay",
"koochnay",
"wroostay",
"praday",
"treew",
"zoR",
"moR",
"treekh",
"oom",
"khoG",
"droond",
"loomRay",
"Roond",
"prot",
"soR",
"post",
"pokh",
"rooN",
"woR",
"tod",
"khpor",
"kooN",
"koG",
"zeeG",
"naast",
]);
export function makeNPAdjGenerator(pluralsLevel: "none" | "low" | "high"): () => T.NPSelection {
const nounPool = makePool(nouns);
const adjPool = makePool(adjectives);
export function makeNPAdjGenerator(
pluralsLevel: "none" | "low" | "high"
): () => T.NPSelection {
const nounPool = makePool(nouns);
const adjPool = makePool(adjectives);
return () => {
const ns = makeNounSelection(nounPool(), undefined);
const selection: T.NounSelection = {
...ns,
adjectives: [makeAdjectiveSelection(adjPool())],
...(ns.numberCanChange && pluralsLevel !== "none") ? {
number: randFromArray(pluralsLevel === "high" ? ["singular", "plural", "plural", "plural", "singular"] : ["singular", "plural", "singular"]),
} : {},
...ns.genderCanChange ? {
gender: randFromArray(["masc", "fem", "fem", "fem", "masc"]),
} : {},
};
return {
type: "NP",
selection,
};
return () => {
const ns = makeNounSelection(nounPool(), undefined);
const selection: T.NounSelection = {
...ns,
adjectives: [makeAdjectiveSelection(adjPool())],
...(ns.numberCanChange && pluralsLevel !== "none"
? {
number: randFromArray(
pluralsLevel === "high"
? ["singular", "plural", "plural", "plural", "singular"]
: ["singular", "plural", "singular"]
),
}
: {}),
...(ns.genderCanChange
? {
gender: randFromArray(["masc", "fem", "fem", "fem", "masc"]),
}
: {}),
};
return {
type: "NP",
selection,
};
};
}

File diff suppressed because it is too large Load Diff

View File

@ -1377,13 +1377,14 @@
rambda "^6.7.0"
react-select "^5.2.2"
"@lingdocs/ps-react@^5.7.13":
version "5.7.13"
resolved "https://npm.lingdocs.com/@lingdocs%2fps-react/-/ps-react-5.7.13.tgz#04ff75abdbda04a2ae26407eeb996055238105d3"
integrity sha512-zhyEzcuc6M4rf7Vl4bByiNIvcPq7czO4MIuLvnByv6v2uOJtf1k5lF4VpXhsZf6Zw/1sYvPQBqh2BGTuZPKH1Q==
"@lingdocs/ps-react@^6.0.2":
version "6.0.2"
resolved "https://npm.lingdocs.com/@lingdocs%2fps-react/-/ps-react-6.0.2.tgz#712f7620e1aa30d0ec1e1f7d0118be660cb4e01c"
integrity sha512-QuMOzdY45tXvL18BrykoP9x+NWl6sUQCQp1HRp+Q17jtf7oS55LGryQhZJMhom/A61NMvztYh5hiP+xoivQgUw==
dependencies:
"@formkit/auto-animate" "^1.0.0-beta.3"
classnames "^2.2.6"
fp-ts "^2.16.0"
jsurl2 "^2.1.0"
lz-string "^1.4.4"
pbf "^3.2.1"
@ -2669,6 +2670,11 @@ format@^0.2.0:
resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==
fp-ts@^2.16.0:
version "2.16.1"
resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.16.1.tgz#6abc401ce42b65364ca8f0b0d995c5840c68a930"
integrity sha512-by7U5W8dkIzcvDofUcO42yl9JbnHTEDBrzu3pt5fKT+Z4Oy85I21K80EYJYdjQGC2qum4Vo55Ag57iiIK4FYuA==
framesync@^4.0.0, framesync@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/framesync/-/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a"