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

View File

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

View File

@ -1,295 +1,409 @@
import { import {
Types as T, Types as T,
RootsAndStems, RootsAndStems,
conjugateVerb, conjugateVerb,
VerbTable, VerbTable,
renderVP, renderVP,
compileVP, compileVP,
ButtonSelect, ButtonSelect,
getEnglishVerb, getEnglishVerb,
InlinePs, InlinePs,
removeFVarients, removeFVarients,
isPastTense, isPastTense,
getPassiveRootsAndStems, getPassiveRootsAndStems,
getAbilityRootsAndStems, getAbilityRootsAndStems,
} from "@lingdocs/ps-react"; } 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 { useState } from "react";
import Carousel from "./Carousel"; 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 { getLength } from "@lingdocs/ps-react/dist/lib/src/p-text-helpers";
import { isThirdPerson } from "@lingdocs/ps-react"; import { isThirdPerson } from "@lingdocs/ps-react";
function BasicVerbShowCase({ opts, tense, passive, ability }: { function BasicVerbShowCase({
opts: T.TextOptions, opts,
tense: T.VerbTense | T.ImperativeTense, tense,
passive?: boolean, passive,
ability?: boolean, ability,
}: {
opts: T.TextOptions;
tense: T.VerbTense | T.ImperativeTense;
passive?: boolean;
ability?: boolean;
}) { }) {
const items = isPastTense(tense) const items = isPastTense(tense)
? intransitivePastVerbs ? intransitivePastVerbs
: (passive ? basicVerbs.filter(v => v.entry.p !== "کول") : basicVerbs); : passive
return <Carousel stickyTitle items={items} render={(item) => { ? basicVerbs.filter((v) => v.entry.p !== "کول")
: basicVerbs;
return (
<Carousel
stickyTitle
items={items}
render={(item) => {
return { return {
title: <InlinePs opts={opts}>{{ title: (
<InlinePs opts={opts}>
{{
...removeFVarients(item.entry), ...removeFVarients(item.entry),
e: undefined, e: undefined,
}}</InlinePs>, }}
body: <BasicVerbChart </InlinePs>
passive={passive} ),
ability={ability} body: (
verb={item} <BasicVerbChart
opts={opts} passive={passive}
tense={tense} ability={ability}
/>, verb={item}
opts={opts}
tense={tense}
/>
),
}; };
}}/> }}
/>
);
} }
export default BasicVerbShowCase; export default BasicVerbShowCase;
function BasicVerbChart({ verb, opts, tense, passive, ability }: { function BasicVerbChart({
verb: T.VerbEntry, verb,
opts: T.TextOptions, opts,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, tense,
passive?: boolean, passive,
ability?: boolean, 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 [voice, setVoice] = useState<"active" | "passive">("active");
const [category, setCategory] = useState<"basic" | "ability">("basic"); const [category, setCategory] = useState<"basic" | "ability">("basic");
const [negative, setNegative] = useState<boolean>(false); const [negative, setNegative] = useState<boolean>(false);
const [length, setLength] = useState<"short" | "long">("short"); const [length, setLength] = useState<"short" | "long">("short");
const c = conjugateVerb(verb.entry, verb.complement); const c = conjugateVerb(verb.entry, verb.complement);
const conjugations = "stative" in c const conjugations =
? c.stative "stative" in c
: "grammaticallyTransitive" in c ? c.stative
? c.grammaticallyTransitive : "grammaticallyTransitive" in c
: c; ? c.grammaticallyTransitive
const phrasesForTable = makeExamplePhrases(verb, tense, negative, length, voice, category); : c;
return <div> const phrasesForTable = makeExamplePhrases(
<div> verb,
{getEnglishVerb(verb.entry)} 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> </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 <ButtonSelect
options={[{ handleChange={setLength}
label: "Active", value={length}
value: "active", small
}, { options={[
label: "Passive", { value: "long", label: "long" },
value: "passive", { value: "short", label: "short" },
}]} ]}
value={voice}
handleChange={setVoice}
/> />
</div>} </div>
{ability && <div className="my-2"> )}
<ButtonSelect <div className="mx-2">
options={[{ <ButtonSelect
label: "Basic", handleChange={(value) => setNegative(value === "true")}
value: "basic", value={String(negative)}
}, { small
label: "Ability", options={[
value: "ability", { value: "true", label: "Neg." },
}]} { value: "false", label: "Pos." },
value={category} ]}
handleChange={setCategory} />
/> </div>
</div>} </div>
<RootsAndStems <div className="text-left">
textOptions={opts} <VerbTable
info={category === "ability" textOptions={opts}
? (getAbilityRootsAndStems(conjugations.info)) block={phrasesForTable.ps}
: voice === "passive" english={phrasesForTable.e}
? (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"> </div>
{((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( function makeExamplePhrases(
verb: T.VerbEntry, verb: T.VerbEntry,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
negative: boolean, negative: boolean,
length: "short" | "long", length: "short" | "long",
voice: "active" | "passive", voice: "active" | "passive",
category: "basic" | "ability", category: "basic" | "ability"
): { ps: T.VerbBlock | T.ImperativeBlock, e: T.EnglishBlock } { ): { ps: T.VerbBlock | T.ImperativeBlock; e: T.EnglishBlock } {
function tenseToModal(t: T.VerbTense | T.ImperativeTense | T.PerfectTense): T.ModalTense { function tenseToModal(
if (isImperativeTense(t)) { t: T.VerbTense | T.ImperativeTense | T.PerfectTense
throw new Error("can't have imperative tense with modal"); ): T.AbilityTense {
} if (isImperativeTense(t)) {
if (isPerfectTense(t)) { throw new Error("can't have imperative tense with modal");
throw new Error("cant' have perfect tense with modal");
}
return `${t}Modal`;
} }
function makeSelection(person: T.Person): T.VPSelectionComplete{ if (isPerfectTense(t)) {
return { throw new Error("cant' have perfect tense with modal");
"blocks": [ }
{"key":Math.random(),"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person": person,"distance":"far"}}}}, return `${t}Modal`;
{ }
key: Math.random(), function makeSelection(person: T.Person): T.VPSelectionComplete {
// @ts-ignore return {
block: (verb.entry.c?.includes("intrans.") || voice === "passive") blocks: [
? {"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":[]}}}, key: Math.random(),
}, block: {
], type: "subjectSelection",
"verb":{ selection: {
"type":"verb", type: "NP",
verb, selection: { type: "pronoun", person: person, distance: "far" },
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 } { key: Math.random(),
const selection = makeSelection(person); // @ts-ignore
const rendered = renderVP(selection); block:
const compiled = compileVP(rendered, rendered.form); verb.entry.c?.includes("intrans.") || voice === "passive"
return { ? { type: "objectSelection", selection: "none" }
ps: [modifyP(getLength(compiled.ps, length)[0])], : {
e: compiled.e ? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person)) : "", type: "objectSelection",
}; selection: {
} type: "NP",
return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : isPastTense(tense) ? "past" : "nonImperative"); 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 { function modifyP(ps: T.PsString): T.PsString {
return { return {
p: ps.p.replace(" کتاب ", ""), p: ps.p.replace(" کتاب ", ""),
f: ps.f.replace(" kitáab ", ""), f: ps.f.replace(" kitáab ", ""),
}; };
} }
function modifyEnglish(e: string, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, isThirdPerson: boolean): string { function modifyEnglish(
// "kitaab" used as a dummy object e: string,
const dummyObjectRemoved = tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
e.replace(/\(a\/the\) +book/ig, "") isThirdPerson: boolean
return (isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson)) ): string {
? dummyObjectRemoved // "kitaab" used as a dummy object
: dummyObjectRemoved const dummyObjectRemoved = e.replace(/\(a\/the\) +book/gi, "");
.replace(/he\/it/ig, "he/she/it") return isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson)
.replace(/We \(m\. pl\.\)/ig, "We ") ? dummyObjectRemoved
.replace(/They \(m\. pl\.\)/ig, "They ") : dummyObjectRemoved
.replace(/\(m\. pl\.\)/ig, "(pl.)") .replace(/he\/it/gi, "he/she/it")
.replace(/\(m\.\)/ig, ""); .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" { function tenseToStem(
const stem = t === "presentVerb" t: T.VerbTense | T.ImperativeTense | T.PerfectTense
? "imperfective stem" ):
: t === "subjunctiveVerb" | "imperfective stem"
? "perfective stem" | "perfective stem"
: t === "imperfectiveFuture" | "imperfective root"
? "imperfective stem" | "perfective root"
: t === "perfectiveFuture" | "past participle" {
? "perfective stem" const stem =
: t === "imperfectivePast" t === "presentVerb"
? "imperfective root" ? "imperfective stem"
: t === "perfectivePast" : t === "subjunctiveVerb"
? "perfective root" ? "perfective stem"
: t === "habitualImperfectivePast" : t === "imperfectiveFuture"
? "imperfective root" ? "imperfective stem"
: t === "habitualPerfectivePast" : t === "perfectiveFuture"
? "perfective root" ? "perfective stem"
: t === "imperfectiveImperative" : t === "imperfectivePast"
? "imperfective stem" ? "imperfective root"
: t === "perfectiveImperative" : t === "perfectivePast"
? "perfective stem" ? "perfective root"
: t.endsWith("Perfect") : t === "habitualImperfectivePast"
? "past participle" ? "imperfective root"
: "perfective root"; : t === "habitualPerfectivePast"
return stem; ? "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 } { function createVerbTable(
if (type === "imperative") { f: (person: T.Person) => { ps: T.ArrayOneOrMore<T.PsString>; e: string },
const b = [ type: "imperative" | "nonImperative" | "past"
[f(2), f(8)], ): { ps: T.VerbBlock | T.ImperativeBlock; e: T.EnglishBlock } {
[f(3), f(9)], if (type === "imperative") {
];
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],
],
};
}
const b = [ const b = [
[f(0), f(6)], [f(2), f(8)],
[f(1), f(7)], [f(3), f(9)],
[f(2), f(8)],
[f(3), f(9)],
[f(4), f(10)],
[f(5), f(11)],
]; ];
return { return {
ps: [ ps: [
[b[0][0].ps, b[0][1].ps], [b[0][0].ps, b[0][1].ps],
[b[1][0].ps, b[1][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], e: [
[b[4][0].ps, b[4][1].ps], [b[0][0].e, b[0][1].e],
[b[5][0].ps, b[5][1].ps], [b[1][0].e, b[1][1].e],
], [b[0][0].e, b[0][1].e],
e: [ [b[1][0].e, b[1][1].e],
[b[0][0].e, b[0][1].e], [b[0][0].e, b[0][1].e],
[b[1][0].e, b[1][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],
],
}; };
} }
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 { Component } from "react";
import classNames from "classnames"; import classNames from "classnames";
import highlightExample from "./highlight-example"; import highlightExample from "./highlight-example";
import { import { phonemes, Phoneme, PhonemeExample } from "./phonemes";
phonemes,
Phoneme,
PhonemeExample,
} from "./phonemes";
import playAudio from "../../lib/play-audio"; import playAudio from "../../lib/play-audio";
import views from "./views"; import views from "./views";
import Media from "react-media"; import Media from "react-media";
export type ViewOptions = "all" | "shortVowel" | "longVowel" | "fiveYs" | "specialConsonant"; export type ViewOptions =
| "all"
| "shortVowel"
| "longVowel"
| "fiveYs"
| "specialConsonant";
interface IAppState { interface IAppState {
view: ViewOptions; view: ViewOptions;
@ -28,100 +29,119 @@ class PhoneticsViewer extends Component<any, IAppState> {
const phonemesShowing = const phonemesShowing =
this.state.view === "all" this.state.view === "all"
? phonemes ? phonemes
// @ts-ignore : // @ts-ignore
: phonemes.filter((p) => p[this.state.view]); phonemes.filter((p) => p[this.state.view]);
const selectedOption = views.find((v) => v.value === this.state.view); const selectedOption = views.find((v) => v.value === this.state.view);
const generatePlayerFunction = (item: Phoneme | PhonemeExample) => { const generatePlayerFunction = (item: Phoneme | PhonemeExample) => {
if ("phoneme" in item && item.a) { if ("phoneme" in item && item.a) {
return () => { playAudio(item.a || ""); }; return () => {
playAudio(item.a || "");
};
} }
if ("f" in item && item.a) { if ("f" in item && item.a) {
// dumb typescript // dumb typescript
return () => { playAudio(item.a || ""); }; return () => {
playAudio(item.a || "");
};
} }
return () => null; return () => null;
} };
return <> return (
<div className="text-center mt-4"> <>
<Media queries={{ small: "(max-width: 599px)" }}> <div className="text-center mt-4">
{matches => ( <Media queries={{ small: "(max-width: 599px)" }}>
<div className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}> {(matches) => (
{views.map(({ label, value }) => ( <div
<button className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}
key={value} >
type="button" {views.map(({ label, value }) => (
className={classNames("btn", "btn-outline-secondary", { <button
active: this.state.view === value, key={value}
})} type="button"
onClick={() => this.setState({ view: value })} className={classNames("btn", "btn-outline-secondary", {
> active: this.state.view === value,
{label} })}
</button> onClick={() => this.setState({ view: value })}
))} >
</div> {label}
)} </button>
</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> )}
<div style={{ overflowX: "auto", marginBottom: "1em" }}> </Media>
<table className="table table-striped"> <div className="small mb-2">
<thead> <i className="fas fa-volume-down"></i> click the phonetic letter or
<tr> examples to hear - not all sounds are available
<th>Phonetic Letter</th> </div>
{/* <th>IPA Letter</th> */} </div>
<th>Short Explanation</th> <div style={{ overflowX: "auto", marginBottom: "1em" }}>
<th>Example</th> <table className="table table-striped">
<th>Pashto Letter(s)</th> <thead>
</tr> <tr>
</thead> <th>Phonetic Letter</th>
<tbody> {/* <th>IPA Letter</th> */}
{phonemesShowing.map((phoneme) => ( <th>Short Explanation</th>
<tr key={phoneme.phoneme}> <th>Example</th>
<td onClick={generatePlayerFunction(phoneme)}> <th>Pashto Letter(s)</th>
{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> </tr>
))} </thead>
</tbody> <tbody>
</table> {phonemesShowing.map((phoneme) => (
</div> <tr key={phoneme.phoneme}>
{selectedOption?.notes && <div> <td onClick={generatePlayerFunction(phoneme)}>
<p><strong>Notes about {selectedOption.label.toLowerCase()}:</strong></p> {phoneme.phoneme}
{selectedOption.notes} </td>
</div>} {/* <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"; import React, { ReactNode } from "react";
export default function highlightExample(text: string, highlight: number[][]): ReactNode { export default function highlightExample(
if (!highlight.length) { text: string,
return text; highlight: number[][]
} ): ReactNode {
let index = 0; if (!highlight.length) {
// @ts-ignore return text;
const pText = highlight.reduce((acc, curr, i): ReactNode => { }
const isLastElement = i === (highlight.length - 1); let index = 0;
const section = [ // @ts-ignore
...acc, const pText = highlight.reduce((acc, curr, i): ReactNode => {
curr[0] > 0 ? text.slice(index, curr[0]) : "", const isLastElement = i === highlight.length - 1;
<strong>{text.slice(curr[0], curr[1] + 1)}</strong>, const section = [
isLastElement ? text.slice(curr[1] + 1) : "", ...acc,
]; curr[0] > 0 ? text.slice(index, curr[0]) : "",
index = curr[1] + 1; <strong>{text.slice(curr[0], curr[1] + 1)}</strong>,
return section; isLastElement ? text.slice(curr[1] + 1) : "",
}, []); ];
return pText; index = curr[1] + 1;
return section;
}, []);
return pText;
} }

View File

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

View File

@ -23,9 +23,9 @@ import e from "./audio/e.m4a";
// @ts-ignore // @ts-ignore
import ee from "./audio/ee.m4a"; import ee from "./audio/ee.m4a";
// @ts-ignore // @ts-ignore
import ey from "./audio/ey.m4a"; import ay from "./audio/ey.m4a";
// @ts-ignore // @ts-ignore
import eyy from "./audio/eyy.m4a"; import ey from "./audio/eyy.m4a";
// @ts-ignore // @ts-ignore
import gh from "./audio/gh.m4a"; import gh from "./audio/gh.m4a";
// @ts-ignore // @ts-ignore
@ -144,10 +144,76 @@ import naayee from "./audio/naayee.mp3";
import fojee from "./audio/fojee.mp3"; import fojee from "./audio/fojee.mp3";
export default { export default {
a, aa, aasmaan, d, D, DoDuy, dwa, dz, dzaay, dzungul, e, ee, ey, a,
eyy, gh, gharma, h, halaat, i, injuluy, islaam, joR, jz, jzwund, kadoo, aa,
kh, khwux, kxeneyy, l, leekul, lUtfan, maalTa, maNa, meena, N, o, oo, aasmaan,
oox, ooy, paaNa, poza, puxto, q, qaazee, r, R, rang, saRey, t, tor, ts, d,
tsomra, T, u, uu, uy, w, wuGey, waadu, x, xudza, xudze, zooy, sheen, chaa, D,
baad, kor, gUl, maat, maruy, naayee, fojee, 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> <div>
<p> <p>
Long vowels are <strong>always written</strong> in Pashto script. When 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>
<p>for example:</p> <p>for example:</p>
<ul> <ul>
@ -46,8 +47,9 @@ const views: {
</li> </li>
</ul> </ul>
<p> <p>
Note: When ey - ی or ee - ي are written in the middle of a word, both appear as ـیـ. Note: When ay - ی or ee - ي are written in the middle of a word, both
To differentiate ee - ي from ey - ی you can (optionally) add a ِ diacritic. (eg. شِین - sheen) appear as ـیـ. To differentiate ee - ي from ay - ی you can
(optionally) add a ِ diacritic. (eg. شِین - sheen)
</p> </p>
</div> </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 title: Intro to Compound Verbs
--- ---
import { import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
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 cookingPotatoes from "./cooking-potatoes.svg"; import cookingPotatoes from "./cooking-potatoes.svg";
import doingWork from "./doing-work.svg"; import doingWork from "./doing-work.svg";
import stativeCompoundTransitive from "./stative-compound-transitive.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: 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> <ul>
<li>
<InlinePs
opts={opts}
ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }}
/>
</li>
<ul>
<li> <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> </li>
<ul> </ul>
<li> <li>
<InlinePs opts={opts} ps={{ p: "کار", f: "kaar", e: "work" }} /> + <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} /> <InlinePs
</li> opts={opts}
</ul> ps={{ p: "منډې وهل", f: "munDe wahul", e: "to run" }}
/>
</li>
<ul>
<li> <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> </li>
<ul> </ul>
<li> <li>
<InlinePs opts={opts} ps={{ p: "منډې", f: "munDe", e: "runs" }} /> + <InlinePs opts={opts} ps={{ p: "وهل", f: "wahul", e: "to hit" }} /> <InlinePs opts={opts} ps={{ p: "بندول", f: "bandawul", e: "to close" }} />
</li> </li>
</ul> <ul>
<li> <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> </li>
<ul> </ul>
<li> <li>
<InlinePs opts={opts} ps={{ p: "بند", f: "band", e: "closed" }} /> + <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to make" }} /> <InlinePs
</li> opts={opts}
</ul> ps={{ p: "ستړی کېدل", f: "stuRay kedúl", e: "to get tired" }}
/>
</li>
<ul>
<li> <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> </li>
<ul> </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: In order to understand how compound verbs work it's important to know that they fall into two different categories:
- **stative** compound verbs - **stative** compound verbs
- involve *something being changed* - involve _something being changed_
- **dynamic** compound verbs - **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. 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"> <div className="text-center mb-2">
<img src={stativeCompoundTransitive} alt="" className="img-fluid" /> <img src={stativeCompoundTransitive} alt="" className="img-fluid" />
</div> </div>
If we cook potatoes, we are changing the state of the potatoes from raw to cooked. If we cook potatoes, we are changing the state of the potatoes from raw to cooked.
<div className="text-center mb-2"> <div className="text-center mb-2">
<img src={cookingPotatoes} alt="" className="img-fluid" /> <img src={cookingPotatoes} alt="" className="img-fluid" />
</div> </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"> <div className="text-center mb-2">
<img src={dynamicCopmoundTransitive} alt="" className="img-fluid" /> <img src={dynamicCopmoundTransitive} alt="" className="img-fluid" />
</div> </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. 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"> <div className="text-center mb-2">
<img src={doingWork} alt="" className="img-fluid" /> <img src={doingWork} alt="" className="img-fluid" />
</div> </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**. 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 - **stative compounds** are used **to make** something different
- **dynamic compounds** are used **to do** an action - **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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
RootsAndStems,
getVerbInfo,
} from "@lingdocs/ps-react"; } 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 psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import Formula from "../../components/formula/Formula"; import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx";
import VideoPlayer from "../../components/VideoPlayer";
import BasicBlocks from "../../components/BasicBlocks"; import BasicBlocks from "../../components/BasicBlocks";
import Image from "../../components/Image"; import Image from "../../components/Image";
import helperVerbsSummaryChart from "./helper-verbs-summary-chart.svg";
import generativeStativeCompound from "./generative-stative-compound.svg"; import generativeStativeCompound from "./generative-stative-compound.svg";
import ironingStative from "./ironing-stative.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 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 - a stative compound
- as in "to iron \_\_\_\_" (to make \_\_\_\_ ironed) - 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 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: "istree", e: "iron" }} /> as a <Complement /> noun.
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> as "to make" - <InlinePs opts={opts} ps={{ p: "کول", f: "kawul" }} /> as "to make"
So we are talking about making an object ironed. 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). In the past tense, the verb will always agree with the object that's being ironed (the <KingIcon /> of the phrase).
<EditableVPEx opts={opts}> <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>
<EditableVPEx opts={opts}> <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> </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. 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 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: "istree", e: "iron" }} /> as an action
- <InlinePs opts={opts} ps={{ p: "کول", f: "kawul", e: "to do" }} /> as the helper verb 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** 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", bottom: "Noun/Object",
inside: <div> inside: (
<div>استري</div> <div>
<div>iron</div> <div>استري</div>
</div>, <div>iron</div>
</div>
),
}, },
"+", "+",
{ {
bottom: "Helper Verb", bottom: "Helper Verb",
inside: <div> inside: (
<div>کول</div> <div>
<div>to do</div> <div>کول</div>
</div>, <div>to do</div>
</div>
),
}, },
]} /> ]}
/>
<EditableVPEx opts={opts}> <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> </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. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغې **د کمیس استري** وکړه", p: "هغې **د کمیس استري** وکړه",
f: "haghé **du kamees istree** óokRa", f: "haghé **du kamees istree** óokRa",
e: "She ironed the shirt", e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirt**." sub: "lit. She did the **ironing of the shirt**.",
}, },
])} ])}
</Examples> </Examples>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغې **د کمیسونه استري** وکړه", p: "هغې **د کمیسونه استري** وکړه",
f: "haghé **du kameesoona istree** óokRa", f: "haghé **du kameesoona istree** óokRa",
e: "She ironed the shirt", e: "She ironed the shirt",
sub: "lit. She did the **ironing of the shirts**." sub: "lit. She did the **ironing of the shirts**.",
}, },
])} ])}
</Examples> </Examples>
#### Other examples #### Other examples
@ -145,107 +390,119 @@ Another compound that can be used as either stative or dynamic is <InlinePs opts
##### As stative: ##### As stative:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغه **درې کسان** قتل کړل", p: "هغه **درې کسان** قتل کړل",
f: "haghú **dre kesaan** qatul kRul", f: "haghú **dre kesaan** qatul kRul",
e: "He murdered **three people**", e: "He murdered **three people**",
}, },
])} ])}
</Examples> </Examples>
In this example: In this example:
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is a <Complement /> noun - <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 - <InlinePs
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }} /> opts={opts}
- 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" }} /> 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 #### As dynamic
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغه **د درې کسان قتل** وکړ", p: "هغه **د درې کسان قتل** وکړ",
f: "haghú **du dre kesaano qatul** óokuR", f: "haghú **du dre kesaano qatul** óokuR",
e: "He murdered three people", e: "He murdered three people",
sub: "lit. He did **the murder of three people**", sub: "lit. He did **the murder of three people**",
}, },
])} ])}
</Examples> </Examples>
In this example: In this example:
- <InlinePs opts={opts} ps={{ p: "قتل", f: "qatul", e: "murder" }} /> is the object - <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" }} /> - 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" }} /> - 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 ## Generative stative compounds
There are a number of compound verbs like: There are a number of compound verbs like:
- <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "غږ کول", f: "ghuG kawul", e: "to call out" }} /> opts={opts}
- <InlinePs opts={opts} ps={{ p: "کیسه کول", f: "keesa kawul", e: "to tell a story" }} /> 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 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." That means that these can be used as stative compounds, but **with an unspoken complement** that describes something "existing."
<Image <Image
src={generativeStativeCompound} src={generativeStativeCompound}
alt="generative stative compound diagram" alt="generative stative compound diagram"
maxWidth="550px" maxWidth="550px"
/> />
So with <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }} /> you could say: So with <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e: "to scream" }} /> you could say:
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ {
p: "هغې چیغه وکړه", p: "هغې چیغه وکړه",
f: "haghé chéegha óokRa", f: "haghé chéegha óokRa",
e: "She screamed", e: "She screamed",
sub: "DYNAMIC - lit. she did a scream" sub: "DYNAMIC - lit. she did a scream",
}, },
]} ]}
</Examples> </Examples>
or or
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ {
p: "هغې چیغه کړه", p: "هغې چیغه کړه",
f: "haghé chéegha kRa", f: "haghé chéegha kRa",
e: "She screamed", e: "She screamed",
sub: "GENERATIVE STATIVE - lit. she made a scream existing (she let out/created a scream)" sub: "GENERATIVE STATIVE - lit. she made a scream existing (she let out/created a scream)",
}, },
]} ]}
</Examples> </Examples>
You might also hear something like, You might also hear something like,
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ {
p: "ما منډه کړه", p: "ما منډه کړه",
f: "maa múnDa kRa", f: "maa múnDa kRa",
e: "I ran", e: "I ran",
sub: "GENERATIVE STATIVE - lit. I made a run existing (I let out/created a run)", sub: "GENERATIVE STATIVE - lit. I made a run existing (I let out/created a run)",
}, },
]} ]}
</Examples> </Examples>
And these can work the the intransitive versions as well And these can work the the intransitive versions as well
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ {
p: "چیغه شوه", p: "چیغه شوه",
f: "chéegha shwa", f: "chéegha shwa",
e: "A scream was let out", e: "A scream was let out",
sub: "GENERATIVE STATIVE - lit. A scream became existing", sub: "GENERATIVE STATIVE - lit. A scream became existing",
}, },
]} ]}
</Examples> </Examples>

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +1,73 @@
import { import {
Types as T, Types as T,
concatPsString, concatPsString,
ButtonSelect, ButtonSelect,
InlinePs, InlinePs,
grammarUnits, grammarUnits,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { useState } from "react"; import { useState } from "react";
import EquativeFormChoice from "../../components/EquativeFormChoice"; import EquativeFormChoice from "../../components/EquativeFormChoice";
function WithTailChoice({ opts, ba }: { opts: T.TextOptions, ba: boolean }) { function WithTailChoice({ opts, ba }: { opts: T.TextOptions; ba: boolean }) {
const [choice, setChoice] = useState("aay"); const [choice, setChoice] = useState("aay");
const waay = concatPsString( const waay = concatPsString(
{p: "و", f: "w"}, { p: "و", f: "w" },
choice === "aay" ? { p: "ای", f: "aay" } : { p: "ی", f: "ey" }, choice === "aay" ? { p: "ای", f: "aay" } : { p: "ی", f: "ay" }
); );
return ( return (
<div> <div>
<div className="text-center my-3"> <div className="text-center my-3">
<div className="text-muted mb-1"> <div className="text-muted mb-1">
<small>The spelling/pronunciation of the non-inflecting tail can vary based on dialect</small> <small>
</div> The spelling/pronunciation of the non-inflecting tail can vary based
<ButtonSelect on dialect
options={[ </small>
{ 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}
/>
</div> </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; export default WithTailChoice;

View File

@ -3,90 +3,85 @@ title: Habitual Equative
--- ---
import { import {
addToForm, addToForm,
defaultTextOptions, defaultTextOptions,
grammarUnits, grammarUnits,
Examples, Examples,
concatPsString,
InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Markdown from "markdown-to-jsx";
import EquativeFormChoice from "../../components/EquativeFormChoice"; import EquativeFormChoice from "../../components/EquativeFormChoice";
import Link from "../../components/Link"; import Link from "../../components/Link";
export const opts = defaultTextOptions; export const opts = defaultTextOptions;
import grassBeWet from "../../images/grass-be-wet.jpg"; import grassBeWet from "../../images/grass-be-wet.jpg";
import { import { equativeGameHabitual } from "../../games/games";
equativeGameHabitual,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; 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 ## Habitual Equative Form
<EquativeFormChoice <EquativeFormChoice
forms={{ forms={{
sentence: { sentence: {
displayForm: addToForm( displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "], [grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.habitual, grammarUnits.equativeEndings.habitual
), ),
english: [ english: [
["I am ...", "We are ..."], ["I am ...", "We are ..."],
["I am ...", "We are ..."], ["I am ...", "We are ..."],
["You are ...", "You are ..."], ["You are ...", "You are ..."],
["You are ...", "You are ..."], ["You are ...", "You are ..."],
["He/she/it is ...", "They are ..."], ["He/she/it is ...", "They are ..."],
["He/she/it is ...", "They are ..."], ["He/she/it is ...", "They are ..."],
], ],
}, },
pure: { pure: {
displayForm: grammarUnits.equativeEndings.habitual, displayForm: grammarUnits.equativeEndings.habitual,
}, },
}} }}
opts={opts} opts={opts}
/> />
This form is used to say that something is something (A = B) **habitually, generally, or repeatedly**. This form is used to say that something is something (A = B) **habitually, generally, or repeatedly**.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "سحار کې چمن لوند **وي**", p: "سحار کې چمن لوند **وي**",
f: "saháar ke chaman loond **wee**", f: "saháar ke chaman loond **wee**",
e: "The grass **is** wet in the morning. (generally, habitually)", e: "The grass **is** wet in the morning. (generally, habitually)",
}, },
{ {
p: "هغه تر ماښامه پورې په دوکان کې **وي**", p: "هغه تر ماښامه پورې په دوکان کې **وي**",
f: "haghá tur maaxaama pore pu dookáan ke **wee**", f: "haghá tur maaxaama pore pu dookáan ke **wee**",
e: "He's in the shop until evening. (generally, habitually)", e: "He's in the shop until evening. (generally, habitually)",
}, },
{ {
p: "اتو بجو نه بعد دوکان بند **وي**.", p: "اتو بجو نه بعد دوکان بند **وي**.",
f: "atu bajo na bad dookáan band **wee**", f: "atu bajo na bad dookáan band **wee**",
e: "The shop is closed after 8 o'clock. (generally, habitually)", e: "The shop is closed after 8 o'clock. (generally, habitually)",
}, },
])} ])}
</Examples> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "دوکان بند **دی**.", p: "دوکان بند **دی**.",
f: "dookáan band **dey**.", f: "dookáan band **day**.",
e: "The shop **is** closed. (right now, at this moment)", e: "The shop **is** closed. (right now, at this moment)",
sub: "1. Present Form" sub: "1. Present Form",
}, },
{ {
p: "دوکان هر وخت بند **وي**", p: "دوکان هر وخت بند **وي**",
f: "dookáan hăr wakht band **wee**", f: "dookáan hăr wakht band **wee**",
e: "The shop **is** always closed. (generally, every day)", e: "The shop **is** always closed. (generally, every day)",
sub: "2. Habitual Form" sub: "2. Habitual Form",
}, },
])} ])}
</Examples> </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. 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} /> <img className="img-fluid mb-4" src={grassBeWet} />
<div style={{ overflowX: "auto" }}> <div style={{ overflowX: "auto" }}>
<table className="table" style={{ minWidth: "400px" }}> <table className="table" style={{ minWidth: "400px" }}>
<thead> <thead>
<tr> <tr>
<th scope="col">Form</th> <th scope="col">Form</th>
<th scope="col">Standard English</th> <th scope="col">Standard English</th>
<th scope="col">AAVE</th> <th scope="col">AAVE</th>
<th scope="col">Pashto</th> <th scope="col">Pashto</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<th scope="row">Present</th> <th scope="row">Present</th>
<td> <td>
<div>The grass <strong>is</strong> wet</div> <div>
<div className="small text-muted">right now</div> The grass <strong>is</strong> wet
</td> </div>
<td>The grass <strong>is</strong> wet</td> <div className="small text-muted">right now</div>
<td> </td>
<Examples opts={opts}> <td>
{[ The grass <strong>is</strong> wet
{ p: <>چمن لوند <strong>دی</strong></>, f: <>chaman loond <strong>dey</strong></> }, </td>
]} <td>
</Examples> <Examples opts={opts}>
</td> {[
</tr> {
<tr> p: (
<th scope="row">Habitual</th> <>
<td> چمن لوند <strong>دی</strong>
<div>The grass <strong>is</strong> wet in the morning</div> </>
<div className="small text-muted">generally</div> ),
</td> f: (
<td>The grass <strong>be</strong> wet in the morning</td> <>
<td> chaman loond <strong>day</strong>
<Examples opts={opts}> </>
{[{ p: <>په سحار کې چمن لوند <strong>وي</strong></>, f: <>pu sahaar ke chaman loond <strong>wee</strong></> }]} ),
</Examples> },
</td> ]}
</tr> </Examples>
</tbody> </td>
</table> </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> </div>
<GameDisplay record={equativeGameHabitual} /> <GameDisplay record={equativeGameHabitual} />

View File

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

View File

@ -4,20 +4,15 @@ title: Present Equative
import Link from "../../components/Link"; import Link from "../../components/Link";
import Carousel from "../../components/Carousel"; import Carousel from "../../components/Carousel";
import { useState } from "react";
import { import {
grammarUnits, grammarUnits,
Examples, Examples,
defaultTextOptions, defaultTextOptions,
ButtonSelect, addToForm,
addToForm, InlinePs,
InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { import { equativeGamePresent } from "../../games/games";
equativeGamePresent,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; import GameDisplay from "../../games/GameDisplay";
import psmd from "../../lib/psmd";
import EquativeFormChoice from "../../components/EquativeFormChoice"; import EquativeFormChoice from "../../components/EquativeFormChoice";
## Present Equative Form ## 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>. 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 <EquativeFormChoice
forms={{ forms={{
sentence: { sentence: {
displayForm: addToForm( displayForm: addToForm(
[grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "], [grammarUnits.pronouns.far.plain, " ", { p: "...", f: "..." }, " "],
grammarUnits.equativeEndings.present, grammarUnits.equativeEndings.present
), ),
english: [ english: [
["I am ...", "We are ..."], ["I am ...", "We are ..."],
["I am ...", "We are ..."], ["I am ...", "We are ..."],
["You are ...", "You are ..."], ["You are ...", "You are ..."],
["You are ...", "You are ..."], ["You are ...", "You are ..."],
["He/it is ...", "They are ..."], ["He/it is ...", "They are ..."],
["She/it is ...", "They are ..."], ["She/it is ...", "They are ..."],
], ],
}, },
pure: { pure: {
displayForm: grammarUnits.equativeEndings.present, displayForm: grammarUnits.equativeEndings.present,
} },
}} }}
opts={defaultTextOptions} 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. Flip through the following examples and notice how the equative changes depending on the subject.
<Carousel <Carousel
items={[ 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: "1st pers. sing.",
{ title: "3rd pers. sing. masc.", ex: { p: "هغه خوشحاله دی", f: "haghá khosháala dey", e: "He is happy" }}, ex: { p: "زه خوشحاله یم", f: "zu khosháala yum", e: "I am 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: "2nd pers. sing.",
{ title: "3rd pers. plur.", ex: { p: "ماشومان خوشحاله دي", f: "maashoomáan khosháala dee", e: "The children are happy" }}, ex: { p: "ته خوشحاله یې", f: "tu khosháala ye", e: "You are happy" },
{ title: "3rd pers. plur.", ex: { p: "دوي خوشحاله دي", f: "dwee khosháala dee", e: "They are happy" }}, },
]} {
render={(item) => ({ title: "3rd pers. sing. masc.",
title: item.title, ex: { p: "هغه خوشحاله دی", f: "haghá khosháala day", e: "He is happy" },
body: <Examples opts={defaultTextOptions}>{[item.ex]}</Examples>, },
})} {
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={[ <Examples
{ p: "هغوي ماشومان دي", f: "haghwée mashoomáan dee", e: "They are children" }, 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: "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: "تاسو ډاکټران یئ؟",
{ p: "دا ستا کورونه دي", f: "daa staa koróona dee", e: "Those are your houses" }, 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={[ <Examples
{ p: "زه ستړی یم", f: "zu stúRey yum", e: "I (m.) am tired 👨"}, opts={defaultTextOptions}
{ p: "زه ستړې یم", f: "zu stúRe yum", e: "I (f.) am tired 👩"}, 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 puxtoon ye?", e: "Are you (m.) a Pashtun?" },
{ p: "ته پښتنه یې؟", f: "tu puxtana ye?", e: "Are you (f.) 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 ## 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. 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: "You (m.) are a Pashtun." },
{ p: "ته پښتون یې؟", f: "tu puxtoon ye?", e: "Are you (m.) 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. **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={[ <Examples
{ p: "خو ته یې افعان", f: "kho tu ye afgháan", e: "But you are Afghan!" } opts={defaultTextOptions}
]} /> ex={[
{ p: "خو ته یې افعان", f: "kho tu ye afgháan", e: "But you are Afghan!" },
]}
/>
<GameDisplay record={equativeGamePresent} /> <GameDisplay record={equativeGamePresent} />

View File

@ -2,31 +2,27 @@
title: Intro to Inflection title: Intro to Inflection
--- ---
import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
import {
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import Carousel from "../../components/Carousel";
import Table from "../../components/Table"; import Table from "../../components/Table";
import InlineInflectionButton from "../../components/InlineInflectionButton"; import InlineInflectionButton from "../../components/InlineInflectionButton";
import Formula from "../../components/formula/Formula";
import catInflectionGif from "../../images/cat-inflection.gif"; import catInflectionGif from "../../images/cat-inflection.gif";
export const singleInflectionHeadRow = [ export const singleInflectionHeadRow = [
<div className="d-flex flex-row flex-align-items-center"> <div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton /></div> <div className="mr-2">
<div className="align-self-center">Plain</div> <InlineInflectionButton />
</div>, </div>
<div className="d-flex flex-row flex-align-items-center"> <div className="align-self-center">Plain</div>
<div className="mr-2"><InlineInflectionButton inflection={1} /></div> </div>,
<div className="align-self-center">Inflected</div> <div className="d-flex flex-row flex-align-items-center">
</div>, <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). 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. 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"> <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> </div>
### Inflecting for Reason #1 - Plural ### Inflecting for Reason #1 - Plural
<Table headRow={singleInflectionHeadRow} opts={opts}> <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> </Table>
### Inflecting for Reason #2 - Sandwich ### 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. 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}> <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> </Table>
### Inflecting for Reason #3 - Subject of a transitive past tense verb ### 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. If a word is the subject of a past tense transitive verb, we also inflect it.
<Table headRow={singleInflectionHeadRow} opts={opts}> <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> </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 ## 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). 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="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton /></div> <div className="mr-2">
<div className="align-self-center">Plain</div> <InlineInflectionButton />
</div>
<div className="align-self-center">Plain</div>
</div>, </div>,
<div className="d-flex flex-row flex-align-items-center"> <div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton inflection={1} /></div> <div className="mr-2">
<div className="align-self-center">1st Inflection</div> <InlineInflectionButton inflection={1} />
</div>
<div className="align-self-center">1st Inflection</div>
</div>, </div>,
<div className="d-flex flex-row flex-align-items-center"> <div className="d-flex flex-row flex-align-items-center">
<div className="mr-2"><InlineInflectionButton inflection={2} /></div> <div className="mr-2">
<div className="align-self-center">2nd Inflection</div> <InlineInflectionButton inflection={2} />
</div>
<div className="align-self-center">2nd Inflection</div>
</div>, </div>,
]} opts={opts}> ]}
{[ opts={opts}
[ >
{p:"سړی", f:"saRey", e:"man"}, {[
{p:"سړي", f:"saRee"}, [
{p:"سړیو", f:"saRiyo"}, { p: "سړی", f: "saRay", e: "man" },
], { p: "سړي", f: "saRee" },
[ { p: "سړیو", f: "saRiyo" },
{p:"ښځه", f:"xudza", e:"woman"}, ],
{p:"ښځې", f:"xudze"}, {p:"ښځو", f:"xudzo"} [
], { p: "ښځه", f: "xudza", e: "woman" },
[ { p: "ښځې", f: "xudze" },
{p:"دا سړی پښتون دی", f:"daa saRey puxtoon dey", e:"That man is a Pashtun", sub:"no reason to inflect"}, { p: "ښځو", f: "xudzo" },
{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"}, [
], {
[ p: "دا سړی پښتون دی",
null, f: "daa saRay puxtoon day",
{p:"د سړي کور هلته دی", f:"du saRee kor halta dey", e:"The man's house is there", sub:"inflect for sandwich"}, e: "That man is a Pashtun",
null, sub: "no reason to inflect",
], },
[ {
{p:"دا ښځه پښتنه ده", f:"daa xudza puxtana da", e:"That woman is a Pashtun", sub:"no reason to inflect"}, p: "هغوي سړي دي",
{p:"هغوي ښځې دي", f:"haghwee xudze dee", e:"They are women", sub:"inflect for plural"}, f: "haghwee saRee dee",
{p:"د ښځو کور هلته دی", f:"du xudzo kor halta dey", e:"The ladies' house is there", sub:"inflect for plural and sandwich"}, e: "They are men",
], sub: "inflect for plural",
[ },
null, {
{p:"د ښځې کور هلته دی", f:"du xudze kor halta dey", e:"The woman's house is there", sub:"inflect for sandwich"}, p: "د سړیو کور هلته دی",
null, 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> </Table>

View File

@ -2,31 +2,22 @@
title: Inflection Patterns title: Inflection Patterns
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
grammarUnits, typePredicates as tp,
InflectionsTable,
inflectWord,
typePredicates as tp,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import InflectionCarousel from "../../components/InflectionCarousel"; import InflectionCarousel from "../../components/InflectionCarousel";
import { nouns, adjectives } from "../../words/words"; import { nouns, adjectives } from "../../words/words";
import { startingWord } from "../../lib/starting-word"; import { startingWord } from "../../lib/starting-word";
import Link from "../../components/Link"; import Link from "../../components/Link";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
export const words = [ export const words = [...nouns.filter(tp.isUnisexNounEntry), ...adjectives];
...nouns.filter(tp.isUnisexNounEntry),
...adjectives,
];
export const femNouns = nouns.filter(tp.isFemNounEntry); export const femNouns = nouns.filter(tp.isFemNounEntry);
import { import {
inflectionPatternsGame1, inflectionPatternsGame1,
inflectionPatternsGame2, inflectionPatternsGame2,
} from "../../games/games"; } from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; 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) - **Masculine:** - consonant or a shwa (<InlinePs opts={opts} ps={{ p: "ـه", f: "-u" }} /> vowel)
- **Feminine:** - <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} /> - **Feminine:** - <InlinePs opts={opts} ps={{ p: "ـه", f: "-a" }} />
<InflectionCarousel items={startingWord( <InflectionCarousel
words.filter(tp.isPattern1Entry), 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. **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( <InflectionCarousel
words.filter(tp.isPattern2Entry), 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. This is very similar to pattern #2, but with the stress on the last syllable the feminine inflection changes.
<InflectionCarousel items={startingWord( <InflectionCarousel
words.filter(tp.isPattern3Entry), items={startingWord(words.filter(tp.isPattern3Entry), "لومړی")}
"لومړی", />{" "}
)} />
## 4. Words with the "Pashtoon" pattern ## 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" }} /> - 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 - 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( <InflectionCarousel
words.filter(tp.isPattern4Entry), items={startingWord(words.filter(tp.isPattern4Entry), "پښتون")}
"پښتون", />
)} />
**Note:** See <Link to="/inflection/inflection-patterns/#pattern-4-masculine-animate-nouns">exception</Link> below. **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. 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( <InflectionCarousel
words.filter(tp.isPattern5Entry), items={startingWord(words.filter(tp.isPattern5Entry), "غل")}
"غل", />{" "}
)} />
## 6. Inanimate feminine nouns ending in ي - ee ## 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: "" }} />**. 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. 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 ## 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}> <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> </Examples>
## Exceptions ## 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 ### 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! 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "زه **په کوټه کې** یم", f: "zu **pu koTa ke** yum", e: "I am **in the room**" }, {
])} p: "زه **په کوټه کې** یم",
f: "zu **pu koTa ke** yum",
e: "I am **in the room**",
},
])}
</Examples> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "مونږ **په کوټو کې** یو", f: "moonG **pu koTo ke** yoo", e: "We are **in the rooms**" }, {
])} p: "مونږ **په کوټو کې** یو",
f: "moonG **pu koTo ke** yoo",
e: "We are **in the rooms**",
},
])}
</Examples> </Examples>
Remember that in any other kind of sandwich, you still use the first inflection with these pattern 1 words. Remember that in any other kind of sandwich, you still use the first inflection with these pattern 1 words.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "زه **کوټې ته** ځم", p: "زه **کوټې ته** ځم",
f: "zu **koTé ta** dzum", f: "zu **koTé ta** dzum",
e: "I'm going to the room", e: "I'm going to the room",
}, },
])} ])}
</Examples> </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. 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}> <Examples opts={opts}>
{psmd([ {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" }, 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> </Examples>
### Pattern 4 masculine animate nouns ### 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 #### 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "زه **له پښتون سره** ناست یم", p: "زه **له پښتون سره** ناست یم",
f: "zu **la puxtoon sara** naast yum", f: "zu **la puxtoon sara** naast yum",
e: "I'm (m.) sitting **with the Pashtun** (m.)", e: "I'm (m.) sitting **with the Pashtun** (m.)",
sub: "masc - not inflected", sub: "masc - not inflected",
}, },
{ {
p: "زه **له پښتنې سره** ناسته یم", p: "زه **له پښتنې سره** ناسته یم",
f: "zu **la puxtane sara** naasta yum", f: "zu **la puxtane sara** naasta yum",
e: "I'm (f.) sitting **with the Pashtun** (f.)", e: "I'm (f.) sitting **with the Pashtun** (f.)",
sub: "fem - inflected", sub: "fem - inflected",
}, },
{ {
p: "**د پښتون** نوم څه دی؟", p: "**د پښتون** نوم څه دی؟",
f: "**du puxtoon** (m.) noom tsu dey?", f: "**du puxtoon** (m.) noom tsu day?",
e: "What is the **Pashtun's** (m.) name", e: "What is the **Pashtun's** (m.) name",
sub: "masc - not inflected", sub: "masc - not inflected",
}, },
{ {
p: "زه **له پښتنو سره** ناست یم", p: "زه **له پښتنو سره** ناست یم",
f: "zu **la puxtano sara** naast yum", f: "zu **la puxtano sara** naast yum",
e: "I'm sitting **with the Pashtuns**", e: "I'm sitting **with the Pashtuns**",
}, },
{ {
p: "**د پښتنو** نومونه څه دی؟", p: "**د پښتنو** نومونه څه دی؟",
f: "**du puxtano** noomoona tsu dee?", f: "**du puxtano** noomoona tsu dee?",
e: "What are the **Pashtun's** names", e: "What are the **Pashtun's** names",
}, },
])} ])}
</Examples> </Examples>
#### As subjects of past tense transitive verbs #### As subjects of past tense transitive verbs
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**پښتون** زه ولیدم", p: "**پښتون** زه ولیدم",
f: "**puxtoon** zu óoledum", f: "**puxtoon** zu óoledum",
e: "The Pashtun saw me", e: "The Pashtun saw me",
sub: "not inflected", sub: "not inflected",
}, },
{ {
p: "**پښتنو** زه ولیدم", p: "**پښتنو** زه ولیدم",
f: "**puxtano** zu óoledum", f: "**puxtano** zu óoledum",
e: "The Pashtuns saw me", e: "The Pashtuns saw me",
}, },
])} ])}
</Examples> </Examples>
#### Plural #### 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "دلته **پښتانه** اوسېږي", p: "دلته **پښتانه** اوسېږي",
f: "dalta **puxtaanu** oseGee", f: "dalta **puxtaanu** oseGee",
e: "**Pashtuns** live here", e: "**Pashtuns** live here",
}, },
{ {
p: "دا **د پښتنو** رواج دی", p: "دا **د پښتنو** رواج دی",
f: "daa **du puxtano** rawaaj dey", f: "daa **du puxtano** rawaaj day",
e: "This is **the Pashtuns'** custom" e: "This is **the Pashtuns'** custom",
}, },
])} ])}
</Examples> </Examples>
<GameDisplay record={inflectionPatternsGame1} /> <GameDisplay record={inflectionPatternsGame1} />
<GameDisplay record={inflectionPatternsGame2} /> <GameDisplay record={inflectionPatternsGame2} />

View File

@ -2,26 +2,25 @@
title: Arabic Plural Nouns title: Arabic Plural Nouns
--- ---
import { import { InlinePs, defaultTextOptions as opts } from "@lingdocs/ps-react";
Examples,
InlinePs,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import Table from "../../components/Table"; import Table from "../../components/Table";
export function ArabicPluralTable({ children }) { export function ArabicPluralTable({ children }) {
return ( return (
<Table headRow={[ <Table
<div> headRow={[
<div>Singular</div> <div>
</div>, <div>Singular</div>
<div> </div>,
<div>Arabic Plural</div> <div>
</div>, <div>Arabic Plural</div>
]} opts={opts}> </div>,
{children} ]}
</Table> 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. 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: Some of the words change drastically:
<ArabicPluralTable> <ArabicPluralTable>
{[ {[
[{p:"حال", f:"haal", e:"condition"}, {p:"احوال", f:"ahwaal", e:"conditions"}], [
[{p:"لفظ", f:"lafz", e:"word"}, {p:"الفاظ", f:"alfaaz", e:"words"}], { p: "حال", f: "haal", e: "condition" },
[{p:"مکتب", f:"maktab", e:"school"}, {p:"مکاتب", f:"makaatib", e:"schools"}], { p: "احوال", f: "ahwaal", e: "conditions" },
[{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: "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> </ArabicPluralTable>
Some add an <InlinePs opts={opts} ps={{ p: "ات", f: "áat" }} /> on the end: Some add an <InlinePs opts={opts} ps={{ p: "ات", f: "áat" }} /> on the end:
<ArabicPluralTable> <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> </ArabicPluralTable>
And some add an <InlinePs opts={opts} ps={{ p: "ین", f: "éen" }} /> on the end: And some add an <InlinePs opts={opts} ps={{ p: "ین", f: "éen" }} /> on the end:
<ArabicPluralTable> <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: "mUjaahíd", e: "religious warrior" },
[{p:"معتاد", f:"mUtáad", e:"addict"}, {p:"معتادین", f:"mUtaadéen", e:"addicts"}], { p: "مجاهدین", f: "mUjaahidéen", e: "religious warriors" },
[{p:"مهاجر", f:"mUhaajir", e:"immigrant"}, {p:"مهاجرین", f:"mUhaajiréen", e:"immigrants"}], ],
]} [
{ 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> </ArabicPluralTable>
## Notes ## Notes
### Arabic Plurals are Always Masculine ### 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> <ArabicPluralTable>
{[ {[
[ [
{p:"ملاحظه", f:"mUlaahiza", e:"consideration (f.)", sub: "feminine", gender: "f"}, {
{p:"ملاحظات", f:"mUlaahizaat", e:"considerations (m. pl.)", sub: "masculine", gender: "m"}, p: "ملاحظه",
], f: "mUlaahiza",
[ e: "consideration (f.)",
{p:"تجربه", f:"tajraba", e:"experience (f.)", sub: "feminine", gender: "f"}, sub: "feminine",
{p:"تجارب", f:"tajaarab", e:"experiences (m. pl.)", sub: "masculine", gender: "m"}, gender: "f",
], },
[ {
{p:"لفظ", f:"lafz", e:"word (m.)", sub: "masculine", gender: "m"}, p: "ملاحظات",
{p:"الفاظ", f:"alfaaz", e:"words (m. pl.)", sub: "masculine", gender: "m"}, f: "mUlaahizaat",
], e: "considerations (m. pl.)",
[ sub: "masculine",
{p:"قبیله", f:"qabeela", e:"tribe (f.)", sub: "feminine", gender: "f"}, gender: "m",
{p:"قبایل", f:"qabaayul", e:"tribes (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> </ArabicPluralTable>
### Arabic Plurals are Not Always Used ### 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. 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"]}> <Table opts={opts} headRow={["Singular", "Arabic Plural", "Pashto Plural"]}>
{[ {[
[ [
{p:"مکتب", f:"maktab", e:"school"}, { p: "مکتب", f: "maktab", e: "school" },
{p:"مکاتب", f:"makáatib", e:"schools"}, { p: "مکاتب", f: "makáatib", e: "schools" },
{p:"مکتبونه", f:"maktaboona", e:"schools"}, { p: "مکتبونه", f: "maktaboona", e: "schools" },
], ],
[ [
{p:"مهاجر", f:"mUhaajir", e:"immigrant"}, { p: "مهاجر", f: "mUhaajir", e: "immigrant" },
{p:"مهاجرین", f:"mUhaajiréen", e:"immigrants"}, { p: "مهاجرین", f: "mUhaajiréen", e: "immigrants" },
{p:"مهاجران", f:"mUhaajiráan", e:"immigrants"}, { p: "مهاجران", f: "mUhaajiráan", e: "immigrants" },
], ],
[ [
{p:"رابطه", f:"raabitá", e:"connection"}, { p: "رابطه", f: "raabitá", e: "connection" },
{p:"روابط", f:"rawáabit", e:"connections"}, { p: "روابط", f: "rawáabit", e: "connections" },
{p:"رابطې", f:"raabité", e:"connections"}, { p: "رابطې", f: "raabité", e: "connections" },
], ],
]} ]}
</Table> </Table>

View File

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

View File

@ -3,28 +3,24 @@ title: Nouns and Gender
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
InlinePs, InlinePs,
Examples, firstVariation,
firstVariation,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import genderColors from "../../lib/gender-colors"; import genderColors from "../../lib/gender-colors";
import GenderTable from "../../components/GenderTable"; import GenderTable from "../../components/GenderTable";
import Link from "../../components/Link"; import Link from "../../components/Link";
export const femColor = genderColors.f; export const femColor = genderColors.f;
export const mascColor = genderColors.m; export const mascColor = genderColors.m;
import { import { nounGenderGame1, nounGenderGame2 } from "../../games/games";
nounGenderGame1,
nounGenderGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; import GameDisplay from "../../games/GameDisplay";
export const Masc = () => ( export const Masc = () => (
<span style={{ backgroundColor: mascColor }}>masculine</span> <span style={{ backgroundColor: mascColor }}>masculine</span>
); );
export const Fem = () => ( 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. 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:** **<span style={{ backgroundColor: mascColor }}>Masculine</span> words end in:**
- a consonant - a consonant
- <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /> - <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} />
- <InlinePs opts={opts} ps={{ p: "ـه", f: "u" }} /> - <InlinePs opts={opts} ps={{ p: "ـه", f: "u" }} />
- <InlinePs opts={opts} ps={{ p: "وی", f: "ooy" }} /> or <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} /> - <InlinePs opts={opts} ps={{ p: "وی", f: "ooy" }} /> or <InlinePs
opts={opts}
ps={{ p: "ای", f: "aay" }}
/>
**<span style={{ backgroundColor: femColor }}>Feminine</span> words end in:** **<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: { masc: {
ending: "any consonant", ending: "any consonant",
ex: { p: "کور", f: "kor", e: "house" }, ex: { p: "کور", f: "kor", e: "house" },
}, },
fem: { fem: {
ending: { p: "ه", f: "a" }, ending: { p: "ه", f: "a" },
ex: { p: "ښځه", f: "xudza", e: "woman" }, ex: { p: "ښځه", f: "xudza", e: "woman" },
}, },
}, },
{ {
masc: { masc: {
ending: { p: "ی", f: "ey" }, ending: { p: "ی", f: "ay" },
ex: {p:"سړی", f:"saRey", e:"man"}, ex: { p: "سړی", f: "saRay", e: "man" },
}, },
fem: { fem: {
ending: { p: "ا", f: "aa" }, ending: { p: "ا", f: "aa" },
ex: {p:"جزا", f:"jăzaa", e:"punishment"}, ex: { p: "جزا", f: "jăzaa", e: "punishment" },
}, },
}, },
{ {
masc: { masc: {
ending: { p: "ای", f: "aay" }, ending: { p: "ای", f: "aay" },
ex: {p:"ځای", f:"dzaay", e:"place"}, ex: { p: "ځای", f: "dzaay", e: "place" },
}, },
fem: { fem: {
ending: { p: "ي", f: "ee" }, ending: { p: "ي", f: "ee" },
ex: {p:"دوستي", f:"dostee", e:"friendship"}, ex: { p: "دوستي", f: "dostee", e: "friendship" },
}, },
}, },
{ {
masc: { masc: {
ending: { p: "ه", f: "u" }, ending: { p: "ه", f: "u" },
ex: {p:"واده", f:"waadu", e:"marriage"}, ex: { p: "واده", f: "waadu", e: "marriage" },
}, },
fem: { fem: {
ending: { p: "ۍ", f: "uy" }, ending: { p: "ۍ", f: "uy" },
ex: {p:"هګۍ", f:"haguy", e:"egg"}, ex: { p: "هګۍ", f: "haguy", e: "egg" },
}, },
}, },
{ {
masc: { masc: {
ending: { p:"و", f: "aw" }, ending: { p: "و", f: "aw" },
ex: {p:"کنډو", f:"kanDáw", e:"crack"}, ex: { p: "کنډو", f: "kanDáw", e: "crack" },
}, },
fem: { fem: {
ending: { p: "و", f: "o" }, ending: { p: "و", f: "o" },
ex: { p:"پښتو", f:"puxto", e:"Pashto" }, ex: { p: "پښتو", f: "puxto", e: "Pashto" },
}, },
}, },
{ {
masc: { masc: {
ending: { p: "وی", f: "ooy" }, ending: { p: "وی", f: "ooy" },
ex: {p:"سوی", f:"sooy", e:"rabbit"}, ex: { p: "سوی", f: "sooy", e: "rabbit" },
}, },
fem: { fem: {
ending: { p: "ې", f: "e" }, ending: { p: "ې", f: "e" },
ex: {p:"ملګرې", f:"malgure", e:"female friend"}, ex: { p: "ملګرې", f: "malgure", e: "female friend" },
}, },
}, },
]} /> ]}
/>
**A couple of other things to watch out for:** **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: Here are some other <Fem /> words that have lost their <InlinePs opts={opts} ps={{p:"ـه", f:"a"}} /> ending:
export const femEndingWConsonant = [ export const femEndingWConsonant = [
{ p: "لار", f: "laar", e: "road" }, { p: "لار", f: "laar", e: "road" },
{ p: "میاشت", f: "myaasht", e: "month" }, { p: "میاشت", f: "myaasht", e: "month" },
{ p: "غېږ", f: "gheG", e: "bosom" }, { p: "غېږ", f: "gheG", e: "bosom" },
{ p: "څنګل", f: "tsangul", e: "elbow" }, { p: "څنګل", f: "tsangul", e: "elbow" },
{ p: "بړستن", f: "bRastun", e: "blanket" }, { p: "بړستن", f: "bRastun", e: "blanket" },
{ p: "ږمنځ", f: "Gmundz", e: "comb" }, { p: "ږمنځ", f: "Gmundz", e: "comb" },
{ p: "ستن", f: "stun", e: "needle" }, { p: "ستن", f: "stun", e: "needle" },
{ p: "لمن", f: "lamun", e: "skirt" }, { p: "لمن", f: "lamun", e: "skirt" },
]; ];
export function IrregularFem() { export function IrregularFem() {
return <ul> return (
{femEndingWConsonant.map((entry) => ( <ul>
<li key={entry.p}> {femEndingWConsonant.map((entry) => (
<InlinePs opts={opts} ps={{ p: entry.p, f: firstVariation(entry.f), e: firstVariation(entry.e) }} /> <li key={entry.p}>
</li> <InlinePs
))} opts={opts}
</ul>; ps={{
p: entry.p,
f: firstVariation(entry.f),
e: firstVariation(entry.e),
}}
/>
</li>
))}
</ul>
);
} }
<IrregularFem /> <IrregularFem />
@ -147,33 +157,35 @@ Note that some words can be said with or without an <InlinePs opts={opts} ps={{p
### Words for people ### 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: { masc: {
ex: { p: "بندي", f: "bandee", e: "prisoner" }, ex: { p: "بندي", f: "bandee", e: "prisoner" },
}, },
fem: { fem: {
ex: { p: "مور", f: "mor", e: "mother" }, ex: { p: "مور", f: "mor", e: "mother" },
}, },
}, },
{ {
masc: { masc: {
ex: {p:"مېلمه", f:"melmá", e:"guest (male)"}, ex: { p: "مېلمه", f: "melmá", e: "guest (male)" },
}, },
fem: { fem: {
ex: {p: "ترور", f:"tror", e: "aunt" }, ex: { p: "ترور", f: "tror", e: "aunt" },
}, },
}, },
{ {
masc: { masc: {
ex: {p: "ماما", f:"maamáa", e: "uncle" }, ex: { p: "ماما", f: "maamáa", e: "uncle" },
}, },
fem: { fem: {
ex: { p: "خور", f: "khor", e: "sister" }, ex: { p: "خور", f: "khor", e: "sister" },
}, },
}, },
]} /> ]}
/>
<GameDisplay record={nounGenderGame2} /> <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: "سړی", p: "سړی",
f: "saRéy", f: "saRáy",
e: "man", e: "man",
sub: ( 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 pattern #3
</Link> </Link>
), ),
@ -62,10 +62,10 @@ To understand how to inflect words, have a look at the <Link to="/inflection/inf
[ [
{ {
p: "سپی", p: "سپی",
f: "spey", f: "spay",
e: "dog", e: "dog",
sub: ( 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 pattern #3
</Link> </Link>
), ),
@ -146,7 +146,7 @@ Note that in some forms of inflection with feminine nouns the word does not chan
f: "malgúre", f: "malgúre",
e: "friend (f.)", e: "friend (f.)",
sub: ( 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 pattern #2
</Link> </Link>
), ),
@ -222,8 +222,8 @@ This is _usually_ only used with animate things (people or animals), but there a
<PluralTable> <PluralTable>
{[ {[
[ [
{ p: "شی", f: "shey", e: "thing" }, { p: "شی", f: "shay", e: "thing" },
{ p: "شیان", f: "sheyáan", e: "things" }, { p: "شیان", f: "shayáan", e: "things" },
], ],
]} ]}
</PluralTable> </PluralTable>
@ -272,7 +272,7 @@ Some nouns just have completely irregular plural forms.
{[ {[
[ [
{ p: "خور", f: "khor", e: "sister" }, { p: "خور", f: "khor", e: "sister" },
{ p: "خویندې", f: "khweynde", e: "sisters" }, { p: "خویندې", f: "khwaynde", e: "sisters" },
], ],
[ [
{ p: "ورور", f: "wror", e: "brother" }, { p: "ورور", f: "wror", e: "brother" },
@ -292,7 +292,7 @@ Some nouns just have completely irregular plural forms.
], ],
[ [
{ p: "ترور", f: "tror", e: "aunt" }, { p: "ترور", f: "tror", e: "aunt" },
{ p: "تریندې", f: "treynde", e: "aunts" }, { p: "تریندې", f: "traynde", e: "aunts" },
], ],
[ [
{ p: "لور", f: "loor", e: "daughter" }, { 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: "nGor", e: "daughter-in-law" },
{ p: "نږیندې", f: "nGeynde", e: "daughter-in-laws" }, { p: "نږیندې", f: "nGaynde", e: "daughter-in-laws" },
], ],
]} ]}
</PluralTable> </PluralTable>

View File

@ -2,12 +2,7 @@
title: Unisex Nouns title: Unisex Nouns
--- ---
import { import { InlinePs, defaultTextOptions as opts } from "@lingdocs/ps-react";
Examples,
InlinePs,
defaultTextOptions as opts,
} from "@lingdocs/ps-react";
import Table from "../../components/Table";
import Link from "../../components/Link"; import Link from "../../components/Link";
import GenderTable from "../../components/GenderTable"; import GenderTable from "../../components/GenderTable";
import { unisexNounGame } from "../../games/games"; 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. 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: { masc: {
ex: { p: "ډاکټر", f: "DakTár", e: "male doctor 👨‍⚕️" }, ex: { p: "ډاکټر", f: "DakTár", e: "male doctor 👨‍⚕️" },
}, },
fem: { fem: {
ex: { p: "ډاکټره", f: "DakTára", e: "female doctor 👩‍⚕️" }, ex: { p: "ډاکټره", f: "DakTára", e: "female doctor 👩‍⚕️" },
}, },
}, },
{ {
masc: { masc: {
ex: {p:"نرس", f:"nurs", e:"male nurse"}, ex: { p: "نرس", f: "nurs", e: "male nurse" },
}, },
fem: { fem: {
ex: {p: "نرسه", f:"nursa", e: "female nurse" }, ex: { p: "نرسه", f: "nursa", e: "female nurse" },
}, },
}, },
{ {
masc: { masc: {
ex: { p: "اتل", f: "atal", e: "male hero" }, ex: { p: "اتل", f: "atal", e: "male hero" },
}, },
fem: { fem: {
ex: { p: "اتله", f: "atala", e: "female hero" }, 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: { masc: {
ex: { ex: {
p: "ملګری", p: "ملګری",
f: "malgúrey", f: "malgúray",
e: "male friend 👦", e: "male friend 👦",
},
}, },
fem: { },
ex: { fem: {
p: "ملګرې", ex: {
f: "malgúre", p: "ملګرې",
e: "female friend 👧", f: "malgúre",
}, e: "female friend 👧",
}, },
},
}, },
{ {
masc: { masc: {
ex: {p: "ښوونکی", f:"xUwóonkey", e: "male teacher 👨‍🏫" }, ex: { p: "ښوونکی", f: "xUwóonkay", e: "male teacher 👨‍🏫" },
}, },
fem: { fem: {
ex: { p: "ښوونکې", f: "xUwóonke", e: "female teacher 👩‍🏫" }, 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: { masc: {
ex: { ex: {
p: "پاکستانی", p: "پاکستانی",
f: "paakistaanéy", f: "paakistaanáy",
e: "A Pakistani man", e: "A Pakistani man",
},
}, },
fem: { },
ex: { fem: {
p: "پاکستانۍ", ex: {
f: "paakistaanúy", p: "پاکستانۍ",
e: "A Pakistani woman", f: "paakistaanúy",
}, e: "A Pakistani woman",
}, },
},
}, },
{ {
masc: { masc: {
ex: {p: "لمسی", f: "lmaséy", e: "grandson 👦"}, ex: { p: "لمسی", f: "lmasáy", e: "grandson 👦" },
}, },
fem: { fem: {
ex: {p: "لمسۍ", f: "lmasúy", e: "granddaughter 👧"}, ex: { p: "لمسۍ", f: "lmasúy", e: "granddaughter 👧" },
}, },
}, },
]} /> ]}
/>
### 4. Words with the "Pashtoon" pattern ### 4. Words with the "Pashtoon" pattern
See <Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern">pattern</Link>. See <Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern">pattern</Link>.
<GenderTable rows={[ <GenderTable
rows={[
{ {
masc: { masc: {
ex: { ex: {
p: "پښتون", p: "پښتون",
f: "puxtóon", f: "puxtóon",
e: "a male Pashtun", e: "a male Pashtun",
},
}, },
fem: { },
ex: { fem: {
p: "پښتنه", ex: {
f: "puxtaná", p: "پښتنه",
e: "a female Pashtun", f: "puxtaná",
}, e: "a female Pashtun",
}, },
},
}, },
{ {
masc: { masc: {
ex: { ex: {
p: "شپون", p: "شپون",
f: "shpoon", f: "shpoon",
e: "male shepherd", e: "male shepherd",
},
}, },
fem: { },
ex: { fem: {
p: "شپنه", ex: {
f: "shpaná", p: "شپنه",
e: "female shepherd", f: "shpaná",
}, e: "female shepherd",
} },
},
}, },
{ {
masc: { masc: {
ex: { ex: {
p: "مېلمه", p: "مېلمه",
f: "melmá", f: "melmá",
e: "a male guest", e: "a male guest",
},
}, },
fem: { },
ex: { fem: {
p: "مېلمنه", ex: {
f: "melmaná", p: "مېلمنه",
e: "a female guest", f: "melmaná",
}, e: "a female guest",
}, },
},
}, },
{ {
masc: { masc: {
ex: { ex: {
p: "کوربه", p: "کوربه",
f: "korbá", f: "korbá",
e: "male host", e: "male host",
},
}, },
fem: { },
ex: { fem: {
p: "کوربنه", ex: {
f: "korbaná", p: "کوربنه",
e: "female host", f: "korbaná",
}, e: "female host",
} },
} },
]} /> },
]}
/>
### 5. Shorter words that squish ### 5. Shorter words that squish
See <Link to="/inflection/inflection-patterns/#5-shorter-words-that-squish">pattern</Link>. See <Link to="/inflection/inflection-patterns/#5-shorter-words-that-squish">pattern</Link>.
<GenderTable rows={[ <GenderTable
rows={[
{ {
masc: { masc: {
ex: { ex: {
p: "غل", p: "غل",
f: "ghul", f: "ghul",
e: "male thief", e: "male thief",
},
}, },
fem: { },
ex: { fem: {
p: "غله", ex: {
f: "ghla", p: "غله",
e: "female thief", f: "ghla",
}, e: "female thief",
} },
},
}, },
{ {
masc: { masc: {
ex: { ex: {
p: "خر", p: "خر",
f: "khur", f: "khur",
e: "male donkey", e: "male donkey",
},
}, },
fem: { },
ex: { fem: {
p: "خره", ex: {
f: "khra", p: "خره",
e: "female donkey", f: "khra",
}, e: "female donkey",
} },
} },
]} /> },
]}
/>
<GameDisplay record={unisexNounGame} /> <GameDisplay record={unisexNounGame} />

View File

@ -1,10 +1,11 @@
--- ---
title: Intro to Participles title: Intro to Participles
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import Link from "../../components/Link"; import Link from "../../components/Link";
import participleMeme from "./participle-meme.jpg"; 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**. Participles words that are **made from verbs** but **act as a noun or adjective**.
<div className="text-center"> <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> </div>
There are 3 types of participles. There are 3 types of participles.
1. Root/Infinitive 1. Root/Infinitive
2. <InlinePs opts={opts} ps={{ p: "-ونکی", f: "-oonkey" }} /> suffix 2. <InlinePs opts={opts} ps={{ p: "-ونکی", f: "-oonkay" }} /> suffix{" "}
3. Past Participle 3. Past Participle
## Root/Infinitive ## 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. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**لیکل** ښه دي", p: "**لیکل** ښه دي",
f: "**leekul** xu dee", f: "**leekul** xu dee",
e: "**Writing** is good", e: "**Writing** is good",
}, },
])} ])}
</Examples> </Examples>
These kinds of participles are used like the "-ing" present particple in English, or like the "to be" infinitives in English. These kinds of participles are used like the "-ing" present particple in English, or like the "to be" infinitives in English.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "زه **لیکل** غواړم", p: "زه **لیکل** غواړم",
f: "zu **leekul** ghwaaRum", f: "zu **leekul** ghwaaRum",
e: "I want **to write**", e: "I want **to write**",
}, },
])} ])}
</Examples> </Examples>
### Inflecting the Root/Infinitive Participle ### 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 #### 1. Inflecting in a sandwich
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**د لیکلو لپاره** څه نشته", p: "**د لیکلو لپاره** څه نشته",
f: "**du leekulo lapaara** tsu nushta", f: "**du leekulo lapaara** tsu nushta",
e: "There's nothing to write", e: "There's nothing to write",
}, },
{ {
p: "زه **د پاڅېدلو** توان نه لرم", p: "زه **د پاڅېدلو** توان نه لرم",
f: "zu **du patsedulo** twaan nu larum", f: "zu **du patsedulo** twaan nu larum",
e: "I don't have the strength to get up", e: "I don't have the strength to get up",
} },
])} ])}
</Examples> </Examples>
#### 2. Inflecting as a subject of a past tense transitive verb #### 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: Since these particples are nouns, they can also be the subject of a sentance. For example:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**لیکل** ما ستړی کوي", p: "**لیکل** ما ستړی کوي",
f: "**leekul** maa stuRey kawee.", f: "**leekul** maa stuRay kawee.",
e: "Writing makes me tired", e: "Writing makes me tired",
sub: "subject of a present tense transitive verb (not inflected)" sub: "subject of a present tense transitive verb (not inflected)",
}, },
{ {
p: "**لیکلو** زه ستړی کړم", p: "**لیکلو** زه ستړی کړم",
f: "**leekulo** zu stuRey kRum", f: "**leekulo** zu stuRay kRum",
e: "**Writing** made me tired", e: "**Writing** made me tired",
sub: "subject of a past tense transitive verb (inflected)" sub: "subject of a past tense transitive verb (inflected)",
}, },
])} ])}
</Examples> </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 ### 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "دا یوه **دردونکې** کیسه ده", p: "دا یوه **دردونکې** کیسه ده",
f: "daa yawa **dardawóonke** keesa da", f: "daa yawa **dardawóonke** keesa da",
e: "That's a sad story", e: "That's a sad story",
sub: "(fem. sing.)" sub: "(fem. sing.)",
}, },
{ {
p: "دا یو **دردونکی** ناول دی", p: "دا یو **دردونکی** ناول دی",
f: "daa yo **dardawóonkey** naawul dey", f: "daa yo **dardawóonkay** naawul day",
e: "That's a sad novel", e: "That's a sad novel",
sub: "(masc. sing.)" sub: "(masc. sing.)",
}, },
{ {
p: "دا **دردونکي** ناولونه دي", p: "دا **دردونکي** ناولونه دي",
f: "daa **dardawóonkee** naawuloona dee", f: "daa **dardawóonkee** naawuloona dee",
e: "Those are sad novels", e: "Those are sad novels",
sub: "(masc. plural.)" sub: "(masc. plural.)",
}, },
])} ])}
</Examples> </Examples>
### As an agent noun ### 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 = [ export const agentNounExamples = [
[ [
{ {
p: "زده کول", p: "زده کول",
f: "zda kawul", f: "zda kawul",
e: "to learn", e: "to learn",
}, },
{ {
p: "زده کوونکی", p: "زده کوونکی",
f: "zda kawóonkey", f: "zda kawóonkay",
e: "student/learner", e: "student/learner",
}, },
], ],
[ [
{ {
p: "ښوول", p: "ښوول",
f: "xowul", f: "xowul",
e: "to teach", e: "to teach",
}, },
{ {
p: "ښووونکی", p: "ښووونکی",
f: "xowóonkey", f: "xowóonkay",
e: "teacher", e: "teacher",
}, },
], ],
[ [
{ {
p: "لیدل", p: "لیدل",
f: "leedul", f: "leedul",
e: "to see", e: "to see",
}, },
{ {
p: "لیدونکی", p: "لیدونکی",
f: "leedóonkey", f: "leedóonkay",
e: "viewer", e: "viewer",
}, },
], ],
[ [
{ {
p: "اورېدل", p: "اورېدل",
f: "awredul", f: "awredul",
e: "to hear", e: "to hear",
}, },
{ {
p: "اورېدونکی", p: "اورېدونکی",
f: "awredoonkey", f: "awredoonkay",
e: "listener", e: "listener",
}, },
], ],
]; ];
<table className="table table-bordered my-3"> <table className="table table-bordered my-3">
<thead> <thead>
<tr> <tr>
<th scope="col">Verb</th> <th scope="col">Verb</th>
<th scope="col">Agent Noun</th> <th scope="col">Agent Noun</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{agentNounExamples.map(a => ( {agentNounExamples.map((a) => (
<tr> <tr>
<td> <td>
<Examples opts={opts}>{a[0]}</Examples> <Examples opts={opts}>{a[0]}</Examples>
</td> </td>
<td> <td>
<Examples opts={opts}>{a[1]}</Examples> <Examples opts={opts}>{a[1]}</Examples>
</td> </td>
</tr> </tr>
))} ))}
</tbody> </tbody>
</table> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**زده کوونکي** مکتب ته ځي", p: "**زده کوونکي** مکتب ته ځي",
f: "**zda kawoonkee** maktab to dzee", f: "**zda kawoonkee** maktab to dzee",
e: "The **students (male)** are going to school", e: "The **students (male)** are going to school",
}, },
{ {
p: "**زده کوونکې** مکتب ته ځي", p: "**زده کوونکې** مکتب ته ځي",
f: "**zda kawoonke** maktab to dzee", f: "**zda kawoonke** maktab to dzee",
e: "The **students (female)** are going to school", e: "The **students (female)** are going to school",
}, },
{ {
p: "ګرانو **لیدونکو**، ستړي مه شئ", p: "ګرانو **لیدونکو**، ستړي مه شئ",
f: "graano **leedóonko**, stuRee ma sheyy", f: "graano **leedóonko**, stuRee ma shey",
e: "Hello dear viewers", e: "Hello dear viewers",
}, },
])} ])}
</Examples> </Examples>
## Past Participle ## 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. They work as an adjective... EXPLANATION COMING SOON.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "د موټړو په ښیښو **لیکې** خبرې", p: "د موټړو په ښیښو **لیکې** خبرې",
f: "du moTur pu xeexo **leekúle** khabure", f: "du moTur pu xeexo **leekúle** khabure",
e: "Words **written** on car windows", e: "Words **written** on car windows",
}, },
{ {
p: "کلاس په **ټاکلي** وخت کې پیل شو", p: "کلاس په **ټاکلي** وخت کې پیل شو",
f: "klaas pu **Takúlee** wakht peyl sho", f: "klaas pu **Takúlee** wakht payl sho",
e: "Class started at the **appointed** time", e: "Class started at the **appointed** time",
}, },
{ {
p: "**راغلي** خلک هلته ناست دي", p: "**راغلي** خلک هلته ناست دي",
f: "**raaghúlee** khalk halta naast dee", f: "**raaghúlee** khalk halta naast dee",
e: "The people **that came** are sitting there", e: "The people **that came** are sitting there",
}, },
{ {
p: "هغوي له **راغلو** خلکو سره مرسته کوي", p: "هغوي له **راغلو** خلکو سره مرسته کوي",
f: "haghwee la **raaghúlo** khalko sara mrasta kawee", f: "haghwee la **raaghúlo** khalko sara mrasta kawee",
e: "They are helping the people that came.", e: "They are helping the people that came.",
} },
])} ])}
</Examples> </Examples>

View File

@ -2,18 +2,9 @@
title: APs title: APs
--- ---
import { import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
defaultTextOptions as opts,
InlinePs,
Examples,
makeNounSelection,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import EditableBlock, { import EditableBlock from "../../components/phrase-diagram/EditableBlock";
EditIcon,
} from "../../components/phrase-diagram/EditableBlock";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import EditableEPEx from "../../components/phrase-diagram/EditableEPEx"; import EditableEPEx from "../../components/phrase-diagram/EditableEPEx";
import { EP, VP } from "../../components/terms-links.tsx"; import { EP, VP } from "../../components/terms-links.tsx";
@ -24,198 +15,333 @@ An AP is either:
- an adverb, or - an adverb, or
- a sandwich - a sandwich
### Adverb ### Adverb
An adverb is a word or expression that modifies the time, manner, place, etc. of a phrase. An adverb is a word or expression that modifies the time, manner, place, etc. of a phrase.
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "AP",
type: "AP", selection: {
selection: { type: "adverb",
type: "adverb", entry: {
entry: {"ts":1527815160,"i":2394,"p":"پرون","f":"paroon","g":"paroon","e":"yesterday","c":"adv."}, ts: 1527815160,
}, i: 2394,
} p: "پرون",
} f: "paroon",
g: "paroon",
e: "yesterday",
c: "adv.",
},
},
}}
</EditableBlock> </EditableBlock>
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "AP",
type: "AP", selection: {
selection: { type: "adverb",
type: "adverb", entry: {
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."}, 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> </EditableBlock>
#### Note on inflecting adverbs #### 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> <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> </EditableEPEx>
When an adverb can also be used as an adjective it will inflect to agree with: 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 🥪 ### 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. 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}> <EditableBlock opts={opts}>
{ {{
{ type: "AP",
type: "AP", selection: {
selection: { type: "sandwich",
type: "sandwich", before: { p: "په", f: "pu" },
before: { p: "په", f: "pu" }, after: { p: "کې", f: "ke" },
after: { p: "کې", f: "ke" }, e: "in",
e: "in", inside: {
inside: { type: "NP",
type: "NP", selection: {
selection: { type: "noun",
type: "noun", entry: {
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, ts: 1527812828,
gender: "masc", i: 10539,
genderCanChange: false, p: "کور",
number: "singular", f: "kor",
numberCanChange: true, g: "kor",
adjectives: [], e: "house, home",
possesor: undefined, c: "n. m.",
}, },
}, gender: "masc",
}, genderCanChange: false,
} number: "singular",
} numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
}}
</EditableBlock> </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. 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}> <EditableBlock opts={opts}>
{ {{
{ type: "AP",
type: "AP", selection: {
selection: { type: "sandwich",
type: "sandwich", before: { p: "په", f: "pu" },
before: { p: "په", f: "pu" }, after: { p: "کې", f: "ke" },
after: { p: "کې", f: "ke" }, e: "in",
e: "in", inside: {
inside: { type: "NP",
type: "NP", selection: {
selection: { type: "noun",
type: "noun", entry: {
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, ts: 1527812828,
gender: "masc", i: 10539,
genderCanChange: false, p: "کور",
number: "singular", f: "kor",
numberCanChange: true, g: "kor",
adjectives: [{ e: "house, home",
type: "adjective", c: "n. m.",
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, },
}], gender: "masc",
possesor: undefined, 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> </EditableBlock>
We can also add a possesor it hangs outside of the sandwich. All together it's still all considered one AP block though. 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}> <EditableBlock opts={opts}>
{{ {{
type: "AP", type: "AP",
selection: {
type: "sandwich",
before: { p: "په", f: "pu" },
after: { p: "کې", f: "ke" },
e: "in",
inside: {
type: "NP",
selection: { selection: {
type: "sandwich", type: "noun",
before: { p: "په", f: "pu" }, entry: {
after: { p: "کې", f: "ke" }, ts: 1527812828,
e: "in", i: 10539,
inside: { p: "کور",
type: "NP", f: "kor",
selection: { g: "kor",
type: "noun", e: "house, home",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, c: "n. m.",
gender: "masc", },
genderCanChange: false, gender: "masc",
number: "singular", genderCanChange: false,
numberCanChange: true, number: "singular",
adjectives: [{ numberCanChange: true,
type: "adjective", adjectives: [
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, {
}], type: "adjective",
possesor: { entry: {
shrunken: false, ts: 1527812625,
np: { i: 9128,
type: "NP", p: "غټ",
selection: { f: "ghuT, ghaT",
type: "noun", g: "ghuT,ghaT",
entry: {"ts":1527815251,"i":7802,"p":"سړی","f":"saRéy","g":"saRey","e":"man","c":"n. m.","ec":"man","ep":"men"}, e: "big, fat",
gender: "masc", c: "adj.",
genderCanChange: false, },
number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
},
},
},
}, },
],
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> </EditableBlock>
Here's another example using the sandwich <InlinePs opts={opts} ps={{ p: "سره", f: "sara", e: "with" }} />: Here's another example using the sandwich <InlinePs opts={opts} ps={{ p: "سره", f: "sara", e: "with" }} />:
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{{ {{
type: "AP", type: "AP",
selection: {
type: "sandwich",
before: { p: "له", f: "la" },
after: { p: "سره", f: "sara" },
e: "with",
inside: {
type: "NP",
selection: { selection: {
type: "sandwich", type: "noun",
before: { p: "له", f: "la" }, entry: {
after: { p: "سره", f: "sara" }, ts: 1527814159,
e: "with", i: 12723,
inside: { p: "ملګری",
type: "NP", f: "malgúray",
selection: { g: "malguray",
type: "noun", e: "friend, companion",
entry: {"ts":1527814159,"i":12723,"p":"ملګری","f":"malgúrey","g":"malgurey","e":"friend, companion","c":"n. m. anim. unisex"}, c: "n. m. anim. unisex",
gender: "masc", },
genderCanChange: true, gender: "masc",
number: "singular", genderCanChange: true,
numberCanChange: true, number: "singular",
adjectives: [], numberCanChange: true,
possesor: { adjectives: [],
shrunken: false, possesor: {
np: { shrunken: false,
type: "NP", np: {
selection: { type: "NP",
type: "pronoun", selection: {
distance: "far", type: "pronoun",
person: 0, distance: "far",
}, person: 0,
}, },
},
},
}, },
},
}, },
}} },
},
}}
</EditableBlock> </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 title: Blocks and Kids
--- ---
import { import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
defaultTextOptions as opts,
InlinePs,
Examples,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import EditableBlock, {
EditIcon,
} from "../../components/phrase-diagram/EditableBlock";
import BasicBlocks from "../../components/BasicBlocks"; import BasicBlocks from "../../components/BasicBlocks";
import { AP, NP, Complement } from "../../components/terms-links"; import { AP, NP, Complement } from "../../components/terms-links";
import EditableVPEx from "../../components/phrase-diagram/EditableVPEx"; import EditableVPEx from "../../components/phrase-diagram/EditableVPEx";
import EditableEPEx from "../../components/phrase-diagram/EditableEPEx"; import EditableEPEx from "../../components/phrase-diagram/EditableEPEx";
export function BlocksIcon() { 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. 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. 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> <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> </EditableVPEx>
<EditableEPEx opts={opts} noEdit hideOmitSubject> <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> </EditableEPEx>
<EditableVPEx opts={opts} noEdit> <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> </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: 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> <details>
<summary>All the blocks</summary> <summary>All the blocks</summary>
<ul> <ul>
<li><NP /></li> <li>
<li><AP /></li> <NP />
<li><Complement text="Complement" /></li> </li>
<li>Verb</li> <li>
<li>The perfective head of a Verb (a perfective prefix like <InlinePs opts={opts} ps={{ p: "و", f: "oo", e: "" }} />)</li> <AP />
<li>Equative</li> </li>
<li>Past Participle (in a perfect verb)</li> <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> <Complement text="Complement" />
<li>The ability auxilary verb (ie. the <InlinePs opts={opts} ps={{ p: "شي", f: "shee" }} /> in <InlinePs opts={opts} ps={{ p: "کولی شي", f: "shee" }} />)</li> </li>
</ul> <li>Verb</li>
</details> <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 ## 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. Click on the <BlocksIcon /> on the following examples to see where the kids' section lies.
<EditableVPEx opts={opts} noEdit> <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> </EditableVPEx>
<EditableEPEx opts={opts} hideOmitSubject noEdit> <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> </EditableEPEx>
<EditableVPEx opts={opts} noEdit> <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> </EditableVPEx>
Here are the kids go in the kids' section, and they always line up **in this order**. Here are the kids go in the kids' section, and they always line up **in this order**.
<ul> <ul>
<li>The emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> particle</li> <li>
<li>The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> particle</li> The emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> particle
<li>The jussive <InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "may" }} /></li> </li>
<li><Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link>:</li> <li>
<ul> The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> particle
<li><InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st pers sing" }} /></li> </li>
<li><InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "2nd pers sing" }} /></li> <li>
<li><InlinePs opts={opts} ps={{ p: "مو", f: "mU", e: "1st/2nd pers plur" }} /></li> The jussive <InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "may" }} />
<li><InlinePs opts={opts} ps={{ p: "یې", f: "ye", e: "3rd pers" }} /></li> </li>
</ul> <li>
<li><InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} /></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> </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 ## 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: "che", e: "that" }} />
- <InlinePs opts={opts} ps={{ p: "خو", f: "kho", e: "but/however" }} /> - <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: 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: "raa-ta", e: "to me/us" }} />
- <InlinePs opts={opts} ps={{ p: "درته", f: "dăr-ta", e: "to you" }} /> - <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: "raa-pase", e: "after me/us" }} />
- <InlinePs opts={opts} ps={{ p: "درپسې", f: "dăr-pase", e: "after you" }} /> - <InlinePs opts={opts} ps={{ p: "درپسې", f: "dăr-pase", e: "after you" }} />
- <InlinePs opts={opts} ps={{ p: "ورپسې", f: "wă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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
InlinePs, InlinePs,
Examples, Examples,
makeNounSelection,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import EquativeIllustration from "../../components/EquativeIllustration"; import EquativeIllustration from "../../components/EquativeIllustration";
import EditableEPEx, { EditIcon } from "../../components/phrase-diagram/EditableEPEx"; import EditableEPEx, {
import BasicBlocks from "../../components/BasicBlocks" 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. 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: Basically with an equative phrase we have three main parts:
- **"A"** a subject (the thing we are talking about) - **"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 - **"="** an equative at the end to join them together
Notice how the word order is different than it is in English. 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: 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 1. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/ep/#whats-an-ep-complement">
2. <Link to="/phrase-structure/np/">NP</Link> + <Link to="/phrase-structure/np/">NP</Link> + Equative 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 ## 1. NP + Complement
<BasicBlocks large blocks={[ <BasicBlocks
large
blocks={[
{ bottom: "NP", inside: "A", top: "Subject" }, { bottom: "NP", inside: "A", top: "Subject" },
{ bottom: "Comp.", inside: "B", top: "Predicate" }, { bottom: "Comp.", inside: "B", top: "Predicate" },
{ bottom: "Equative", inside: "=" }, { 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>. 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. 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> <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>
<EditableEPEx opts={opts} hideOmitSubject> <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> </EditableEPEx>
#### With a location adverb #### 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. A location adverb is a word that describes the location of the subject. Don't worry, it doesn't inflect.
<EditableEPEx opts={opts} hideOmitSubject> <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>
<EditableEPEx opts={opts} hideOmitSubject> <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> </EditableEPEx>
#### With a sandwich #### 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. You can also use any kind of sandwich to describe the subject of an EP.
<EditableEPEx opts={opts} hideOmitSubject> <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>
<EditableEPEx opts={opts} hideOmitSubject> <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> </EditableEPEx>
#### With a complement noun #### 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "هغه **غوسه** دی", f: "hagha **ghwUsa** dey", e: "He is **angry**" }, { p: "هغه **غوسه** دی", f: "hagha **ghwUsa** day", e: "He is **angry**" },
])} ])}
</Examples> </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... 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "ته استرحات یې؟", f: "tu istirahaat ye?", e: "Are you (m.) **resting**?" }, {
{ p: "ته استرحات یې؟", f: "tu istirahaat ye?", e: "Are you (f.) **resting**?" }, p: "ته استرحات یې؟",
])} f: "tu istirahaat ye?",
e: "Are you (m.) **resting**?",
},
{
p: "ته استرحات یې؟",
f: "tu istirahaat ye?",
e: "Are you (f.) **resting**?",
},
])}
</Examples> </Examples>
You don't inflect the <InlinePs opts={opts} ps={{ p: "استرحات", f: "istiraháat", e: "rest" }} /> because it's a noun, not an adjective. 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}> <Examples opts={opts}>
{psmd([ {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" }, 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> </Examples>
## 2. NP + NP ## 2. NP + NP
<BasicBlocks large blocks={[ <BasicBlocks
large
blocks={[
{ bottom: "NP", inside: "A", top: "Subject" }, { bottom: "NP", inside: "A", top: "Subject" },
{ bottom: "NP", inside: "B", top: "Predicate" }, { bottom: "NP", inside: "B", top: "Predicate" },
{ bottom: "Equative", inside: "=" }, { 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>. 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> <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>
<EditableEPEx opts={opts} hideOmitSubject> <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>
<EditableEPEx opts={opts} hideOmitSubject> <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> </EditableEPEx>
## Adding APs ## 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" }} />. 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> <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> </EditableEPEx>
Try adding clicking the <EditIcon /> and adding other <Link to="/phrase-structure/ap/">APs</Link> to this or other examples above. 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. If it's obvious who/what you're talking about you can always leave out the subject.
<EditableEPEx opts={opts}> <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>
<EditableEPEx opts={opts}> <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> </EditableEPEx>

View File

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

View File

@ -3,16 +3,15 @@ title: NPs
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
InlinePs, InlinePs,
Examples, Examples,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import EditableBlock, { import EditableBlock, {
EditIcon, EditIcon,
} from "../../components/phrase-diagram/EditableBlock"; } from "../../components/phrase-diagram/EditableBlock";
import BasicBlocks from "../../components/BasicBlocks";
A noun phrase (NP) in Pashto is one of the following three things: 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. 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}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "noun",
type: "noun", entry: {
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, ts: 1527812817,
gender: "masc", i: 9999,
genderCanChange: false, p: "کتاب",
number: "singular", f: "kitáab",
numberCanChange: true, g: "kitaab",
adjectives: [], e: "book",
possesor: undefined, c: "n. m.",
}, },
} gender: "masc",
} genderCanChange: false,
</EditableBlock> number: "singular",
numberCanChange: true,
adjectives: [],
possesor: undefined,
},
}}
</EditableBlock>
#### Adding adjectives #### 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}> <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", type: "adjective",
selection: { entry: {
type: "noun", ts: 1527815451,
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, i: 7245,
gender: "masc", p: "زوړ",
genderCanChange: false, f: "zoR",
number: "singular", g: "zoR",
numberCanChange: true, e: "old",
adjectives: [{ c: "adj. irreg.",
type: "adjective", infap: "زاړه",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, infaf: "zaaRu",
}], infbp: "زړ",
possesor: undefined, infbf: "zaR",
} },
} },
} ],
possesor: undefined,
},
}}
</EditableBlock> </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. 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}> <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", type: "adjective",
selection: { entry: {
type: "noun", ts: 1527812625,
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, i: 9119,
gender: "masc", p: "غټ",
genderCanChange: false, f: "ghuT, ghaT",
number: "singular", g: "ghuT,ghaT",
numberCanChange: true, e: "big, fat",
adjectives: [ c: "adj.",
{ },
type: "adjective", },
entry: {"ts":1527812625,"i":9119,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, {
}, type: "adjective",
{ entry: {
type: "adjective", ts: 1527815451,
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, i: 7245,
}, p: "زوړ",
{ f: "zoR",
type: "adjective", g: "zoR",
entry: {"ts":1578329248464,"i":7542,"p":"سپین","f":"speen","g":"speen","e":"white (fig. clear, honest, beautiful)","c":"adj."}, e: "old",
}, c: "adj. irreg.",
], infap: "زاړه",
possesor: undefined, 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> </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. 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 #### 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}> <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", type: "adjective",
selection: { entry: {
type: "noun", ts: 1527815451,
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, i: 7245,
gender: "masc", p: "زوړ",
genderCanChange: false, f: "zoR",
number: "singular", g: "zoR",
numberCanChange: true, e: "old",
adjectives: [ c: "adj. irreg.",
{ infap: "زاړه",
type: "adjective", infaf: "zaaRu",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, infbp: "زړ",
}, infbf: "zaR",
], },
possesor: { },
shrunken: false, ],
np: { possesor: {
type: "NP", shrunken: false,
selection: { np: {
type: "noun", type: "NP",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, selection: {
gender: "masc", type: "noun",
genderCanChange: true, entry: {
number: "singular", ts: 1527812881,
numberCanChange: true, i: 11694,
adjectives: [], 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> </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}> <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", type: "adjective",
selection: { entry: {
type: "noun", ts: 1527815451,
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, i: 7245,
gender: "masc", p: "زوړ",
genderCanChange: false, f: "zoR",
number: "singular", g: "zoR",
numberCanChange: true, e: "old",
adjectives: [ c: "adj. irreg.",
{ infap: "زاړه",
type: "adjective", infaf: "zaaRu",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, infbp: "زړ",
}, infbf: "zaR",
], },
possesor: { },
shrunken: false, ],
np: { possesor: {
type: "NP", shrunken: false,
selection: { np: {
type: "noun", type: "NP",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, selection: {
gender: "masc", type: "noun",
genderCanChange: true, entry: {
number: "singular", ts: 1527812881,
numberCanChange: true, i: 11694,
adjectives: [], p: "ماشوم",
possesor: { f: "maashoom",
shrunken: false, g: "maashoom",
np: { e: "child, kid",
type: "NP", c: "n. m. anim. unisex",
selection: { ec: "child",
type: "noun", ep: "children",
entry: {"ts":1527815177,"i":2530,"p":"پلار","f":"plaar","g":"plaar","e":"father","c":"n. m."},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
},
},
},
}, },
} 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> </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> <details>
<summary>Click here for another example of what <strong>recursion</strong> looks like (if you don't have epilepsy)</summary> <summary>
<div style={{ width: "100%", height:0, paddingBottom: "51%", position: "relative" }}> Click here for another example of what <strong>recursion</strong> looks like
<iframe src="https://giphy.com/embed/5xtDarxMlfVnrjN4MyQ" width="100%" height="100%" style={{ position: "absolute" }} frameBorder="0" class="giphy-embed"></iframe> (if you don't have epilepsy)
</div> </summary>
<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> <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> </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.) 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. You can't add any adjectives or possesors to pronouns in Pashto. They just stand on their own as an NP.
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "pronoun",
type: "pronoun", person: 0,
person: 0, distance: "far",
distance: "far", },
} }}
}
}
</EditableBlock> </EditableBlock>
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "pronoun",
type: "pronoun", person: 11,
person: 11, distance: "far",
distance: "far", },
}, }}
}
}
</EditableBlock> </EditableBlock>
### Participle ### 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 - "to write" or
- "writing" - "writing"
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "participle",
type: "participle", verb: {
verb: { entry: {
entry: {"ts":1527812856,"i":11617,"p":"لیکل","f":"leekul","g":"leekul","e":"to write","c":"v. trans./gramm. trans.","ec":"write,writes,writing,wrote,written"}, ts: 1527812856,
}, i: 11617,
} p: "لیکل",
} f: "leekul",
} g: "leekul",
e: "to write",
c: "v. trans./gramm. trans.",
ec: "write,writes,writing,wrote,written",
},
},
},
}}
</EditableBlock> </EditableBlock>
Then we can use this NP just like we would any other noun in a sentence. Then we can use this NP just like we would any other noun in a sentence.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "زه **لیکل** غواړم.", p: "زه **لیکل** غواړم.",
f: "zu **leekúl** ghwaaRum.", f: "zu **leekúl** ghwaaRum.",
e: "I want **to write**", e: "I want **to write**",
sub: "'to write' - used as an object", sub: "'to write' - used as an object",
}, },
{ {
p: "**لیکل** سخت دي.", p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.", f: "**leekúl** sakht dee.",
e: "**Writing** is dificult", e: "**Writing** is dificult",
sub: "'writing' - used as a subject", sub: "'writing' - used as a subject",
}, },
])} ])}
</Examples> </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 Notice how in the example above we said
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**لیکل** سخت دي.", p: "**لیکل** سخت دي.",
f: "**leekúl** sakht dee.", f: "**leekúl** sakht dee.",
e: "**Writing** is dificult", e: "**Writing** is dificult",
sub: "'writing' - is *masculine plural*", sub: "'writing' - is *masculine plural*",
} },
])} ])}
</Examples> </Examples>
We could *not* say We could _not_ say
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**لیکل** سخت دی. ❌", p: "**لیکل** سخت دی. ❌",
f: "**leekúl** sakht dey. ❌", f: "**leekúl** sakht day. ❌",
e: "**Writing** is dificult", e: "**Writing** is dificult",
}, },
])} ])}
</Examples> </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" }} />. 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" }} /> For example, if we take the participle <InlinePs opts={opts} ps={{ p: "وهل", f: "wahúl", e: "to hit / hitting" }} />
<EditableBlock opts={opts}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "participle",
type: "participle", verb: {
verb: { entry: {
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"}, 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> </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 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}> <EditableBlock opts={opts}>
{ {{
{ type: "NP",
type: "NP", selection: {
selection: { type: "participle",
type: "participle", verb: {
verb: { entry: {
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"}, ts: 1527815399,
}, i: 14463,
possesor: { p: "وهل",
shrunken: false, f: "wahul",
np: { g: "wahul",
type: "NP", e: "to hit",
selection: { c: "v. trans.",
type: "noun", tppp: "واهه",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, tppf: "waahu",
gender: "masc", ec: "hit,hits,hitting,hit,hit",
genderCanChange: true, },
number: "plural", },
numberCanChange: true, possesor: {
adjectives: [], 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> </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) - hitting children, or (the kids are the object being hit)
- children's hitting (the kids are the subject doing the hitting) - 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. And we can use this NP block as noun in a sentence.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([{ {psmd([
p: "**د ماشومانو وهل** ښه نه دي.", {
f: "**du maashoomaano wahul** xu nu dee.", p: "**د ماشومانو وهل** ښه نه دي.",
e: "**Hitting children** is bad.", f: "**du maashoomaano wahul** xu nu dee.",
}])} e: "**Hitting children** is bad.",
},
])}
</Examples> </Examples>
## Overview ## Overview
@ -377,16 +553,12 @@ And we can use this NP block as noun in a sentence.
An **NP** is one of the following: An **NP** is one of the following:
- a noun - a noun
- w/ optional adjectives - w/ optional adjectives
- and a possesor, which is an **NP** ↺ - and a possesor, which is an **NP** ↺
- a pronoun, or - a pronoun, or
- a participle - 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. 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 {/* TODO put NP PLAYGROUND IN HERE */}
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} /> */}

View File

@ -3,27 +3,24 @@ title: Shortening VPs
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
InlinePs, InlinePs,
Examples, Examples,
makeNounSelection,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import EquativeIllustration from "../../components/EquativeIllustration"; import EditableVPEx, {
import EditableVPEx, { EditIcon } from "../../components/phrase-diagram/EditableVPEx"; EditIcon,
import BasicBlocks from "../../components/BasicBlocks"; } from "../../components/phrase-diagram/EditableVPEx";
import InlineInflectionButton from "../../components/InlineInflectionButton";
import VPStructureSummary from "./vp-structure.svg"; import VPStructureSummary from "./vp-structure.svg";
import { KidsSection } from "../../components/terms-links"; import { KidsSection } from "../../components/terms-links";
import VideoPlayer from "../../components/VideoPlayer"; import VideoPlayer from "../../components/VideoPlayer";
export function KingIcon() { export function KingIcon() {
return <i className="mx-1 fas fa-crown" />; return <i className="mx-1 fas fa-crown" />;
} }
export function ServantIcon() { 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" /> <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. 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}> <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: "ما هغه ولیده",
{ p: "هغه مې ولیده", f: "haghá me óoleeda", e: "I saw her", sub: "short form #2" }, f: "maa haghá óoleeda",
{ p: "ومې لیده", f: "óo-me leeda", e: "I saw her", sub: "short form #3" }, 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> </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>. 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. The king and servant swap roles between the subject and object, depending on what kind of verb we're using.
- with intransitive verbs 🛴 - with intransitive verbs 🛴
- the **subject** is the king <KingIcon /> - the **subject** is the king <KingIcon />
- (there is no servant) - (there is no servant)
- with non-past transitive verbs 🚲 - with non-past transitive verbs 🚲
- the **subject** is the king <KingIcon /> - the **subject** is the king <KingIcon />
- the **object** is the servant <ServantIcon /> - the **object** is the servant <ServantIcon />
- with past-tense transitive verbs 🚲🤪 - with past-tense transitive verbs 🚲🤪
- the **subject** is the servant <ServantIcon /> - the **subject** is the servant <ServantIcon />
- the **object** is the king <KingIcon /> - the **object** is the king <KingIcon />
Or if you want to see it in our little review chart... Or if you want to see it in our little review chart...
<div className="text-center mb-3"> <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> </div>
## The Rule ## 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. 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" }}> <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> </div>
This is a litle memory aid to help us remember the two things that we can do to any VP phrase. 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: Now we can look at some examples to see how this works. Let's take a very simple sentence:
<EditableVPEx formChoice opts={opts}> <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> </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. 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. 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}> <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> </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) 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}> <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> </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}> <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> </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!) 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" />. 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}> <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> </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}> <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> </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}> <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> </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}> <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> </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. 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>. Let's look at another example with an <Link to="/vp/#1-with-intransitive-verbs-">intransitive verb</Link>.
<EditableVPEx formChoice opts={opts}> <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> </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}> <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> </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 ### 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. 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}> <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> </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. 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}> <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> </EditableVPEx>
Go ahead, click on the <EditIcon /> and try making your own phrases and shrinking them. Go ahead, click on the <EditIcon /> and try making your own phrases and shrinking them.
<EditableVPEx formChoice opts={opts}> <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> </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 PronounPicker from "../../components/PronounPicker";
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
InlinePs, InlinePs,
ButtonSelect, ButtonSelect,
randomPerson, randomPerson,
randomSubjObj, randomSubjObj,
isInvalidSubjObjCombo, isInvalidSubjObjCombo,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { useState } from "react"; import { useState } from "react";
export function RPicker() { export function RPicker() {
// TODO: Pull this into a type safe file // TODO: Pull this into a type safe file
const startSubjObj = randomSubjObj(); const startSubjObj = randomSubjObj();
const [subject, setSubject] = useState({ type: "pronoun", pronounType: "far", person: startSubjObj.subj }); const [subject, setSubject] = useState({
const [object, setObject] = useState({ type: "pronoun", pronounType: "far", person: startSubjObj.obj }); type: "pronoun",
const [mode, setMode] = useState("single"); pronounType: "far",
function handleSetSubject(incoming) { person: startSubjObj.subj,
if (mode !== "single" && isInvalidSubjObjCombo(incoming.person, object.person)) { });
alert("That combination of pronouns is not allowed"); const [object, setObject] = useState({
return; type: "pronoun",
// let newP = 0; pronounType: "far",
// do { person: startSubjObj.obj,
// newP = randomPerson(); });
// } while (isInvalidSubjObjCombo(newP, object.person)); const [mode, setMode] = useState("single");
// return setSubject({ ...incoming, person: newP }); function handleSetSubject(incoming) {
} if (
return setSubject(incoming); 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) { return setSubject(incoming);
if (isInvalidSubjObjCombo(subject.person, incoming.person)) { }
alert("That combination of pronouns is not allowed"); function handleSetObject(incoming) {
return; if (isInvalidSubjObjCombo(subject.person, incoming.person)) {
// let newP = 0; alert("That combination of pronouns is not allowed");
// do { return;
// newP = randomPerson(); // let newP = 0;
// } while (isInvalidSubjObjCombo(newP, subject.person)); // do {
// return setObject({ ...incoming, person: newP }); // newP = randomPerson();
} // } while (isInvalidSubjObjCombo(newP, subject.person));
return setObject(incoming); // return setObject({ ...incoming, person: newP });
} }
function setRandomSubjObj() { return setObject(incoming);
const { subj, obj } = randomSubjObj(); }
setSubject(s => ({ function setRandomSubjObj() {
...s, const { subj, obj } = randomSubjObj();
person: subj, setSubject((s) => ({
})); ...s,
setObject(s => ({ person: subj,
...s, }));
person: obj, 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") { function handleModeChange(m) {
const person = randomPerson(subject.person); if (m === "subjObj") {
setSubject(s => ({ setRandomSubjObj();
...s,
person,
}));
} else {
setRandomSubjObj();
}
} }
function handleModeChange(m) { setMode(m);
if (m === "subjObj") { }
setRandomSubjObj(); return (
} <div className="text-center">
setMode(m); <div className="mb-4">
} <ButtonSelect
return <div className="text-center"> options={[
<div className="mb-4"> {
<ButtonSelect label: "Single",
options={[{ value: "single",
label: "Single", },
value: "single" {
}, { label: "Subj. / Obj.",
label: "Subj. / Obj.", value: "subjObj",
value: "subjObj", },
}]} ]}
value={mode} value={mode}
handleChange={handleModeChange} 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>
<div className="row"> )}
<div className="col my-2" style={{ maxWidth: "375px", margin: "0 auto" }}> </div>
{mode === "subjObj" && <h5>Subject</h5>} <button className="btn btn-lg btn-primary mt-2">
<PronounPicker pronoun={subject} onChange={handleSetSubject} /> <i class="fas fa-random" onClick={handleRandom} />
</div> </button>
{mode === "subjObj" && </div>
<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>;
} }
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. 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"> <div className="mt-4">
<RPicker /> <RPicker />
</div> </div>

View File

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

View File

@ -2,14 +2,10 @@
title: Directional Pronouns title: Directional Pronouns
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
grammarUnits, Examples,
VerbTable, InlinePs,
Examples,
InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Link from "../../components/Link"; 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. Pashto has 3 **directional pronouns** that indicate the direction that a word is focussed towards.
<table className="table"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Person</th> <th scope="col">Person</th>
<th scope="col">Directional Pronoun</th> <th scope="col">Directional Pronoun</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>1st</td> <td>1st</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>{[{ p: "را", f: "raa", e: "me, we" }]}</Examples>
{[ </td>
{ p: "را", f: "raa", e: "me, we" }, </tr>
]} <tr>
</Examples> <td>2nd</td>
</td> <td>
</tr> <Examples opts={opts}>
<tr> {[{ p: "در", f: "dăr", e: "you, you (pl.)" }]}
<td>2nd</td> </Examples>
<td> </td>
<Examples opts={opts}> </tr>
{[ <tr>
{ p: "در", f: "dăr", e: "you, you (pl.)" }, <td>3rd</td>
]} <td>
</Examples> <Examples opts={opts}>
</td> {[{ p: "ور", f: "wăr", e: "him, her, it, them" }]}
</tr> </Examples>
<tr> </td>
<td>3rd</td> </tr>
<td> </tbody>
<Examples opts={opts}>
{[
{ p: "ور", f: "wăr", e: "him, her, it, them" },
]}
</Examples>
</td>
</tr>
</tbody>
</table> </table>
## With the Verb "to give" ## 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. There are different verbs used for "to give" depending on which direction the giving is happening.
<table className="table"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Person Receiving</th> <th scope="col">Person Receiving</th>
<th scope="col">Verb</th> <th scope="col">Verb</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>1st</td> <td>1st</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "راکول", f: "raakawúl", e: "to give to me/us" }} /> <InlinePs
</td> opts={opts}
</tr> ps={{ p: "راکول", f: "raakawúl", e: "to give to me/us" }}
<tr> />
<td>2nd</td> </td>
<td> </tr>
<InlinePs opts={opts} ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }} /> <tr>
</td> <td>2nd</td>
</tr> <td>
<tr> <InlinePs
<td>3rd</td> opts={opts}
<td> ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }}
<InlinePs opts={opts} ps={{ p: "ورکول", f: "wărkawul", e: "to give to him/her/it/them" }} /> />
</td> </td>
</tr> </tr>
</tbody> <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> </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**. 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}> <Examples opts={opts}>
{psmd([ {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: "ما ته کتاب **راکړه**",
{ p: "چای **درکړم**؟", f: "chaay **dărkRum**?", e: "Should I **give** you tea?" }, f: "maa ta kitáab **ráakRa**",
{ p: "تاسو ته پیسې **درکوي**.", f: "taaso ta peysé **dărkawee**.", e: "He **gives** you money." }, e: "**Give** me the book.",
{ 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." }, {
])} 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> </Examples>
## With "to go" ## 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. 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"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Direction</th> <th scope="col">Direction</th>
<th scope="col">Verb</th> <th scope="col">Verb</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td></td> <td></td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "تلل", f: "tlúl", e: "to go" }} /> <InlinePs opts={opts} ps={{ p: "تلل", f: "tlúl", e: "to go" }} />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>1st</td> <td>1st</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "راتلل", f: "raatlúl", e: "to come - here, to me/us" }} /> <InlinePs
</td> opts={opts}
</tr> ps={{ p: "راتلل", f: "raatlúl", e: "to come - here, to me/us" }}
<tr> />
<td>2nd</td> </td>
<td> </tr>
<InlinePs opts={opts} ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }} /> <tr>
</td> <td>2nd</td>
</tr> <td>
<tr> <InlinePs
<td>3rd</td> opts={opts}
<td> ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }}
<InlinePs opts={opts} ps={{ p: "ورتلل", f: "wărtlúl", e: "to go - there, to him/her/them" }} /> />
</td> </td>
</tr> </tr>
</tbody> <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> </table>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "هغه اوس **راځي**", f: "haghá oos **raadzée**", e: "He's **coming** now" }, {
{ p: "دلته **راشه**!", f: "dălta **ráasha**!", e: "**Come** here!" }, p: "هغه اوس **راځي**",
{ p: "هلته **ورشه**!", f: "hălta **wărsha**!", e: "**Go** there!" }, f: "haghá oos **raadzée**",
{ p: "زه **درځم**.", f: "zu **dărdzúm**", e: "I'm **coming** to you." }, 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> </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. 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}> <Examples opts={opts}>
{psmd([ {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: "پښتو **راځي**.",
{ p: "پښتو **ورځي**.", f: "puxto **wărdzée**.", e: "She knows Pashto. (lit. Pashto comes to her.)" }, 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> </Examples>
## With other verbs ## 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"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Verb</th> <th scope="col">Verb</th>
<th scope="col">Example W/ Directional Pronoun</th> <th scope="col">Example W/ Directional Pronoun</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[{ p: "لېږل", f: "legúl", e: "to send" }]}
{ p: "لېږل", f: "legúl", e: "to send" }, </Examples>
]} </td>
</Examples> <td>
</td> <Examples opts={opts}>
<td><Examples opts={opts}> {psmd([
{psmd([ {
{ p: "دا عکس **را**ولېږه", f: "daa aks **raa**-óoleGa", e: "Send me that picture" }, p: "دا عکس **را**ولېږه",
{ p: "سمه ده. اوس یې **در**لېږم.", f: "sama da. oos ye **dăr**-léGum", e: "Ok. I'm sending you it now"}, f: "daa aks **raa**-óoleGa",
])} e: "Send me that picture",
</Examples></td> },
</tr> {
<tr> p: "سمه ده. اوس یې **در**لېږم.",
<td> f: "sama da. oos ye **dăr**-léGum",
<Examples opts={opts}> e: "Ok. I'm sending you it now",
{[ },
{ p: "استول", f: "astawul", e: "to send" }, ])}
]} </Examples>
</Examples> </td>
</td> </tr>
<td> <tr>
<Examples opts={opts}> <td>
{psmd([ <Examples opts={opts}>
{ p: "پرون یې پیغام **را**واستاوه.", f: "paróon ye peygháam **raa**-wáastawu.", e: "She sent me a message yesterday." }, {[{ p: "استول", f: "astawul", e: "to send" }]}
{ p: "زه به ورته یو پیغام **ور**واستوم.", f: "zu ba wăr-ta yo peyghaan **wăr**-wáastawum.", e: "I'll send her a message."}, </Examples>
])} </td>
</Examples> <td>
</td> <Examples opts={opts}>
</tr> {psmd([
</tbody> {
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> </table>
## In Some Sandwiches ## In Some Sandwiches
These directional pronouns can be used instead of <Link to="/pronouns/pronouns-basic/">regular pronouns</Link> in the following 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. - _"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. - _"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. - _"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. 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}> <Examples opts={opts}>
{psmd([ {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: "ولې **را**ته ګورې؟",
{ p: "**در**سره چای شته؟", f: "**dăr**-sara chaay shta?", e: "Is there tea with **you**? Do you have tea?" }, f: "wăle **raa**-ta góre?",
{ p: "اوبه **ور**څخه راځي.", f: "oobu **wăr**-tsukha raadzée.", e: "Water comes from **it**." }, 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> </Examples>
## As Prefixes on Adjectives ## As Prefixes on Adjectives
👷‍♂️ Coming Soon ✍ 👷‍♂️ Coming Soon ✍

View File

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

View File

@ -2,18 +2,14 @@
title: Sandwiches 🥪 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"; import sandwiches from "./sandwiches";
## What are Sandwiches? ## What are Sandwiches?
In Pashto there are **little particles that get attached to the front, back, or both sides of a word.** 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>. 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 ## Sandwiches and Examples
export function SandwichTable() { export function SandwichTable() {
return ( return (
<table className="table table-bordered my-3"> <table className="table table-bordered my-3">
<thead> <thead>
<tr> <tr>
<th scope="col">Sandwich</th> <th scope="col">Sandwich</th>
<th scope="col">Examples</th> <th scope="col">Examples</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{sandwiches.map((s) => { {sandwiches.map((s) => {
const pre = s.pre || { p: "", f: "" }; const pre = s.pre || { p: "", f: "" };
const post = s.post || { p: "", f: "" }; const post = s.post || { p: "", f: "" };
return <tr> return (
<td> <tr>
<Examples opts={opts}>{{ <td>
p: `${pre.p} ... ${post.p}`, <Examples opts={opts}>
f: `${pre.f} ... ${post.f}`, {{
e: s.e, p: `${pre.p} ... ${post.p}`,
}}</Examples> f: `${pre.f} ... ${post.f}`,
</td> e: s.e,
<td> }}
<Examples opts={opts}> </Examples>
{s.examples} </td>
</Examples> <td>
</td> <Examples opts={opts}>{s.examples}</Examples>
</tr> </td>
})} </tr>
</tbody> );
</table> })}
); </tbody>
</table>
);
} }
<SandwichTable /> <SandwichTable />
More in progress... 👷‍♂️ More in progress...
{/* prettier-ignore */}
{/* {/*
<Table size="medium" <Table
titleRow={[{e: "sandwich" }, {e: "example"}]} size="medium"
rows={ titleRow={[{ e: "sandwich" }, { e: "example" }]}
[ rows={[
...sandwiches.reduce((accumulator, s) => { ...sandwiches.reduce((accumulator, s) => {
const rowsForOneSandwich = []; const rowsForOneSandwich = [];
const leftSide = {p:`${s.pre.p} ... ${s.post.p}`, f:`${s.pre.f} ... ${s.post.f}`, e: s.e}; const leftSide = {
s.examples.forEach((ex, i) => { p: `${s.pre.p} ... ${s.post.p}`,
// If first row or sandwich, show the sandwich and an example f: `${s.pre.f} ... ${s.post.f}`,
// Otherwise just have an empty left hand side with an example on the right e: s.e,
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}</>, s.examples.forEach((ex, i) => {
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}</>, // If first row or sandwich, show the sandwich and an example
e:<>{ex.e.before}<span className="underline"><strong>{ex.e.pre}</strong>{ex.e.mid}<strong>{ex.e.post}</strong></span>{ex.e.after}</> // Otherwise just have an empty left hand side with an example on the right
}]); rowsForOneSandwich.push([
}) i === 0 ? leftSide : {},
return [...accumulator, ...rowsForOneSandwich]; {
}, []) 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! And many more!
@ -97,10 +145,10 @@ You will notice that some sandwiches also take <Link to="/inflection/mayonnaise/
<!-- ### Exceptional Sandwiches <!-- ### 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 ... ke"}} />
- <Multi t={{p:"په ... باندې", f:"pu ... baande"}} /> - <Multi t={{p:"په ... باندې", f:"pu ... baande"}} />
- <Multi t={{p:"په ...", f:"pu ..."}} /> --> - <Multi t={{p:"په ...", f:"pu ..."}} /> -->
*/} \*/}

View File

@ -1,152 +1,485 @@
import { import { Types as T } from "@lingdocs/ps-react";
Types as T,
} from "@lingdocs/ps-react";
type SandwichInfo = { type SandwichInfo = {
pre?: T.PsString, pre?: T.PsString;
post?: T.PsString, post?: T.PsString;
e: string, e: string;
examples: (T.PsJSX | T.PsString)[] examples: (T.PsJSX | T.PsString)[];
} };
const sandwiches: SandwichInfo[] = [ const sandwiches: SandwichInfo[] = [
{ {
pre: {p: "په", f: "pu"}, pre: { p: "په", f: "pu" },
post: {p: "کې", f: "ke"}, post: { p: "کې", f: "ke" },
e: "in / at", e: "in / at",
examples: [ examples: [
{ {
p: <>زه <u><strong>په</strong> کور <strong>کې</strong></u> یم</>, p: (
f: <>zu <u><strong>pu</strong> kor <strong>ke</strong></u> yum</>, <>
e: <>I'm <u><strong>at</strong> home</u></>, زه{" "}
}, <u>
{ <strong>په</strong> کور <strong>کې</strong>
p: <>هغه <u><strong>په</strong> پارک <strong>کې</strong></u> دی</>, </u>{" "}
f: <>haghá <u><strong>pu</strong> paark <strong>ke</strong></u> dey</>, یم
e: <>He's <u><strong>in</strong> the park</u></>, </>
}, ),
{ f: (
p: <>مونږ <u><strong>په</strong> افغانستان <strong>کې</strong></u> اوسېږو</>, <>
f: <>moonG <u><strong>pu</strong> afghaanistaan <strong>ke</strong></u> oseGoo</>, zu{" "}
e: <>We live <u><strong>in</strong> Afghanistan</u></>, <u>
}, <strong>pu</strong> kor <strong>ke</strong>
], </u>{" "}
}, yum
{ </>
post: { p: "ته", f: "ta" }, ),
e: "to / towards", e: (
examples: [ <>
{ I'm{" "}
p: <>زه <u><strong>ښار</strong> ته</u> ځم</>, <u>
f: <>zu <u><strong>xaar</strong> ta</u> dzum</>, <strong>at</strong> home
e: <>I'm going <u><strong>to</strong> the city</u></>, </u>
}, </>
{ ),
p: <><u><strong>ما</strong> ته</u> وګوره</>, },
f: <><u><strong>maa</strong> ta</u> óogora</>, {
e: <>Look <u>at <strong>me</strong></u></>, p: (
}, <>
], هغه{" "}
}, <u>
{ <strong>په</strong> پارک <strong>کې</strong>
pre: { p: "د", f: "du" }, </u>{" "}
e: "of / 's", دی
examples: [ </>
{ ),
p: <><u><strong>د</strong> یوسف</u> کور هلته دی</>, f: (
f: <><u><strong>du</strong> yoosuf</u> kor halta dey</>, <>
e: <><u>Yousuf<strong>'s</strong></u> house is there</>, haghá{" "}
}, <u>
{ <strong>pu</strong> paark <strong>ke</strong>
p: <>مونږ <u><strong>د</strong> پېشور</u> یو</>, </u>{" "}
f: <>moonG <u><strong>du</strong> pexawar</u> yoo</>, day
e: <>We are <u><strong>of</strong> Peshawer</u> (ie. We are from Peshawer)</>, </>
}, ),
{ e: (
p: <>دا خوراک <u><strong>د</strong> خوړلو</u> نه دی</>, <>
f: <>daa khoraak <u><strong>du</strong> khoRulo</u> nu dey</>, He's{" "}
e: <>That food is not <u>of eating</u> (ie. It's unfit for eating)</>, <u>
}, <strong>in</strong> the park
], </u>
}, </>
// TODO: ADD په سره ),
{ },
pre: { p: "له", f: "la" }, {
post: { p: "سره", f: "sara" }, p: (
e: "with", <>
examples: [ مونږ{" "}
{ <u>
p: <>هغه <u><strong>له</strong> احمد <strong>سره</strong></u> دی</>, <strong>په</strong> افغانستان <strong>کې</strong>
f: <>haghá <u><strong>la</strong> ahmad <strong>sara</strong></u> dey</>, </u>{" "}
e: <>He is <u><strong>with</strong> Ahmed</u>.</>, اوسېږو
}, </>
{ ),
p: <>ته <u><strong>له</strong> ما <strong>سره</strong></u> ځې؟</>, f: (
f: <>tu <u><strong>la</strong> maa <strong>sara</strong></u> dze?</>, <>
e: <>Will you go <u><strong>with</strong> me</u>?</>, moonG{" "}
}, <u>
], <strong>pu</strong> afghaanistaan <strong>ke</strong>
}, </u>{" "}
{ oseGoo
pre: { p: "د", f: "du" }, </>
post: { p: "دپاره", f: "dupaara" }, ),
e: "for", e: (
examples: [ <>
{ We live{" "}
p: <>دا <u><strong>د</strong> هغې <strong>دپاره</strong></u> دی</>, <u>
f: <>daa <u><strong>du</strong> haghé <strong>dupaara</strong></u> dey</>, <strong>in</strong> Afghanistan
e: <>This is <u><strong>for</strong> her</u></>, </u>
}, </>
], ),
}, },
{ ],
pre: { p: "پر", f: "pur" }, },
post: { p: "باندې", f: "baande" }, {
e: "on", post: { p: "ته", f: "ta" },
examples: [ e: "to / towards",
{ examples: [
p: <>کتاب <u><strong>پر</strong> مېز <strong>باندې</strong></u> دی</>, {
f: <>kitáab <u><strong>pur</strong> mez <strong>baande</strong></u> dey</>, p: (
e: <>The book is <u><strong>on</strong> the table</u></>, <>
}, زه{" "}
], <u>
}, <strong>ښار</strong> ته
{ </u>{" "}
pre: { p: "د", f: "du" }, ځم
post: { p: "په اړه", f: "pu aRa" }, </>
e: "about / concerning", ),
examples: [ f: (
{ <>
p: <><u><strong>د</strong> تعلیم <strong>په اړه</strong></u> خبرې کوو</>, zu{" "}
f: <><u><strong>du</strong> taleem <strong>pu aRa</strong></u> khabure kawoo</>, <u>
e: <>We are talking <u><strong>about</strong> education</u></>, <strong>xaar</strong> ta
}, </u>{" "}
], dzum
}, </>
{ ),
pre: { p: "د", f: "du" }, e: (
post: { p: "په بارې کې", f: "pu baare ke" }, <>
e: "about / concerning", I'm going{" "}
examples: [ <u>
{ <strong>to</strong> the city
p: <><u><strong>د</strong> تعلیم <strong>په بارې کې</strong></u> خبرې کوو</>, </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></>, ),
}, },
], {
}, p: (
{ <>
pre: { p: "پر", f: "pur" }, <u>
post: { p: "سربېره", f: "sărbera" }, <strong>ما</strong> ته
e: "in addition to, along with", </u>{" "}
examples: [ وګوره
{ </>
p: <><u><strong>پر</strong> وچکالۍ <strong>سربېره</strong></u> دلته جنګ هم شته</>, ),
f: <><u><strong>pur</strong> wuchkaaluy <strong>sărbera</strong></u> dălta jang hum shta</>, f: (
e: <><u><strong>In addition to</strong> drought</u>, there is also war here</>, <>
}, <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; export default sandwiches;
@ -204,7 +537,7 @@ export default sandwiches;
p: { p: {
before: {p:"دا وړاندېز", f:"daa wRaandez"}, before: {p:"دا وړاندېز", f:"daa wRaandez"},
mid: {p:"شرط", f:"shart"}, mid: {p:"شرط", f:"shart"},
after: {p:"کړی دی", f:"kuRey dey"}, after: {p:"کړی دی", f:"kuRay day"},
}, },
e: { e: {
before: "He's made that offer ", before: "He's made that offer ",
@ -245,7 +578,7 @@ export default sandwiches;
{ {
p: { p: {
before: {p:"", f:""}, before: {p:"", f:""},
mid: {p:"درېو کالو", f:"dreyo kaalo"}, mid: {p:"درېو کالو", f:"dre`yo kaalo"},
after: {p:"کار کوم", f:"kaar kawum"}, after: {p:"کار کوم", f:"kaar kawum"},
}, },
e: { e: {
@ -267,7 +600,7 @@ export default sandwiches;
p: { p: {
before: {p:"کتاب", f:"kitaab"}, before: {p:"کتاب", f:"kitaab"},
mid: {p:"مېز", f:"mez"}, mid: {p:"مېز", f:"mez"},
after: {p:"دی", f:"dey"}, after: {p:"دی", f:"day"},
}, },
e: { e: {
before: "The book is ", before: "The book is ",
@ -288,7 +621,7 @@ export default sandwiches;
p: { p: {
before: {p:"کتاب", f:"kitaab"}, before: {p:"کتاب", f:"kitaab"},
mid: {p:"مېز", f:"mez"}, mid: {p:"مېز", f:"mez"},
after: {p:"دی", f:"dey"}, after: {p:"دی", f:"day"},
}, },
e: { e: {
before: "The book is ", 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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
Pashto, Pashto,
Phonetics, Phonetics,
} from "@lingdocs/ps-react"; } 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 psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import Formula from "../../components/formula/Formula"; 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 BasicVerbShowCase from "../../components/BasicVerbShowCase";
import perfectDogMeme from "./perfect-dog-meme.jpg"; import perfectDogMeme from "./perfect-dog-meme.jpg";
import chemistryPerfect from "./chemistry-perfect.jpg"; import chemistryPerfect from "./chemistry-perfect.jpg";
import BasicBlocks from "../../components/BasicBlocks"; import BasicBlocks from "../../components/BasicBlocks";
import GameDisplay from "../../games/GameDisplay"; import GameDisplay from "../../games/GameDisplay";
import { import { perfectGameOne, perfectGameMix } from "../../games/games";
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" }}> <div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={chemistryPerfect} alt="" className="img-fluid" /> <img src={chemistryPerfect} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
<Link to="/verbs/roots-and-stems/#the-past-participle">Verb Past Participle</Link> +{` `} <Link to="/verbs/roots-and-stems/#the-past-participle">
Equative = Perfect Verb Past Participle
</Link>
{` + `}
Equative = Perfect
</Formula> </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. 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" }}> <div style={{ margin: "0 auto 2rem auto" }}>
<img src={perfectDogMeme} alt="" className="img-fluid" /> <img src={perfectDogMeme} alt="" className="img-fluid" />
</div> </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 ## Present Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
Present Equative Present Equative
</Formula> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "ما ډوډۍ خوړلې ده", p: "ما ډوډۍ خوړلې ده",
f: "maa DoDúy khoRule da", f: "maa DoDúy khoRule da",
e: "I have eaten food", e: "I have eaten food",
sub: "I am full **now**", sub: "I am full **now**",
}, },
{ {
p: "زه کابل ته تللی یم", p: "زه کابل ته تللی یم",
f: "zu kaabul ta tlúley yum", f: "zu kaabul ta tlúlay yum",
e: "I've gone to Kabul", 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." sub: "I've gone there so I'm over there **now** / I **currently** have the experience of having travelled there.",
}, },
{ {
p: "هغې ته نه یې لیدلې", p: "هغې ته نه یې لیدلې",
f: "haghé tu nú ye leedúle", f: "haghé tu nú ye leedúle",
e: "She hasn't seen you (f.)", e: "She hasn't seen you (f.)",
sub: "She **currently** does not have the experience of seeing you", sub: "She **currently** does not have the experience of seeing you",
}, },
])} ])}
</Examples> </Examples>
### Without the equative ### 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "تا ډوډۍ **خوړلې**؟", p: "تا ډوډۍ **خوړلې**؟",
f: "taa DoDuy **khoRúle**?", f: "taa DoDuy **khoRúle**?",
e: "Have you eaten food?", e: "Have you eaten food?",
}, },
{ {
p: "مونږ دغه پلاوي سره **کتلي**", p: "مونږ دغه پلاوي سره **کتلي**",
f: "moonG dagha plaawee sara **katúlee**", f: "moonG dagha plaawee sara **katúlee**",
e: "We've met with that delegation", e: "We've met with that delegation",
}, },
])} ])}
</Examples> </Examples>
## Habitual Perfect ## Habitual Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
Habitual Equative Habitual Equative
</Formula> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "ماشومان په دې وخت کې مکتب ته تللي وي", p: "ماشومان په دې وخت کې مکتب ته تللي وي",
f: "maashoomáan pu de wakht ke maktab ta tlúlee wee", f: "maashoomáan pu de wakht ke maktab ta tlúlee wee",
e: "The kids tend to be gone to school at this time", e: "The kids tend to be gone to school at this time",
sub: "At this time **usually** the kids are gone to school", sub: "At this time **usually** the kids are gone to school",
}, },
{ {
p: "په اختر کې ډېر خلک دلته راغلي وي", p: "په اختر کې ډېر خلک دلته راغلي وي",
f: "pu akhtar ke Der khalk dălta raaghúlee wee", f: "pu akhtar ke Der khalk dălta raaghúlee wee",
e: "On the holiday usually lots of people come/show up here", 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", sub: "People have a **habit** of arriving here on the holiday - you will **usually** see them here then",
}, },
])} ])}
</Examples> </Examples>
## Subjunctive Perfect ## Subjunctive Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
Subjunctive Equative Subjunctive Equative
</Formula> </Formula>
The subjunctive perfect is used to talk about things being done in a *subjunctive* way, i.e.: 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 - _wanting_ something to be done
- saying that something is *possibly* done - saying that something _should/must_ be done
- saying *if* something is done - saying that something is _possibly_ done
- saying a purpose, i.e. ...**so that** something will be done - saying _if_ something is done
- saying a purpose, i.e. ...**so that** something will be done
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "کېدای شي چې **راغلی وي**", p: "کېدای شي چې **راغلی وي**",
f: "kedaay shee che **raaghuley wee**", f: "kedaay shee che **raaghulay wee**",
e: "It's possible that he's arrived", e: "It's possible that he's arrived",
}, },
{ {
p: "چې خفه شوی نه وې", p: "چې خفه شوی نه وې",
f: "che khufa shúwey nú we", f: "che khufa shúway nú we",
e: "I hope you haven't become sad", e: "I hope you haven't become sad",
sub: "I don't want you to have gotten upset", sub: "I don't want you to have gotten upset",
}, },
])} ])}
</Examples> </Examples>
## Future Perfect ## Future Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
Future Equative Future Equative
</Formula> </Formula>
The future equative is used to either to: The future equative is used to either to:
<ol style={{ listStyleType: "upper-alpha" }}> <ol style={{ listStyleType: "upper-alpha" }}>
<li>say that something <em>will be done</em> in the <strong>future</strong></li> <li>
<li>guess/presume that something is done <strong>now</strong></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> </ol>
#### A. Say something will be done in the future #### A. Say something will be done in the future
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "سبا به پېښور ته تللې وي", p: "سبا به پېښور ته تللې وي",
f: "sabaa ba pexawar ta tlúle wee", f: "sabaa ba pexawar ta tlúle wee",
e: "Tomorrow she will have gone to Peshawer", e: "Tomorrow she will have gone to Peshawer",
}, },
{ {
p: "دوه کاله بعد به ما پښتو ښه زده کړې وي", p: "دوه کاله بعد به ما پښتو ښه زده کړې وي",
f: "dwa kaala bad ba maa puxto xa zda kúRe wee", f: "dwa kaala bad ba maa puxto xa zda kúRe wee",
e: "After two years I will have learned Pashto well.", e: "After two years I will have learned Pashto well.",
} },
])} ])}
</Examples> </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**. 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. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "تا به دا کتاب لیدلی وي", p: "تا به دا کتاب لیدلی وي",
f: "taa ba daa kitaab leedúley wee", f: "taa ba daa kitaab leedúlay wee",
e: "You've probably seen this book", e: "You've probably seen this book",
}, },
{ {
p: "هغه به کابل ته تللی وي", p: "هغه به کابل ته تللی وي",
f: "haghá ba kaabul ta tlúley wee", f: "haghá ba kaabul ta tlúlay wee",
e: "He's probably gone to Kabul", e: "He's probably gone to Kabul",
}, },
{ {
p: "تا به ډوډۍ نه وي خوړلې", p: "تا به ډوډۍ نه وي خوړلې",
f: "taa ba DoDuy nu wee khoRúle", f: "taa ba DoDuy nu wee khoRúle",
e: "I betcha you haven't eaten", e: "I betcha you haven't eaten",
}, },
{ {
p: "بازار کې خو به دې لیملی یم", p: "بازار کې خو به دې لیملی یم",
f: "baazaar ke kho ba de leedúley yum", f: "baazaar ke kho ba de leedúlay yum",
e: "Well surely you will have seen me in the bazar", e: "Well surely you will have seen me in the bazar",
}, },
])} ])}
</Examples> </Examples>
With this form of perfect people often add an emphatic <InlinePs opts={opts} ps={{ p: "خو", f: "kho" }} /> in the <KidsSection />. 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 ## Past Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
Past Equative Past Equative
</Formula> </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. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "تا هغه مخکې **لیدلی و**؟", p: "تا هغه مخکې **لیدلی و**؟",
f: "taa haghá mukhke **leedúley wo**?", f: "taa haghá mukhke **leedúlay wo**?",
e: "Had you seen him before?", e: "Had you seen him before?",
}, },
{ {
p: "دوي ما ته د ډوډۍ ست کاو، خوي ما ډوډۍ **خوړلې وه**", p: "دوي ما ته د ډوډۍ ست کاو، خوي ما ډوډۍ **خوړلې وه**",
f: "dwee maa ta du DoDúy sat kaawu, kho maa DoDúy **khoRule wa**", 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**", e: "They were inviting me to eat, but I **had eaten**",
}, },
{ {
p: "زه ستا کور ته راغلم، خو ته بازار ته **تللی وې**", p: "زه ستا کور ته راغلم، خو ته بازار ته **تللی وې**",
f: "zu staa kor ta ráaghlum, kho tu baazaar ta **tlúley we**.", 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.", e: "I came to your house, but you **had gone** to the bazar.",
}, },
])} ])}
</Examples> </Examples>
## "Would be" Perfect ## "Would be" Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
"Would be" Equative "Would be" Equative
</Formula> </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: 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 - to say that an event should have happened
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغه به مخکې دلته راغلې وه.", p: "هغه به مخکې دلته راغلې وه.",
f: "haghá ba mukhke dălta raaghúle wa", f: "haghá ba mukhke dălta raaghúle wa",
e: "She had probably come here before", e: "She had probably come here before",
}, },
{ {
p: "که زه خبر وای، نو **زه به راغلی وم**.", p: "که زه خبر وای، نو **زه به راغلی وم**.",
f: "ku zu khabúr waay, no **zu ba raaghúley wum**.", f: "ku zu khabúr waay, no **zu ba raaghúlay wum**.",
e: "If I had known, I (m.) would have come.", e: "If I had known, I (m.) would have come.",
} },
])} ])}
</Examples> </Examples>
## Past Subjunctive Perfect ## Past Subjunctive Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
"Past Subjunctive" Equative "Past Subjunctive" Equative
</Formula> </Formula>
Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subjunctive equative</Link>, the past subjunctive perfect is used to say: 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 - If an event should have been done/was necessary in the past
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "ته باید وختي راغلی وای", p: "ته باید وختي راغلی وای",
f: "tu baayad wakhtee raaghúley waay", f: "tu baayad wakhtee raaghúlay waay",
e: "You (m.) should have come early", e: "You (m.) should have come early",
}, },
{ {
p: "ته باید وختي راغلې وای", p: "ته باید وختي راغلې وای",
f: "tu baayad wakhtee raaghúle waay", f: "tu baayad wakhtee raaghúle waay",
e: "You (f.) should have come early", e: "You (f.) should have come early",
}, },
{ {
p: "پرون ما کار کړی وای", p: "پرون ما کار کړی وای",
f: "paróon maa kaar kúRey waay", f: "paróon maa kaar kúRay waay",
e: "Yesterday I had to work", e: "Yesterday I had to work",
}, },
{ {
p: "که ما ډوډۍ نه وای خوړلې...", p: "که ما ډوډۍ نه وای خوړلې...",
f: "ku maa DoDúy nu waay khóRule...", f: "ku maa DoDúy nu waay khóRule...",
e: "If I hadn't eaten food...", e: "If I hadn't eaten food...",
}, },
{ {
p: "کاشکې ما دا پیسې نه وای اخستې", p: "کاشکې ما دا پیسې نه وای اخستې",
f: "kaashke maa daa peyse nu waay akhíste", f: "kaashke maa daa payse nu waay akhíste",
e: "I wish I hadn't taken that money!", e: "I wish I hadn't taken that money!",
}, },
])} ])}
</Examples> </Examples>
## "Would have been" Perfect ## "Would have been" Perfect
<Formula> <Formula>
Verb Past Participle +{` `} Verb Past Participle +{` `}
"Would have been" Equative "Would have been" Equative
</Formula> </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: 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 - Some event should have been done, it would have been good if some event was done
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "که ما پیسې درلودای، نو **نوي کالي به مې اخستي وای**", p: "که ما پیسې درلودای، نو **نوي کالي به مې اخستي وای**",
f: "ku maa peyse darlodaay, no **nuwee kaalee ba me akhiste waay**", f: "ku maa payse darlodaay, no **nuwee kaalee ba me akhiste waay**",
e: "If I had money, **I would have bought new clothes**", e: "If I had money, **I would have bought new clothes**",
}, },
{ {
p: "نو ته به راغلې وای که نه!", p: "نو ته به راغلې وای که نه!",
f: "no tu ba raaghúle waay ku nu!", f: "no tu ba raaghúle waay ku nu!",
e: "Ah, you (f.) should have come!", e: "Ah, you (f.) should have come!",
}, },
])} ])}
</Examples> </Examples>
<GameDisplay record={perfectGameOne} /> <GameDisplay record={perfectGameOne} />

View File

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

View File

@ -3,9 +3,9 @@ title: Future
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { KidsSection } from "../../components/terms-links"; import { KidsSection } from "../../components/terms-links";
import cousins from "./cousins.png"; import cousins from "./cousins.png";
@ -15,10 +15,7 @@ import Formula from "../../components/formula/Formula";
import imperfectiveFuture from "./imperfective-future-graph.svg"; import imperfectiveFuture from "./imperfective-future-graph.svg";
import perfectiveFuture from "./perfective-future-graph.svg"; import perfectiveFuture from "./perfective-future-graph.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase"; import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import { import { futureVerbGame1, futureVerbGame2 } from "../../games/games";
futureVerbGame1,
futureVerbGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; import GameDisplay from "../../games/GameDisplay";
There are two kinds of future forms in Pashto: There are two kinds of future forms in Pashto:
@ -28,15 +25,15 @@ There are two kinds of future forms in Pashto:
## Imperfective Future ## 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"> <div className="text-center">
<img src={imperfectiveFuture} alt="" className="img-fluid" /> <img src={imperfectiveFuture} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `} <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link> <Link to="/verbs/present-verbs/">Present</Link>
</Formula> </Formula>
<BasicVerbShowCase opts={opts} tense="imperfectiveFuture" /> <BasicVerbShowCase opts={opts} tense="imperfectiveFuture" />
@ -45,15 +42,15 @@ Notice that the <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> goes in the
## Perfective Future ## 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"> <div className="text-center">
<img src={perfectiveFuture} alt="" className="img-fluid" /> <img src={perfectiveFuture} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
<InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `} <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> +{` `}
<Link to="/verbs/subjunctive-verbs/">Subjunctive</Link> <Link to="/verbs/subjunctive-verbs/">Subjunctive</Link>
</Formula> </Formula>
<BasicVerbShowCase opts={opts} tense="perfectiveFuture" /> <BasicVerbShowCase opts={opts} tense="perfectiveFuture" />

View File

@ -3,24 +3,18 @@ title: Imperative
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
removeFVarients,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Carousel from "../../components/Carousel";
import Link from "../../components/Link"; import Link from "../../components/Link";
import Formula from "../../components/formula/Formula"; import Formula from "../../components/formula/Formula";
import { verbs } from "../../words/words"; import { verbs } from "../../words/words";
import shuffleArray from "../../lib/shuffle-array";
import imperfectiveImperative from "./imperfective-imperative.svg"; import imperfectiveImperative from "./imperfective-imperative.svg";
import perfectiveImperative from "./perfective-imperative.svg"; import perfectiveImperative from "./perfective-imperative.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase"; import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import { import { imperativeVerbGame1, imperativeVerbGame2 } from "../../games/games";
imperativeVerbGame1,
imperativeVerbGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; import GameDisplay from "../../games/GameDisplay";
The imperative form is used for **giving commands** (telling people to do things). 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 1. <i className="fas fa-video" /> Imperfective Imperative
2. <i className="fas fa-camera" /> Perfective 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 ## Imperfective Imperative
<Formula name="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> </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. 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"> <div className="text-center">
<img src={imperfectiveImperative} alt="" className="img-fluid" /> <img src={imperfectiveImperative} alt="" className="img-fluid" />
</div> </div>
<BasicVerbShowCase opts={opts} tense="imperfectiveImperative" /> <BasicVerbShowCase opts={opts} tense="imperfectiveImperative" />
@ -49,126 +48,141 @@ The <i className="fas fa-video" /> **imperfective imperative** is used when you
## Perfective Imperative ## Perfective Imperative
<Formula name="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> </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"> <div className="text-center">
<img src={perfectiveImperative} alt="" className="img-fluid" /> <img src={perfectiveImperative} alt="" className="img-fluid" />
</div> </div>
<BasicVerbShowCase opts={opts} tense="perfectiveImperative" /> <BasicVerbShowCase opts={opts} tense="perfectiveImperative" />
## Using Imperatives ## 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" }}> <div className="my-3" style={{ overflowX: "auto" }}>
<table className="table"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col"> <th scope="col">
<div><i className="fas fa-video" /> Imperfective</div> <div>
<div><samp>w/ imperfective stem</samp></div> <i className="fas fa-video" /> Imperfective
</div>
<div>
<samp>w/ imperfective stem</samp>
</div>
</th> </th>
<th scope="col"> <th scope="col">
<div><i className="fas fa-camera" /> Perfective</div> <div>
<div><samp>w/ perfective stem</samp></div> <i className="fas fa-camera" /> Perfective
</div>
<div>
<samp>w/ perfective stem</samp>
</div>
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "وریژې **خوره**", p: "وریژې **خوره**",
f: "wreejze **khorá**", f: "wreejze **khorá**",
e: "Eat rice", e: "Eat rice",
sub: "(in general, it's good for you)", sub: "(in general, it's good for you)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "وریژې **وخوره**", p: "وریژې **وخوره**",
f: "wreejze **óokhora**", f: "wreejze **óokhora**",
e: "Eat rice", e: "Eat rice",
sub: "(one time)", sub: "(one time)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "د کلي عکسونه راته **لېږه**!", p: "د کلي عکسونه راته **لېږه**!",
f: "du kulee aksoona raa-ta **leGá**!", f: "du kulee aksoona raa-ta **leGá**!",
e: "Send me pictures of the village!", e: "Send me pictures of the village!",
sub: "(send me pictures every once and awhile)", sub: "(send me pictures every once and awhile)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "د کلي عکسونه راته **ولېږه**!", p: "د کلي عکسونه راته **ولېږه**!",
f: "du kulee aksoona raa-ta **óoleGa**!", f: "du kulee aksoona raa-ta **óoleGa**!",
e: "Send me pictures of the village!", e: "Send me pictures of the village!",
sub: "(send me a bunch of pictures in one clump, at one time)", sub: "(send me a bunch of pictures in one clump, at one time)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "تاسو هلته **کېنئ**", p: "تاسو هلته **کېنئ**",
f: "taaso halta **kenéyy**", f: "taaso halta **kenéy**",
e: "You sit there", e: "You sit there",
sub: "(in general, whenever you come)" sub: "(in general, whenever you come)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "تاسو هلته **کېنئ**", p: "تاسو هلته **کېنئ**",
f: "taaso halta **kéneyy**", f: "taaso halta **kéney**",
e: "You sit there", e: "You sit there",
sub: "(one time, in one instance sit)" sub: "(one time, in one instance sit)",
}, },
])} ])}
</Examples> </Examples>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </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 ### Singular and Plural
You will notice there are only two <Link to="/verbs/verb-endings/#imperative-verb-endings">imperative endings</Link>: 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: "-a" }} /> - used for addressing a singular
- <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. 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" }}> <div className="my-3" style={{ overflowX: "auto" }}>
<table className="table"> <table className="table">
@ -181,18 +195,16 @@ You will notice there are only two <Link to="/verbs/verb-endings/#imperative-ver
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([{ p: "ته راځه!", f: "tu raadzá!", e: "You come!" }])}
{ p: "ته راځه!", f: "tu raadzá!", e: "You come!" } </Examples>
])}
</Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "تاسو راځئ!", f: "taaso radzéyy!", e: "You (pl.) come!" }, { p: "تاسو راځئ!", f: "taaso radzéy!", e: "You (pl.) come!" },
])} ])}
</Examples> </Examples>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -205,21 +217,32 @@ You will notice there are only two <Link to="/verbs/verb-endings/#imperative-ver
## Negative Imperatives ## 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"> <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> </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. 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}> <Examples opts={opts}>
{[ {[
{ p: "مه راځه!", f: "mú raadza", e: "Don't come!" }, { p: "مه راځه!", f: "mú raadza", e: "Don't come!" },
{ p: "وریژې مه خوره!", f: "wreejze mú khora!", e: "Don't eat rice!" }, { 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: "aksoona raa-ta mú leGa!",
e: "Don't send me pictures!",
},
{
p: "تاسو هلته مه کېنئ!",
f: "taaso halta mú keney!",
e: "Don't sit there!",
},
]}
</Examples> </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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
grammarUnits, grammarUnits,
RootsAndStems, RootsAndStems,
getVerbInfo, getVerbInfo,
removeFVarients, removeFVarients,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { import {
Perfective, Perfective,
Imperfective, Imperfective,
Servant, Servant,
MiniPronoun, MiniPronoun,
} from "../../components/terms-links"; } from "../../components/terms-links";
import Formula from "../../components/formula/Formula"; import Formula from "../../components/formula/Formula";
import Link from "../../components/Link"; 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 deCowboys from "./de-cowboys.jpg";
import deMuCowboysOk from "./de-mu-cowboys-ok.jpg"; import deMuCowboysOk from "./de-mu-cowboys-ok.jpg";
import deMuCowboysNotOk from "./de-mu-cowboys-not-ok.jpg"; import deMuCowboysNotOk from "./de-mu-cowboys-not-ok.jpg";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
export const De = (props) => <InlinePs opts={opts}>{{ p: "دې", f: "de", e: props.e || undefined }}</InlinePs>; export const De = (props) => (
export const MU = (props) => <InlinePs opts={opts}>{{ p: "مو", f: "mU", e: props.e || undefined }}</InlinePs>; <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. 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: In Pashto you encounter phrases like this:
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ {
p: "خدای دې خیر وکړي", p: "خدای دې خیر وکړي",
f: "khUdaay de kheyr ookRee", f: "khUdaay de khayr ookRee",
e: "May God do what's good/beneficial", e: "May God do what's good/beneficial",
}, },
{ {
p: "خدای دې خوشحاله لره", p: "خدای دې خوشحاله لره",
f: "khUdaay de khosháala lará", f: "khUdaay de khosháala lará",
e: "May God have you happy", e: "May God have you happy",
}, },
]} ]}
</Examples> </Examples>
There are a couple of questions that can confuse learners when they encounter these types of phrases: 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> <details>
<summary>Spoiler quick answer:</summary> <summary>Spoiler quick answer:</summary>
- *Basic form*: Jussive phrases are made using the jussive <De /> particle with subjunctive or present verbs. - _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) - 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. - _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) - Verbs end in <InlinePs opts={opts} ps={{ p: "ـه", f: "a" }} /> (like the second example above)
</details> </details>
## The jussive دې form ## The jussive دې form
<Formula> <Formula>
jussive <De /> +{` `} jussive <De /> +{` `}
<Link to="/verbs/present-verbs/">Present</Link> or <Link to="/verbs/subjunctive-verbs/">Subjunctive</Link> verb <Link to="/verbs/present-verbs/">Present</Link> or <Link to="/verbs/subjunctive-verbs/">
Subjunctive
</Link> verb
</Formula> </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 />!** 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "هغه دې راشي", p: "هغه دې راشي",
f: "hagha de ráashee", f: "hagha de ráashee",
e: "Let him come / he should come", e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb", sub: "jussive دې + subjunctive verb",
}, },
{ {
p: "را دې شي", p: "را دې شي",
f: "ráa-de-shee", f: "ráa-de-shee",
e: "Let him come / he should come", e: "Let him come / he should come",
sub: "jussive دې + subjunctive verb (shortened)", sub: "jussive دې + subjunctive verb (shortened)",
}, },
{ {
p: "خدای دې شفا ورکړي", p: "خدای دې شفا ورکړي",
f: "khUdaay de shifaa wárkRee", f: "khUdaay de shifaa wárkRee",
e: "May God give him health", e: "May God give him health",
sub: "jussive دې + subjunctive verb", sub: "jussive دې + subjunctive verb",
}, },
{ {
p: "خدای دې مونږ له مرضۍ نه ساتي", p: "خدای دې مونږ له مرضۍ نه ساتي",
f: "khUdaay de moonG la marizúy na saatée", f: "khUdaay de moonG la marizúy na saatée",
e: "May God keep us from sickness", e: "May God keep us from sickness",
sub: "jussive دې + present verb", sub: "jussive دې + present verb",
}, },
])} ])}
</Examples> </Examples>
Notice how you can use either: 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: You can also use the <Link to="/equatives/other-equatives/#subjunctive-equative">subjunctive equative</Link>. For example:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "ټولو ته مبارک وي", p: "ټولو ته مبارک وي",
f: "Tolo ta mUbaarak wee", f: "Tolo ta mUbaarak wee",
e: "Congratulations to everyone (may it be blessed to everyone)", e: "Congratulations to everyone (may it be blessed to everyone)",
sub: "jussive دې + subjunctive equative", sub: "jussive دې + subjunctive equative",
} },
])} ])}
</Examples> </Examples>
## When it conflicts with the mini-pronoun دې ## 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" }} />." 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" }}> <div className="mb-3" style={{ maxWidth: "600px" }}>
<img <img
src={deCowboys} src={deCowboys}
alt={`دې particles as cowboys saying, "This town aint big enough for the two of us...`} alt={`دې particles as cowboys saying, "This town aint big enough for the two of us...`}
className="img-fluid" className="img-fluid"
/> />
</div> </div>
First let's look at an example without this دې conflict: First let's look at an example without this دې conflict:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "خدای دې تا وبخښي", p: "خدای دې تا وبخښي",
f: "khUdaay de taa óobakhxee", f: "khUdaay de taa óobakhxee",
e: "May God forgive you", e: "May God forgive you",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
} },
])} ])}
</Examples> </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 />. 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: 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "❌ خدای دې دې وبخښي ❌", p: "❌ خدای دې دې وبخښي ❌",
f: "❌ khUdaay de de óobakhxee ❌", f: "❌ khUdaay de de óobakhxee ❌",
e: "May God forgive you", e: "May God forgive you",
}, },
])} ])}
</Examples> </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.** 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "خدای دې وبخښه", p: "خدای دې وبخښه",
f: "khUdaay de óobakhxa", f: "khUdaay de óobakhxa",
e: "May God forgive you", e: "May God forgive you",
sub: "دې as a *mini-pronoun* + imperative verb", sub: "دې as a *mini-pronoun* + imperative verb",
}, },
])} ])}
</Examples> </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: Here are more examples of how we use this to resolve the <InlinePs opts={opts}>{{ p: "دې دې", f: "de de" }}</InlinePs> conflict:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "خدای دې تا له مرضۍ نه ساتي", p: "خدای دې تا له مرضۍ نه ساتي",
f: "khUdaay de taa la marazúy na saatée", f: "khUdaay de taa la marazúy na saatée",
e: "May God keep you from sickness", e: "May God keep you from sickness",
sub: "jussive دې + full تا pronoun + present verb", sub: "jussive دې + full تا pronoun + present verb",
}, },
{ {
p: "❌ خدای دې دې له مرضۍ نه ساتي ❌", p: "❌ خدای دې دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay de de la marazúy na saatée ❌", f: "❌ khUdaay de de la marazúy na saatée ❌",
e: "May God keep you from sickness", e: "May God keep you from sickness",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)", sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
}, },
{ {
p: "خدای دې له مرضۍ نه ساته", p: "خدای دې له مرضۍ نه ساته",
f: "khUdaa de la marazúy na saatá", f: "khUdaa de la marazúy na saatá",
e: "May God keep you from sickness", e: "May God keep you from sickness",
sub: "mini-pronoun دې + imperfective imperative", sub: "mini-pronoun دې + imperfective imperative",
}, },
{ {
p: "الله دې تا په خیر ورسوي", p: "الله دې تا په خیر ورسوي",
f: "allah de taa pu kheyr óorasawee", f: "allah de taa pu khayr óorasawee",
e: "May God deliver you safely.", e: "May God deliver you safely.",
sub: "jussive دې + full تا pronoun + subjunctive verb", sub: "jussive دې + full تا pronoun + subjunctive verb",
}, },
{ {
p: "❌ الله دې دې په خیر ورسوي ❌", p: "❌ الله دې دې په خیر ورسوي ❌",
f: "❌ allah de de pu kheyr óorasawee ❌", f: "❌ allah de de pu khayr óorasawee ❌",
e: "May God deliver you safely.", e: "May God deliver you safely.",
sub: "jussive دې + mini-pronoun دې (CONFLICT!)", sub: "jussive دې + mini-pronoun دې (CONFLICT!)",
}, },
{ {
p: "الله دې په خیر ورسوه", p: "الله دې په خیر ورسوه",
f: "allah de pu kheyr óorasawa", f: "allah de pu khayr óorasawa",
e: "May God deliver you safely.", e: "May God deliver you safely.",
sub: "mini-pronoun دې + perfective imperative", sub: "mini-pronoun دې + perfective imperative",
}, },
])} ])}
</Examples> </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. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "خدای دې ستا ارمان پوره کړي", p: "خدای دې ستا ارمان پوره کړي",
f: "khUdaay de staa armáan póora kRee", f: "khUdaay de staa armáan póora kRee",
e: "May God fulfill your desire", e: "May God fulfill your desire",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
}, },
{ {
p: "خدای دې ارمان پوره کړه", p: "خدای دې ارمان پوره کړه",
f: "khUdaay de armáan póora kRa", f: "khUdaay de armáan póora kRa",
e: "May God fulfill your desire", e: "May God fulfill your desire",
sub: "mini-pronoun دې + imperfective imperative", sub: "mini-pronoun دې + imperfective imperative",
}, },
{ {
p: "ستا زوی دې لوی شي", p: "ستا زوی دې لوی شي",
f: "staa zooy de looy shee", f: "staa zooy de looy shee",
e: "May your son grow big", e: "May your son grow big",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
}, },
{ {
p: "زوی دې لوی شه", p: "زوی دې لوی شه",
f: "zooy de looy sha", f: "zooy de looy sha",
e: "May your son grow big", e: "May your son grow big",
sub: "mini-pronoun دې + imperfective imperative", sub: "mini-pronoun دې + imperfective imperative",
}, },
])} ])}
</Examples> </Examples>
## When it conflicts with the mini-pronoun مو ## 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: 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 ### With مو as 2nd person plural
<div className="mb-3" style={{ maxWidth: "600px" }}> <div className="mb-3" style={{ maxWidth: "600px" }}>
<img <img src={deMuCowboysNotOk} className="img-fluid" />
src={deMuCowboysNotOk}
className="img-fluid"
/>
</div> </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" />. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "❌ خدای مو دې له مرضۍ نه ساتي ❌", p: "❌ خدای مو دې له مرضۍ نه ساتي ❌",
f: "❌ khUdaay mU de la marazúy na saatée ❌", f: "❌ khUdaay mU de la marazúy na saatée ❌",
e: "May God keep you (pl.) from sickness", e: "May God keep you (pl.) from sickness",
sub: "jussive دې + second pers. mini-pronoun مو", sub: "jussive دې + second pers. mini-pronoun مو",
}, },
{ {
p: "خدای مو له مرضۍ نه ساته", p: "خدای مو له مرضۍ نه ساته",
f: "khUdaa mU la marazúy na saatá", f: "khUdaa mU la marazúy na saatá",
e: "May God keep you (pl.) from sickness", e: "May God keep you (pl.) from sickness",
sub: "second pers. pl. mini-pronoun مو + imperfective imperative", sub: "second pers. pl. mini-pronoun مو + imperfective imperative",
}, },
{ {
p: "❌ الله مو دې په خیر ورسوي ❌", p: "❌ الله مو دې په خیر ورسوي ❌",
f: "❌ allah mU de pu kheyr óorasawee ❌", f: "❌ allah mU de pu khayr óorasawee ❌",
e: "May God deliver you safely.", e: "May God deliver you safely.",
sub: "jussive دې + second pers. mini-pronoun مو", sub: "jussive دې + second pers. mini-pronoun مو",
}, },
{ {
p: "الله مو په خیر ورسوه", p: "الله مو په خیر ورسوه",
f: "allah mU pu kheyr óorasawa", f: "allah mU pu khayr óorasawa",
e: "May God deliver you (pl.) safely.", e: "May God deliver you (pl.) safely.",
sub: "second pers. pl. mini-pronoun مو + perfective imperative", sub: "second pers. pl. mini-pronoun مو + perfective imperative",
}, },
{ {
p: "خدای دې ستاسو ارمان پوره کړي", p: "خدای دې ستاسو ارمان پوره کړي",
f: "khUdaay de staaso armáan póora kRee", f: "khUdaay de staaso armáan póora kRee",
e: "May God fulfill your (pl.) desire", e: "May God fulfill your (pl.) desire",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
}, },
{ {
p: "خدای مو ارمان پوره کړه", p: "خدای مو ارمان پوره کړه",
f: "khUdaay mU armáan póora kRa", f: "khUdaay mU armáan póora kRa",
e: "May God fulfill your (pl.) desire", e: "May God fulfill your (pl.) desire",
sub: "second pers. pl. mini-pronoun مو + perfective imperative", sub: "second pers. pl. mini-pronoun مو + perfective imperative",
}, },
{ {
p: "ستاسو زوی دې لوی شي", p: "ستاسو زوی دې لوی شي",
f: "staaso zooy de looy shee", f: "staaso zooy de looy shee",
e: "May your (pl.) son grow big", e: "May your (pl.) son grow big",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
}, },
{ {
p: "زوی مو لوی شه", p: "زوی مو لوی شه",
f: "zooy mU looy sha", f: "zooy mU looy sha",
e: "May your son grow big", e: "May your son grow big",
sub: "second pers. pl. mini-pronoun مو + perfective imperative", sub: "second pers. pl. mini-pronoun مو + perfective imperative",
}, },
])} ])}
</Examples> </Examples>
### with مو as 1st person plural ### with مو as 1st person plural
<div className="mb-3" style={{ maxWidth: "600px" }}> <div className="mb-3" style={{ maxWidth: "600px" }}>
<img <img src={deMuCowboysOk} className="img-fluid" />
src={deMuCowboysOk}
className="img-fluid"
/>
</div> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "خدای دې مو له مرضۍ نه ساتي", p: "خدای دې مو له مرضۍ نه ساتي",
f: "khUdaa de mU la marazúy na saatée", f: "khUdaa de mU la marazúy na saatée",
e: "May God keep us from sickness", e: "May God keep us from sickness",
sub: "first pers. pl. mini-pronoun مو + present", sub: "first pers. pl. mini-pronoun مو + present",
}, },
{ {
p: "الله دې مو په خیر ورسوي", p: "الله دې مو په خیر ورسوي",
f: "allah de mU pu kheyr óorasawee", f: "allah de mU pu khayr óorasawee",
e: "May God deliver use safely.", e: "May God deliver use safely.",
sub: "first pers. pl. mini-pronoun مو + subjunctive", sub: "first pers. pl. mini-pronoun مو + subjunctive",
}, },
{ {
p: "خدای دې زمونږ ارمان پوره کړي", p: "خدای دې زمونږ ارمان پوره کړي",
f: "khUdaay de zmoonG armáan póora kRee", f: "khUdaay de zmoonG armáan póora kRee",
e: "May God fulfill our desire", e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive", sub: "first pers. pl. mini-pronoun مو + subjunctive",
}, },
{ {
p: "خدای دې مو ارمان پوره کړي", p: "خدای دې مو ارمان پوره کړي",
f: "khUdaay de mU armáan póora kRee", f: "khUdaay de mU armáan póora kRee",
e: "May God fulfill our desire", e: "May God fulfill our desire",
sub: "first pers. pl. mini-pronoun مو + subjunctive", sub: "first pers. pl. mini-pronoun مو + subjunctive",
}, },
{ {
p: "زمونږ زوی دې لوی شي", p: "زمونږ زوی دې لوی شي",
f: "zmoonG zooy de looy shee", f: "zmoonG zooy de looy shee",
e: "May our son grow big", e: "May our son grow big",
sub: "jussive دې + subjunctive", sub: "jussive دې + subjunctive",
}, },
{ {
p: "زوی دې مو لوی شي", p: "زوی دې مو لوی شي",
f: "zooy de mU looy shee", f: "zooy de mU looy shee",
e: "May our son grow big", e: "May our son grow big",
sub: "first pers. pl. mini-pronoun مو + subjunctive", sub: "first pers. pl. mini-pronoun مو + subjunctive",
}, },
])} ])}
</Examples> </Examples>
Notice for all these examples we never use the 2nd person imperative form, because we are still able to use the jussive <De />. 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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
grammarUnits,
RootsAndStems,
getVerbInfo,
removeFVarients,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import Link from "../../components/Link"; import {
import { BlockTerm, KidsSection, PerfectiveHead, VP } from "../../components/terms-links.tsx"; BlockTerm,
PerfectiveHead,
VP,
} from "../../components/terms-links.tsx";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
To make verbs negative, we use a negative <BlockTerm />. To make verbs negative, we use a negative <BlockTerm />.
- <InlinePs opts={opts} ps={{ p: "نه", f: "nú", e: "not" }} /> - <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 ### Where the negative goes
The negative goes in front of the verb block at the end of a <VP />. The negative goes in front of the verb block at the end of a <VP />.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {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" }, 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> </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}> <Examples opts={opts}>
{psmd([ {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: "زه ورسره وغږېدم",
{ p: "ما کتابچه واخسته", f: "maa kitaabchaa wáakhista", e: "I took the booklet" }, f: "zu wăr-sara óoghuGedum",
{ p: "ما کتابچه وانه خسته", f: "maa kitaabchaa wáa-nu khista", e: "I didn't take the booklet", sub: "negative block always goes after the perfective head" }, 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> </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}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "هغه کور ته لاړه", f: "haghá kor ta láaRa", e: "She went home" }, { 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: "هغه کور ته لانه ړه",
{ p: "زه دلته کېنم؟", f: "zu dălta kenúm?", e: "Do I sit here? (present)" }, f: "haghá kor ta laa-nú-Ra",
{ p: "زه دلته کېنم؟", f: "zu dălta kénum?", e: "Should I sit here? (subjunctive)" }, e: "She didn't go home",
{ p: "زه دلته نه کېنم؟", f: "zu dălta nú kenum?", e: "Do I not sit here? (present)", sub: "no perfective head, negative block before verb block" }, sub: "negative block after the perfective head",
{ 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" }, {
])} 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> </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. 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. 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}> <Examples opts={opts}>
{psmd([ {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" }, 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> </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. 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}> <Examples opts={opts}>
{psmd([ {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" }, p: "ما پښتو زده نه کړه",
])} f: "maa puxto zda nú kRa",
</Examples> 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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } 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 psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
import Formula from "../../components/formula/Formula"; import Formula from "../../components/formula/Formula";
import verbTreePastPresent from "./verb-tree-past-present.svg"; import verbTreePastPresent from "./verb-tree-past-present.svg";
import verbTreeImperfectivePerfective from "./verb-tree-imperfective-perfective.svg"; import verbTreeImperfectivePerfective from "./verb-tree-imperfective-perfective.svg";
import simplePast from "./simple-past-in-reality.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 habitualSimplePast from "./habitual-simple-past.svg";
import habitualContinuousPast from "./habitual-continuous-past.svg"; import habitualContinuousPast from "./habitual-continuous-past.svg";
import unoReverseMeme from "./uno-reverse-meme.jpg"; 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 BasicVerbShowCase from "../../components/BasicVerbShowCase";
import { import {
intransitiveImperfectivePastVerbGame1, intransitiveImperfectivePastVerbGame1,
intransitiveImperfectivePastVerbGame2, intransitiveImperfectivePastVerbGame2,
intransitivePerfectivePastVerbGame1, intransitivePerfectivePastVerbGame1,
intransitivePerfectivePastVerbGame2, intransitivePerfectivePastVerbGame2,
transitiveImperfectivePastVerbGame1, transitiveImperfectivePastVerbGame1,
transitiveImperfectivePastVerbGame2, transitiveImperfectivePastVerbGame2,
transitivePerfectivePastVerbGame1, transitivePerfectivePastVerbGame1,
transitivePerfectivePastVerbGame2, transitivePerfectivePastVerbGame2,
habitualPastVerbGame1, habitualPastVerbGame1,
habitualPastVerbGame2, habitualPastVerbGame2,
} from "../../games/games"; } from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; 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. 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" }}> <div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={verbTreePastPresent} alt="" className="img-fluid" /> <img src={verbTreePastPresent} alt="" className="img-fluid" />
</div> </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. 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" }}> <div style={{ maxWidth: "350px", margin: "0 auto 2rem auto" }}>
<img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" /> <img src={verbTreeImperfectivePerfective} alt="" className="img-fluid" />
</div> </div>
We'll use the **imperfective and perfective roots** to make two past tense verb forms: 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 1. The simple (<i className="fas fa-camera" /> perfective) past
- one time, complete actions - one time, complete actions
2. The continuous (<i className="fas fa-video" /> imperfective) past 2. The continuous (<i className="fas fa-video" /> imperfective) past
- continuous, ongoing, unfinished in the 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 1. Intransitive verbs
- verbs with no object - verbs with no object
2. Transitive verbs 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! **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 😀 ## 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 ### 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. 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"> <div className="text-center">
<img src={simplePast} alt="" className="img-fluid" /> <img src={simplePast} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
Perfective root +{` `} Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link> <Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula> </Formula>
<BasicVerbShowCase opts={opts} tense="perfectivePast" /> <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 ##### 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**. 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}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "چې ستا ملګری **پیدا شو**، نو ما خبر کړه.", p: "چې ستا ملګری **پیدا شو**، نو ما خبر کړه.",
f: "ku staa malgúrey **peydaa sho**, no maa khabur kRa.", f: "ku staa malgúray **paydaa sho**, no maa khabur kRa.",
e: "If/when you friend shows up, let me know.", e: "If/when you friend shows up, let me know.",
}, },
])} ])}
</Examples> </Examples>
<GameDisplay record={intransitivePerfectivePastVerbGame1} /> <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 ongoing, in progress or repeated in the past
- actions that were going to happen (but didn't) - actions that were going to happen (but didn't)
- actions that "would" happen - actions that "would" happen
- as in they *would* happen *if* ... - as in they _would_ happen _if_ ...
- or as in they would happen regularly/habitually in the past - 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..." }} /> 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> <Formula>
Imperfective root +{` `} Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link> <Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula> </Formula>
<BasicVerbShowCase opts={opts} tense="imperfectivePast" /> <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: 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** 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 - The **subject** is the **servant** <ServantIcon /> of the phrase
Also, another weird thing that happens is that the **subject** is inflected. 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 - The **object** does NOT get inflected
<div className="text-center mb-4"> <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> </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. 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 ### Examples with simple past
<Formula> <Formula>
Perfective root +{` `} Perfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link> <Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula> </Formula>
<EditableVPEx opts={opts}> <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>
<EditableVPEx opts={opts}> <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>
<EditableVPEx opts={opts} length="long"> <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>
<EditableVPEx opts={opts} length="long"> <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> </EditableVPEx>
<GameDisplay record={transitivePerfectivePastVerbGame1} /> <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 ### Examples with continous past
<Formula> <Formula>
Imperfective root +{` `} Imperfective root +{` `}
<Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link> <Link to="/verbs/verb-endings/#past-verb-endings">Past verb ending</Link>
</Formula> </Formula>
<EditableVPEx opts={opts} long> <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>
<EditableVPEx opts={opts} long> <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>
<EditableVPEx opts={opts} long> <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>
<EditableVPEx opts={opts} long> <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> </EditableVPEx>
<GameDisplay record={transitiveImperfectivePastVerbGame1} /> <GameDisplay record={transitiveImperfectivePastVerbGame1} />
@ -221,31 +708,43 @@ The tenses (simple and continous past) stay the same and the formulas for making
## Habitual Past Tenses ## 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" /> - 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" /> - 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 ### 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" /> 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"> <div className="text-center">
<img src={habitualSimplePast} alt="" className="img-fluid" /> <img src={habitualSimplePast} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
به - ba +{` `} به - ba +{` `}
<Link to="/verbs/past-verbs/#simple-past-i-classnamefas-fa-camera-">simple past</Link> <Link to="/verbs/past-verbs/#simple-past-i-classnamefas-fa-camera-">
simple past
</Link>
</Formula> </Formula>
<Examples opts={opts}> <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> </Examples>
### Habitual Continuous Past ### 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" /> 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"> <div className="text-center">
<img src={habitualContinuousPast} alt="" className="img-fluid" /> <img src={habitualContinuousPast} alt="" className="img-fluid" />
</div> </div>
<Formula> <Formula>
به - ba +{` `} به - ba +{` `}
<Link to="/verbs/past-verbs/#continuous-past-i-classnamefas-fa-video-">continuous past</Link> <Link to="/verbs/past-verbs/#continuous-past-i-classnamefas-fa-video-">
continuous past
</Link>
</Formula> </Formula>
<Examples opts={opts}> <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> </Examples>
The habitual continuous past is **also used to say what would happen if some condition were true.** The habitual continuous past is **also used to say what would happen if some condition were true.**
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {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**." } 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> </Examples>
<GameDisplay record={habitualPastVerbGame1} /> <GameDisplay record={habitualPastVerbGame1} />
<GameDisplay record={habitualPastVerbGame2} /> <GameDisplay record={habitualPastVerbGame2} />

File diff suppressed because it is too large Load Diff

View File

@ -3,9 +3,9 @@ title: 📽 Present
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Link from "../../components/Link"; import Link from "../../components/Link";
@ -13,15 +13,12 @@ import Formula from "../../components/formula/Formula";
import realityGraph from "./reality-graph.svg"; import realityGraph from "./reality-graph.svg";
import presentTime from "./present-time.svg"; import presentTime from "./present-time.svg";
import BasicVerbShowCase from "./../../components/BasicVerbShowCase"; import BasicVerbShowCase from "./../../components/BasicVerbShowCase";
import { import { presentVerbGame1, presentVerbGame2 } from "../../games/games";
presentVerbGame1,
presentVerbGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; 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: 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 2. 🔨 When to use it
## How to make 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. 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> <Formula>
Imperfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link> Imperfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
</Formula> </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. 👇 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, So if we think of a graph of reality like this,
<div className="text-center"> <div className="text-center">
<img src={realityGraph} alt="" className="img-fluid" /> <img src={realityGraph} alt="" className="img-fluid" />
</div> </div>
The **present form** would look something like this: The **present form** would look something like this:
<div className="text-center"> <div className="text-center">
<img src={presentTime} alt="" className="img-fluid" /> <img src={presentTime} alt="" className="img-fluid" />
</div> </div>
Here are some examples of how the present form is used in different situations: 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 ### Happens generally
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "مونږ هره ورځ چای **سکو**.", p: "مونږ هره ورځ چای **سکو**.",
f: "moonG hăra wradz chaay **skoo**.", f: "moonG hăra wradz chaay **skoo**.",
e: "We **drink** tea every day.", e: "We **drink** tea every day.",
}, },
{ {
p: "زما پلار پتلون **اغوندي**.", p: "زما پلار پتلون **اغوندي**.",
f: "zmaa plaar patloon **aghondee**.", f: "zmaa plaar patloon **aghondee**.",
e: "My dad **wears** pants." e: "My dad **wears** pants.",
}, },
{ {
p: "زه په عربي **نه پوهېږم**.", p: "زه په عربي **نه پوهېږم**.",
f: "zu pu arabee **nú poheGum**.", f: "zu pu arabee **nú poheGum**.",
e: "I **don't understand** Arabic.", e: "I **don't understand** Arabic.",
}, },
{ {
p: "ته له مرګه **وېرېږې**؟", p: "ته له مرګه **وېرېږې**؟",
f: "tu la marga **weréGe**?", f: "tu la marga **weréGe**?",
e: "**Are** you **afraid** of death?" e: "**Are** you **afraid** of death?",
}, },
])} ])}
</Examples> </Examples>
### Is currently happening ### Is currently happening
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "نن شپه ستوري **ځلېږي**.", p: "نن شپه ستوري **ځلېږي**.",
f: "nun shpa storee **dzaléGee**.", f: "nun shpa storee **dzaléGee**.",
e: "The stars **are shining** tonight.", e: "The stars **are shining** tonight.",
}, },
{ {
p: "زه بازار ته **ځم**.", p: "زه بازار ته **ځم**.",
f: "zu baazaar ta **dzum**.", f: "zu baazaar ta **dzum**.",
e: "I'm **going** to the bazaar." e: "I'm **going** to the bazaar.",
}, },
{ {
p: "هغوي اوس ډوډۍ **خوري**", p: "هغوي اوس ډوډۍ **خوري**",
f: "haghwee oos DoDuy **khoree**.", f: "haghwee oos DoDuy **khoree**.",
e: "They are **eating** food now.", e: "They are **eating** food now.",
}, },
{ {
p: "ته څه **کوې**؟", p: "ته څه **کوې**؟",
f: "tu tsu **kawe**?", f: "tu tsu **kawe**?",
e: "What **are** you **doing**?" e: "What **are** you **doing**?",
}, },
])} ])}
</Examples> </Examples>
### Is definately about to happen ### Is definately about to happen
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ {
p: "**هغه نن **راځي.", p: "**هغه نن **راځي.",
f: "haghá nun **raadzée**.", f: "haghá nun **raadzée**.",
e: "**He's coming** today.", e: "**He's coming** today.",
}, },
])} ])}
</Examples> </Examples>
<GameDisplay record={presentVerbGame1} /> <GameDisplay record={presentVerbGame1} />
<GameDisplay record={presentVerbGame2} /> <GameDisplay record={presentVerbGame2} />

View File

@ -2,17 +2,14 @@
title: 🌳 Roots and Stems title: 🌳 Roots and Stems
--- ---
import { import {
defaultTextOptions, defaultTextOptions,
Examples, Examples,
InlinePs, InlinePs,
grammarUnits, grammarUnits,
RootsAndStems, RootsAndStems,
getVerbInfo, getVerbInfo,
removeFVarients, removeFVarients,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import shuffle from "../../lib/shuffle-array"; import shuffle from "../../lib/shuffle-array";
import Carousel from "../../components/Carousel"; import Carousel from "../../components/Carousel";
@ -21,66 +18,76 @@ import Link from "../../components/Link";
import verbTreeBase from "./verb-tree-base.svg"; import verbTreeBase from "./verb-tree-base.svg";
import verbTreePastPresent from "./verb-tree-past-present.svg"; import verbTreePastPresent from "./verb-tree-past-present.svg";
import verbTreeImperfectivePerfective from "./verb-tree-imperfective-perfective.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"; import psmd from "../../lib/psmd";
export const opts = defaultTextOptions; 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 }) { export function InfoCarousel({ items, highlighted, hidePastParticiple }) {
return ( return (
<Carousel items={shuffle(items)} render={(item) => { <Carousel
let inf = getVerbInfo(item.entry); items={shuffle(items)}
const info = (inf.transitive) render={(item) => {
? inf.transitive let inf = getVerbInfo(item.entry);
: inf.stative const info = inf.transitive
? inf.stative ? inf.transitive
: inf; : inf.stative
return { ? inf.stative
title: <InlinePs opts={opts} ps={{ : inf;
...removeFVarients(item.entry), return {
e: item.def, title: (
}} />, <InlinePs
body: <RootsAndStems opts={opts}
info={info} ps={{
textOptions={opts} ...removeFVarients(item.entry),
highlighted={highlighted} e: item.def,
hidePastParticiple={hidePastParticiple} }}
/>, />
}; ),
}}/> 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. 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 ## Introducing the Verb Tree
<div style={{ maxWidth: "350px", margin: "0 auto" }}> <div style={{ maxWidth: "350px", margin: "0 auto" }}>
<img src={verbTreeBase} alt="" className="img-fluid" /> <img src={verbTreeBase} alt="" className="img-fluid" />
</div> </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! 👍 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" }}> <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> </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" }}> <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> </div>
On the <i className="fas fa-camera" /> **perfective** side of the tree: On the <i className="fas fa-camera" /> **perfective** side of the tree:
- The accent/emphasis **always** goes on the first syllable - The accent/emphasis **always** goes on the first syllable
- The verb has a <PerfectiveHead /> that splits off into a seperate <BlockTerm /> - The verb has a <PerfectiveHead /> that splits off into a seperate <BlockTerm />
## Making the Verb Tree ## 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: With regular verbs, knowing all the roots and stems is simple:
- The perfective root is made by: - The perfective root is made by:
- **adding the <InlinePs opts={opts} ps={grammarUnits.ooPrefix} /> prefix** as the <PerfectiveHead /> - **adding the <InlinePs opts={opts} ps={grammarUnits.ooPrefix} /> prefix** as the <PerfectiveHead />
- **shifting the accent to the front** - **shifting the accent to the front**
- The stems are just the **shorter version** of the roots - 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. Flip through all these regular verbs and notice the pattern of how they're all built.
export const regularVerbs = verbs.filter((verb) => ( export const regularVerbs = verbs.filter(
!verb.entry.psp && !verb.entry.ssp && !verb.entry.prp && !verb.entry.pprtp && !verb.entry.noOo && !verb.entry.sepOo (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 /> <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" }} /> - 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 - 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 /> <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). 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) => ( export const irregularPresentFormVerbs = verbs.filter(
verb.entry.psp && !verb.entry.ssp && !verb.entry.prp && !verb.entry.pprtp && !verb.entry.noOo && !verb.entry.sepO (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 ### 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! 🤯 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) => ( export const separableVerbs = verbs.filter(
verb.entry.separationAtP && [ (verb) =>
"پرې", verb.entry.separationAtP &&
"کې", ["پرې", "کې", "بو", "څم", "را"].some((x) => verb.entry.p.startsWith(x)) &&
"بو",
"څم",
"را",
].some(x => verb.entry.p.startsWith(x)) &&
!verb.entry.ssp !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>. 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. 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) => { export const irregularVerbs = verbs.filter((verb) => {
let score = 0; let score = 0;
if (verb.entry.psp) score = score + 1; if (verb.entry.psp) score = score + 1;
if (verb.entry.ssp) score = score + 1; if (verb.entry.ssp) score = score + 1;
if (verb.entry.prp) score = score + 1; if (verb.entry.prp) score = score + 1;
if (verb.entry.pprtp) score = score + 1; if (verb.entry.pprtp) score = score + 1;
return score > 1 && !verb.entry.l; 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 ## 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. 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} /> <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**. When one of these negatives is used **it always takes over the accent from the verb**.
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "دتله **کېنه**", f: "dălta **kéna**", e: "sit here" }, { p: "دتله **کېنه**", f: "dălta **kéna**", e: "sit here" },
{ p: "دلته **مه کېنه**", f: "dălta **mú kena**", e: "don't 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" }, 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> </Examples>

View File

@ -3,10 +3,9 @@ title: 📷 Subjunctive
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
removeFVarients,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import cousins from "./cousins.png"; import cousins from "./cousins.png";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
@ -15,10 +14,7 @@ import Formula from "../../components/formula/Formula";
import presentInReality from "./present-in-reality.svg"; import presentInReality from "./present-in-reality.svg";
import subjunctiveAboveReality from "./subjunctive-above-reality.svg"; import subjunctiveAboveReality from "./subjunctive-above-reality.svg";
import BasicVerbShowCase from "../../components/BasicVerbShowCase"; import BasicVerbShowCase from "../../components/BasicVerbShowCase";
import { import { subjunctiveVerbGame1, subjunctiveVerbGame2 } from "../../games/games";
subjunctiveVerbGame1,
subjunctiveVerbGame2,
} from "../../games/games";
import GameDisplay from "../../games/GameDisplay"; 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! 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. 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"> <div className="text-center">
<img src={cousins} alt="" className="img-fluid" /> <img src={cousins} alt="" className="img-fluid" />
</div> </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. 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"> <div className="text-center">
<img src={presentInReality} alt="" className="img-fluid" /> <img src={presentInReality} alt="" className="img-fluid" />
</div> </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"> <div className="text-center">
<img src={subjunctiveAboveReality} alt="" className="img-fluid" /> <img src={subjunctiveAboveReality} alt="" className="img-fluid" />
</div> </div>
As we read on [wikipedia](https://en.wikipedia.org/wiki/Subjunctive_mood): 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 ## 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> <Formula>
Perfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link> Perfective Stem + <Link to="/verbs/verb-endings/">Present Ending</Link>
</Formula> </Formula>
<BasicVerbShowCase opts={opts} tense="subjunctiveVerb" /> <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 ### Should or shouldn't
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "زه یې واخلم؟", f: "zu ye **wáakhlum?**", e: "Should I take it?" }, { p: "زه یې واخلم؟", f: "zu ye **wáakhlum?**", e: "Should I take it?" },
{ p: "هغه دې **راشي**.", f: "haghá de **ráashee**.", e: "He should come." }, { 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: "ډوډۍ **وخورو**؟",
{ p: "چې ورسره خبرې **و**نه **کړې**!", f: "che wăr-sara khabure **oo**-nú-**kRe**!", e: "You'd better not talk to him!" }, 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> </Examples>
**Note**: the subjunctive can be used almost like an imperative in situations like this. **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 ### Possibility
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {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: "امکان شته چې **لاړ شي**.",
{ p: "کېدی شي چې پولیس یې **ونیسي**.", f: "kedey shee che polees ye **óoneesee**", e: "The police could catch him." }, 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> </Examples>
### Purpose ### Purpose
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {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." }, 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> </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. **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.) 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}> <Examples opts={opts}>
{psmd([ {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." }, 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> </Examples>
## With Subordinate Clauses ## 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
- <InlinePs opts={opts} ps={{ p: "کېدی شي چې...", f: "kedey shee che...", e: "it could be that..." }} /> opts={opts}
- <InlinePs opts={opts} ps={{ p: "هسې نه چې...", f: "hase na che...", e: "lest..." }} /> ps={{ p: "چې ...", f: "che ...", e: "so that/if..." }}
- <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
- <InlinePs opts={opts} ps={{ p: "ته باید ...", f: "tu baayad ...", e: "You have to ..." }} /> opts={opts}
- <InlinePs opts={opts} ps={{ p: "په کار دی چې ...", f: "pu kaar dey che ...", e: "It's necessary that ..." }} /> 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. ...etc.

View File

@ -1,12 +1,8 @@
--- ---
title: 📽 Verb Aspect 📸 title: 📽 Verb Aspect 📸
--- ---
import { import { defaultTextOptions as opts, Examples } from "@lingdocs/ps-react";
defaultTextOptions as opts,
Examples,
InlinePs,
} from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import imperfectiveTimeline from "./imperfective-time.svg"; import imperfectiveTimeline from "./imperfective-time.svg";
import perfectiveTimeline from "./perfective-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 ## 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"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col"><i className="fas fa-video" /> Imperfective</th> <th scope="col">
<th scope="col"><i className="fas fa-camera" /> Perfective</th> <i className="fas fa-video" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera" /> Perfective
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <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> <td>Looking from outside at single, whole event - think of a photo</td>
</tr> </tr>
</tbody> </tbody>
@ -34,27 +36,43 @@ The aspects can be thought of as two different *perspectives* or *ways of lookin
### Imperfective Aspect ### 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"> <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> </div>
For example: For example:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {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> </Examples>
### Perfective Aspect ### 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"> <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> </div>
For example: For example:
@ -62,43 +80,65 @@ For example:
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `ما ډوډۍ **وخوړله**`, f: `maa DoDuy **óokhoRula**`, e: "I ate food" }, { 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> </Examples>
## Pashto Uses Aspects Everywhere! ## 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" />)? 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" }}> <table className="table" style={{ tableLayout: "fixed" }}>
<thead> <thead>
<tr> <tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th> <th scope="col">
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th> <i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `خبله کوټه **صفا کوه**!`, f: `khpula koTa **safaa kawa**`, e: "Clean your room!" }, {
])} p: `خبله کوټه **صفا کوه**!`,
</Examples> f: `khpula koTa **safaa kawa**`,
</td> e: "Clean your room!",
<td> },
<Examples opts={opts}> ])}
{psmd([ </Examples>
{ p: `خبله کوټه **صفا کړه**!`, f: `khpula koTa **safaa kRa**!`, e: "Clean your room!" }, </td>
])} <td>
</Examples> <Examples opts={opts}>
</td> {psmd([
{
p: `خبله کوټه **صفا کړه**!`,
f: `khpula koTa **safaa kRa**!`,
e: "Clean your room!",
},
])}
</Examples>
</td>
</tr> </tr>
<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>
<td>"Just get it done, once." (Asking someone to clean their room as a one-time task. Just get it done, once.)</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> </tr>
</tbody> </tbody>
</table> </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" }}> <table className="table" style={{ tableLayout: "fixed" }}>
<thead> <thead>
<tr> <tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th> <th scope="col">
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th> <i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `مونږ به **کېنو** او **خبرې کوو**`, f: `moonG ba **keenóo** aw **khabure kawoo**`, e: "We'll sit and talk" }, {
])} p: `مونږ به **کېنو** او **خبرې کوو**`,
</Examples> f: `moonG ba **keenóo** aw **khabure kawoo**`,
</td> e: "We'll sit and talk",
<td> },
<Examples opts={opts}> ])}
{psmd([ </Examples>
{ p: `مونږ به **کېنو** او **خبرې وکړو**`, f: `moonG ba **kéenoo** aw **khabure ookRoo**`, e: "We'll sit and talk" }, </td>
])} <td>
</Examples> <Examples opts={opts}>
</td> {psmd([
{
p: `مونږ به **کېنو** او **خبرې وکړو**`,
f: `moonG ba **kéenoo** aw **khabure ookRoo**`,
e: "We'll sit and talk",
},
])}
</Examples>
</td>
</tr> </tr>
<tr> <tr>
<td>We'll have a process of sitting and talking together (this will happen repeatedly or will take time)</td> <td>
<td>We'll sit down and have a talk (a one time event, thought of as a whole)</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> </tr>
</tbody> </tbody>
</table> </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" }}> <table className="table" style={{ tableLayout: "fixed" }}>
<thead> <thead>
<tr> <tr>
<th scope="col"><i className="fas fa-video fa-lg" /> Imperfective</th> <th scope="col">
<th scope="col"><i className="fas fa-camera fa-lg" /> Perfective</th> <i className="fas fa-video fa-lg" /> Imperfective
</th>
<th scope="col">
<i className="fas fa-camera fa-lg" /> Perfective
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `هغه له کوره **وتلی شوه**`, f: `haghá la kora **watuley shwa**`, e: "She was able to leave the house." }, {
])} p: `هغه له کوره **وتلی شوه**`,
</Examples> f: `haghá la kora **watulay shwa**`,
</td> e: "She was able to leave the house.",
<td> },
<Examples opts={opts}> ])}
{psmd([ </Examples>
{ p: `هغه له کوره **ووتلی شوه**`, f: `haghá la kora **óowatuley shwa**`, e: "She was able to leave the house." }, </td>
])} <td>
</Examples> <Examples opts={opts}>
</td> {psmd([
{
p: `هغه له کوره **ووتلی شوه**`,
f: `haghá la kora **óowatulay shwa**`,
e: "She was able to leave the house.",
},
])}
</Examples>
</td>
</tr> </tr>
<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> <td>In one particular instance, she was able to get out of the house.</td>
</tr> </tr>
</tbody> </tbody>

View File

@ -2,20 +2,17 @@
title: Verb Endings title: Verb Endings
--- ---
import { import {
addToForm, addToForm,
defaultTextOptions as opts, defaultTextOptions as opts,
grammarUnits, grammarUnits,
VerbFormDisplay, VerbFormDisplay,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import Link from "../../components/Link"; import Link from "../../components/Link";
export function addTail(form) { export function addTail(form) {
return addToForm([{ p: "ـ", f: "-" }], form, true); return addToForm([{ p: "ـ", f: "-" }], form, true);
} }
## Present Verb Endings ## 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. 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 <VerbFormDisplay
displayForm={addTail(grammarUnits.presentEndings)} displayForm={addTail(grammarUnits.presentEndings)}
textOptions={opts} textOptions={opts}
/> />
## Imperative Verb Endings ## 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. These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb stems</Link> to make imperative verbs.
<VerbFormDisplay <VerbFormDisplay
displayForm={addTail(grammarUnits.imperativeEndings)} displayForm={addTail(grammarUnits.imperativeEndings)}
textOptions={opts} textOptions={opts}
/> />
## Past Verb Endings ## 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. These endings are added on to the ends <Link to="/verbs/roots-and-stems/">verb roots</Link> to make past-tense verbs.
<VerbFormDisplay <VerbFormDisplay
displayForm={addTail(grammarUnits.pastEndings.short)} displayForm={addTail(grammarUnits.pastEndings.short)}
textOptions={opts} textOptions={opts}
/> />
### Notes about past verb endings ### 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 **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. - 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; - In the **Kandahari dialect** some different endings are used;
- 3rd pers. masc. sing.: <InlinePs opts={opts} ps={{ p: "ـی", f: "ey", 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: "" }} /> - 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've gone
- I'll have 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: When you get a new set of tools you need to make sure you understand:
1. **What they are** 1. **What they are**
How to make the verb forms and recognize them How to make the verb forms and recognize them
2. **When to use them** 2. **When to use them**
What they mean and what situations they're used in 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. 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: 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" }}> <table className="table table-bordered" style={{ tableLayout: "fixed" }}>
<thead> <thead>
<tr> <tr>
<th scope="col">English</th> <th scope="col">English</th>
<th scope="col">German</th> <th scope="col">German</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td>
<div>I'll open the door (right now)</div> <div>I'll open the door (right now)</div>
<div className="text-muted">Simple Future</div> <div className="text-muted">Simple Future</div>
</td> </td>
<td rowspan={2} style={{ verticalAlign: "middle"}}> <td rowspan={2} style={{ verticalAlign: "middle" }}>
<div>Ich öffne die Tür</div> <div>Ich öffne die Tür</div>
<div className="text-muted">Präsens</div> <div className="text-muted">Präsens</div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<div>I open the door (always, it's my job)</div> <div>I open the door (always, it's my job)</div>
<div className="text-muted">Present Simple</div> <div className="text-muted">Present Simple</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </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. 🧰🤓👍 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> <details>
<summary>Another example...</summary> <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?" 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> </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>. 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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } 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. 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. - 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! - 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 "و" 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. 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."** 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}> <Examples opts={opts}>
{[ {[
{ p: "ته", f: "ta", e: "to" }, { p: "ته", f: "ta", e: "to" },
{ p: "تهٔ", f: "tu", e: "you" }, { p: "تهٔ", f: "tu", e: "you" },
{ p: "کارګهٔ", f: "kaargu", e: "crow" }, { p: "کارګهٔ", f: "kaargu", e: "crow" },
{ p: "ویدهٔ", f: "weedu", e: "asleep (masc.)" }, { p: "ویدهٔ", f: "weedu", e: "asleep (masc.)" },
{ p: "ویده", f: "weeda", e: "asleep (fem.)" }, { p: "ویده", f: "weeda", e: "asleep (fem.)" },
]} ]}
</Examples> </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" }} /> - **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" }} /> - **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 ## The four main diacritics
export const diacritics = [ export const diacritics = [
{ diacritic: "َ", name: "zwar", sound: "a" }, { diacritic: "َ", name: "zwar", sound: "a" },
{ diacritic: "ٙ", name: "zwarakey", sound: "u" }, { diacritic: "ٙ", name: "zwarakay", sound: "u" },
{ diacritic: "ِ", name: "zer", sound: "i" }, { diacritic: "ِ", name: "zer", sound: "i" },
{ diacritic: "ُ", name: "pesh", sound: "U" }, { diacritic: "ُ", name: "pesh", sound: "U" },
] ];
<table className="table"> <table className="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Diacritic</th> <th scope="col">Diacritic</th>
<th scope="col">Name</th> <th scope="col">Name</th>
<th scope="col">Sound</th> <th scope="col">Sound</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{diacritics.map((d) => ( {diacritics.map((d) => (
<tr key={d.diacritic}> <tr key={d.diacritic}>
<td> <td>
<div className="h2">◌{d.diacritic}</div> <div className="h2">◌{d.diacritic}</div>
</td> </td>
<td>{d.name}</td> <td>{d.name}</td>
<td>{d.sound}</td> <td>{d.sound}</td>
</tr> </tr>
))} ))}
</tbody> </tbody>
</table> </table>
## Other diacritics ## Other diacritics

View File

@ -7,8 +7,8 @@ import Link from "../../components/Link";
import { translatePhonetics } from "@lingdocs/ps-react"; import { translatePhonetics } from "@lingdocs/ps-react";
export const exText = { export const exText = {
p: "دا خو ډېره ښه خبره ده چې ټول په پښتو کې لیکلی شي.", p: "دا خو ډېره ښه خبره ده چې ټول په پښتو کې لیکلی شي.",
f: "daa kho Dera xa khabura da che Tol pu puxto ke leekuley shee", 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. 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 ##### In Pashto
<p dir="rtl"> <p dir="rtl">{exText.p}</p>
{exText.p}
</p>
##### In LingDocs Pashto Phonetics ##### In LingDocs Pashto Phonetics
@ -31,10 +29,12 @@ There have been many of different systems or conventions for writing Pashto in p
##### In IPA ##### In IPA
<p>{translatePhonetics(exText.f, { <p>
{translatePhonetics(exText.f, {
system: "ipa", system: "ipa",
dialect: "standard", dialect: "standard",
})}</p> })}
</p>
A couple of things to note about this system: 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 ` ### 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 { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import psmd from "../../lib/psmd"; import psmd from "../../lib/psmd";
import Link from "../../components/Link"; 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. 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> <thead>
<tr> <tr>
<th scope="col">Letter</th> <th scope="col">Letter</th>
@ -25,68 +30,126 @@ Below are the five ی's as they are used in most dictionaries, written material,
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr className="clickable" onClick={() => document.getElementById("ey").play()}> <tr
<td className="h4">ی</td> className="clickable"
<td className="h5">ey</td> onClick={() => document.getElementById("ee").play()}
<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()}>
<td className="h4">ي</td> <td className="h4">ي</td>
<td className="h5">ee</td> <td className="h5">ee</td>
<td>i</td> <td>i</td>
</tr> </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="h4">ۍ</td>
<td className="h5">uy</td> <td className="h5">uy</td>
<td>əj</td> <td>əj</td>
</tr> </tr>
<tr className="clickable" onClick={() => document.getElementById("eyy").play()}> <tr
className="clickable"
onClick={() => document.getElementById("ey").play()}
>
<td className="h4">ئ</td> <td className="h4">ئ</td>
<td className="h5">eyy</td> <td className="h5">ey</td>
<td>ɛ̝j</td> <td>ɛ̝j</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<audio id="ey" preload="auto"><source src="/audio/ey.m4a" /></audio> <audio id="ay" preload="auto">
<audio id="e" preload="auto"><source src="/audio/e.m4a" /></audio> <source src="/audio/ey.m4a" />
<audio id="ee" preload="auto"><source src="/audio/ee.m4a" /></audio> </audio>
<audio id="uy" preload="auto"><source src="/audio/uy.m4a" /></audio> <audio id="e" preload="auto">
<audio id="eyy" preload="auto"><source src="/audio/eyy.m4a" /></audio> <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: 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: #### Names:
- <InlinePs opts={opts} ps={{ p: "نارینه یې", f: "naareená 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: "be Túko ye" }} />
- <InlinePs opts={opts} ps={{ p: "نرمه یې", f: "narma ye" }} /> - <InlinePs opts={opts} ps={{ p: "نرمه یې", f: "narma ye" }} />
#### Used in: #### 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: "saRéy", e: "man" }} />
- <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRey", e: "tired" }} /> - <InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRay", e: "tired" }} />
- <InlinePs opts={opts} ps={{ p: "ما ته لیدلی", f: "maa tu leedúley", e: "I've seen you (masc.)" }} /> - <InlinePs
- <InlinePs opts={opts} ps={psmd({ p: "هغه هلته دی", f: "hagha halta dey", e: "He is there" })} /> 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 - the middle of words
- <InlinePs opts={opts} ps={{ p: "خیر", f: "kheyr" }} /> - <InlinePs opts={opts} ps={{ p: "خیر", f: "khayr" }} />
- <InlinePs opts={opts} ps={{ p: "پیل", f: "peyl" }} /> - <InlinePs opts={opts} ps={{ p: "پیل", f: "payl" }} />
- the non-inflecting tail in modal verbs - the non-inflecting tail in modal verbs
- <InlinePs opts={opts} ps={psmd({ p: "زه تل**ی** شم", f: "zu tl**éy** shum", e: "I can go" })} /> - <InlinePs
- <InlinePs opts={opts} ps={psmd({ p: "زه تل**ی** شي", f: "zu tl**éy** shee", e: "She can go" })} /> 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: **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: "chaay", e: "tea" }} />
- <InlinePs opts={opts} ps={{ p: "زوی", f: "zooy", e: "son" }} /> - <InlinePs opts={opts} ps={{ p: "زوی", f: "zooy", e: "son" }} />
### ې - e ### ې - 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" }} /> - <InlinePs opts={opts} ps={{ p: "اوږده یې", f: "ooGda ye" }} />
#### Used in: #### Used in:
- the end of feminine nouns, adjectives, and participles - 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: "xúdze", e: "women" }} />
- <InlinePs opts={opts} ps={{ p: "ستړې", f: "stúRe", e: "tired" }} /> - <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 - the end of the second person singular verbs and equatives
- <InlinePs opts={opts} ps={{ p: "چېرته ځې؟", f: "cherta dze?", e: "Where are you going?" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "ته چېرته یې؟", f: "tu cherta ye?", e: "Where are you?" }} /> opts={opts}
- <InlinePs opts={opts} ps={{ p: "ته چېرته وې؟", f: "tu cherta we?", e: "Where were you?" }} /> 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 - 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 - the end of particles, mini-pronouns, and sandwiches
- <InlinePs opts={opts} ps={{ p: "بې", f: "be", e: "without-" }} /> - <InlinePs opts={opts} ps={{ p: "بې", f: "be", e: "without-" }} />
- <InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st Pers. Sing. Mini-Pronoun" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "په ... کې", f: "pu ... ke", e: "in ..." }} /> 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 - the middle of words
- <InlinePs opts={opts} ps={{ p: "وېره", f: "wéra", e: "fear" }} /> - <InlinePs opts={opts} ps={{ p: "وېره", f: "wéra", e: "fear" }} />
- <InlinePs opts={opts} ps={{ p: "تېر", f: "ter", e: "last" }} /> - <InlinePs opts={opts} ps={{ p: "تېر", f: "ter", e: "last" }} />
### ي - ee ### ي - ee
#### Names: #### Names:
- <InlinePs opts={opts} ps={{ p: "څرګنده یې", f: "tsargúnda ye" }} /> - <InlinePs opts={opts} ps={{ p: "څرګنده یې", f: "tsargúnda ye" }} />
- <InlinePs opts={opts} ps={{ p: "لنډه یې", f: "lúnDa ye" }} /> - <InlinePs opts={opts} ps={{ p: "لنډه یې", f: "lúnDa ye" }} />
#### Used in: #### 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: "dostee", e: "friendship" }} />
- <InlinePs opts={opts} ps={{ p: "قانوني", f: "qaanóonee", e: "legal" }} /> - <InlinePs opts={opts} ps={{ p: "قانوني", f: "qaanóonee", e: "legal" }} />
- the end of third person verbs - the end of third person verbs
- <InlinePs opts={opts} ps={{ p: "هغه ځي", f: "hagha dzee", e: "He is going" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "هغوي څه وکړي؟", f: "haghwee tsu óokRee?", e: "What should they do?" }} /> 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 - the end of inflected masculine nouns, adjectives, and participles
- <InlinePs opts={opts} ps={{ p: "د سړي نوم", f: "du saRee noom", e: "the man's name" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "مونږ تللي یو", f: "moonG tlúlee yoo", e: "We've gone" }} /> 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 - the middle of words
- <InlinePs opts={opts} ps={{ p: "ویده", f: "weedú", e: "asleep" }} /> - <InlinePs opts={opts} ps={{ p: "ویده", f: "weedú", e: "asleep" }} />
- <InlinePs opts={opts} ps={{ p: "لیدل", f: "leedúl", e: "to see" }} /> - <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: #### Names:
- <InlinePs opts={opts} ps={{ p: "ښځینه یې", f: "xudzeená 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: "lakúy laróonke ye" }} />
- <InlinePs opts={opts} ps={{ p: "تانیڅه یې", f: "taaneesa ye" }} /> - <InlinePs opts={opts} ps={{ p: "تانیڅه یې", f: "taaneesa ye" }} />
#### Used in: #### Used in:
- the end of feminine nouns and adjectives - the end of feminine nouns and adjectives
- <InlinePs opts={opts} ps={{ p: "انجلۍ", f: "injulúy", e: "girl" }} /> - <InlinePs opts={opts} ps={{ p: "انجلۍ", f: "injulúy", e: "girl" }} />
- <InlinePs opts={opts} ps={{ p: "افغانۍ", f: "afghaanúy", e: "A female Afghan" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "لومرۍ برخه", f: "loomRúy barkha", e: "The first section" }} /> 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. **Note**: This is only used in nouns and adjectives when the accent is on the last syllable.
### ئ - eyy ### ئ - ey
#### Names: #### Names:
- <InlinePs opts={opts} ps={{ p: "فعلي", f: "fi'lee ye" }} /> - <InlinePs opts={opts} ps={{ p: "فعلي", f: "fi'lee ye" }} />
- <InlinePs opts={opts} ps={{ p: "امریه یې", f: "amriya ye" }} /> - <InlinePs opts={opts} ps={{ p: "امریه یې", f: "amriya ye" }} />
#### Used in: #### Used in:
- the end of second person plural verbs and equatives - the end of second person plural verbs and equatives
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته یئ؟", f: "taaso cherta yeyy?", e: "Where are you (pl.)?" }} /> - <InlinePs
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته وئ؟", f: "taaso cherta weyy?", e: "Where were you (pl.)?" }} /> opts={opts}
- <InlinePs opts={opts} ps={{ p: "تاسو چېرته ځئ؟", f: "taaso chetra dzeyy?", e: "Where are you going?" }} /> ps={{
- <InlinePs opts={opts} ps={{ p: "جګ شئ!", f: "jig sheyy!", e: "Get up!" }} /> 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 ## Some Important Notes
#### The ۍ vs. ئ confusion #### 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: "ey" }} /> is only used for 2nd person plural
- <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> is only used at the end of feminine nouns and adjectives verb endings
- <InlinePs opts={opts} ps={{ p: "ۍ", f: "uy" }} /> is only used at the end of feminine
nouns and adjectives
#### The ـئـ in loan-words #### 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: "jaa'iz", e: "permitted" }} />
- <InlinePs opts={opts} ps={{ p: "رئس", f: "ra'ees", e: "chief" }} /> - <InlinePs opts={opts} ps={{ p: "رئس", f: "ra'ees", e: "chief" }} />
## Writing Systems in Pakistan ## 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 ### Comparison Chart
<div className="my-3" style={{ overflowX: "auto" }}> <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> <thead>
<tr> <tr>
<th scope="col">AF</th> <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> </tr>
</thead> </thead>
<tbody> <tbody>
<tr className="clickable" onClick={() => document.getElementById("ey").play()}> <tr
className="clickable"
onClick={() => document.getElementById("ay").play()}
>
<td className="h5">ی</td> <td className="h5">ی</td>
<td className="h5">ey</td> <td className="h5">ay</td>
<td className="h5" style={highlight}>ے</td> <td className="h5" style={highlight}>
<td className="h5" style={highlight}>ے</td> ے
<td className="h5" style={highlight}>ے</td> </td>
<td className="h5" style={highlight}>
ے
</td>
<td className="h5" style={highlight}>
ے
</td>
</tr> </tr>
<tr className="clickable" onClick={() => document.getElementById("e").play()}> <tr
className="clickable"
onClick={() => document.getElementById("e").play()}
>
<td className="h5">ې</td> <td className="h5">ې</td>
<td className="h5">e</td> <td className="h5">e</td>
<td className="h5">ې</td> <td className="h5">ې</td>
<td className="h5">ې</td> <td className="h5">ې</td>
<td className="h5" style={highlight}>ے</td> <td className="h5" style={highlight}>
ے
</td>
</tr> </tr>
<tr className="clickable" onClick={() => document.getElementById("ee").play()}> <tr
className="clickable"
onClick={() => document.getElementById("ee").play()}
>
<td className="h5">ي</td> <td className="h5">ي</td>
<td className="h5">ee</td> <td className="h5">ee</td>
<td className="h5">ي</td> <td className="h5">ي</td>
<td className="h5" style={highlight}>ی</td> <td className="h5" style={highlight}>
<td className="h5" style={highlight}>ی</td> ی
</td>
<td className="h5" style={highlight}>
ی
</td>
</tr> </tr>
<tr className="clickable" onClick={() => document.getElementById("uy").play()}> <tr
className="clickable"
onClick={() => document.getElementById("uy").play()}
>
<td className="h5">ۍ</td> <td className="h5">ۍ</td>
<td className="h5">uy</td> <td className="h5">uy</td>
<td className="h5">ۍ</td> <td className="h5">ۍ</td>
<td className="h5">ۍ</td> <td className="h5">ۍ</td>
<td className="h5" style={highlight}>ئ</td> <td className="h5" style={highlight}>
ئ
</td>
</tr> </tr>
<tr className="clickable" onClick={() => document.getElementById("eyy").play()}> <tr
className="clickable"
onClick={() => document.getElementById("ey").play()}
>
<td className="h5">ئ</td> <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> <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 ي ##### 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. 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> </thead>
<tbody> <tbody>
<tr> <tr>
<td><InlinePs opts={opts} ps={{ p: "هغه وایي", f: "haghá waayee" }} /></td> <td>
<td><InlinePs opts={opts} ps={{ p: "هغه وائي", f: "haghá waayee" }} /></td> <InlinePs opts={opts} ps={{ p: "هغه وایي", f: "haghá waayee" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "هغه وائي", f: "haghá waayee" }} />
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -292,16 +464,28 @@ Instead of the ی at the end of long-vowel dipthongs, the letter ئ is used in P
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><InlinePs opts={opts} ps={{ p: "چای", f: "chaay" }} /></td> <td>
<td><InlinePs opts={opts} ps={{ p: "چائ", f: "chaay" }} /></td> <InlinePs opts={opts} ps={{ p: "چای", f: "chaay" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "چائ", f: "chaay" }} />
</td>
</tr> </tr>
<tr> <tr>
<td><InlinePs opts={opts} ps={{ p: "زوی", f: "zooy" }} /></td> <td>
<td><InlinePs opts={opts} ps={{ p: "زوئ", f: "zooy" }} /></td> <InlinePs opts={opts} ps={{ p: "زوی", f: "zooy" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "زوئ", f: "zooy" }} />
</td>
</tr> </tr>
<tr> <tr>
<td><InlinePs opts={opts} ps={{ p: "خدای", f: "khUdaay" }} /></td> <td>
<td><InlinePs opts={opts} ps={{ p: "خدائ", f: "khUdaay" }} /></td> <InlinePs opts={opts} ps={{ p: "خدای", f: "khUdaay" }} />
</td>
<td>
<InlinePs opts={opts} ps={{ p: "خدائ", f: "khUdaay" }} />
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -312,7 +496,7 @@ In Pakistan, Pashto is more of a spoken language than a written one. Because of
#### ے vs ې #### ے 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"> <table className="table">
<thead> <thead>
@ -326,16 +510,24 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<td> <td>
<Examples opts={opts}> <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> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ p: "د زپې او لهجے په حواله به خبرے کېږي", f: "du jzube aw lahje pu hawaala ba khabure keGee", e: "There will be talk about language and dialect" } {
]} p: "د زپې او لهجے په حواله به خبرے کېږي",
</Examples> f: "du jzube aw lahje pu hawaala ba khabure keGee",
e: "There will be talk about language and dialect",
},
]}
</Examples>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -347,10 +539,19 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}> <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: "دانه دانه چې یو ځای شي، غر ترې جوړ شي",
{ p: `د کوچي ښځه وايي، زما خاوند کوچی دی، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` }, f: "daana daana che yo dzaay shee, ghur tre joR shee",
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` }, },
{
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> </Examples>
@ -358,21 +559,39 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}> <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: "دانه دانه چې یو ځائ شي، غر ترې جوړ شي",
{ p: `د کوچي ښځه وائي، زما خاوند کوچے دے، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` }, f: "daana daana che yo dzaay shee, ghur tre joR shee",
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` }, },
{
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> </Examples>
##### Pakistani with ی ##### Pakistani with ی
<Examples opts={opts}> <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: "دانه دانه چې یو ځائ شی، غر ترې جوړ شی",
{ p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچۍ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` }, f: "daana daana che yo dzaay shee, ghur tre joR shee",
{ p: `تاسو کرسۍ کې کېنئ`, f: `taaso kUrsúy ke keneyy` }, },
{
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> </Examples>
@ -380,9 +599,18 @@ One very common mistake in Pakistan is the use of ے instead of ې. This might b
<Examples opts={opts}> <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: "دانه دانه چه یو ځائ شی، غر ترے جوړ شی",
{ p: `د کوچی ښځه وائی، زما خاوند کوچے دے، او زه هم کوچئ یم `, f: `du kochee xudza waayee, zmaa khaawund kochéy dey, aw zu hum kochúy yum.` }, f: "daana daana che yo dzaay shee, ghur tre joR shee",
{ p: `تاسو کرسئ کے کېنئ`, f: `taaso kUrsúy ke keneyy` }, },
{
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> </Examples>

View File

@ -2,10 +2,7 @@
title: Typing Issues ⌨ title: Typing Issues ⌨
--- ---
import { import { defaultTextOptions as opts, InlinePs } from "@lingdocs/ps-react";
defaultTextOptions as opts,
InlinePs,
} from "@lingdocs/ps-react";
## Finding a good keyboard 📱 ## 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: 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 "ee" sound
- a "y" 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 ی)
- مينه (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. 😖 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 { useState } from "react";
import { import { comparePs } from "../../lib/game-utils";
comparePs,
} from "../../lib/game-utils";
import GameCore from "../GameCore"; import GameCore from "../GameCore";
import { import {
Types as T, Types as T,
renderEP, renderEP,
compileEP, compileEP,
randFromArray, randFromArray,
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
blank, blank,
isPashtoScript, isPashtoScript,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { wordQuery } from "../../words/words"; import { wordQuery } from "../../words/words";
import { makePool } from "../../lib/pool"; import { makePool } from "../../lib/pool";
@ -21,204 +19,237 @@ import WordCard from "../../components/WordCard";
const amount = 12; const amount = 12;
const timeLimit = 140; const timeLimit = 140;
const pronouns: T.Person[] = [ const pronouns: T.Person[] = [0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11];
0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11,
];
const adjectives = wordQuery("adjectives", [ const adjectives = wordQuery("adjectives", [
"muR", "muR",
"sheen", "sheen",
"soor", "soor",
"rixtooney", "rixtoonay",
"stuRey", "stuRay",
"ghuT", "ghuT",
"xu", "xu",
"khufa", "khufa",
"takRa", "takRa",
"puT", "puT",
"tuGey", "tuGay",
"koochney", "koochnay",
"pradey", "praday",
"zoR", "zoR",
"moR", "moR",
"khoG", "khoG",
"droond", "droond",
"loomRey", "loomRay",
"Roond", "Roond",
"prot", "prot",
"soR", "soR",
"post", "post",
"pokh", "pokh",
"rooN", "rooN",
"woR", "woR",
"kooN", "kooN",
"koG", "koG",
]); ]);
type Question = { type Question = {
EPS: T.EPSelectionComplete, EPS: T.EPSelectionComplete;
phrase: { ps: T.PsString[], e?: string[] }, phrase: { ps: T.PsString[]; e?: string[] };
adjective: T.Rendered<T.AdjectiveSelection>, adjective: T.Rendered<T.AdjectiveSelection>;
}; };
export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: boolean, id: string, link: string, level: "hints" | "no-hints" }) { export default function EPAdjGame({
const pronounPool = makePool(pronouns); inChapter,
const adjPool = makePool(adjectives); id,
function getQuestion(): Question { link,
const subject: T.NPSelection = { level,
type: "NP", }: {
selection: { inChapter: boolean;
type: "pronoun", id: string;
person: pronounPool(), link: string;
distance: randFromArray(["far", "far", "near"]), level: "hints" | "no-hints";
}, }) {
}; const pronounPool = makePool(pronouns);
const EPS = makeEPS(subject, adjPool(), "present"); const adjPool = makePool(adjectives);
const EP = renderEP(EPS); function getQuestion(): Question {
const compiled = compileEP( const subject: T.NPSelection = {
EP, type: "NP",
true, selection: {
{ predicate: true }, type: "pronoun",
); person: pronounPool(),
const phrase = { distance: randFromArray(["far", "far", "near"]),
ps: compiled.ps, },
e: compiled.e,
};
return {
EPS,
phrase,
adjective: getAdjectiveFromRendered(EP),
};
}; };
const EPS = makeEPS(subject, adjPool(), "present");
function Display({ question, callback }: QuestionDisplayProps<Question>) { const EP = renderEP(EPS);
const [answer, setAnswer] = useState<string>(""); const compiled = compileEP(EP, true, { predicate: true });
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => { const phrase = {
setAnswer(value); ps: compiled.ps,
} e: compiled.e,
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { };
e.preventDefault(); return {
const correct = comparePs(answer, question.adjective.ps); EPS,
if (correct) { phrase,
setAnswer(""); adjective: getAdjectiveFromRendered(EP),
} };
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 function Display({ question, callback }: QuestionDisplayProps<Question>) {
inChapter={inChapter} const [answer, setAnswer] = useState<string>("");
studyLink={link} const handleInput = ({
getQuestion={getQuestion} target: { value },
id={id} }: React.ChangeEvent<HTMLInputElement>) => {
Display={Display} setAnswer(value);
DisplayCorrectAnswer={DisplayCorrectAnswer} };
timeLimit={timeLimit} const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
amount={amount} e.preventDefault();
Instructions={Instructions} 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 { function DisplayCorrectAnswer({
return <div> question,
<div> }: {
{question.adjective.ps.reduce(((accum, curr, i): JSX.Element[] => ( question: Question;
[ }): JSX.Element {
...accum, return (
...i > 0 ? [<span className="text-muted"> or </span>] : [], <div>
<span key={i}>{curr.p}</span>, <div>
] {question.adjective.ps.reduce(
)), [] as JSX.Element[])} (accum, curr, i): JSX.Element[] => [
</div> ...accum,
</div>; ...(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 { function addUserAnswer(a: string, ps: T.PsString): T.PsString {
if (!a) return ps; if (!a) return ps;
const field = isPashtoScript(a) ? "p" : "f"; const field = isPashtoScript(a) ? "p" : "f";
return { return {
...ps, ...ps,
[field]: ps[field].replace(blank[field], a), [field]: ps[field].replace(blank[field], a),
}; };
} }
function getAdjectiveFromRendered(EP: T.EPRendered): T.Rendered<T.AdjectiveSelection> { function getAdjectiveFromRendered(
const pred = getPredicateSelectionFromBlocks(EP.blocks); EP: T.EPRendered
if (pred.selection.type !== "complement" || pred.selection.selection.type !== "adjective") { ): T.Rendered<T.AdjectiveSelection> {
throw new Error("adjective not found in predicate"); const pred = getPredicateSelectionFromBlocks(EP.blocks);
} if (
return pred.selection.selection; 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 { function makeEPS(
return { subject: T.NPSelection,
blocks: [ predicate: T.AdjectiveEntry,
{ tense: T.EquativeTense
key: Math.random(), ): T.EPSelectionComplete {
block: { return {
type: "subjectSelection", blocks: [
selection: subject, {
}, key: Math.random(),
}, block: {
], type: "subjectSelection",
predicate: { selection: subject,
type: "predicateSelection",
selection: {
type: "complement",
selection: {
type: "adjective",
entry: predicate,
sandwich: undefined,
},
},
}, },
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 genderColors from "../../lib/gender-colors";
import GameCore from "../GameCore"; import GameCore from "../GameCore";
import { import {
Types as T, Types as T,
Examples, Examples,
defaultTextOptions as opts, defaultTextOptions as opts,
endsWith, endsWith,
pashtoConsonants, pashtoConsonants,
inflectWord, inflectWord,
isUnisexSet, isUnisexSet,
typePredicates as tp, typePredicates as tp,
firstVariation, firstVariation,
randFromArray, randFromArray,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { nouns } from "../../words/words"; import { nouns } from "../../words/words";
import { categorize } from "../../lib/categorize"; import { categorize } from "../../lib/categorize";
@ -19,138 +19,199 @@ const genders: T.Gender[] = ["masc", "fem"];
const mascNouns = nouns.filter(tp.isMascNounEntry); const mascNouns = nouns.filter(tp.isMascNounEntry);
const femNouns = [ const femNouns = [
...nouns.filter(tp.isFemNounEntry), ...nouns.filter(tp.isFemNounEntry),
...getFemVersions(mascNouns.filter(tp.isUnisexNounEntry)), ...getFemVersions(mascNouns.filter(tp.isUnisexNounEntry)),
]; ];
const types = { const types = {
masc: categorize<T.MascNounEntry, { masc: categorize<
consonantMasc: T.MascNounEntry[], T.MascNounEntry,
eyMasc: T.MascNounEntry[], {
uMasc: T.MascNounEntry[], consonantMasc: T.MascNounEntry[];
yMasc: T.MascNounEntry[], eyMasc: T.MascNounEntry[];
}>(mascNouns, { uMasc: T.MascNounEntry[];
consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]), yMasc: T.MascNounEntry[];
eyMasc: endsWith({ p: "ی", f: "ey" }), }
uMasc: endsWith({ p: "ه", f: "u" }), >(mascNouns, {
yMasc: endsWith([{ p: "ای", f: "aay" }, { p: "وی", f: "ooy" }]), consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]),
}), eyMasc: endsWith({ p: "ی", f: "ey" }),
fem: categorize<T.FemNounEntry, { uMasc: endsWith({ p: "ه", f: "u" }),
aaFem: T.FemNounEntry[], yMasc: endsWith([
eeFem: T.FemNounEntry[], { p: "ای", f: "aay" },
uyFem: T.FemNounEntry[], { p: "وی", f: "ooy" },
aFem: T.FemNounEntry[], ]),
eFem: T.FemNounEntry[], }),
}>(femNouns, { fem: categorize<
aaFem: endsWith({ p: "ا", f: "aa" }), T.FemNounEntry,
eeFem: endsWith({ p: "ي", f: "ee" }), {
uyFem: endsWith({ p: "ۍ" }), aaFem: T.FemNounEntry[];
aFem: endsWith([{ p: "ه", f: "a" }, { p: "ح", f: "a" }]), eeFem: T.FemNounEntry[];
eFem: endsWith({ p: "ې" }), 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[] { function getFemVersions(uns: T.UnisexNounEntry[]): T.FemNounEntry[] {
return uns.map((n) => { return uns
const infs = inflectWord(n); .map((n) => {
if (!infs || !infs.inflections) return undefined; const infs = inflectWord(n);
if (!isUnisexSet(infs.inflections)) return undefined; if (!infs || !infs.inflections) return undefined;
return { if (!isUnisexSet(infs.inflections)) return undefined;
e: n.e, return {
...infs.inflections.fem[0][0], e: n.e,
} as T.DictionaryEntry; ...infs.inflections.fem[0][0],
}).filter(n => !!n) as T.FemNounEntry[]; } as T.DictionaryEntry;
})
.filter((n) => !!n) as T.FemNounEntry[];
} }
function flatten<T>(o: Record<string, T[]>): T[] { 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 { function nounNotIn(
return (n: T.DictionaryEntry) => !st.find(x => x.ts === n.ts); 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[]>; type CategorySet = Record<string, T.NounEntry[]>;
// for some reason we need to use this CategorySet type here... 🤷‍♂️ // for some reason we need to use this CategorySet type here... 🤷‍♂️
const exceptions: Record<string, CategorySet> = { const exceptions: Record<string, CategorySet> = {
masc: { masc: {
exceptionMasc: mascNouns.filter(nounNotIn(flatten(types.masc))), exceptionMasc: mascNouns.filter(nounNotIn(flatten(types.masc))),
}, },
fem: { fem: {
exceptionFem: femNouns.filter(nounNotIn(flatten(types.fem))), exceptionFem: femNouns.filter(nounNotIn(flatten(types.fem))),
}, },
}; };
const amount = 25; const amount = 25;
type Question = T.DictionaryEntry; type Question = T.DictionaryEntry;
export default function GenderGame({level, id, link, inChapter }: { export default function GenderGame({
inChapter: boolean, level,
level: 1 | 2, id: string, id,
link: string, link,
inChapter,
}: {
inChapter: boolean;
level: 1 | 2;
id: string;
link: string;
}) { }) {
const wordPool = {...types}; const wordPool = { ...types };
const exceptionsPool = {...exceptions}; const exceptionsPool = { ...exceptions };
function getQuestion(): Question { function getQuestion(): Question {
const base = level === 1 const base =
? wordPool level === 1 ? wordPool : randFromArray([wordPool, exceptionsPool]);
: randFromArray([wordPool, exceptionsPool]); const gender = randFromArray(genders);
const gender = randFromArray(genders); let typeToUse: string;
let typeToUse: string; do {
do { typeToUse = randFromArray(Object.keys(base[gender]));
typeToUse = randFromArray(Object.keys(base[gender])); // @ts-ignore
} while (!base[gender][typeToUse].length); } while (!base[gender][typeToUse].length);
const question = randFromArray(base[gender][typeToUse]); // @ts-ignore
base[gender][typeToUse] = base[gender][typeToUse].filter((entry) => entry.ts !== question.ts); const question = randFromArray(base[gender][typeToUse]);
return question; // @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>) { return (
function check(gender: T.Gender) { <div>
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc"; <div className="mb-4" style={{ fontSize: "larger" }}>
callback(gender === nounGender); <Examples opts={opts}>
} {[
return <div> {
<div className="mb-4" style={{ fontSize: "larger" }}> p: firstVariation(question.p),
<Examples opts={opts}>{[ f: firstVariation(question.f),
{ e: level === 2 ? firstVariation(question.e) : undefined,
p: firstVariation(question.p), },
f: firstVariation(question.f), ]}
e: level === 2 ? firstVariation(question.e) : undefined, </Examples>
}
]}</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>
</div> </div>
} <div className="mt-4">
<button
function Instructions() { style={{ background: genderColors.f, color: "black" }}
return <div> className="btn btn-lg mr-3"
<h5>Choose the right gender for each word</h5> onClick={() => check("fem")}
{level === 2 && <div> Exceptions included...</div>} >
Feminine
</button>
<button
style={{ background: genderColors.m, color: "black" }}
className="btn btn-lg ml-3"
onClick={() => check("masc")}
>
Masculine
</button>
</div> </div>
} </div>
);
}
function DisplayCorrectAnswer({ question }: { question: Question}) { function Instructions() {
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc"; return (
return <div className="my-2 text-center"> <div>
<button style={{ background: genderColors[nounGender === "masc" ? "m" : "f"], color: "black" }} className="btn btn-lg" disabled> <h5>Choose the right gender for each word</h5>
{nounGender === "masc" ? "Masculine" : "Feminine"} {level === 2 && <div> Exceptions included...</div>}
</button> </div>
</div>; );
} }
return <GameCore function DisplayCorrectAnswer({ question }: { question: Question }) {
inChapter={inChapter} const nounGender: T.Gender = nounNotIn(mascNouns)(question)
studyLink={link} ? "fem"
getQuestion={getQuestion} : "masc";
id={id} return (
Display={Display} <div className="my-2 text-center">
DisplayCorrectAnswer={DisplayCorrectAnswer} <button
amount={amount} style={{
timeLimit={level === 1 ? 70 : 80} background: genderColors[nounGender === "masc" ? "m" : "f"],
Instructions={Instructions} 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 GameCore from "../GameCore";
import { import {
Types as T, Types as T,
getInflectionPattern, getInflectionPattern,
Examples, Examples,
defaultTextOptions as opts, defaultTextOptions as opts,
firstVariation, firstVariation,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { makePool } from "../../lib/pool"; import { makePool } from "../../lib/pool";
import { nouns, adjectives } from "../../words/words"; import { nouns, adjectives } from "../../words/words";
@ -14,137 +14,178 @@ const amount = 20;
const timeLimit = 150; const timeLimit = 150;
type Question = { type Question = {
entry: T.NounEntry | T.AdjectiveEntry, entry: T.NounEntry | T.AdjectiveEntry;
pattern: T.InflectionPattern, 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}
/>
}; };
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"> export default function InflectionPatterns({
// {possibleCorrect.map(humanReadableTense).join(" or ")} inChapter,
// </div>) id,
return <div> link,
<p className="lead">{categories.find(c => c.value === question.pattern)?.label}</p> level,
</div>; }: {
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 { useState } from "react";
import { import { comparePs } from "../../lib/game-utils";
comparePs,
} from "../../lib/game-utils";
import GameCore from "../GameCore"; import GameCore from "../GameCore";
import { import {
Types as T, Types as T,
defaultTextOptions as opts, defaultTextOptions as opts,
makeNounSelection, makeNounSelection,
randFromArray, randFromArray,
flattenLengths, randomPerson,
randomPerson, InlinePs,
InlinePs, grammarUnits,
grammarUnits, renderVP,
renderVP, makeVPSelectionState,
makeVPSelectionState, compileVP,
compileVP, isInvalidSubjObjCombo,
blockUtils, blank,
concatPsString, kidsBlank,
isInvalidSubjObjCombo, isPashtoScript,
removeFVarients,
getEnglishVerb,
RootsAndStems,
getVerbInfo,
defaultTextOptions,
humanReadableVerbForm,
blank,
kidsBlank,
isPashtoScript,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { isPastTense, isThirdPerson } from "@lingdocs/ps-react"; import { isPastTense, isThirdPerson } from "@lingdocs/ps-react";
import { maybeShuffleArray } from "../../lib/shuffle-array"; 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 { baParticle } from "@lingdocs/ps-react/dist/lib/src/grammar-units";
import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs"; import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs";
import { makePool } from "../../lib/pool"; import { makePool } from "../../lib/pool";
import { wordQuery } from "../../words/words"; import { wordQuery } from "../../words/words";
import { isImperativeTense } from "@lingdocs/ps-react/dist/lib/src/type-predicates"; import { isImperativeTense } from "@lingdocs/ps-react/dist/lib/src/type-predicates";
import { getVerbPs, verbHasBa, QuestionDisplay } from "./VerbGame";
const kidsColor = "#017BFE"; const kidsColor = "#017BFE";
@ -43,311 +32,331 @@ const amount = 12;
const timeLimit = 160; const timeLimit = 160;
type Question = { type Question = {
rendered: T.VPRendered, tense: T.VerbFormName;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>, e?: string[] }, verb: T.VerbEntry;
negative: boolean;
rendered: T.VPRendered;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>; e?: string[] };
}; };
const transitivePastVerbs = wordQuery("verbs", [ const transitivePastVerbs = wordQuery("verbs", [
"leedul", "leedul",
"wahul", "wahul",
"khoRul", "khoRul",
"shărmawul", "shărmawul",
"pejzandul", "pejzandul",
"taRul", "taRul",
]); ]);
const verbs = wordQuery("verbs", [ const verbs = wordQuery("verbs", [
"leekul", "leekul",
"wahul", "wahul",
"leedul", "leedul",
"awredul", "awredul",
"khoRul", "khoRul",
"akhistul", "akhistul",
"katul", "katul",
"lwedul", "lwedul",
]); ]);
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"puxtoon", "puxtoon",
"Ustaaz", "Ustaaz",
"DaakTar", "DaakTar",
"halik", "halik",
]); ]);
const persons: T.Person[] = [ const persons: T.Person[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
];
type PerfectGameLevel = { type PerfectGameLevel = {
/* 1 is just a single verb, 2 picks a random verb for every question */ /* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2, level: 1 | 2;
type: "intransitive" | "transitive-intransitive" | "all-tenses", type: "intransitive" | "transitive-intransitive" | "all-tenses";
} };
type VerbPoolName = "basic" | "transitivePast" | "intransitivePast" | "mixedPast" | "mixedAll"; type VerbPoolName =
| "basic"
| "transitivePast"
| "intransitivePast"
| "mixedPast"
| "mixedAll";
type LevelInfo = { type LevelInfo = {
description: string | JSX.Element, description: string | JSX.Element;
tense: T.PerfectTense | "allTenses", tense: T.PerfectTense | "allTenses";
pool: VerbPoolName, pool: VerbPoolName;
} };
const levelInfos: Record<PerfectGameLevel["type"], LevelInfo> = { const levelInfos: Record<PerfectGameLevel["type"], LevelInfo> = {
"intransitive": { intransitive: {
description: "present perfect form of the verb", description: "present perfect form of the verb",
tense: "presentPerfect", tense: "presentPerfect",
pool: "intransitivePast", pool: "intransitivePast",
}, },
"transitive-intransitive": { "transitive-intransitive": {
description: "present perfect form of the verb", description: "present perfect form of the verb",
tense: "presentPerfect", tense: "presentPerfect",
pool: "mixedPast", pool: "mixedPast",
}, },
"all-tenses": { "all-tenses": {
description: "correct perfect form of the verb", description: "correct perfect form of the verb",
tense: "allTenses", tense: "allTenses",
pool: "mixedPast", pool: "mixedPast",
}, },
} };
// TODO: Level where you create the formulas (seperate file) // TODO: Level where you create the formulas (seperate file)
// level where you choose the right situation // level where you choose the right situation
const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }: { const VerbGame: GameSubCore<PerfectGameLevel> = ({
inChapter: boolean, id,
id: string, link,
link: string, level,
level: PerfectGameLevel, inChapter,
}) => { }: {
const levelInfo = levelInfos[level.type]; inChapter: boolean;
const personPool = makePool(persons); id: string;
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = { link: string;
basic: makePool(verbs, 15), level: PerfectGameLevel;
transitivePast: makePool(transitivePastVerbs, 15), }) => {
intransitivePast: makePool(intransitivePastVerbs, 15), const levelInfo = levelInfos[level.type];
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15), const personPool = makePool(persons);
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15), 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", function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete {
"pastPerfect", "futurePerfect", "wouldBePerfect", "pastSubjunctivePerfect", function personToNPSelection(p: T.Person): T.NPSelection {
"wouldHaveBeenPerfect", if (isThirdPerson(p)) {
]);
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 { return {
...n, type: "NP",
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender, selection: randFromArray([
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number, () => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
}; };
}
return {
type: "NP",
selection: makePronounS(p),
};
} }
function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete { function makePronounS(p: T.Person): T.PronounSelection {
function personToNPSelection(p: T.Person): T.NPSelection { return {
if (isThirdPerson(p)) { type: "pronoun",
return { person: p,
type: "NP", distance: randFromArray(["far", "near", "far"]),
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,
};
} }
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>) { function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>(""); const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false); const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => { const handleInput = ({
if (value === "به " || value === "به ") { target: { value },
setWithBa(true); }: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(""); if (value === "به " || value === "به ") {
return; setWithBa(true);
} setAnswer("");
setAnswer(value); return;
} }
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { setAnswer(value);
e.preventDefault(); };
const correct = comparePs(answer, getVerbPs(question.rendered)) const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
&& (withBa === verbHasBa(question.rendered)); e.preventDefault();
if (correct) { const correct =
setAnswer(""); comparePs(answer, getVerbPs(question.rendered)) &&
} withBa === verbHasBa(question.rendered);
callback(correct); if (correct) {
} setAnswer("");
// useEffect(() => { }
// if (level === "allProduce") setWithBa(false); callback(correct);
// }, [question]); };
return <div> // useEffect(() => {
<QuestionDisplay question={question} userAnswer={{ // if (level === "allProduce") setWithBa(false);
withBa, // }, [question]);
answer, return (
}} /> <div>
<form onSubmit={handleSubmit}> <QuestionDisplay
{level.type === "all-tenses" && <div className="form-check mt-1"> question={question}
<input userAnswer={{
id="baCheckbox" withBa,
className="form-check-input" answer,
type="checkbox" }}
checked={withBa} />
onChange={e => setWithBa(e.target.checked)} <form onSubmit={handleSubmit}>
/> {level.type === "all-tenses" && (
<label className="form-check-label text-muted" htmlFor="baCheckbox"> <div className="form-check mt-1">
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span> <input
</label> id="baCheckbox"
</div>} className="form-check-input"
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}> type="checkbox"
<input checked={withBa}
type="text" onChange={(e) => setWithBa(e.target.checked)}
className="form-control" />
autoComplete="off" <label
autoCapitalize="off" className="form-check-label text-muted"
spellCheck="false" htmlFor="baCheckbox"
dir="auto" >
value={answer} with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs>{" "}
onChange={handleInput} in the <span style={{ color: kidsColor }}>kids' section</span>
/> </label>
</div> </div>
<div className="text-center my-2"> )}
{/* <div> */} <div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<button className="btn btn-primary" type="submit">submit </button> <input
{/* </div> */} type="text"
{/* <div className="text-muted small text-center mt-2"> 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 Type <kbd>Enter</kbd> to check
</div> */} </div> */}
</div> </div>
</form> </form>
</div> </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>
}
return <GameCore function Instructions() {
inChapter={inChapter} const desc = levelInfo.description;
studyLink={link} return (
getQuestion={getQuestion} <div>
id={id} <p className="lead">
Display={Display} Write the {desc} verb to complete the phrase
DisplayCorrectAnswer={DisplayCorrectAnswer} {desc ? "" : " (all tenses)"}
timeLimit={timeLimit} </p>
amount={amount} </div>
Instructions={Instructions} );
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/> />
);
}; };
export default VerbGame; export default VerbGame;
function QuestionDisplay({ question, userAnswer }: { function DisplayCorrectAnswer({
question: Question, question,
userAnswer: { withBa: boolean, answer: string }, }: {
}) { question: Question;
const ps = addUserAnswer( }): JSX.Element {
userAnswer, return (
flattenLengths(question.phrase.ps)[0] <div>
); <div>
const v = getVerbFromBlocks(question.rendered.blocks); {getVerbPs(question.rendered).reduce(
const vEntry = v.block.verb.entry; (accum, curr, i): JSX.Element[] => [
const infoV = getVerbInfo(vEntry) ...accum,
const info = "grammaticallyTransitive" in infoV ...(i > 0 ? [<span className="text-muted"> or </span>] : []),
? infoV.grammaticallyTransitive <span key={i}>
: "stative" in infoV {curr.p} - {curr.f}
? infoV.stative </span>,
: infoV; ],
return <div className="mb-3 mt-2"> [] as JSX.Element[]
<div className="mb-2"> )}
<div>{vEntry.p} - {removeFVarients(vEntry.f)} <span className="text-muted">{vEntry.c}</span></div> </div>
<div>"{getEnglishVerb(vEntry)}"</div> <div>
</div> <strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a{" "}
<details style={{ marginBottom: 0 }}> <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids'
<summary>🌳 Show roots and stems</summary> section.
<RootsAndStems info={info} textOptions={defaultTextOptions} /> </div>
</details> </div>
<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 modExs(exs: T.PsString[], withBa: boolean): { p: JSX.Element, f: JSX.Element }[] { // function modExs(exs: T.PsString[], withBa: boolean): { p: JSX.Element, f: JSX.Element }[] {
// return exs.map(ps => { // 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 addUserAnswer(
function addBa(x: T.PsString) { a: { withBa: boolean; answer: string },
if (!a.withBa) return x; ps: T.PsString
return { ): T.PsString {
p: x.p.replace(kidsBlank.p, baParticle.p), function addBa(x: T.PsString) {
f: x.f.replace(kidsBlank.f, baParticle.f), if (!a.withBa) return x;
}
}
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;
return { return {
...vps, p: x.p.replace(kidsBlank.p, baParticle.p),
verb: { f: x.f.replace(kidsBlank.f, baParticle.f),
...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,
},
},
]),
}; };
}
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[] { function makeVPS({
const { perfectiveHead, verb } = blockUtils.getVerbAndHeadFromBlocks(blocks); verb,
const mU = blocks[0].find(b => b.block.type === "negative" && b.block.imperative); king,
function vBase() { servant,
if (!perfectiveHead) { tense,
return flattenLengths(verb.block.ps); defaultTransitivity,
} }: {
return flattenLengths(verb.block.ps).map(r => concatPsString(perfectiveHead.ps, r)); verb: T.VerbEntry;
} king: T.NPSelection;
if (mU) { servant: T.NPSelection;
return vBase().map(b => concatPsString({ p: "مه", f: "mú" }, " ", b)); tense: T.PerfectTense;
} defaultTransitivity: "transitive" | "grammatically transitive";
return vBase(); }): 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 { useState } from "react";
import { import { comparePs } from "../../lib/game-utils";
comparePs,
} from "../../lib/game-utils";
import GameCore from "../GameCore"; import GameCore from "../GameCore";
import { import {
Types as T, Types as T,
defaultTextOptions as opts, defaultTextOptions as opts,
makeNounSelection, makeNounSelection,
randFromArray, randFromArray,
flattenLengths, flattenLengths,
randomPerson, randomPerson,
InlinePs, InlinePs,
grammarUnits, grammarUnits,
renderVP, renderVP,
makeVPSelectionState, makeVPSelectionState,
compileVP, compileVP,
blockUtils, isInvalidSubjObjCombo,
concatPsString, removeFVarients,
isInvalidSubjObjCombo, getEnglishVerb,
removeFVarients, RootsAndStems,
getEnglishVerb, getVerbInfo,
RootsAndStems, defaultTextOptions,
getVerbInfo, humanReadableVerbForm,
defaultTextOptions, blank,
humanReadableVerbForm, kidsBlank,
blank, isPashtoScript,
kidsBlank, combineIntoText,
isPashtoScript,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { isPastTense, isThirdPerson } from "@lingdocs/ps-react"; import { isPastTense, isThirdPerson } from "@lingdocs/ps-react";
import { maybeShuffleArray } from "../../lib/shuffle-array"; 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 { baParticle } from "@lingdocs/ps-react/dist/lib/src/grammar-units";
import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs"; import { intransitivePastVerbs } from "../../content/verbs/basic-present-verbs";
import { makePool } from "../../lib/pool"; import { makePool } from "../../lib/pool";
@ -43,447 +39,519 @@ const amount = 12;
const timeLimit = 140; const timeLimit = 140;
type Question = { type Question = {
rendered: T.VPRendered, tense: T.VerbFormName;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>, e?: string[] }, verb: T.VerbEntry;
negative: boolean;
rendered: T.VPRendered;
phrase: { ps: T.SingleOrLengthOpts<T.PsString[]>; e?: string[] };
}; };
const transitivePastVerbs = wordQuery("verbs", [ const transitivePastVerbs = wordQuery("verbs", [
"leedul", "leedul",
"wahul", "wahul",
"khoRul", "khoRul",
"shărmawul", "shărmawul",
"pejzandul", "pejzandul",
"taRul", "taRul",
]); ]);
const verbs = wordQuery("verbs", [ const verbs = wordQuery("verbs", [
"leekul", "leekul",
"wahul", "wahul",
"leedul", "leedul",
"awredul", "awredul",
"khoRul", "khoRul",
"akhistul", "akhistul",
"katul", "katul",
"lwedul", "lwedul",
]); ]);
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"puxtoon", "puxtoon",
"Ustaaz", "Ustaaz",
"DaakTar", "DaakTar",
"halik", "halik",
]); ]);
const persons: T.Person[] = [ const persons: T.Person[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
];
const secondPersons = [ const secondPersons = [2, 3, 8, 9];
T.Person.SecondSingMale,
T.Person.SecondSingFemale,
T.Person.SecondPlurMale,
T.Person.SecondPlurFemale,
];
type VerbGameLevel = { type VerbGameLevel = {
/* 1 is just a single verb, 2 picks a random verb for every question */ /* 1 is just a single verb, 2 picks a random verb for every question */
level: 1 | 2, level: 1 | 2;
type: "presentVerb" | "subjunctiveVerb" type:
| "futureVerb" | "imperative" | "intransitivePerfectivePast" | "presentVerb"
| "intransitiveImperfectivePast" | "transitivePerfectivePast" | "transitiveImperfectivePast" | "subjunctiveVerb"
| "allPast" | "habitualPast" | "allTenses"; | "futureVerb"
} | "imperative"
type VerbPoolName = "basic" | "transitivePast" | "intransitivePast" | "mixedPast" | "mixedAll"; | "intransitivePerfectivePast"
| "intransitiveImperfectivePast"
| "transitivePerfectivePast"
| "transitiveImperfectivePast"
| "allPast"
| "habitualPast"
| "allTenses";
};
type VerbPoolName =
| "basic"
| "transitivePast"
| "intransitivePast"
| "mixedPast"
| "mixedAll";
function selectVerbPool({ type }: VerbGameLevel): VerbPoolName { function selectVerbPool({ type }: VerbGameLevel): VerbPoolName {
return type === "presentVerb" return type === "presentVerb"
? "basic" ? "basic"
: type === "futureVerb" : type === "futureVerb"
? "basic" ? "basic"
: type === "subjunctiveVerb" : type === "subjunctiveVerb"
? "basic" ? "basic"
: type === "imperative" : type === "imperative"
? "basic" ? "basic"
: type === "intransitiveImperfectivePast" : type === "intransitiveImperfectivePast"
? "intransitivePast" ? "intransitivePast"
: type === "intransitivePerfectivePast" : type === "intransitivePerfectivePast"
? "intransitivePast" ? "intransitivePast"
: type === "transitiveImperfectivePast" : type === "transitiveImperfectivePast"
? "transitivePast" ? "transitivePast"
: type === "transitivePerfectivePast" : type === "transitivePerfectivePast"
? "transitivePast" ? "transitivePast"
: type === "habitualPast" || type === "allPast" : type === "habitualPast" || type === "allPast"
? "mixedPast" ? "mixedPast"
: "mixedAll"; : "mixedAll";
} }
// TODO: Level where you create the formulas (seperate file) // TODO: Level where you create the formulas (seperate file)
// level where you choose the right situation // level where you choose the right situation
const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: { const VerbGame: GameSubCore<VerbGameLevel> = ({
inChapter: boolean, id,
id: string, link,
link: string, level,
level: VerbGameLevel, inChapter,
}) => { }: {
const personPool = makePool(level.type === "imperative" inChapter: boolean;
? secondPersons id: string;
: persons link: string;
); level: VerbGameLevel;
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = { }) => {
basic: makePool(verbs, 15), const personPool = makePool(
transitivePast: makePool(transitivePastVerbs, 15), level.type === "imperative" ? secondPersons : persons
intransitivePast: makePool(intransitivePastVerbs, 15), );
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15), const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15), 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 function makeRandomVPS(
? () => oneVerb tense: T.VerbTense | T.ImperativeTense
: () => verbPools[selectVerbPool(level)](); ): T.VPSelectionComplete {
function makeRandomNoun(): T.NounSelection { function personToNPSelection(p: T.Person): T.NPSelection {
const n = makeNounSelection(randFromArray(nouns), undefined); if (isThirdPerson(p)) {
return { return {
...n, type: "NP",
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender, selection: randFromArray([
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number, () => makePronounS(p),
makeRandomNoun,
() => makePronounS(p),
])(),
}; };
}
return {
type: "NP",
selection: makePronounS(p),
};
} }
function makeRandomVPS(tense: T.VerbTense | T.ImperativeTense): T.VPSelectionComplete { function makePronounS(p: T.Person): T.PronounSelection {
function personToNPSelection(p: T.Person): T.NPSelection { return {
if (isThirdPerson(p)) { type: "pronoun",
return { person: p,
type: "NP", distance: randFromArray(["far", "near", "far"]),
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,
};
} }
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>) { function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>(""); const [answer, setAnswer] = useState<string>("");
const [withBa, setWithBa] = useState<boolean>(false); const [withBa, setWithBa] = useState<boolean>(false);
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => { const handleInput = ({
if (value === "به " || value === "به ") { target: { value },
setWithBa(true); }: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(""); if (value === "به " || value === "به ") {
return; setWithBa(true);
} setAnswer("");
setAnswer(value); return;
} }
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { setAnswer(value);
e.preventDefault(); };
const correct = comparePs(answer, getVerbPs(question.rendered)) const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
&& (withBa === verbHasBa(question.rendered)); e.preventDefault();
if (correct) { const correct =
setAnswer(""); comparePs(answer, getVerbPs(question.rendered)) &&
} withBa === verbHasBa(question.rendered);
callback(correct); if (correct) {
} setAnswer("");
// useEffect(() => { }
// if (level === "allProduce") setWithBa(false); callback(correct);
// }, [question]); };
return <div> // useEffect(() => {
<QuestionDisplay question={question} userAnswer={{ // if (level === "allProduce") setWithBa(false);
withBa, // }, [question]);
answer, return (
}} /> <div>
<form onSubmit={handleSubmit}> <QuestionDisplay
<div className="form-check mt-1"> question={question}
<input userAnswer={{
id="baCheckbox" withBa,
className="form-check-input" answer,
type="checkbox" }}
checked={withBa} />
onChange={e => setWithBa(e.target.checked)} <form onSubmit={handleSubmit}>
/> <div className="form-check mt-1">
<label className="form-check-label text-muted" htmlFor="baCheckbox"> <input
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span> id="baCheckbox"
</label> className="form-check-input"
</div> type="checkbox"
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}> checked={withBa}
<input onChange={(e) => setWithBa(e.target.checked)}
type="text" />
className="form-control" <label className="form-check-label text-muted" htmlFor="baCheckbox">
autoComplete="off" with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in
autoCapitalize="off" the <span style={{ color: kidsColor }}>kids' section</span>
spellCheck="false" </label>
dir="auto" </div>
value={answer} <div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
onChange={handleInput} <input
/> type="text"
</div> className="form-control"
<div className="text-center my-2"> autoComplete="off"
{/* <div> */} autoCapitalize="off"
<button className="btn btn-primary" type="submit">submit </button> spellCheck="false"
{/* </div> */} dir="auto"
{/* <div className="text-muted small text-center mt-2"> 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 Type <kbd>Enter</kbd> to check
</div> */} </div> */}
</div> </div>
</form> </form>
</div> </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>
}
return <GameCore function Instructions() {
inChapter={inChapter} const desc = levelToDescription(level);
studyLink={link} return (
getQuestion={getQuestion} <div>
id={id} <p className="lead">
Display={Display} Write the {desc} verb to complete the phrase
DisplayCorrectAnswer={DisplayCorrectAnswer} {desc ? "" : " (all tenses)"}
timeLimit={timeLimit} </p>
amount={amount} </div>
Instructions={Instructions} );
}
return (
<GameCore
inChapter={inChapter}
studyLink={link}
getQuestion={getQuestion}
id={id}
Display={Display}
DisplayCorrectAnswer={DisplayCorrectAnswer}
timeLimit={timeLimit}
amount={amount}
Instructions={Instructions}
/> />
);
}; };
export default VerbGame; export default VerbGame;
function QuestionDisplay({ question, userAnswer }: { export function QuestionDisplay({
question: Question, question,
userAnswer: { withBa: boolean, answer: string }, userAnswer,
}: {
question: Question;
userAnswer: { withBa: boolean; answer: string };
}) { }) {
const ps = addUserAnswer( const ps = addUserAnswer(userAnswer, flattenLengths(question.phrase.ps)[0]);
userAnswer, const infoV = getVerbInfo(question.verb.entry, question.verb.complement);
flattenLengths(question.phrase.ps)[0] const info =
); "grammaticallyTransitive" in infoV
const v = getVerbFromBlocks(question.rendered.blocks); ? infoV.grammaticallyTransitive
const vEntry = v.block.verb.entry; : "stative" in infoV
const infoV = getVerbInfo(vEntry) ? infoV.stative
const info = "grammaticallyTransitive" in infoV : infoV;
? infoV.grammaticallyTransitive return (
: "stative" in infoV <div className="mb-3">
? infoV.stative <div className="mb-2">
: infoV; {question.verb.entry.p} - {removeFVarients(question.verb.entry.f)} "
return <div className="mb-3"> {getEnglishVerb(question.verb.entry)}"
<div className="mb-2">{vEntry.p} - {removeFVarients(vEntry.f)} "{getEnglishVerb(vEntry)}"</div> </div>
<details style={{ marginBottom: 0 }}> <details style={{ marginBottom: 0 }}>
<summary>🌳 Show roots and stems</summary> <summary>🌳 Show roots and stems</summary>
<RootsAndStems info={info} textOptions={defaultTextOptions} /> <RootsAndStems info={info} textOptions={defaultTextOptions} />
</details> </details>
<div dir="rtl">{ps.p}</div> <div dir="rtl">{ps.p}</div>
<div dir="ltr">{ps.f}</div> <div dir="ltr">{ps.f}</div>
{question.phrase.e && <div className="text-muted mt-2"> {question.phrase.e && (
{question.phrase.e.map(x => <div key={Math.random()}> <div className="text-muted mt-2">
{x} {question.phrase.e.map((x) => (
</div>)} <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[])}
</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 DisplayCorrectAnswer({
function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString): T.PsString { question,
function addBa(x: T.PsString) { }: {
if (!a.withBa) return x; question: Question;
return { }): JSX.Element {
p: x.p.replace(kidsBlank.p, baParticle.p), return (
f: x.f.replace(kidsBlank.f, baParticle.f), <div>
} <div>
} {getVerbPs(question.rendered).reduce(
function addAnswer(x: T.PsString): T.PsString { (accum, curr, i): JSX.Element[] => [
if (!a.answer) return x; ...accum,
const field = isPashtoScript(a.answer) ? "p" : "f"; ...(i > 0 ? [<span className="text-muted"> or </span>] : []),
return { <span key={i}>
...x, {curr.p} - {curr.f}
[field]: x[field].replace(blank[field], a.answer), </span>,
}; ],
} [] as JSX.Element[]
return addAnswer(addBa(ps)); )}
</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 { function levelToDescription({ type }: VerbGameLevel): string {
return type === "presentVerb" return type === "presentVerb"
? "present" ? "present"
: type === "subjunctiveVerb" : type === "subjunctiveVerb"
? "subjunctive" ? "subjunctive"
: type === "futureVerb" : type === "futureVerb"
? "imperfective future or perfective future" ? "imperfective future or perfective future"
: type === "intransitivePerfectivePast" : type === "intransitivePerfectivePast"
? "simple past intransitive" ? "simple past intransitive"
: type === "intransitiveImperfectivePast" : type === "intransitiveImperfectivePast"
? "continuous past intransitive" ? "continuous past intransitive"
: type === "transitiveImperfectivePast" : type === "transitiveImperfectivePast"
? "continuous past transitive" ? "continuous past transitive"
: type === "transitivePerfectivePast" : type === "transitivePerfectivePast"
? "simple past transitive" ? "simple past transitive"
: type === "imperative" : type === "imperative"
? "imperfective imperative or perfective imperative" ? "imperfective imperative or perfective imperative"
: type === "allPast" : type === "allPast"
? "past tense" ? "past tense"
: type === "habitualPast" : type === "habitualPast"
? "habitual past" ? "habitual past"
// : type === "allTenses" : // : type === "allTenses"
: ""; "";
} }
function levelToTense({ type }: VerbGameLevel): T.VerbTense | T.ImperativeTense { function levelToTense({
return type === "presentVerb" type,
? type }: VerbGameLevel): T.VerbTense | T.ImperativeTense {
: type === "subjunctiveVerb" return type === "presentVerb"
? type ? type
: type === "futureVerb" : type === "subjunctiveVerb"
? randFromArray(["perfectiveFuture", "imperfectiveFuture"]) ? type
: type === "imperative" : type === "futureVerb"
? randFromArray(["perfectiveImperative", "imperfectiveImperative"]) ? randFromArray(["perfectiveFuture", "imperfectiveFuture"])
: (type === "intransitiveImperfectivePast" || type === "transitiveImperfectivePast") : type === "imperative"
? "imperfectivePast" ? randFromArray(["perfectiveImperative", "imperfectiveImperative"])
: (type === "intransitivePerfectivePast" || type === "transitivePerfectivePast") : type === "intransitiveImperfectivePast" ||
? "perfectivePast" type === "transitiveImperfectivePast"
: type === "habitualPast" ? "imperfectivePast"
? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"]) : type === "intransitivePerfectivePast" ||
// : type === "allPast" type === "transitivePerfectivePast"
: randFromArray([ ? "perfectivePast"
"perfectivePast", : type === "habitualPast"
"imperfectivePast", ? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"])
"habitualPerfectivePast", : // : type === "allPast"
"habitualImperfectivePast", randFromArray([
]); "perfectivePast",
"imperfectivePast",
"habitualPerfectivePast",
"habitualImperfectivePast",
]);
} }
function makeVPS({ verb, king, servant, tense, defaultTransitivity }: { function makeVPS({
verb: T.VerbEntry, verb,
king: T.NPSelection, king,
servant: T.NPSelection, servant,
tense: T.VerbTense | T.ImperativeTense, tense,
defaultTransitivity: "transitive" | "grammatically transitive" defaultTransitivity,
}: {
verb: T.VerbEntry;
king: T.NPSelection;
servant: T.NPSelection;
tense: T.VerbTense | T.ImperativeTense;
defaultTransitivity: "transitive" | "grammatically transitive";
}): T.VPSelectionComplete { }): T.VPSelectionComplete {
const vps = makeVPSelectionState(verb); const vps = makeVPSelectionState(verb);
const transitivity = (vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity) const transitivity =
? defaultTransitivity vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity
: vps.verb.transitivity; ? defaultTransitivity
const ergative = vps.verb.transitivity !== "intransitive" && isPastTense(tense); : vps.verb.transitivity;
const subject = ergative ? servant : king; const ergative =
const object = ergative ? king : servant; vps.verb.transitivity !== "intransitive" && isPastTense(tense);
return { const subject = ergative ? servant : king;
...vps, const object = ergative ? king : servant;
verb: { return {
...vps.verb, ...vps,
negative: isImperativeTense(tense) verb: {
? randFromArray([false, false, true]) ...vps.verb,
: false, negative: isImperativeTense(tense)
transitivity, ? randFromArray([false, false, true])
tense, : false,
transitivity,
tense,
},
blocks: maybeShuffleArray([
{
key: Math.random(),
block: {
type: "subjectSelection",
selection: subject,
}, },
blocks: maybeShuffleArray([ },
{ {
key: Math.random(), key: Math.random(),
block: { block: {
type: "subjectSelection", type: "objectSelection",
selection: subject, selection:
}, transitivity === "intransitive"
}, ? "none"
{ : transitivity === "grammatically transitive"
key: Math.random(), ? 10
block: { : object,
type: "objectSelection", },
selection: transitivity === "intransitive" },
? "none" ]),
: transitivity === "grammatically transitive" };
? T.Person.ThirdPlurMale
: object,
},
},
]),
};
} }
function getVerbPs({ blocks }: T.VPRendered): T.PsString[] { export function getVerbPs({ blocks }: T.VPRendered): T.PsString[] {
const { perfectiveHead, verb } = blockUtils.getVerbAndHeadFromBlocks(blocks); const verbBlocks = blocks.map((x) =>
const mU = blocks[0].find(b => b.block.type === "negative" && b.block.imperative); x.filter(
function vBase() { (b) =>
if (!perfectiveHead) { b.block.type === "PH" ||
return flattenLengths(verb.block.ps); b.block.type === "VB" ||
} b.block.type === "NComp" ||
return flattenLengths(verb.block.ps).map(r => concatPsString(perfectiveHead.ps, r)); b.block.type === "welded" ||
} b.block.type === "negative"
if (mU) { )
return vBase().map(b => concatPsString({ p: "مه", f: "mú" }, " ", b)); );
} return combineIntoText(verbBlocks, 0);
return vBase();
} }
function verbHasBa({ blocks }: T.VPRendered): boolean { export function verbHasBa({ kids }: T.VPRendered): boolean {
const verb = blockUtils.getVerbFromBlocks(blocks); return kids.some((k) => k.kid.type === "ba");
return verb.block.hasBa; }
}

View File

@ -1,119 +1,125 @@
import { import {
Types as T, Types as T,
typePredicates as tp, typePredicates as tp,
makeNounSelection, makeNounSelection,
randFromArray, randFromArray,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { makePool } from "../../lib/pool"; import { makePool } from "../../lib/pool";
import { wordQuery } from "../../words/words"; import { wordQuery } from "../../words/words";
const pronouns: T.Person[] = [ const pronouns: T.Person[] = [0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11];
0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11,
];
const tenses: T.EquativeTense[] = [ const tenses: T.EquativeTense[] = [
"present", "habitual", "subjunctive", "future", "past", "wouldBe", "pastSubjunctive", "wouldHaveBeen" "present",
"habitual",
"subjunctive",
"future",
"past",
"wouldBe",
"pastSubjunctive",
"wouldHaveBeen",
]; ];
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"Ustaaz", "Ustaaz",
"puxtoon", "puxtoon",
"DaakTar", "DaakTar",
"halik", "halik",
]); ]);
const adjectives = wordQuery("adjectives", [ const adjectives = wordQuery("adjectives", [
"stuRey", "stuRay",
"ghuT", "ghuT",
"xu", "xu",
"khufa", "khufa",
"takRa", "takRa",
"puT", "puT",
"tuGey", "tuGay",
"koochney", "koochnay",
"zoR", "zoR",
"moR", "moR",
]); ]);
const adverbs = wordQuery("adverbs", [ const adverbs = wordQuery("adverbs", ["دلته", "هلته"]);
"دلته",
"هلته",
]);
const locAdverbs = adverbs.filter(tp.isLocativeAdverbEntry); const locAdverbs = adverbs.filter(tp.isLocativeAdverbEntry);
export function randomEPSPool(l: T.EquativeTense | "allTenses") { export function randomEPSPool(l: T.EquativeTense | "allTenses") {
const pronounPool = makePool(pronouns); const pronounPool = makePool(pronouns);
const nounPool = makePool(nouns, 20); const nounPool = makePool(nouns, 20);
const predPool = makePool([...adjectives, ...locAdverbs], 20); const predPool = makePool([...adjectives, ...locAdverbs], 20);
const tensePool = makePool(tenses, 15); const tensePool = makePool(tenses, 15);
function makeRandPronoun(): T.PronounSelection { function makeRandPronoun(): T.PronounSelection {
return { return {
type: "pronoun", type: "pronoun",
distance: "far", distance: "far",
person: pronounPool(), person: pronounPool(),
}; };
} }
function makeRandomNoun(): T.NounSelection { function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(nounPool(), undefined); const n = makeNounSelection(nounPool(), undefined);
return { return {
...n, ...n,
gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender, gender: n.genderCanChange ? randFromArray(["masc", "fem"]) : n.gender,
number: n.numberCanChange ? randFromArray(["singular", "plural"]) : n.number, number: n.numberCanChange
}; ? randFromArray(["singular", "plural"])
} : n.number,
return function makeRandomEPS(): T.EPSelectionComplete { };
const subj: T.NPSelection = { }
type: "NP", return function makeRandomEPS(): T.EPSelectionComplete {
selection: randFromArray([ const subj: T.NPSelection = {
makeRandPronoun, type: "NP",
makeRandPronoun, selection: randFromArray([
makeRandomNoun, makeRandPronoun,
makeRandPronoun, makeRandPronoun,
])(), makeRandomNoun,
}; makeRandPronoun,
const pred = predPool(); ])(),
const tense = (l === "allTenses") };
? tensePool() const pred = predPool();
: l; const tense = l === "allTenses" ? tensePool() : l;
return makeEPS(subj, pred, tense); return makeEPS(subj, pred, tense);
} };
} }
function makeEPS(
function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry | T.LocativeAdverbEntry, tense: T.EquativeTense): T.EPSelectionComplete { subject: T.NPSelection,
return { predicate: T.AdjectiveEntry | T.LocativeAdverbEntry,
blocks: [ tense: T.EquativeTense
{ ): T.EPSelectionComplete {
key: Math.random(), return {
block: { blocks: [
type: "subjectSelection", {
selection: subject, 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,
},
},
}, },
equative: { },
tense, ],
negative: false, predicate: {
}, type: "predicateSelection",
omitSubject: false, 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 { import {
Types as T, Types as T,
makeNounSelection, makeNounSelection,
makeAdjectiveSelection, makeAdjectiveSelection,
randFromArray, randFromArray,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import { makePool } from "../pool"; import { makePool } from "../pool";
import { wordQuery } from "../../words/words"; import { wordQuery } from "../../words/words";
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"Ustaaz", "Ustaaz",
"puxtoon", "puxtoon",
"DaakTar", "DaakTar",
"halik", "halik",
"tajriba", "tajriba",
"melma", "melma",
"khabura", "khabura",
"kitaab", "kitaab",
"oobu", "oobu",
"korba", "korba",
"shpoon", "shpoon",
"gaawanDey", "gaawanDay",
"lmasey", "lmasay",
"lobghaaRey", "lobghaaRay",
"sandurghaaRey", "sandurghaaRay",
"malgurey", "malguray",
"shpoonkey", "shpoonkay",
"khalk", "khalk",
"ghul", "ghul",
"khur", "khur",
]); ]);
const adjectives = wordQuery("adjectives", [ const adjectives = wordQuery("adjectives", [
"muR", "muR",
"jzwundey", "jzwunday",
"sheen", "sheen",
"soor", "soor",
"rixtooney", "rixtoonay",
"pakhwaaney", "pakhwaanay",
"stuRey", "stuRay",
"ooGd", "ooGd",
"ghuT", "ghuT",
"xu", "xu",
"khufa", "khufa",
"takRa", "takRa",
"puT", "puT",
"tuGey", "tuGay",
"koochney", "koochnay",
"wroostey", "wroostay",
"pradey", "praday",
"treew", "treew",
"zoR", "zoR",
"moR", "moR",
"treekh", "treekh",
"oom", "oom",
"khoG", "khoG",
"droond", "droond",
"loomRey", "loomRay",
"Roond", "Roond",
"prot", "prot",
"soR", "soR",
"post", "post",
"pokh", "pokh",
"rooN", "rooN",
"woR", "woR",
"tod", "tod",
"khpor", "khpor",
"kooN", "kooN",
"koG", "koG",
"zeeG", "zeeG",
"naast", "naast",
]); ]);
export function makeNPAdjGenerator(pluralsLevel: "none" | "low" | "high"): () => T.NPSelection { export function makeNPAdjGenerator(
const nounPool = makePool(nouns); pluralsLevel: "none" | "low" | "high"
const adjPool = makePool(adjectives); ): () => T.NPSelection {
const nounPool = makePool(nouns);
const adjPool = makePool(adjectives);
return () => { return () => {
const ns = makeNounSelection(nounPool(), undefined); const ns = makeNounSelection(nounPool(), undefined);
const selection: T.NounSelection = { const selection: T.NounSelection = {
...ns, ...ns,
adjectives: [makeAdjectiveSelection(adjPool())], adjectives: [makeAdjectiveSelection(adjPool())],
...(ns.numberCanChange && pluralsLevel !== "none") ? { ...(ns.numberCanChange && pluralsLevel !== "none"
number: randFromArray(pluralsLevel === "high" ? ["singular", "plural", "plural", "plural", "singular"] : ["singular", "plural", "singular"]), ? {
} : {}, number: randFromArray(
...ns.genderCanChange ? { pluralsLevel === "high"
gender: randFromArray(["masc", "fem", "fem", "fem", "masc"]), ? ["singular", "plural", "plural", "plural", "singular"]
} : {}, : ["singular", "plural", "singular"]
}; ),
return { }
type: "NP", : {}),
selection, ...(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" rambda "^6.7.0"
react-select "^5.2.2" react-select "^5.2.2"
"@lingdocs/ps-react@^5.7.13": "@lingdocs/ps-react@^6.0.2":
version "5.7.13" version "6.0.2"
resolved "https://npm.lingdocs.com/@lingdocs%2fps-react/-/ps-react-5.7.13.tgz#04ff75abdbda04a2ae26407eeb996055238105d3" resolved "https://npm.lingdocs.com/@lingdocs%2fps-react/-/ps-react-6.0.2.tgz#712f7620e1aa30d0ec1e1f7d0118be660cb4e01c"
integrity sha512-zhyEzcuc6M4rf7Vl4bByiNIvcPq7czO4MIuLvnByv6v2uOJtf1k5lF4VpXhsZf6Zw/1sYvPQBqh2BGTuZPKH1Q== integrity sha512-QuMOzdY45tXvL18BrykoP9x+NWl6sUQCQp1HRp+Q17jtf7oS55LGryQhZJMhom/A61NMvztYh5hiP+xoivQgUw==
dependencies: dependencies:
"@formkit/auto-animate" "^1.0.0-beta.3" "@formkit/auto-animate" "^1.0.0-beta.3"
classnames "^2.2.6" classnames "^2.2.6"
fp-ts "^2.16.0"
jsurl2 "^2.1.0" jsurl2 "^2.1.0"
lz-string "^1.4.4" lz-string "^1.4.4"
pbf "^3.2.1" pbf "^3.2.1"
@ -2669,6 +2670,11 @@ format@^0.2.0:
resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== 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: framesync@^4.0.0, framesync@^4.0.1:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/framesync/-/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a" resolved "https://registry.yarnpkg.com/framesync/-/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a"