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

@ -16,13 +16,15 @@ fetch("https://account.lingdocs.com/dictionary/entries", {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify({ ids: allTs }), body: JSON.stringify({ ids: allTs }),
}).then(res => res.json()).then(data => { })
.then((res) => res.json())
.then((data) => {
const content = ` 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);
@ -32,4 +34,3 @@ export default words;`;
console.log(data.notFound); console.log(data.notFound);
} }
}); });

View File

@ -13,102 +13,154 @@ import {
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>
),
body: (
<BasicVerbChart
passive={passive} passive={passive}
ability={ability} ability={ability}
verb={item} verb={item}
opts={opts} opts={opts}
tense={tense} 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 =
"stative" in c
? c.stative ? c.stative
: "grammaticallyTransitive" in c : "grammaticallyTransitive" in c
? c.grammaticallyTransitive ? c.grammaticallyTransitive
: c; : c;
const phrasesForTable = makeExamplePhrases(verb, tense, negative, length, voice, category); const phrasesForTable = makeExamplePhrases(
return <div> verb,
tense,
negative,
length,
voice,
category
);
return (
<div> <div>
{getEnglishVerb(verb.entry)} <div>{getEnglishVerb(verb.entry)}</div>
</div> {passive && (
{passive && <div className="my-2"> <div className="my-2">
<ButtonSelect <ButtonSelect
options={[{ options={[
{
label: "Active", label: "Active",
value: "active", value: "active",
}, { },
{
label: "Passive", label: "Passive",
value: "passive", value: "passive",
}]} },
]}
value={voice} value={voice}
handleChange={setVoice} handleChange={setVoice}
/> />
</div>} </div>
{ability && <div className="my-2"> )}
{ability && (
<div className="my-2">
<ButtonSelect <ButtonSelect
options={[{ options={[
{
label: "Basic", label: "Basic",
value: "basic", value: "basic",
}, { },
{
label: "Ability", label: "Ability",
value: "ability", value: "ability",
}]} },
]}
value={category} value={category}
handleChange={setCategory} handleChange={setCategory}
/> />
</div>} </div>
)}
<RootsAndStems <RootsAndStems
textOptions={opts} textOptions={opts}
info={category === "ability" info={
? (getAbilityRootsAndStems(conjugations.info)) category === "ability"
? getAbilityRootsAndStems(conjugations.info)
: voice === "passive" : voice === "passive"
? (getPassiveRootsAndStems(conjugations.info) || /* type safety */ conjugations.info) ? getPassiveRootsAndStems(conjugations.info) ||
/* type safety */ conjugations.info
: conjugations.info : conjugations.info
} }
hidePastParticiple={isPerfectTense(tense) ? false : true} hidePastParticiple={isPerfectTense(tense) ? false : true}
highlighted={[tenseToStem(tense)]} highlighted={[tenseToStem(tense)]}
/> />
<div className="my-3 d-flex flex-row justify-content-center"> <div className="my-3 d-flex flex-row justify-content-center">
{((isPastTense(tense) && !isPerfectTense(tense)) || category === "ability") && <div className="mx-2"> {((isPastTense(tense) && !isPerfectTense(tense)) ||
category === "ability") && (
<div className="mx-2">
<ButtonSelect <ButtonSelect
handleChange={setLength} handleChange={setLength}
value={length} value={length}
@ -118,7 +170,8 @@ function BasicVerbChart({ verb, opts, tense, passive, ability }: {
{ value: "short", label: "short" }, { value: "short", label: "short" },
]} ]}
/> />
</div>} </div>
)}
<div className="mx-2"> <div className="mx-2">
<ButtonSelect <ButtonSelect
handleChange={(value) => setNegative(value === "true")} handleChange={(value) => setNegative(value === "true")}
@ -139,6 +192,7 @@ function BasicVerbChart({ verb, opts, tense, passive, ability }: {
/> />
</div> </div>
</div> </div>
);
} }
function makeExamplePhrases( function makeExamplePhrases(
@ -147,9 +201,11 @@ function makeExamplePhrases(
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(
t: T.VerbTense | T.ImperativeTense | T.PerfectTense
): T.AbilityTense {
if (isImperativeTense(t)) { if (isImperativeTense(t)) {
throw new Error("can't have imperative tense with modal"); throw new Error("can't have imperative tense with modal");
} }
@ -160,41 +216,85 @@ function makeExamplePhrases(
} }
function makeSelection(person: T.Person): T.VPSelectionComplete { function makeSelection(person: T.Person): T.VPSelectionComplete {
return { return {
"blocks": [ blocks: [
{"key":Math.random(),"block":{"type":"subjectSelection","selection":{"type":"NP","selection":{"type":"pronoun","person": person,"distance":"far"}}}}, {
key: Math.random(),
block: {
type: "subjectSelection",
selection: {
type: "NP",
selection: { type: "pronoun", person: person, distance: "far" },
},
},
},
{ {
key: Math.random(), key: Math.random(),
// @ts-ignore // @ts-ignore
block: (verb.entry.c?.includes("intrans.") || voice === "passive") block:
? {"type":"objectSelection","selection":"none"} verb.entry.c?.includes("intrans.") || voice === "passive"
: {"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":[]}}}, ? { type: "objectSelection", selection: "none" }
: {
type: "objectSelection",
selection: {
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 10011,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [],
},
},
},
}, },
], ],
"verb":{ verb: {
"type":"verb", type: "verb",
verb, verb,
tense: category === "basic" ? tense : tenseToModal(tense), tense: category === "basic" ? tense : tenseToModal(tense),
"transitivity":"intransitive", transitivity: "intransitive",
"isCompound":false, isCompound: false,
voice, voice,
negative, negative,
"canChangeTransitivity":false, canChangeTransitivity: false,
"canChangeVoice":false, canChangeVoice: false,
"canChangeStatDyn":false, canChangeStatDyn: false,
}, },
"form":{"removeKing":false,"shrinkServant":false}, form: { removeKing: false, shrinkServant: false },
}; };
} }
function makePhrase(person: T.Person): { ps: T.ArrayOneOrMore<T.PsString>, e: string } { function makePhrase(person: T.Person): {
ps: T.ArrayOneOrMore<T.PsString>;
e: string;
} {
const selection = makeSelection(person); const selection = makeSelection(person);
const rendered = renderVP(selection); const rendered = renderVP(selection);
const compiled = compileVP(rendered, rendered.form); const compiled = compileVP(rendered, rendered.form);
return { return {
ps: [modifyP(getLength(compiled.ps, length)[0])], ps: [modifyP(getLength(compiled.ps, length)[0])],
e: compiled.e ? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person)) : "", e: compiled.e
? modifyEnglish(compiled.e.join(" • "), tense, isThirdPerson(person))
: "",
}; };
} }
return createVerbTable(makePhrase, isImperativeTense(tense) ? "imperative" : isPastTense(tense) ? "past" : "nonImperative"); return createVerbTable(
makePhrase,
isImperativeTense(tense)
? "imperative"
: isPastTense(tense)
? "past"
: "nonImperative"
);
} }
function modifyP(ps: T.PsString): T.PsString { function modifyP(ps: T.PsString): T.PsString {
@ -204,22 +304,33 @@ function modifyP(ps: T.PsString): T.PsString {
}; };
} }
function modifyEnglish(e: string, tense: T.VerbTense | T.ImperativeTense | T.PerfectTense, isThirdPerson: boolean): string { function modifyEnglish(
e: string,
tense: T.VerbTense | T.ImperativeTense | T.PerfectTense,
isThirdPerson: boolean
): string {
// "kitaab" used as a dummy object // "kitaab" used as a dummy object
const dummyObjectRemoved = const dummyObjectRemoved = e.replace(/\(a\/the\) +book/gi, "");
e.replace(/\(a\/the\) +book/ig, "") return isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson)
return (isPerfectTense(tense) || (isPastTense(tense) && isThirdPerson))
? dummyObjectRemoved ? dummyObjectRemoved
: dummyObjectRemoved : dummyObjectRemoved
.replace(/he\/it/ig, "he/she/it") .replace(/he\/it/gi, "he/she/it")
.replace(/We \(m\. pl\.\)/ig, "We ") .replace(/We \(m\. pl\.\)/gi, "We ")
.replace(/They \(m\. pl\.\)/ig, "They ") .replace(/They \(m\. pl\.\)/gi, "They ")
.replace(/\(m\. pl\.\)/ig, "(pl.)") .replace(/\(m\. pl\.\)/gi, "(pl.)")
.replace(/\(m\.\)/ig, ""); .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"
| "perfective stem"
| "imperfective root"
| "perfective root"
| "past participle" {
const stem =
t === "presentVerb"
? "imperfective stem" ? "imperfective stem"
: t === "subjunctiveVerb" : t === "subjunctiveVerb"
? "perfective stem" ? "perfective stem"
@ -245,7 +356,10 @@ function tenseToStem(t: T.VerbTense | T.ImperativeTense | T.PerfectTense): "impe
return stem; 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(
f: (person: T.Person) => { ps: T.ArrayOneOrMore<T.PsString>; e: string },
type: "imperative" | "nonImperative" | "past"
): { ps: T.VerbBlock | T.ImperativeBlock; e: T.EnglishBlock } {
if (type === "imperative") { if (type === "imperative") {
const b = [ const b = [
[f(2), f(8)], [f(2), f(8)],

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,24 +29,31 @@ 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"> <div className="text-center mt-4">
<Media queries={{ small: "(max-width: 599px)" }}> <Media queries={{ small: "(max-width: 599px)" }}>
{matches => ( {(matches) => (
<div className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}> <div
className={`btn-group${matches.small ? "-vertical" : ""} mb-3`}
>
{views.map(({ label, value }) => ( {views.map(({ label, value }) => (
<button <button
key={value} key={value}
@ -61,7 +69,10 @@ class PhoneticsViewer extends Component<any, IAppState> {
</div> </div>
)} )}
</Media> </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 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" }}> <div style={{ overflowX: "auto", marginBottom: "1em" }}>
<table className="table table-striped"> <table className="table table-striped">
@ -84,7 +95,11 @@ class PhoneticsViewer extends Component<any, IAppState> {
<td> <td>
{phoneme.quickExplanation}{" "} {phoneme.quickExplanation}{" "}
{phoneme.ipa.video && ( {phoneme.ipa.video && (
<a href={phoneme.ipa.video} target="_blank" rel="noopener noreferrer"> <a
href={phoneme.ipa.video}
target="_blank"
rel="noopener noreferrer"
>
<i className="fa fa-video" /> <i className="fa fa-video" />
</a> </a>
)} )}
@ -117,11 +132,16 @@ class PhoneticsViewer extends Component<any, IAppState> {
</tbody> </tbody>
</table> </table>
</div> </div>
{selectedOption?.notes && <div> {selectedOption?.notes && (
<p><strong>Notes about {selectedOption.label.toLowerCase()}:</strong></p> <div>
<p>
<strong>Notes about {selectedOption.label.toLowerCase()}:</strong>
</p>
{selectedOption.notes} {selectedOption.notes}
</div>} </div>
</>; )}
</>
);
} }
} }

View File

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

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";
@ -20,19 +12,27 @@ Compound verbs are verbs made up from a helper verb and some other word. These a
<ul> <ul>
<li> <li>
<InlinePs opts={opts} ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }} /> <InlinePs
opts={opts}
ps={{ p: "کار کول", f: "kaar kawul", e: "to work" }}
/>
</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 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: "munDe wahul", e: "to run" }} /> <InlinePs
opts={opts}
ps={{ p: "منډې وهل", f: "munDe wahul", e: "to run" }}
/>
</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: "munDe", e: "runs" }} /> +{" "}
<InlinePs opts={opts} ps={{ p: "وهل", f: "wahul", e: "to hit" }} />
</li> </li>
</ul> </ul>
<li> <li>
@ -40,15 +40,20 @@ Compound verbs are verbs made up from a helper verb and some other word. These a
</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 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: "stuRey kedúl", e: "to get tired" }} /> <InlinePs
opts={opts}
ps={{ p: "ستړی کېدل", f: "stuRay kedúl", e: "to get tired" }}
/>
</li> </li>
<ul> <ul>
<li> <li>
<InlinePs opts={opts} ps={{ p: "ستړی", f: "stúRey", e: "tired" }} /> + <InlinePs opts={opts} ps={{ p: "کېدل", f: "kedúl", e: "to become" }} /> <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>
</ul> </ul>
@ -56,15 +61,15 @@ Compound verbs are verbs made up from a helper verb and some other word. These a
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" />
@ -76,7 +81,7 @@ If we cook potatoes, we are changing the state of the potatoes from raw to cooke
<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" />

View File

@ -6,18 +6,13 @@ 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)
@ -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: [
{ {
{"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}} 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: [
{ {
{"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}} 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,33 +228,135 @@ 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>استري</div>
<div>iron</div> <div>iron</div>
</div>, </div>
),
}, },
"+", "+",
{ {
bottom: "Helper Verb", bottom: "Helper Verb",
inside: <div> inside: (
<div>
<div>کول</div> <div>کول</div>
<div>to do</div> <div>to do</div>
</div>, </div>
),
}, },
]} /> ]}
/>
<EditableVPEx opts={opts}> <EditableVPEx opts={opts}>
{{
blocks: [
{ {
{"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}} 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.
@ -122,7 +367,7 @@ Now the object of the phrase is <InlinePs opts={opts} ps={{ p: "استري", f:
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>
@ -133,7 +378,7 @@ Now the object of the phrase is <InlinePs opts={opts} ps={{ p: "استري", f:
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>
@ -157,7 +402,10 @@ Another compound that can be used as either stative or dynamic is <InlinePs opts
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
opts={opts}
ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }}
/> is the object
- the verb agrees with the object <InlinePs opts={opts} ps={{ p: "درې کسان", f: "dre kasaan", e: "three people" }} /> - 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" }} /> - 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" }} />
@ -184,9 +432,18 @@ In this example:
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**.
@ -206,7 +463,7 @@ So with <InlinePs opts={opts} ps={{ p: "چیغه کول", f: "cheegha kawul", e:
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>
@ -219,7 +476,7 @@ or
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>

File diff suppressed because it is too large Load Diff

View File

@ -8,22 +8,31 @@ import {
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>
The spelling/pronunciation of the non-inflecting tail can vary based
on dialect
</small>
</div> </div>
<ButtonSelect <ButtonSelect
options={[ options={[
{ label: <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} />, value: "aay" }, {
{ label: <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} />, value: "ey" }, label: <InlinePs opts={opts} ps={{ p: "ای", f: "aay" }} />,
value: "aay",
},
{
label: <InlinePs opts={opts} ps={{ p: "ی", f: "ay" }} />,
value: "ay",
},
]} ]}
value={choice} value={choice}
handleChange={(p) => setChoice(p)} handleChange={(p) => setChoice(p)}
@ -31,20 +40,28 @@ function WithTailChoice({ opts, ba }: { opts: T.TextOptions, ba: boolean }) {
</div> </div>
<EquativeFormChoice <EquativeFormChoice
forms={{ forms={{
sentence: !ba ? { sentence: !ba
? {
displayForm: concatPsString( displayForm: concatPsString(
{ p: "کاشکې ... ...", f: "kaashke ... ..."}, " ", { p: "کاشکې ... ...", f: "kaashke ... ..." },
waay, { p: "!", f: "!" }, " ",
waay,
{ p: "!", f: "!" }
), ),
english: [[["If only ... was/were ...!"]]], english: [[["If only ... was/were ...!"]]],
} : { }
: {
displayForm: concatPsString( displayForm: concatPsString(
{ p: "به ...", f: "ba ..." }, " ", waay, { p: "به ...", f: "ba ..." },
" ",
waay
), ),
english: [[["... would have been ..."]]], english: [[["... would have been ..."]]],
}, },
pure: { pure: {
displayForm: !ba ? waay : concatPsString(grammarUnits.baParticle, " ", waay), displayForm: !ba
? waay
: concatPsString(grammarUnits.baParticle, " ", waay),
}, },
}} }}
opts={opts} opts={opts}

View File

@ -7,21 +7,16 @@ import {
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
@ -30,7 +25,7 @@ In the last section we looked at the <Link to="/equatives/present-equative/">pre
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 ..."],
@ -70,21 +65,21 @@ This form is used to say that something is something (A = B) **habitually, gener
])} ])}
</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>
@ -109,14 +104,29 @@ Interestingly, there is also a separate [habitual equative](https://en.wikipedia
<tr> <tr>
<th scope="row">Present</th> <th scope="row">Present</th>
<td> <td>
<div>The grass <strong>is</strong> wet</div> <div>
The grass <strong>is</strong> wet
</div>
<div className="small text-muted">right now</div> <div className="small text-muted">right now</div>
</td> </td>
<td>The grass <strong>is</strong> wet</td> <td>
The grass <strong>is</strong> wet
</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ p: <>چمن لوند <strong>دی</strong></>, f: <>chaman loond <strong>dey</strong></> }, {
p: (
<>
چمن لوند <strong>دی</strong>
</>
),
f: (
<>
chaman loond <strong>day</strong>
</>
),
},
]} ]}
</Examples> </Examples>
</td> </td>
@ -124,13 +134,30 @@ Interestingly, there is also a separate [habitual equative](https://en.wikipedia
<tr> <tr>
<th scope="row">Habitual</th> <th scope="row">Habitual</th>
<td> <td>
<div>The grass <strong>is</strong> wet in the morning</div> <div>
The grass <strong>is</strong> wet in the morning
</div>
<div className="small text-muted">generally</div> <div className="small text-muted">generally</div>
</td> </td>
<td>The grass <strong>be</strong> wet in the morning</td> <td>
The grass <strong>be</strong> wet in the morning
</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[{ p: <>په سحار کې چمن لوند <strong>وي</strong></>, f: <>pu sahaar ke chaman loond <strong>wee</strong></> }]} {[
{
p: (
<>
په سحار کې چمن لوند <strong>وي</strong>
</>
),
f: (
<>
pu sahaar ke chaman loond <strong>wee</strong>
</>
),
},
]}
</Examples> </Examples>
</td> </td>
</tr> </tr>

View File

@ -6,9 +6,6 @@ import {
addToForm, addToForm,
defaultTextOptions as opts, defaultTextOptions as opts,
grammarUnits, grammarUnits,
VerbFormDisplay,
ButtonSelect,
concatPsString,
InlinePs, InlinePs,
Examples, Examples,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
@ -31,6 +28,7 @@ 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
@ -51,7 +49,7 @@ The subjunctive equative is used to talk about something being something when th
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 ..."],
@ -116,7 +114,7 @@ The subjunctive form can be used to talk about it being being good or bad, neces
#### 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([
@ -127,7 +125,7 @@ The subjunctive form is also used to talk about conditions or possibilities. *If
}, },
{ {
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",
}, },
])} ])}
@ -164,17 +162,20 @@ 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,
@ -182,7 +183,7 @@ This is used for:
{ p: "...", f: "..." }, { p: "...", f: "..." },
" ", " ",
], ],
grammarUnits.equativeEndings.habitual, grammarUnits.equativeEndings.habitual
), ),
english: [ english: [
["I will be ...", "We will be ..."], ["I will be ...", "We will be ..."],
@ -194,12 +195,10 @@ This is used for:
], ],
}, },
pure: { pure: {
displayForm: addToForm([ displayForm: addToForm(
grammarUnits.baParticle, [grammarUnits.baParticle, " ", { p: "...", f: "..." }, " "],
" ", grammarUnits.equativeEndings.habitual
{ p: "...", f: "..." }, ),
" ",
], grammarUnits.equativeEndings.habitual)
}, },
}} }}
opts={opts} opts={opts}
@ -226,7 +225,7 @@ This is used for:
}, },
{ {
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?",
}, },
])} ])}
@ -241,15 +240,16 @@ 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 ..."],
@ -283,7 +283,7 @@ It is usually used in the short form.
}, },
{ {
p: "هغه ډېر ستړی **و**.", p: "هغه ډېر ستړی **و**.",
f: "haghá Der stúRey **wo**.", f: "haghá Der stúRay **wo**.",
e: "He **was** very tired.", e: "He **was** very tired.",
}, },
{ {
@ -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,17 +313,20 @@ 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,
@ -330,7 +334,7 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
{ p: "...", f: "..." }, { p: "...", f: "..." },
" ", " ",
], ],
grammarUnits.equativeEndings.past, grammarUnits.equativeEndings.past
), ),
english: [ english: [
["I'll be ...", "We'll be ..."], ["I'll be ...", "We'll be ..."],
@ -342,13 +346,11 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
], ],
}, },
pure: { pure: {
displayForm: addToForm([ displayForm: addToForm(
grammarUnits.baParticle, [grammarUnits.baParticle, " ", { p: "...", f: "..." }, " "],
" ", grammarUnits.equativeEndings.past
{ p: "...", f: "..." }, ),
" ", },
], grammarUnits.equativeEndings.past)
}
}} }}
opts={opts} opts={opts}
/> />
@ -380,7 +382,7 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
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>
@ -390,7 +392,7 @@ Like the <Link to="#past-equative">past equative</Link> that it's based on, it's
{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.",
}, },
])} ])}
@ -403,13 +405,13 @@ 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
@ -465,7 +467,6 @@ Because this is based on the the non-inflecting tail, *it doesn't change at all,
])} ])}
</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
@ -34,7 +29,7 @@ Not that this is **only for making statements about what is currently or 100% tr
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 ..."],
@ -47,7 +42,7 @@ Not that this is **only for making statements about what is currently or 100% tr
}, },
pure: { pure: {
displayForm: grammarUnits.equativeEndings.present, displayForm: grammarUnits.equativeEndings.present,
} },
}} }}
opts={defaultTextOptions} opts={defaultTextOptions}
/> />
@ -58,14 +53,50 @@ Flip through the following examples and notice how the equative changes dependin
<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" }}, },
{
title: "3rd pers. sing. masc.",
ex: { p: "هغه خوشحاله دی", f: "haghá khosháala day", e: "He is happy" },
},
{
title: "3rd pers. sing. fem.",
ex: {
p: "پلوشه خوشحاله ده",
f: "pulwasha khosháala da",
e: "Pulwasha is happy",
},
},
{
title: "1st pers. plur. masc.",
ex: { p: "مونږ خوشحاله یو", f: "moonG khosháala yoo", e: "We are happy" },
},
{
title: "2nd pers. plur.",
ex: {
p: "تاسو خوشحاله یئ",
f: "taaso khosháala yey",
e: "You (pl.) are happy",
},
},
{
title: "3rd pers. plur.",
ex: {
p: "ماشومان خوشحاله دي",
f: "maashoomáan khosháala dee",
e: "The children are happy",
},
},
{
title: "3rd pers. plur.",
ex: { p: "دوي خوشحاله دي", f: "dwee khosháala dee", e: "They are happy" },
},
]} ]}
render={(item) => ({ render={(item) => ({
title: item.title, title: item.title,
@ -75,40 +106,72 @@ Flip through the following examples and notice how the equative changes dependin
## 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}
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: "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">
<InlineInflectionButton />
</div>
<div className="align-self-center">Plain</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">
<InlineInflectionButton inflection={1} />
</div>
<div className="align-self-center">Inflected</div> <div className="align-self-center">Inflected</div>
</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,15 +39,25 @@ 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>
@ -61,8 +67,22 @@ Let's attach a little <InlinePs opts={opts} ps={{p:"د ...", f:"du ...", e:"'s,
<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>
@ -72,14 +92,24 @@ 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
@ -87,48 +117,99 @@ 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">
<InlineInflectionButton />
</div>
<div className="align-self-center">Plain</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">
<InlineInflectionButton inflection={1} />
</div>
<div className="align-self-center">1st Inflection</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">
<InlineInflectionButton inflection={2} />
</div>
<div className="align-self-center">2nd Inflection</div> <div className="align-self-center">2nd Inflection</div>
</div>, </div>,
]} opts={opts}> ]}
opts={opts}
>
{[ {[
[ [
{p:"سړی", f:"saRey", e:"man"}, { p: "سړی", f: "saRay", e: "man" },
{ p: "سړي", f: "saRee" }, { p: "سړي", f: "saRee" },
{ p: "سړیو", f: "saRiyo" }, { p: "سړیو", f: "saRiyo" },
], ],
[ [
{ p: "ښځه", f: "xudza", e: "woman" }, { p: "ښځه", f: "xudza", e: "woman" },
{p:"ښځې", f:"xudze"}, {p:"ښځو", f:"xudzo"} { p: "ښځې", f: "xudze" },
{ p: "ښځو", f: "xudzo" },
], ],
[ [
{p:"دا سړی پښتون دی", f:"daa saRey puxtoon dey", e:"That man is a Pashtun", sub:"no reason to inflect"}, {
{p:"هغوي سړي دي", f:"haghwee saRee dee", e:"They are men", sub:"inflect for plural"}, p: "دا سړی پښتون دی",
{p:"د سړیو کور هلته دی", f:"du saRiyo kor halta dey", e:"The men's house is there", sub:"inflect for plural and sandwich"}, f: "daa saRay puxtoon day",
e: "That man is a Pashtun",
sub: "no reason to inflect",
},
{
p: "هغوي سړي دي",
f: "haghwee saRee dee",
e: "They are men",
sub: "inflect for plural",
},
{
p: "د سړیو کور هلته دی",
f: "du saRiyo kor halta day",
e: "The men's house is there",
sub: "inflect for plural and sandwich",
},
], ],
[ [
null, null,
{p:"د سړي کور هلته دی", f:"du saRee kor halta dey", e:"The man's house is there", sub:"inflect for sandwich"}, {
p: "د سړي کور هلته دی",
f: "du saRee kor halta day",
e: "The man's house is there",
sub: "inflect for sandwich",
},
null, 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: "دا ښځه پښتنه ده",
{p:"د ښځو کور هلته دی", f:"du xudzo kor halta dey", e:"The ladies' house is there", sub:"inflect for plural and sandwich"}, 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, null,
{p:"د ښځې کور هلته دی", f:"du xudze kor halta dey", e:"The woman's house is there", sub:"inflect for sandwich"}, {
p: "د ښځې کور هلته دی",
f: "du xudze kor halta day",
e: "The woman's house is there",
sub: "inflect for sandwich",
},
null, null,
], ],
]} ]}

View File

@ -2,16 +2,10 @@
title: Inflection Patterns title: Inflection Patterns
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
InlinePs, InlinePs,
grammarUnits,
InflectionsTable,
inflectWord,
typePredicates as tp, typePredicates as tp,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
import InflectionCarousel from "../../components/InflectionCarousel"; import InflectionCarousel from "../../components/InflectionCarousel";
@ -19,10 +13,7 @@ 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,
@ -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,26 +73,32 @@ 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>
@ -121,15 +114,23 @@ For example, let's put the word <InlinePs opts={opts} ps={{ p: "کوټه", f: "k
<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>
@ -149,18 +150,38 @@ Other sandwiches starting with <InlinePs opts={opts} ps={{ p: "په", f: "pu" }}
<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([
@ -178,7 +199,7 @@ For example, if we put the the singular word <InlinePs opts={opts} ps={{ p: "پ
}, },
{ {
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",
}, },
@ -215,7 +236,7 @@ For example, if we put the the singular word <InlinePs opts={opts} ps={{ p: "پ
#### 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([
@ -226,8 +247,8 @@ But these words will *always* use the first inflection for the plural.
}, },
{ {
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>

View File

@ -2,23 +2,22 @@
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
headRow={[
<div> <div>
<div>Singular</div> <div>Singular</div>
</div>, </div>,
<div> <div>
<div>Arabic Plural</div> <div>Arabic Plural</div>
</div>, </div>,
]} opts={opts}> ]}
opts={opts}
>
{children} {children}
</Table> </Table>
); );
@ -32,12 +31,30 @@ 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>
@ -45,8 +62,14 @@ 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>
@ -54,10 +77,22 @@ And some add an <InlinePs opts={opts} ps={{ p: "ین", f: "éen" }} /> on the en
<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>
@ -65,25 +100,67 @@ And some add an <InlinePs opts={opts} ps={{ p: "ین", f: "éen" }} /> on the en
### 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.)",
sub: "feminine",
gender: "f",
},
{
p: "ملاحظات",
f: "mUlaahizaat",
e: "considerations (m. pl.)",
sub: "masculine",
gender: "m",
},
], ],
[ [
{p:"تجربه", f:"tajraba", e:"experience (f.)", sub: "feminine", gender: "f"}, {
{p:"تجارب", f:"tajaarab", e:"experiences (m. pl.)", sub: "masculine", gender: "m"}, p: "تجربه",
f: "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: "lafz", e: "word (m.)", sub: "masculine", gender: "m" },
{p:"الفاظ", f:"alfaaz", e:"words (m. pl.)", sub: "masculine", gender: "m"}, {
p: "الفاظ",
f: "alfaaz",
e: "words (m. pl.)",
sub: "masculine",
gender: "m",
},
], ],
[ [
{p:"قبیله", f:"qabeela", e:"tribe (f.)", sub: "feminine", gender: "f"}, {
{p:"قبایل", f:"qabaayul", e:"tribes (m. pl.)", sub: "masculine", gender: "m"}, p: "قبیله",
f: "qabeela",
e: "tribe (f.)",
sub: "feminine",
gender: "f",
},
{
p: "قبایل",
f: "qabaayul",
e: "tribes (m. pl.)",
sub: "masculine",
gender: "m",
},
], ],
]} ]}
</ArabicPluralTable> </ArabicPluralTable>
@ -111,4 +188,3 @@ For many words, people may either use the regular Pashto plural endings or the s
], ],
]} ]}
</Table> </Table>

View File

@ -2,11 +2,7 @@
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";

View File

@ -5,7 +5,6 @@ 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";
@ -13,10 +12,7 @@ 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 = () => (
@ -34,15 +30,19 @@ 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",
@ -55,8 +55,8 @@ All nouns in Pashto are either <Masc /> or <Fem />. Thankfully, you can pretty m
}, },
{ {
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" },
@ -103,7 +103,8 @@ All nouns in Pashto are either <Masc /> or <Fem />. Thankfully, you can pretty m
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:**
@ -132,13 +133,22 @@ export const femEndingWConsonant = [
]; ];
export function IrregularFem() { export function IrregularFem() {
return <ul> return (
<ul>
{femEndingWConsonant.map((entry) => ( {femEndingWConsonant.map((entry) => (
<li key={entry.p}> <li key={entry.p}>
<InlinePs opts={opts} ps={{ p: entry.p, f: firstVariation(entry.f), e: firstVariation(entry.e) }} /> <InlinePs
opts={opts}
ps={{
p: entry.p,
f: firstVariation(entry.f),
e: firstVariation(entry.e),
}}
/>
</li> </li>
))} ))}
</ul>; </ul>
);
} }
<IrregularFem /> <IrregularFem />
@ -147,9 +157,10 @@ 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" },
@ -174,6 +185,7 @@ Some words are used to describe people who obviously have a gender and they *tot
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,7 +18,8 @@ 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 👨‍⚕️" },
@ -48,18 +44,20 @@ Just like with other words following the <Link to="/inflection/inflection-patter
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 👦",
}, },
}, },
@ -73,24 +71,26 @@ The feminine form the <InlinePs opts={opts} ps={{ p: "ی", f: "ey" }} /> on the
}, },
{ {
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",
}, },
}, },
@ -104,19 +104,21 @@ If the accent comes on the end of the word, the femine form is a little differen
}, },
{ {
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: {
@ -147,7 +149,7 @@ See <Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern
f: "shpaná", f: "shpaná",
e: "female shepherd", e: "female shepherd",
}, },
} },
}, },
{ {
masc: { masc: {
@ -179,15 +181,17 @@ See <Link to="/inflection/inflection-patterns/#4-words-with-the-pashtoon-pattern
f: "korbaná", f: "korbaná",
e: "female host", 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: {
@ -202,7 +206,7 @@ See <Link to="/inflection/inflection-patterns/#5-shorter-words-that-squish">patt
f: "ghla", f: "ghla",
e: "female thief", e: "female thief",
}, },
} },
}, },
{ {
masc: { masc: {
@ -218,8 +222,9 @@ See <Link to="/inflection/inflection-patterns/#5-shorter-words-that-squish">patt
f: "khra", f: "khra",
e: "female donkey", e: "female donkey",
}, },
} },
} },
]} /> ]}
/>
<GameDisplay record={unisexNounGame} /> <GameDisplay record={unisexNounGame} />

View File

@ -1,6 +1,7 @@
--- ---
title: Intro to Participles title: Intro to Participles
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
Examples, Examples,
@ -13,20 +14,25 @@ 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([
@ -72,7 +78,7 @@ And just like with other plural nouns, they are inflected by adding an <InlinePs
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>
@ -84,28 +90,28 @@ Since these particples are nouns, they can also be the subject of a sentance. Fo
{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([
@ -113,19 +119,19 @@ These "adjectives" will <Link to="/inflection/inflection-patterns/#2-words-endin
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>
@ -143,7 +149,7 @@ export const agentNounExamples = [
}, },
{ {
p: "زده کوونکی", p: "زده کوونکی",
f: "zda kawóonkey", f: "zda kawóonkay",
e: "student/learner", e: "student/learner",
}, },
], ],
@ -155,7 +161,7 @@ export const agentNounExamples = [
}, },
{ {
p: "ښووونکی", p: "ښووونکی",
f: "xowóonkey", f: "xowóonkay",
e: "teacher", e: "teacher",
}, },
], ],
@ -167,7 +173,7 @@ export const agentNounExamples = [
}, },
{ {
p: "لیدونکی", p: "لیدونکی",
f: "leedóonkey", f: "leedóonkay",
e: "viewer", e: "viewer",
}, },
], ],
@ -179,7 +185,7 @@ export const agentNounExamples = [
}, },
{ {
p: "اورېدونکی", p: "اورېدونکی",
f: "awredoonkey", f: "awredoonkay",
e: "listener", e: "listener",
}, },
], ],
@ -193,7 +199,7 @@ export const agentNounExamples = [
</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>
@ -206,7 +212,7 @@ export const agentNounExamples = [
</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([
@ -222,7 +228,7 @@ Of course, these nouns will <Link to="/inflection/inflection-patterns/#2-words-e
}, },
{ {
p: "ګرانو **لیدونکو**، ستړي مه شئ", p: "ګرانو **لیدونکو**، ستړي مه شئ",
f: "graano **leedóonko**, stuRee ma sheyy", f: "graano **leedóonko**, stuRee ma shey",
e: "Hello dear viewers", e: "Hello dear viewers",
}, },
])} ])}
@ -230,7 +236,7 @@ Of course, these nouns will <Link to="/inflection/inflection-patterns/#2-words-e
## 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.
@ -243,7 +249,7 @@ They work as an adjective... EXPLANATION COMING SOON.
}, },
{ {
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",
}, },
{ {
@ -255,6 +261,6 @@ They work as an adjective... EXPLANATION COMING SOON.
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,62 +15,138 @@ 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: {"ts":1527815160,"i":2394,"p":"پرون","f":"paroon","g":"paroon","e":"yesterday","c":"adv."}, entry: {
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: {"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."}, entry: {
ts: 1527819967,
i: 5428,
p: "خامخا",
f: "khaamakhaa",
g: "khaamakhaa",
e: "definitely, for sure, whether someone wants or not, willy-nilly (this last use more in Urdu)",
c: "adv.",
}, },
} },
} }}
</EditableBlock> </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: [
{ {
{"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} 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 <EP text="EPs" />: the subject
- With <VP text="VPs" />: the object, or if there's no object NP, 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",
@ -90,7 +157,15 @@ These "sandwiches" are also used as an adverb to give more information for the p
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -100,15 +175,13 @@ These "sandwiches" are also used as an adverb to give more information for the p
}, },
}, },
}, },
} }}
}
</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",
@ -119,21 +192,38 @@ Because the inside of a sandwich is an <Link to="/phrase-structure/np/">NP</Link
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
numberCanChange: true, numberCanChange: true,
adjectives: [{ adjectives: [
{
type: "adjective", type: "adjective",
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, entry: {
}], ts: 1527812625,
i: 9128,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
],
possesor: undefined, 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.
@ -150,22 +240,50 @@ We can also add a possesor it hangs outside of the sandwich. All together it's s
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812828,"i":10539,"p":"کور","f":"kor","g":"kor","e":"house, home","c":"n. m."}, entry: {
ts: 1527812828,
i: 10539,
p: "کور",
f: "kor",
g: "kor",
e: "house, home",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
numberCanChange: true, numberCanChange: true,
adjectives: [{ adjectives: [
{
type: "adjective", type: "adjective",
entry: {"ts":1527812625,"i":9128,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, entry: {
}], ts: 1527812625,
i: 9128,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
],
possesor: { possesor: {
shrunken: false, shrunken: false,
np: { np: {
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527815251,"i":7802,"p":"سړی","f":"saRéy","g":"saRey","e":"man","c":"n. m.","ec":"man","ep":"men"}, entry: {
ts: 1527815251,
i: 7802,
p: "سړی",
f: "saRáy",
g: "saRay",
e: "man",
c: "n. m.",
ec: "man",
ep: "men",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -195,7 +313,15 @@ Here's another example using the sandwich <InlinePs opts={opts} ps={{ p: "سره
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527814159,"i":12723,"p":"ملګری","f":"malgúrey","g":"malgurey","e":"friend, companion","c":"n. m. anim. unisex"}, entry: {
ts: 1527814159,
i: 12723,
p: "ملګری",
f: "malgúray",
g: "malguray",
e: "friend, companion",
c: "n. m. anim. unisex",
},
gender: "masc", gender: "masc",
genderCanChange: true, genderCanChange: true,
number: "singular", number: "singular",
@ -218,4 +344,4 @@ Here's another example using the sandwich <InlinePs opts={opts} ps={{ p: "سره
}} }}
</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,36 +26,206 @@ 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: [
{ {
{"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}} 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: [
{ {
{"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} 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: [
{ {
{"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}} 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>
<AP />
</li>
<li>
<Complement text="Complement" />
</li>
<li>Verb</li> <li>Verb</li>
<li>The perfective head of a Verb (a perfective prefix like <InlinePs opts={opts} ps={{ p: "و", f: "oo", e: "" }} />)</li> <li>
The perfective head of a Verb (a perfective prefix like{" "}
<InlinePs opts={opts} ps={{ p: "و", f: "oo", e: "" }} />)
</li>
<li>Equative</li> <li>Equative</li>
<li>Past Participle (in a perfect verb)</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>
<li>The ability auxilary verb (ie. the <InlinePs opts={opts} ps={{ p: "شي", f: "shee" }} /> in <InlinePs opts={opts} ps={{ p: "کولی شي", f: "shee" }} />)</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> </ul>
</details> </details>
@ -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: [
{ {
{"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}} 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: [
{ {
{"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} 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: [
{ {
{"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}} 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>
The <InlinePs opts={opts} ps={{ p: "به", f: "ba" }} /> particle
</li>
<li>
The jussive <InlinePs opts={opts} ps={{ p: "دې", f: "de", e: "may" }} />
</li>
<li>
<Link to="/pronouns/pronouns-mini/">Mini-pronouns</Link>:
</li>
<ul> <ul>
<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> <InlinePs opts={opts} ps={{ p: "مې", f: "me", e: "1st pers sing" }} />
<li><InlinePs opts={opts} ps={{ p: "مو", f: "mU", e: "1st/2nd pers plur" }} /></li> </li>
<li><InlinePs opts={opts} ps={{ p: "یې", f: "ye", e: "3rd pers" }} /></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> </ul>
<li><InlinePs opts={opts} ps={{ p: "هم", f: "hUm", e: "also/too" }} /></li> <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

@ -6,22 +6,23 @@ 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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: [
{ {
{"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} 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

@ -12,7 +12,6 @@ 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,12 +24,19 @@ 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: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -38,44 +44,27 @@ A **noun** is a word that we use to identify people, places, things, or ideas. O
adjectives: [], adjectives: [],
possesor: undefined, possesor: undefined,
}, },
} }}
}
</EditableBlock> </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", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, entry: {
gender: "masc", ts: 1527812817,
genderCanChange: false, i: 9999,
number: "singular", p: "کتاب",
numberCanChange: true, f: "kitáab",
adjectives: [{ g: "kitaab",
type: "adjective", e: "book",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, c: "n. m.",
}], },
possesor: undefined,
}
}
}
</EditableBlock>
Now we have two words, but it's still **one NP**, one building block. We can add as many adjectives as we want, and it still stays as one single building block. Click on the <EditIcon /> icon below to try adding or removing more adjectives.
<EditableBlock opts={opts}>
{
{
type: "NP",
selection: {
type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -83,21 +72,91 @@ Now we have two words, but it's still **one NP**, one building block. We can add
adjectives: [ adjectives: [
{ {
type: "adjective", type: "adjective",
entry: {"ts":1527812625,"i":9119,"p":"غټ","f":"ghuT, ghaT","g":"ghuT,ghaT","e":"big, fat","c":"adj."}, entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
}, },
{
type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"},
},
{
type: "adjective",
entry: {"ts":1578329248464,"i":7542,"p":"سپین","f":"speen","g":"speen","e":"white (fig. clear, honest, beautiful)","c":"adj."},
}, },
], ],
possesor: undefined, possesor: undefined,
} },
} }}
} </EditableBlock>
Now we have two words, but it's still **one NP**, one building block. We can add as many adjectives as we want, and it still stays as one single building block. Click on the <EditIcon /> icon below to try adding or removing more adjectives.
<EditableBlock opts={opts}>
{{
type: "NP",
selection: {
type: "noun",
entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc",
genderCanChange: false,
number: "singular",
numberCanChange: true,
adjectives: [
{
type: "adjective",
entry: {
ts: 1527812625,
i: 9119,
p: "غټ",
f: "ghuT, ghaT",
g: "ghuT,ghaT",
e: "big, fat",
c: "adj.",
},
},
{
type: "adjective",
entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
},
{
type: "adjective",
entry: {
ts: 1578329248464,
i: 7542,
p: "سپین",
f: "speen",
g: "speen",
e: "white (fig. clear, honest, beautiful)",
c: "adj.",
},
},
],
possesor: undefined,
},
}}
</EditableBlock> </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.
@ -107,12 +166,19 @@ It's important to note that the adjective will <Link to="/inflection/inflection-
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", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -120,7 +186,19 @@ We can also add a **possesor** by adding another NP <Link to="/sandwiches/sandwi
adjectives: [ adjectives: [
{ {
type: "adjective", type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
}, },
], ],
possesor: { possesor: {
@ -129,29 +207,45 @@ We can also add a **possesor** by adding another NP <Link to="/sandwiches/sandwi
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "masc", gender: "masc",
genderCanChange: true, genderCanChange: true,
number: "singular", number: "singular",
numberCanChange: true, numberCanChange: true,
adjectives: [], 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", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812817,"i":9999,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m."}, entry: {
ts: 1527812817,
i: 9999,
p: "کتاب",
f: "kitáab",
g: "kitaab",
e: "book",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -159,7 +253,19 @@ If our possesor is a noun, we can add a possesor to *it*. Try clicking the <Edit
adjectives: [ adjectives: [
{ {
type: "adjective", type: "adjective",
entry: {"ts":1527815451,"i":7245,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, entry: {
ts: 1527815451,
i: 7245,
p: "زوړ",
f: "zoR",
g: "zoR",
e: "old",
c: "adj. irreg.",
infap: "زاړه",
infaf: "zaaRu",
infbp: "زړ",
infbf: "zaR",
},
}, },
], ],
possesor: { possesor: {
@ -168,7 +274,17 @@ If our possesor is a noun, we can add a possesor to *it*. Try clicking the <Edit
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "masc", gender: "masc",
genderCanChange: true, genderCanChange: true,
number: "singular", number: "singular",
@ -180,7 +296,15 @@ If our possesor is a noun, we can add a possesor to *it*. Try clicking the <Edit
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527815177,"i":2530,"p":"پلار","f":"plaar","g":"plaar","e":"father","c":"n. m."}, entry: {
ts: 1527815177,
i: 2530,
p: "پلار",
f: "plaar",
g: "plaar",
e: "father",
c: "n. m.",
},
gender: "masc", gender: "masc",
genderCanChange: false, genderCanChange: false,
number: "singular", number: "singular",
@ -193,18 +317,37 @@ If our possesor is a noun, we can add a possesor to *it*. Try clicking the <Edit
}, },
}, },
}, },
} }}
}
</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)
</summary>
<div
style={{
width: "100%",
height: 0,
paddingBottom: "51%",
position: "relative",
}}
>
<iframe
src="https://giphy.com/embed/5xtDarxMlfVnrjN4MyQ"
width="100%"
height="100%"
style={{ position: "absolute" }}
frameBorder="0"
class="giphy-embed"
></iframe>
</div> </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> <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,50 +359,53 @@ 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: {"ts":1527812856,"i":11617,"p":"لیکل","f":"leekul","g":"leekul","e":"to write","c":"v. trans./gramm. trans.","ec":"write,writes,writing,wrote,written"}, entry: {
ts: 1527812856,
i: 11617,
p: "لیکل",
f: "leekul",
g: "leekul",
e: "to write",
c: "v. trans./gramm. trans.",
ec: "write,writes,writing,wrote,written",
}, },
} },
} },
} }}
</EditableBlock> </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.
@ -281,7 +427,7 @@ Then we can use this NP just like we would any other noun in a sentence.
])} ])}
</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
@ -292,17 +438,17 @@ Notice how in the example above we said
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",
}, },
])} ])}
@ -313,29 +459,48 @@ 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: {"ts":1527815399,"i":14463,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"}, entry: {
ts: 1527815399,
i: 14463,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
}, },
} },
} },
} }}
</EditableBlock> </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: {"ts":1527815399,"i":14463,"p":"وهل","f":"wahul","g":"wahul","e":"to hit","c":"v. trans.","tppp":"واهه","tppf":"waahu","ec":"hit,hits,hitting,hit,hit"}, entry: {
ts: 1527815399,
i: 14463,
p: "وهل",
f: "wahul",
g: "wahul",
e: "to hit",
c: "v. trans.",
tppp: "واهه",
tppf: "waahu",
ec: "hit,hits,hitting,hit,hit",
},
}, },
possesor: { possesor: {
shrunken: false, shrunken: false,
@ -343,7 +508,17 @@ And we can add the word <InlinePs opts={opts} ps={{ p: "ماشومان", f: "maa
type: "NP", type: "NP",
selection: { selection: {
type: "noun", type: "noun",
entry: {"ts":1527812881,"i":11694,"p":"ماشوم","f":"maashoom","g":"maashoom","e":"child, kid","c":"n. m. anim. unisex","ec":"child","ep":"children"}, entry: {
ts: 1527812881,
i: 11694,
p: "ماشوم",
f: "maashoom",
g: "maashoom",
e: "child, kid",
c: "n. m. anim. unisex",
ec: "child",
ep: "children",
},
gender: "masc", gender: "masc",
genderCanChange: true, genderCanChange: true,
number: "plural", number: "plural",
@ -353,11 +528,10 @@ And we can add the word <InlinePs opts={opts} ps={{ p: "ماشومان", f: "maa
}, },
}, },
}, },
} }}
}
</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: "**د ماشومانو وهل** ښه نه دي.", p: "**د ماشومانو وهل** ښه نه دي.",
f: "**du maashoomaano wahul** xu nu dee.", f: "**du maashoomaano wahul** xu nu dee.",
e: "**Hitting children** is bad.", e: "**Hitting children** is bad.",
}])} },
])}
</Examples> </Examples>
## Overview ## Overview
@ -385,8 +561,4 @@ An **NP** is one of the following:
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

@ -6,14 +6,11 @@ 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";
@ -32,9 +29,19 @@ Pashto has a very special way of shortening <Link to="/phrase-structure/vp">VP</
<Examples opts={opts}> <Examples opts={opts}>
{[ {[
{ p: "ما هغه ولیده", f: "maa haghá óoleeda", e: "I saw her", sub: "full form" }, {
p: "ما هغه ولیده",
f: "maa haghá óoleeda",
e: "I saw her",
sub: "full form",
},
{ p: "ما ولیده", f: "maa óoleeda", e: "I saw her", sub: "short form #1" }, { p: "ما ولیده", f: "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: "haghá me óoleeda",
e: "I saw her",
sub: "short form #2",
},
{ p: "ومې لیده", f: "óo-me leeda", e: "I saw her", sub: "short form #3" }, { p: "ومې لیده", f: "óo-me leeda", e: "I saw her", sub: "short form #3" },
]} ]}
</Examples> </Examples>
@ -65,7 +72,11 @@ The king and servant swap roles between the subject and object, depending on wha
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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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

@ -16,11 +16,22 @@ 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",
pronounType: "far",
person: startSubjObj.subj,
});
const [object, setObject] = useState({
type: "pronoun",
pronounType: "far",
person: startSubjObj.obj,
});
const [mode, setMode] = useState("single"); const [mode, setMode] = useState("single");
function handleSetSubject(incoming) { function handleSetSubject(incoming) {
if (mode !== "single" && isInvalidSubjObjCombo(incoming.person, object.person)) { if (
mode !== "single" &&
isInvalidSubjObjCombo(incoming.person, object.person)
) {
alert("That combination of pronouns is not allowed"); alert("That combination of pronouns is not allowed");
return; return;
// let newP = 0; // let newP = 0;
@ -45,11 +56,11 @@ export function RPicker() {
} }
function setRandomSubjObj() { function setRandomSubjObj() {
const { subj, obj } = randomSubjObj(); const { subj, obj } = randomSubjObj();
setSubject(s => ({ setSubject((s) => ({
...s, ...s,
person: subj, person: subj,
})); }));
setObject(s => ({ setObject((s) => ({
...s, ...s,
person: obj, person: obj,
})); }));
@ -57,7 +68,7 @@ export function RPicker() {
function handleRandom() { function handleRandom() {
if (mode === "single") { if (mode === "single") {
const person = randomPerson(subject.person); const person = randomPerson(subject.person);
setSubject(s => ({ setSubject((s) => ({
...s, ...s,
person, person,
})); }));
@ -71,36 +82,51 @@ export function RPicker() {
} }
setMode(m); setMode(m);
} }
return <div className="text-center"> return (
<div className="text-center">
<div className="mb-4"> <div className="mb-4">
<ButtonSelect <ButtonSelect
options={[{ options={[
{
label: "Single", label: "Single",
value: "single" value: "single",
}, { },
{
label: "Subj. / Obj.", label: "Subj. / Obj.",
value: "subjObj", value: "subjObj",
}]} },
]}
value={mode} value={mode}
handleChange={handleModeChange} handleChange={handleModeChange}
/> />
</div> </div>
<div className="row"> <div className="row">
<div className="col my-2" style={{ maxWidth: "375px", margin: "0 auto" }}> <div
className="col my-2"
style={{ maxWidth: "375px", margin: "0 auto" }}
>
{mode === "subjObj" && <h5>Subject</h5>} {mode === "subjObj" && <h5>Subject</h5>}
<PronounPicker pronoun={subject} onChange={handleSetSubject} /> <PronounPicker pronoun={subject} onChange={handleSetSubject} />
</div> </div>
{mode === "subjObj" && {mode === "subjObj" && (
<div className="col my-2" style={{ maxWidth: "375px", margin: "0 auto" }}> <div
className="col my-2"
style={{ maxWidth: "375px", margin: "0 auto" }}
>
<h5>Object</h5> <h5>Object</h5>
<PronounPicker pronoun={object} onChange={handleSetObject} isObject /> <PronounPicker
pronoun={object}
onChange={handleSetObject}
isObject
/>
</div> </div>
} )}
</div> </div>
<button className="btn btn-lg btn-primary mt-2"> <button className="btn btn-lg btn-primary mt-2">
<i class="fas fa-random" onClick={handleRandom} /> <i class="fas fa-random" onClick={handleRandom} />
</button> </button>
</div>; </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.

View File

@ -29,7 +29,7 @@ export function PronounInflectionChoice({ pronouns, far }) {
["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">

View File

@ -2,12 +2,8 @@
title: Directional Pronouns title: Directional Pronouns
--- ---
import { import {
defaultTextOptions as opts, defaultTextOptions as opts,
grammarUnits,
VerbTable,
Examples, Examples,
InlinePs, InlinePs,
} from "@lingdocs/ps-react"; } from "@lingdocs/ps-react";
@ -27,20 +23,14 @@ Pashto has 3 **directional pronouns** that indicate the direction that a word is
<tr> <tr>
<td>1st</td> <td>1st</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>{[{ p: "را", f: "raa", e: "me, we" }]}</Examples>
{[
{ p: "را", f: "raa", e: "me, we" },
]}
</Examples>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>2nd</td> <td>2nd</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[{ p: "در", f: "dăr", e: "you, you (pl.)" }]}
{ p: "در", f: "dăr", e: "you, you (pl.)" },
]}
</Examples> </Examples>
</td> </td>
</tr> </tr>
@ -48,9 +38,7 @@ Pashto has 3 **directional pronouns** that indicate the direction that a word is
<td>3rd</td> <td>3rd</td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[{ p: "ور", f: "wăr", e: "him, her, it, them" }]}
{ p: "ور", f: "wăr", e: "him, her, it, them" },
]}
</Examples> </Examples>
</td> </td>
</tr> </tr>
@ -72,19 +60,28 @@ There are different verbs used for "to give" depending on which direction the gi
<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
opts={opts}
ps={{ p: "راکول", f: "raakawúl", e: "to give to me/us" }}
/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>2nd</td> <td>2nd</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }} /> <InlinePs
opts={opts}
ps={{ p: "درکول", f: "dărkawúl", e: "to give to you/you pl." }}
/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>3rd</td> <td>3rd</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "ورکول", f: "wărkawul", e: "to give to him/her/it/them" }} /> <InlinePs
opts={opts}
ps={{ p: "ورکول", f: "wărkawul", e: "to give to him/her/it/them" }}
/>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -94,12 +91,36 @@ The choice of <InlinePs opts={opts} ps={{ p: "را، در، ور", f: "raa, dăr
<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>
@ -124,19 +145,28 @@ It's very common to add the directional pronouns in front of the verbs "to go" t
<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
opts={opts}
ps={{ p: "راتلل", f: "raatlúl", e: "to come - here, to me/us" }}
/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>2nd</td> <td>2nd</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }} /> <InlinePs
opts={opts}
ps={{ p: "درتلل", f: "dărtlúl", e: "to go - to you" }}
/>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>3rd</td> <td>3rd</td>
<td> <td>
<InlinePs opts={opts} ps={{ p: "ورتلل", f: "wărtlúl", e: "to go - there, to him/her/them" }} /> <InlinePs
opts={opts}
ps={{ p: "ورتلل", f: "wărtlúl", e: "to go - there, to him/her/them" }}
/>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -144,7 +174,11 @@ It's very common to add the directional pronouns in front of the verbs "to go" t
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "هغه اوس **راځي**", f: "haghá oos **raadzée**", e: "He's **coming** now" }, {
p: "هغه اوس **راځي**",
f: "haghá oos **raadzée**",
e: "He's **coming** now",
},
{ p: "دلته **راشه**!", f: "dălta **ráasha**!", e: "**Come** here!" }, { p: "دلته **راشه**!", f: "dălta **ráasha**!", e: "**Come** here!" },
{ p: "هلته **ورشه**!", f: "hălta **wărsha**!", e: "**Go** there!" }, { p: "هلته **ورشه**!", f: "hălta **wărsha**!", e: "**Go** there!" },
{ p: "زه **درځم**.", f: "zu **dărdzúm**", e: "I'm **coming** to you." }, { p: "زه **درځم**.", f: "zu **dărdzúm**", e: "I'm **coming** to you." },
@ -155,15 +189,27 @@ These directional verbs are really common when talking about someone knowing a l
<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>
@ -176,31 +222,45 @@ These directional pronouns can also get added on to all kinds of other verbs to
<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> </Examples>
</td> </td>
<td><Examples opts={opts}> <td>
<Examples opts={opts}>
{psmd([ {psmd([
{ p: "دا عکس **را**ولېږه", f: "daa aks **raa**-óoleGa", e: "Send me that picture" }, {
{ p: "سمه ده. اوس یې **در**لېږم.", f: "sama da. oos ye **dăr**-léGum", e: "Ok. I'm sending you it now"}, p: "دا عکس **را**ولېږه",
f: "daa aks **raa**-óoleGa",
e: "Send me that picture",
},
{
p: "سمه ده. اوس یې **در**لېږم.",
f: "sama da. oos ye **dăr**-léGum",
e: "Ok. I'm sending you it now",
},
])} ])}
</Examples></td> </Examples>
</td>
</tr> </tr>
<tr> <tr>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{[ {[{ p: "استول", f: "astawul", e: "to send" }]}
{ p: "استول", f: "astawul", e: "to send" },
]}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: "پرون یې پیغام **را**واستاوه.", f: "paróon ye peygháam **raa**-wáastawu.", e: "She sent me a message yesterday." }, {
{ p: "زه به ورته یو پیغام **ور**واستوم.", f: "zu ba wăr-ta yo peyghaan **wăr**-wáastawum.", e: "I'll send her a message."}, 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> </Examples>
</td> </td>
@ -212,24 +272,33 @@ These directional pronouns can also get added on to all kinds of other verbs to
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: "wăle **raa**-ta góre?",
e: "Why are you looking at **me/us**?",
},
{ p: "**را**ته ووایه!", f: "**raa**-ta óowaaya!", e: "Tell **me/us**!" }, { p: "**را**ته ووایه!", f: "**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**." }, 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>.
@ -40,20 +36,22 @@ export function SandwichTable() {
{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 (
<tr>
<td> <td>
<Examples opts={opts}>{{ <Examples opts={opts}>
{{
p: `${pre.p} ... ${post.p}`, p: `${pre.p} ... ${post.p}`,
f: `${pre.f} ... ${post.f}`, f: `${pre.f} ... ${post.f}`,
e: s.e, e: s.e,
}}</Examples> }}
</td>
<td>
<Examples opts={opts}>
{s.examples}
</Examples> </Examples>
</td> </td>
<td>
<Examples opts={opts}>{s.examples}</Examples>
</td>
</tr> </tr>
);
})} })}
</tbody> </tbody>
</table> </table>
@ -62,30 +60,80 @@ export function SandwichTable() {
<SandwichTable /> <SandwichTable />
More in progress... 👷‍♂️ More in progress...
{/* prettier-ignore */}
{/* {/*
<Table size="medium" <Table
size="medium"
titleRow={[{ e: "sandwich" }, { e: "example" }]} titleRow={[{ e: "sandwich" }, { e: "example" }]}
rows={ 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 = {
p: `${s.pre.p} ... ${s.post.p}`,
f: `${s.pre.f} ... ${s.post.f}`,
e: s.e,
};
s.examples.forEach((ex, i) => { s.examples.forEach((ex, i) => {
// If first row or sandwich, show the sandwich and an example // If first row or sandwich, show the sandwich and an example
// Otherwise just have an empty left hand side with an example on the right // Otherwise just have an empty left hand side with an example on the right
rowsForOneSandwich.push([i === 0 ? leftSide : {}, { rowsForOneSandwich.push([
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}</>, i === 0 ? leftSide : {},
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}</> 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]; return [...accumulator, ...rowsForOneSandwich];
}, []) }, []),
] ]}
} /> />{" "}
And many more! And many more!
@ -103,4 +151,4 @@ Usually, words in sandwiches get <Link to="inflection/inflection-intro/">inflect
- <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,13 +1,11 @@
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[] = [
{ {
@ -16,19 +14,88 @@ const sandwiches: SandwichInfo[] = [
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>
</u>{" "}
یم
</>
),
f: (
<>
zu{" "}
<u>
<strong>pu</strong> kor <strong>ke</strong>
</u>{" "}
yum
</>
),
e: (
<>
I'm{" "}
<u>
<strong>at</strong> home
</u>
</>
),
}, },
{ {
p: <>هغه <u><strong>په</strong> پارک <strong>کې</strong></u> دی</>, p: (
f: <>haghá <u><strong>pu</strong> paark <strong>ke</strong></u> dey</>, <>
e: <>He's <u><strong>in</strong> the park</u></>, هغه{" "}
<u>
<strong>په</strong> پارک <strong>کې</strong>
</u>{" "}
دی
</>
),
f: (
<>
haghá{" "}
<u>
<strong>pu</strong> paark <strong>ke</strong>
</u>{" "}
day
</>
),
e: (
<>
He's{" "}
<u>
<strong>in</strong> the park
</u>
</>
),
}, },
{ {
p: <>مونږ <u><strong>په</strong> افغانستان <strong>کې</strong></u> اوسېږو</>, p: (
f: <>moonG <u><strong>pu</strong> afghaanistaan <strong>ke</strong></u> oseGoo</>, <>
e: <>We live <u><strong>in</strong> Afghanistan</u></>, مونږ{" "}
<u>
<strong>په</strong> افغانستان <strong>کې</strong>
</u>{" "}
اوسېږو
</>
),
f: (
<>
moonG{" "}
<u>
<strong>pu</strong> afghaanistaan <strong>ke</strong>
</u>{" "}
oseGoo
</>
),
e: (
<>
We live{" "}
<u>
<strong>in</strong> Afghanistan
</u>
</>
),
}, },
], ],
}, },
@ -37,14 +104,58 @@ const sandwiches: SandwichInfo[] = [
e: "to / towards", e: "to / towards",
examples: [ examples: [
{ {
p: <>زه <u><strong>ښار</strong> ته</u> ځم</>, p: (
f: <>zu <u><strong>xaar</strong> ta</u> dzum</>, <>
e: <>I'm going <u><strong>to</strong> the city</u></>, زه{" "}
<u>
<strong>ښار</strong> ته
</u>{" "}
ځم
</>
),
f: (
<>
zu{" "}
<u>
<strong>xaar</strong> ta
</u>{" "}
dzum
</>
),
e: (
<>
I'm going{" "}
<u>
<strong>to</strong> the city
</u>
</>
),
}, },
{ {
p: <><u><strong>ما</strong> ته</u> وګوره</>, p: (
f: <><u><strong>maa</strong> ta</u> óogora</>, <>
e: <>Look <u>at <strong>me</strong></u></>, <u>
<strong>ما</strong> ته
</u>{" "}
وګوره
</>
),
f: (
<>
<u>
<strong>maa</strong> ta
</u>{" "}
óogora
</>
),
e: (
<>
Look{" "}
<u>
at <strong>me</strong>
</u>
</>
),
}, },
], ],
}, },
@ -53,19 +164,84 @@ const sandwiches: SandwichInfo[] = [
e: "of / 's", e: "of / 's",
examples: [ examples: [
{ {
p: <><u><strong>د</strong> یوسف</u> کور هلته دی</>, p: (
f: <><u><strong>du</strong> yoosuf</u> kor halta dey</>, <>
e: <><u>Yousuf<strong>'s</strong></u> house is there</>, <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> یو</>, p: (
f: <>moonG <u><strong>du</strong> pexawar</u> yoo</>, <>
e: <>We are <u><strong>of</strong> Peshawer</u> (ie. We are from Peshawer)</>, مونږ{" "}
<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> نه دی</>, p: (
f: <>daa khoraak <u><strong>du</strong> khoRulo</u> nu dey</>, <>
e: <>That food is not <u>of eating</u> (ie. It's unfit for eating)</>, دا خوراک{" "}
<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)
</>
),
}, },
], ],
}, },
@ -76,14 +252,62 @@ const sandwiches: SandwichInfo[] = [
e: "with", e: "with",
examples: [ examples: [
{ {
p: <>هغه <u><strong>له</strong> احمد <strong>سره</strong></u> دی</>, p: (
f: <>haghá <u><strong>la</strong> ahmad <strong>sara</strong></u> dey</>, <>
e: <>He is <u><strong>with</strong> Ahmed</u>.</>, هغه{" "}
<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> ځې؟</>, p: (
f: <>tu <u><strong>la</strong> maa <strong>sara</strong></u> dze?</>, <>
e: <>Will you go <u><strong>with</strong> me</u>?</>, ته{" "}
<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>
?
</>
),
}, },
], ],
}, },
@ -93,9 +317,32 @@ const sandwiches: SandwichInfo[] = [
e: "for", e: "for",
examples: [ examples: [
{ {
p: <>دا <u><strong>د</strong> هغې <strong>دپاره</strong></u> دی</>, p: (
f: <>daa <u><strong>du</strong> haghé <strong>dupaara</strong></u> dey</>, <>
e: <>This is <u><strong>for</strong> her</u></>, دا{" "}
<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>
</>
),
}, },
], ],
}, },
@ -105,9 +352,32 @@ const sandwiches: SandwichInfo[] = [
e: "on", e: "on",
examples: [ examples: [
{ {
p: <>کتاب <u><strong>پر</strong> مېز <strong>باندې</strong></u> دی</>, p: (
f: <>kitáab <u><strong>pur</strong> mez <strong>baande</strong></u> dey</>, <>
e: <>The book is <u><strong>on</strong> the table</u></>, کتاب{" "}
<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>
</>
),
}, },
], ],
}, },
@ -117,9 +387,30 @@ const sandwiches: SandwichInfo[] = [
e: "about / concerning", e: "about / concerning",
examples: [ examples: [
{ {
p: <><u><strong>د</strong> تعلیم <strong>په اړه</strong></u> خبرې کوو</>, p: (
f: <><u><strong>du</strong> taleem <strong>pu aRa</strong></u> khabure kawoo</>, <>
e: <>We are talking <u><strong>about</strong> education</u></>, <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>
</>
),
}, },
], ],
}, },
@ -129,9 +420,30 @@ const sandwiches: SandwichInfo[] = [
e: "about / concerning", e: "about / concerning",
examples: [ examples: [
{ {
p: <><u><strong>د</strong> تعلیم <strong>په بارې کې</strong></u> خبرې کوو</>, p: (
f: <><u><strong>du</strong> taleem <strong>pu baare ke</strong></u> khabure kawoo</>, <>
e: <>We are talking <u><strong>about</strong> education</u></>, <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>
</>
),
}, },
], ],
}, },
@ -141,9 +453,30 @@ const sandwiches: SandwichInfo[] = [
e: "in addition to, along with", e: "in addition to, along with",
examples: [ examples: [
{ {
p: <><u><strong>پر</strong> وچکالۍ <strong>سربېره</strong></u> دلته جنګ هم شته</>, p: (
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</>, <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
</>
),
}, },
], ],
}, },
@ -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 ",

File diff suppressed because it is too large Load Diff

View File

@ -9,29 +9,38 @@ import {
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">
Verb Past Participle
</Link>
{` + `}
Equative = Perfect Equative = Perfect
</Formula> </Formula>
@ -50,7 +59,7 @@ With the power of perfect forms, we can inject our <VP text="verb phrases" /> wi
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([
@ -62,9 +71,9 @@ The present perfect is used to talk about events that have happened in the past
}, },
{ {
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: "هغې ته نه یې لیدلې",
@ -127,23 +136,24 @@ The habitual perfect is used to talk about events that are habitually/generally
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 _if_ something is done
- saying a purpose, i.e. ...**so that** something will be 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",
}, },
@ -160,8 +170,12 @@ The subjunctive perfect is used to talk about things being done in a *subjunctiv
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
@ -177,7 +191,7 @@ The future equative is used to either to:
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>
@ -191,12 +205,12 @@ It is 👉 **extremely common and useful** 👈 to use the future equative to ma
{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",
}, },
{ {
@ -206,7 +220,7 @@ It is 👉 **extremely common and useful** 👈 to use the future equative to ma
}, },
{ {
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",
}, },
])} ])}
@ -227,7 +241,7 @@ The past perfect is used to say that an event **had been done in the past**. For
{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?",
}, },
{ {
@ -237,7 +251,7 @@ The past perfect is used to say that an event **had been done in the past**. For
}, },
{ {
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.",
}, },
])} ])}
@ -266,9 +280,9 @@ Just like the <Link to="/equatives/other-equatives/#would-be-equative">"would be
}, },
{ {
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>
@ -289,7 +303,7 @@ Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subju
{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",
}, },
{ {
@ -299,7 +313,7 @@ Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subju
}, },
{ {
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",
}, },
{ {
@ -309,7 +323,7 @@ Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subju
}, },
{ {
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!",
}, },
])} ])}
@ -324,14 +338,14 @@ Just like the <Link to="/equatives/other-equatives/#past-subjunctive">past subju
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**",
}, },
{ {

View File

@ -1,6 +1,4 @@
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", [

View File

@ -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:
@ -45,7 +42,7 @@ 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" />

View File

@ -6,21 +6,15 @@ 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,12 +24,17 @@ 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.
@ -49,10 +48,13 @@ 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" />
@ -62,19 +64,27 @@ The <i className="fas fa-camera" /> **perfective imperative** is used when you w
## 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>
@ -137,9 +147,9 @@ For Pashto learners, having a choice between the perfective and imperfective imp
{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>
@ -149,9 +159,9 @@ For Pashto learners, having a choice between the perfective and imperfective imp
{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>
@ -161,14 +171,18 @@ For Pashto learners, having a choice between the perfective and imperfective imp
</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">
@ -182,15 +196,13 @@ You will notice there are only two <Link to="/verbs/verb-endings/#imperative-ver
<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>
@ -205,10 +217,13 @@ 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.
@ -217,8 +232,16 @@ With this form, you can't specify whether you're talking about about the action
{[ {[
{ 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>

View File

@ -19,14 +19,27 @@ import {
} 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.
@ -38,7 +51,7 @@ In Pashto you encounter phrases like this:
{[ {[
{ {
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",
}, },
{ {
@ -59,9 +72,9 @@ 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>
@ -70,7 +83,9 @@ In this section, we'll explain how this all works.
<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 />!**
@ -118,7 +133,7 @@ You can also use the <Link to="/equatives/other-equatives/#subjunctive-equative"
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>
@ -145,7 +160,7 @@ First let's look at an example without this دې conflict:
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>
@ -176,7 +191,7 @@ So here's the solution in Pashto... 🥁 Instead we **get rid of the jussive <De
])} ])}
</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:
@ -202,19 +217,19 @@ Here are more examples of how we use this to resolve the <InlinePs opts={opts}>{
}, },
{ {
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",
}, },
@ -255,16 +270,14 @@ Remember that mini-pronouns can come from either shrunken servants or shrunken p
## 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="us/our - 1st person plural" />, or
- <MU e="you/your - 2nd person plural" /> - <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" />.
@ -285,13 +298,13 @@ Just like you can't say <InlinePs opts={opts}>{{ p: "دې دې", f: "de de" }}</
}, },
{ {
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",
}, },
@ -325,13 +338,10 @@ Just like you can't say <InlinePs opts={opts}>{{ p: "دې دې", f: "de de" }}</
### 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([
@ -343,7 +353,7 @@ But if the is a 1st person plural pronoun, then it *can* co-exist with the jussi
}, },
{ {
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",
}, },
@ -375,4 +385,3 @@ But if the is a 1st person plural pronoun, then it *can* co-exist with the jussi
</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

@ -6,19 +6,19 @@ 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
@ -26,34 +26,89 @@ 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: "هغه کور ته لانه ړه",
f: "haghá kor ta laa-nú-Ra",
e: "She didn't go home",
sub: "negative block after the perfective head",
},
{
p: "هغه کور ته نه لانه ړه",
f: "haghá kor ta nú laaRa",
e: "She didn't go home",
sub: "negative block before the perfective head",
},
{ p: "زه دلته کېنم؟", f: "zu dălta kenúm?", e: "Do I sit here? (present)" }, { p: "زه دلته کېنم؟", f: "zu dălta 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: "زه دلته کېنم؟",
{ p: "زه دلته نه کېنم؟", f: "zu dălta nú kenum?", e: ":Should I not sit here? (subjunctive)", sub: "negative block before the perfective head" }, f: "zu dălta kénum?",
{ p: "زه دلته نه کېنه نم؟", f: "zu dălta ke-nú num?", e: "Should I not sit here? (subjunctive)", subj: "negative block after the perfective head" }, 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>
@ -65,8 +120,16 @@ With the <i className="fas fa-video" /> **imperfective** aspect, the complement
<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>
@ -74,7 +137,15 @@ In the <i className="fas fa-camera" /> **perfective** aspect, however the comple
<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",
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> </Examples>

File diff suppressed because it is too large Load Diff

View File

@ -7,18 +7,21 @@ import {
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,
@ -34,7 +37,7 @@ import {
} 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.
@ -66,7 +69,7 @@ Then, we will see something very simple that, because it's often unknown or misu
## 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
@ -85,7 +88,7 @@ It uses the <i className="fas fa-camera" /> **perfective root** because it's loo
<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
@ -95,7 +98,7 @@ The simple past tense is also used with <InlinePs opts={opts} ps={{ p: "چې..."
{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.",
}, },
])} ])}
@ -112,7 +115,7 @@ 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..." }} />
@ -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.
@ -157,27 +164,267 @@ The tenses (simple and continous past) stay the same and the formulas for making
</Formula> </Formula>
<EditableVPEx opts={opts}> <EditableVPEx opts={opts}>
{{
blocks: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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} />
@ -192,27 +439,267 @@ The tenses (simple and continous past) stay the same and the formulas for making
</Formula> </Formula>
<EditableVPEx opts={opts} long> <EditableVPEx opts={opts} long>
{{
blocks: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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: [
{ {
{"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}} 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,7 +708,7 @@ 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
@ -238,13 +725,25 @@ With the habitual simple past (AKA habitual perfective past), we are talking abo
<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>
@ -258,13 +757,25 @@ With the habitual continuous past (AKA habitual imperfective past), we are talki
<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>
@ -272,13 +783,19 @@ The habitual continuous past is **also used to say what would happen if some con
<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

@ -13,10 +13,7 @@ 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:
@ -75,7 +72,7 @@ Here are some examples of how the present form is used in different situations:
{ {
p: "زما پلار پتلون **اغوندي**.", p: "زما پلار پتلون **اغوندي**.",
f: "zmaa plaar patloon **aghondee**.", f: "zmaa plaar patloon **aghondee**.",
e: "My dad **wears** pants." e: "My dad **wears** pants.",
}, },
{ {
p: "زه په عربي **نه پوهېږم**.", p: "زه په عربي **نه پوهېږم**.",
@ -85,7 +82,7 @@ Here are some examples of how the present form is used in different situations:
{ {
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>
@ -102,7 +99,7 @@ Here are some examples of how the present form is used in different situations:
{ {
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: "هغوي اوس ډوډۍ **خوري**",
@ -112,7 +109,7 @@ Here are some examples of how the present form is used in different situations:
{ {
p: "ته څه **کوې**؟", p: "ته څه **کوې**؟",
f: "tu tsu **kawe**?", f: "tu tsu **kawe**?",
e: "What **are** you **doing**?" e: "What **are** you **doing**?",
}, },
])} ])}
</Examples> </Examples>
@ -132,5 +129,3 @@ Here are some examples of how the present form is used in different situations:
<GameDisplay record={presentVerbGame1} /> <GameDisplay record={presentVerbGame1} />
<GameDisplay record={presentVerbGame2} /> <GameDisplay record={presentVerbGame2} />

View File

@ -2,9 +2,6 @@
title: 🌳 Roots and Stems title: 🌳 Roots and Stems
--- ---
import { import {
defaultTextOptions, defaultTextOptions,
Examples, Examples,
@ -21,35 +18,45 @@ 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
items={shuffle(items)}
render={(item) => {
let inf = getVerbInfo(item.entry); let inf = getVerbInfo(item.entry);
const info = (inf.transitive) const info = inf.transitive
? inf.transitive ? inf.transitive
: inf.stative : inf.stative
? inf.stative ? inf.stative
: inf; : inf;
return { return {
title: <InlinePs opts={opts} ps={{ title: (
<InlinePs
opts={opts}
ps={{
...removeFVarients(item.entry), ...removeFVarients(item.entry),
e: item.def, e: item.def,
}} />, }}
body: <RootsAndStems />
),
body: (
<RootsAndStems
info={info} info={info}
textOptions={opts} textOptions={opts}
highlighted={highlighted} highlighted={highlighted}
hidePastParticiple={hidePastParticiple} hidePastParticiple={hidePastParticiple}
/>, />
),
}; };
}}/> }}
/>
); );
} }
@ -61,17 +68,17 @@ All verbs have **a set of two roots and two stems**, and these roots and stems a
<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" />
@ -97,11 +104,19 @@ With regular verbs, knowing all the roots and stems is simple:
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>.
@ -166,13 +189,17 @@ export const irregularVerbs = verbs.filter((verb) => {
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} />
@ -188,7 +215,15 @@ When one of these negatives is used **it always takes over the accent from the v
{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

@ -6,7 +6,6 @@ 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!
@ -37,7 +33,7 @@ We said we use the <Link to="/verbs/present-verbs">present</Link> form to talk a
<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" />
@ -49,7 +45,7 @@ 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>
@ -65,9 +61,21 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
{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>
@ -77,9 +85,21 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
<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>
@ -87,8 +107,16 @@ The subjunctive is made the same way as its cousin the <Link to="/verbs/present-
<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>
@ -98,8 +126,16 @@ When you use the negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} />
<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>
@ -107,13 +143,42 @@ When you use the negative <InlinePs opts={opts} ps={{ p: "نه", f: "nú" }} />
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

@ -2,11 +2,7 @@
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>
@ -37,15 +39,27 @@ The aspects can be thought of as two different *perspectives* or *ways of lookin
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>
@ -54,7 +68,11 @@ For example:
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,21 +80,29 @@ 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>
@ -84,21 +110,35 @@ For example, when making commands in Pashto we have to choose which aspect we ar
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `خبله کوټه **صفا کوه**!`, f: `khpula koTa **safaa kawa**`, e: "Clean your room!" }, {
p: `خبله کوټه **صفا کوه**!`,
f: `khpula koTa **safaa kawa**`,
e: "Clean your room!",
},
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `خبله کوټه **صفا کړه**!`, f: `khpula koTa **safaa kRa**!`, e: "Clean your room!" }, {
p: `خبله کوټه **صفا کړه**!`,
f: `khpula koTa **safaa kRa**!`,
e: "Clean your room!",
},
])} ])}
</Examples> </Examples>
</td> </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,8 +148,12 @@ 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>
@ -117,21 +161,34 @@ Or when talking about things in the future tense, we face the same choice of asp
<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: `مونږ به **کېنو** او **خبرې کوو**`,
f: `moonG ba **keenóo** aw **khabure kawoo**`,
e: "We'll sit and talk",
},
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `مونږ به **کېنو** او **خبرې وکړو**`, f: `moonG ba **kéenoo** aw **khabure ookRoo**`, e: "We'll sit and talk" }, {
p: `مونږ به **کېنو** او **خبرې وکړو**`,
f: `moonG ba **kéenoo** aw **khabure ookRoo**`,
e: "We'll sit and talk",
},
])} ])}
</Examples> </Examples>
</td> </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,8 +198,12 @@ 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>
@ -150,20 +211,31 @@ Even when talking about ability in the past tense, you still have to choose an a
<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: `هغه له کوره **وتلی شوه**`,
f: `haghá la kora **watulay shwa**`,
e: "She was able to leave the house.",
},
])} ])}
</Examples> </Examples>
</td> </td>
<td> <td>
<Examples opts={opts}> <Examples opts={opts}>
{psmd([ {psmd([
{ p: `هغه له کوره **ووتلی شوه**`, f: `haghá la kora **óowatuley shwa**`, e: "She was able to leave the house." }, {
p: `هغه له کوره **ووتلی شوه**`,
f: `haghá la kora **óowatulay shwa**`,
e: "She was able to leave the house.",
},
])} ])}
</Examples> </Examples>
</td> </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,9 +2,6 @@
title: Verb Endings title: Verb Endings
--- ---
import { import {
addToForm, addToForm,
defaultTextOptions as opts, defaultTextOptions as opts,
@ -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

@ -63,7 +63,15 @@ See what's happening to the German speakers? 🧠 Their brain wants to use the s
<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

@ -7,17 +7,15 @@ import {
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.
@ -35,7 +33,7 @@ The most common diacritic marking you will see is a little ◌ٔ (hamza) above t
]} ]}
</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" }} />
@ -46,10 +44,10 @@ THE REST OF THIS PAGE IS INCOMPLETE, MORE COMING SOON 👷‍♂️
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>

View File

@ -8,7 +8,7 @@ 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:

View File

@ -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,43 +30,85 @@ 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:
@ -71,17 +118,33 @@ Now let's take a look at the different letters. For each letter we'll see what i
#### 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:
@ -97,20 +160,48 @@ Now let's take a look at the different letters. For each letter we'll see what i
#### 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" }} />
@ -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" }} />
@ -149,12 +256,18 @@ Now let's take a look at the different letters. For each letter we'll see what i
- 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:
@ -164,23 +277,46 @@ Now let's take a look at the different letters. For each letter we'll see what i
#### 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" }} />
@ -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,7 +416,7 @@ 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 ی
@ -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,14 +510,22 @@ 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: "د زپې او لهجے په حواله به خبرے کېږي",
f: "du jzube aw lahje pu hawaala ba khabure keGee",
e: "There will be talk about language and dialect",
},
]} ]}
</Examples> </Examples>
</td> </td>
@ -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,10 +559,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>
@ -369,10 +579,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>
@ -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,7 +15,7 @@ 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

View File

@ -1,7 +1,5 @@
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,
@ -21,29 +19,27 @@ 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",
@ -56,12 +52,22 @@ const adjectives = wordQuery("adjectives", [
]); ]);
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({
inChapter,
id,
link,
level,
}: {
inChapter: boolean;
id: string;
link: string;
level: "hints" | "no-hints";
}) {
const pronounPool = makePool(pronouns); const pronounPool = makePool(pronouns);
const adjPool = makePool(adjectives); const adjPool = makePool(adjectives);
function getQuestion(): Question { function getQuestion(): Question {
@ -75,11 +81,7 @@ export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: b
}; };
const EPS = makeEPS(subject, adjPool(), "present"); const EPS = makeEPS(subject, adjPool(), "present");
const EP = renderEP(EPS); const EP = renderEP(EPS);
const compiled = compileEP( const compiled = compileEP(EP, true, { predicate: true });
EP,
true,
{ predicate: true },
);
const phrase = { const phrase = {
ps: compiled.ps, ps: compiled.ps,
e: compiled.e, e: compiled.e,
@ -89,13 +91,15 @@ export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: b
phrase, phrase,
adjective: getAdjectiveFromRendered(EP), adjective: getAdjectiveFromRendered(EP),
}; };
}; }
function Display({ question, callback }: QuestionDisplayProps<Question>) { function Display({ question, callback }: QuestionDisplayProps<Question>) {
const [answer, setAnswer] = useState<string>(""); const [answer, setAnswer] = useState<string>("");
const handleInput = ({ target: { value }}: React.ChangeEvent<HTMLInputElement>) => { const handleInput = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(value); setAnswer(value);
} };
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
const correct = comparePs(answer, question.adjective.ps); const correct = comparePs(answer, question.adjective.ps);
@ -103,15 +107,19 @@ export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: b
setAnswer(""); setAnswer("");
} }
callback(correct); callback(correct);
} };
return <div> return (
<div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}> <div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples lineHeight={1} opts={opts}>{ <Examples lineHeight={1} opts={opts}>
addUserAnswer(answer, question.phrase.ps[0]) {addUserAnswer(answer, question.phrase.ps[0])}
}</Examples> </Examples>
{question.phrase.e && question.phrase.e.map((e, i) => ( {question.phrase.e &&
<div key={e+i} className="text-muted">{e}</div> question.phrase.e.map((e, i) => (
<div key={e + i} className="text-muted">
{e}
</div>
))} ))}
</div> </div>
<div className="d-flex flex-row justify-content-center mb-3"> <div className="d-flex flex-row justify-content-center mb-3">
@ -135,21 +143,27 @@ export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: b
/> />
</div> </div>
<div className="text-center my-2"> <div className="text-center my-2">
<button className="btn btn-primary" type="submit">submit </button> <button className="btn btn-primary" type="submit">
submit
</button>
</div> </div>
</form> </form>
</div> </div>
);
} }
function Instructions() { function Instructions() {
return <div> return (
<div>
<p className="lead"> <p className="lead">
Fill in the blank with the correct inflection of the adjective Fill in the blank with the correct inflection of the adjective
</p> </p>
</div>; </div>
);
} }
return <GameCore return (
<GameCore
inChapter={inChapter} inChapter={inChapter}
studyLink={link} studyLink={link}
getQuestion={getQuestion} getQuestion={getQuestion}
@ -160,20 +174,28 @@ export default function EPAdjGame({ inChapter, id, link, level }: { inChapter: b
amount={amount} amount={amount}
Instructions={Instructions} Instructions={Instructions}
/> />
}; );
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element { function DisplayCorrectAnswer({
return <div> question,
}: {
question: Question;
}): JSX.Element {
return (
<div> <div>
{question.adjective.ps.reduce(((accum, curr, i): JSX.Element[] => ( <div>
[ {question.adjective.ps.reduce(
(accum, curr, i): JSX.Element[] => [
...accum, ...accum,
...i > 0 ? [<span className="text-muted"> or </span>] : [], ...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>{curr.p}</span>, <span key={i}>{curr.p}</span>,
] ],
)), [] as JSX.Element[])} [] as JSX.Element[]
)}
</div> </div>
</div>; </div>
);
} }
function addUserAnswer(a: string, ps: T.PsString): T.PsString { function addUserAnswer(a: string, ps: T.PsString): T.PsString {
@ -185,15 +207,24 @@ function addUserAnswer(a: string, ps: T.PsString): T.PsString {
}; };
} }
function getAdjectiveFromRendered(EP: T.EPRendered): T.Rendered<T.AdjectiveSelection> { function getAdjectiveFromRendered(
EP: T.EPRendered
): T.Rendered<T.AdjectiveSelection> {
const pred = getPredicateSelectionFromBlocks(EP.blocks); const pred = getPredicateSelectionFromBlocks(EP.blocks);
if (pred.selection.type !== "complement" || pred.selection.selection.type !== "adjective") { if (
pred.selection.type !== "complement" ||
pred.selection.selection.type !== "adjective"
) {
throw new Error("adjective not found in predicate"); throw new Error("adjective not found in predicate");
} }
return pred.selection.selection; return pred.selection.selection;
} }
function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry, tense: T.EquativeTense): T.EPSelectionComplete { function makeEPS(
subject: T.NPSelection,
predicate: T.AdjectiveEntry,
tense: T.EquativeTense
): T.EPSelectionComplete {
return { return {
blocks: [ blocks: [
{ {

View File

@ -24,34 +24,47 @@ const femNouns = [
]; ];
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[];
yMasc: T.MascNounEntry[];
}
>(mascNouns, {
consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]), consonantMasc: endsWith([{ p: pashtoConsonants }, { p: "و", f: "w" }]),
eyMasc: endsWith({ p: "ی", f: "ey" }), eyMasc: endsWith({ p: "ی", f: "ey" }),
uMasc: endsWith({ p: "ه", f: "u" }), uMasc: endsWith({ p: "ه", f: "u" }),
yMasc: endsWith([{ p: "ای", f: "aay" }, { p: "وی", f: "ooy" }]), yMasc: endsWith([
{ p: "ای", f: "aay" },
{ p: "وی", f: "ooy" },
]),
}), }),
fem: categorize<T.FemNounEntry, { fem: categorize<
aaFem: T.FemNounEntry[], T.FemNounEntry,
eeFem: T.FemNounEntry[], {
uyFem: T.FemNounEntry[], aaFem: T.FemNounEntry[];
aFem: T.FemNounEntry[], eeFem: T.FemNounEntry[];
eFem: T.FemNounEntry[], uyFem: T.FemNounEntry[];
}>(femNouns, { aFem: T.FemNounEntry[];
eFem: T.FemNounEntry[];
}
>(femNouns, {
aaFem: endsWith({ p: "ا", f: "aa" }), aaFem: endsWith({ p: "ا", f: "aa" }),
eeFem: endsWith({ p: "ي", f: "ee" }), eeFem: endsWith({ p: "ي", f: "ee" }),
uyFem: endsWith({ p: "ۍ" }), uyFem: endsWith({ p: "ۍ" }),
aFem: endsWith([{ p: "ه", f: "a" }, { p: "ح", f: "a" }]), aFem: endsWith([
{ p: "ه", f: "a" },
{ p: "ح", f: "a" },
]),
eFem: endsWith({ p: "ې" }), eFem: endsWith({ p: "ې" }),
}), }),
}; };
function getFemVersions(uns: T.UnisexNounEntry[]): T.FemNounEntry[] { function getFemVersions(uns: T.UnisexNounEntry[]): T.FemNounEntry[] {
return uns.map((n) => { return uns
.map((n) => {
const infs = inflectWord(n); const infs = inflectWord(n);
if (!infs || !infs.inflections) return undefined; if (!infs || !infs.inflections) return undefined;
if (!isUnisexSet(infs.inflections)) return undefined; if (!isUnisexSet(infs.inflections)) return undefined;
@ -59,15 +72,18 @@ function getFemVersions(uns: T.UnisexNounEntry[]): T.FemNounEntry[] {
e: n.e, e: n.e,
...infs.inflections.fem[0][0], ...infs.inflections.fem[0][0],
} as T.DictionaryEntry; } as T.DictionaryEntry;
}).filter(n => !!n) as T.FemNounEntry[]; })
.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[]>;
@ -84,65 +100,109 @@ const exceptions: Record<string, CategorySet> = {
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);
// @ts-ignore
const question = randFromArray(base[gender][typeToUse]); const question = randFromArray(base[gender][typeToUse]);
base[gender][typeToUse] = base[gender][typeToUse].filter((entry) => entry.ts !== question.ts); // @ts-ignore
base[gender][typeToUse] = base[gender][typeToUse].filter(
// @ts-ignore
(entry) => entry.ts !== question.ts
);
// @ts-ignore
return question; return question;
} }
function Display({ question, callback }: QuestionDisplayProps<Question>) { function Display({ question, callback }: QuestionDisplayProps<Question>) {
function check(gender: T.Gender) { function check(gender: T.Gender) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc"; const nounGender: T.Gender = nounNotIn(mascNouns)(question)
? "fem"
: "masc";
callback(gender === nounGender); callback(gender === nounGender);
} }
return <div> return (
<div>
<div className="mb-4" style={{ fontSize: "larger" }}> <div className="mb-4" style={{ fontSize: "larger" }}>
<Examples opts={opts}>{[ <Examples opts={opts}>
{[
{ {
p: firstVariation(question.p), p: firstVariation(question.p),
f: firstVariation(question.f), f: firstVariation(question.f),
e: level === 2 ? firstVariation(question.e) : undefined, e: level === 2 ? firstVariation(question.e) : undefined,
} },
]}</Examples> ]}
</Examples>
</div> </div>
<div className="mt-4"> <div className="mt-4">
<button style={{ background: genderColors.f, color: "black" }} className="btn btn-lg mr-3" onClick={() => check("fem")}>Feminine</button> <button
<button style={{ background: genderColors.m, color: "black" }} className="btn btn-lg ml-3" onClick={() => check("masc")}>Masculine</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>
);
} }
function Instructions() { function Instructions() {
return <div> return (
<div>
<h5>Choose the right gender for each word</h5> <h5>Choose the right gender for each word</h5>
{level === 2 && <div> Exceptions included...</div>} {level === 2 && <div> Exceptions included...</div>}
</div> </div>
);
} }
function DisplayCorrectAnswer({ question }: { question: Question }) { function DisplayCorrectAnswer({ question }: { question: Question }) {
const nounGender: T.Gender = nounNotIn(mascNouns)(question) ? "fem" : "masc"; const nounGender: T.Gender = nounNotIn(mascNouns)(question)
return <div className="my-2 text-center"> ? "fem"
<button style={{ background: genderColors[nounGender === "masc" ? "m" : "f"], color: "black" }} className="btn btn-lg" disabled> : "masc";
return (
<div className="my-2 text-center">
<button
style={{
background: genderColors[nounGender === "masc" ? "m" : "f"],
color: "black",
}}
className="btn btn-lg"
disabled
>
{nounGender === "masc" ? "Masculine" : "Feminine"} {nounGender === "masc" ? "Masculine" : "Feminine"}
</button> </button>
</div>; </div>
);
} }
return <GameCore return (
<GameCore
inChapter={inChapter} inChapter={inChapter}
studyLink={link} studyLink={link}
getQuestion={getQuestion} getQuestion={getQuestion}
@ -153,4 +213,5 @@ export default function GenderGame({level, id, link, inChapter }: {
timeLimit={level === 1 ? 70 : 80} timeLimit={level === 1 ? 70 : 80}
Instructions={Instructions} Instructions={Instructions}
/> />
}; );
}

View File

@ -14,55 +14,76 @@ 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 }[] = [ const categories: { label: string; value: T.InflectionPattern }[] = [
{ {
label: "#1 Basic", label: "#1 Basic",
value: T.InflectionPattern.Basic, value: 1, // T.InflectionPattern.Basic,
}, },
{ {
label: "#2 Unstressed ی", label: "#2 Unstressed ی",
value: T.InflectionPattern.UnstressedEy, value: 2, // T.InflectionPattern.UnstressedAy,
}, },
{ {
label: "#3 Stressed ی", label: "#3 Stressed ی",
value: T.InflectionPattern.StressedEy, value: 3, // T.InflectionPattern.StressedAy,
}, },
{ {
label: `#4 "Pashtoon"`, label: `#4 "Pashtoon"`,
value: T.InflectionPattern.Pashtun, value: 4, // T.InflectionPattern.Pashtun,
}, },
{ {
label: `#5 Short Squish`, label: `#5 Short Squish`,
value: T.InflectionPattern.Squish, value: 5, // T.InflectionPattern.Squish,
}, },
{ {
label: "#6 Inan. Fem. ي", label: "#6 Inan. Fem. ي",
value: T.InflectionPattern.FemInanEe, value: 6, // T.InflectionPattern.FemInanEe,
}, },
{ {
label: "No Inflection", label: "No Inflection",
value: T.InflectionPattern.None, value: 0, // T.InflectionPattern.None,
}, },
]; ];
export default function InflectionPatterns({ inChapter, id, link, level }: { inChapter: boolean, id: string, link: string, level: 1 | 2 }) { export default function InflectionPatterns({
inChapter,
id,
link,
level,
}: {
inChapter: boolean;
id: string;
link: string;
level: 1 | 2;
}) {
const w = [...nouns, ...adjectives] const w = [...nouns, ...adjectives]
.filter(level === 2 ? x => x : x => (tp.isUnisexNounEntry(x) || tp.isAdjectiveEntry(x) || (tp.isFemNounEntry(x) && tp.isPattern6FemEntry(x)))) .filter(
.map(x => ({ entry: x, pattern: getInflectionPattern(x) })); level === 2
const words: Record<T.InflectionPattern, (T.NounEntry | T.AdjectiveEntry)[]> = { ? (x) => x
0: w.filter(x => x.pattern === 0).map(x => x.entry), : (x) =>
1: w.filter(x => x.pattern === 1).map(x => x.entry), tp.isUnisexNounEntry(x) ||
2: w.filter(x => x.pattern === 2).map(x => x.entry), tp.isAdjectiveEntry(x) ||
3: w.filter(x => x.pattern === 3).map(x => x.entry), (tp.isFemNounEntry(x) && tp.isPattern6FemEntry(x))
4: w.filter(x => x.pattern === 4).map(x => x.entry), )
5: w.filter(x => x.pattern === 5).map(x => x.entry), .map((x) => ({ entry: x, pattern: getInflectionPattern(x) }));
6: w.filter(x => x.pattern === 6).map(x => x.entry), 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)> = { const pools: Record<
T.InflectionPattern,
() => T.NounEntry | T.AdjectiveEntry
> = {
0: makePool(words[0]), 0: makePool(words[0]),
1: makePool(words[1]), 1: makePool(words[1]),
2: makePool(words[2]), 2: makePool(words[2]),
@ -70,42 +91,48 @@ export default function InflectionPatterns({ inChapter, id, link, level }: { inC
4: makePool(words[4]), 4: makePool(words[4]),
5: makePool(words[5]), 5: makePool(words[5]),
6: makePool(words[6]), 6: makePool(words[6]),
} };
const patternPool = makePool([ const patternPool = makePool([
T.InflectionPattern.None, 0, 1, 2, 3, 4, 5, 6,
T.InflectionPattern.Basic, // T.InflectionPattern.None,
T.InflectionPattern.UnstressedEy, // T.InflectionPattern.Basic,
T.InflectionPattern.StressedEy, // T.InflectionPattern.UnstressedAy,
T.InflectionPattern.Pashtun, // T.InflectionPattern.StressedAy,
T.InflectionPattern.Squish, // T.InflectionPattern.Pashtun,
T.InflectionPattern.FemInanEe, // T.InflectionPattern.Squish,
// T.InflectionPattern.FemInanEe,
]); ]);
function getQuestion(): Question { function getQuestion(): Question {
const pattern = patternPool(); const pattern = patternPool();
// @ts-ignore
const entry = pools[pattern](); const entry = pools[pattern]();
if (getInflectionPattern(entry) !== pattern) { if (getInflectionPattern(entry) !== pattern) {
throw Error("wrong pattern on word"); throw Error("wrong pattern on word");
} }
return { entry, pattern }; return { entry, pattern };
}; }
function Display({ question, callback }: QuestionDisplayProps<Question>) { function Display({ question, callback }: QuestionDisplayProps<Question>) {
function handleChoice(ic: T.InflectionPattern) { function handleChoice(ic: T.InflectionPattern) {
return callback(ic === question.pattern); return callback(ic === question.pattern);
} }
return <div> return (
<div>
<div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}> <div className="mb-2" style={{ maxWidth: "300px", margin: "0 auto" }}>
<Examples opts={opts}>{[ <Examples opts={opts}>
{[
{ {
p: firstVariation(question.entry.p), p: firstVariation(question.entry.p),
f: firstVariation(question.entry.f), f: firstVariation(question.entry.f),
e: `${firstVariation(question.entry.e)} - ${question.entry.c}`, e: `${firstVariation(question.entry.e)} - ${question.entry.c}`,
} },
]}</Examples> ]}
</Examples>
</div> </div>
<div className="text-center"> <div className="text-center">
<div className="row"> <div className="row">
{categories.map(c => <div className="col" key={Math.random()}> {categories.map((c) => (
<div className="col" key={Math.random()}>
<button <button
style={{ width: "8rem", height: "4rem" }} style={{ width: "8rem", height: "4rem" }}
className="btn btn-outline-secondary mb-3" className="btn btn-outline-secondary mb-3"
@ -113,19 +140,26 @@ export default function InflectionPatterns({ inChapter, id, link, level }: { inC
> >
{c.label} {c.label}
</button> </button>
</div>)} </div>
))}
</div> </div>
</div> </div>
</div> </div>
);
} }
function Instructions() { function Instructions() {
return <div> return (
<p className="lead">Choose the inflection pattern that each noun/adjective follows</p> <div>
<p className="lead">
Choose the inflection pattern that each noun/adjective follows
</p>
</div> </div>
);
} }
return <GameCore return (
<GameCore
inChapter={inChapter} inChapter={inChapter}
studyLink={link} studyLink={link}
getQuestion={getQuestion} getQuestion={getQuestion}
@ -136,15 +170,22 @@ export default function InflectionPatterns({ inChapter, id, link, level }: { inC
amount={amount} amount={amount}
Instructions={Instructions} Instructions={Instructions}
/> />
}; );
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
function DisplayCorrectAnswer({
question,
}: {
question: Question;
}): JSX.Element {
// callback(<div className="lead"> // callback(<div className="lead">
// {possibleCorrect.map(humanReadableTense).join(" or ")} // {possibleCorrect.map(humanReadableTense).join(" or ")}
// </div>) // </div>)
return <div> return (
<p className="lead">{categories.find(c => c.value === question.pattern)?.label}</p> <div>
</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,
blockUtils,
concatPsString,
isInvalidSubjObjCombo, isInvalidSubjObjCombo,
removeFVarients,
getEnglishVerb,
RootsAndStems,
getVerbInfo,
defaultTextOptions,
humanReadableVerbForm,
blank, blank,
kidsBlank, kidsBlank,
isPashtoScript, 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,8 +32,11 @@ 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", [
@ -68,7 +60,7 @@ const verbs = wordQuery("verbs", [
]); ]);
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"puxtoon", "puxtoon",
@ -77,25 +69,28 @@ const nouns = wordQuery("nouns", [
"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",
@ -110,16 +105,21 @@ const levelInfos: Record<PerfectGameLevel["type"], LevelInfo> = {
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,
}: {
inChapter: boolean;
id: string;
link: string;
level: PerfectGameLevel;
}) => { }) => {
const levelInfo = levelInfos[level.type]; const levelInfo = levelInfos[level.type];
const personPool = makePool(persons); const personPool = makePool(persons);
@ -128,23 +128,33 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
transitivePast: makePool(transitivePastVerbs, 15), transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15), intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15), mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15), mixedAll: makePool(
[...verbs, ...transitivePastVerbs, ...intransitivePastVerbs],
15
),
}; };
const tensePool = makePool<T.PerfectTense>([ const tensePool = makePool<T.PerfectTense>([
"presentPerfect", "pastPerfect", "subjunctivePerfect", "habitualPerfect", "presentPerfect",
"pastPerfect", "futurePerfect", "wouldBePerfect", "pastSubjunctivePerfect", "pastPerfect",
"subjunctivePerfect",
"habitualPerfect",
"pastPerfect",
"futurePerfect",
"wouldBePerfect",
"pastSubjunctivePerfect",
"wouldHaveBeenPerfect", "wouldHaveBeenPerfect",
]); ]);
const oneVerb: T.VerbEntry = verbPools[levelInfo.pool](); const oneVerb: T.VerbEntry = verbPools[levelInfo.pool]();
const getVerb = level.level === 1 const getVerb =
? () => oneVerb level.level === 1 ? () => oneVerb : () => verbPools[levelInfo.pool]();
: () => verbPools[levelInfo.pool]();
function makeRandomNoun(): T.NounSelection { function makeRandomNoun(): T.NounSelection {
const n = makeNounSelection(randFromArray(nouns), undefined); const n = makeNounSelection(randFromArray(nouns), 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,
}; };
} }
function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete { function makeRandomVPS(tense: T.PerfectTense): T.VPSelectionComplete {
@ -188,22 +198,24 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
}); });
} }
function getQuestion(): Question { function getQuestion(): Question {
const VPS = makeRandomVPS(levelInfo.tense === "allTenses" const VPS = makeRandomVPS(
? tensePool() levelInfo.tense === "allTenses" ? tensePool() : levelInfo.tense
: levelInfo.tense
); );
const VP = renderVP(VPS); const VP = renderVP(VPS);
const compiled = compileVP( const compiled = compileVP(
VP, VP,
{ removeKing: false, shrinkServant: false }, { removeKing: false, shrinkServant: false },
true, true,
{ ba: levelInfo.tense === "allTenses", verb: true, negative: true }, { ba: levelInfo.tense === "allTenses", verb: true, negative: true }
); );
const phrase = { const phrase = {
ps: compiled.ps, ps: compiled.ps,
e: compiled.e, e: compiled.e,
}; };
return { return {
negative: VPS.verb.negative,
verb: VPS.verb.verb,
tense: VPS.verb.tense,
rendered: VP, rendered: VP,
phrase, phrase,
}; };
@ -212,44 +224,57 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
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 = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") { if (value === "به " || value === "به ") {
setWithBa(true); setWithBa(true);
setAnswer(""); setAnswer("");
return; return;
} }
setAnswer(value); setAnswer(value);
} };
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
const correct = comparePs(answer, getVerbPs(question.rendered)) const correct =
&& (withBa === verbHasBa(question.rendered)); comparePs(answer, getVerbPs(question.rendered)) &&
withBa === verbHasBa(question.rendered);
if (correct) { if (correct) {
setAnswer(""); setAnswer("");
} }
callback(correct); callback(correct);
} };
// useEffect(() => { // useEffect(() => {
// if (level === "allProduce") setWithBa(false); // if (level === "allProduce") setWithBa(false);
// }, [question]); // }, [question]);
return <div> return (
<QuestionDisplay question={question} userAnswer={{ <div>
<QuestionDisplay
question={question}
userAnswer={{
withBa, withBa,
answer, answer,
}} /> }}
/>
<form onSubmit={handleSubmit}> <form onSubmit={handleSubmit}>
{level.type === "all-tenses" && <div className="form-check mt-1"> {level.type === "all-tenses" && (
<div className="form-check mt-1">
<input <input
id="baCheckbox" id="baCheckbox"
className="form-check-input" className="form-check-input"
type="checkbox" type="checkbox"
checked={withBa} checked={withBa}
onChange={e => setWithBa(e.target.checked)} onChange={(e) => setWithBa(e.target.checked)}
/> />
<label className="form-check-label text-muted" htmlFor="baCheckbox"> <label
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span> className="form-check-label text-muted"
htmlFor="baCheckbox"
>
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs>{" "}
in the <span style={{ color: kidsColor }}>kids' section</span>
</label> </label>
</div>} </div>
)}
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}> <div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
<input <input
type="text" type="text"
@ -264,7 +289,9 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
</div> </div>
<div className="text-center my-2"> <div className="text-center my-2">
{/* <div> */} {/* <div> */}
<button className="btn btn-primary" type="submit">submit </button> <button className="btn btn-primary" type="submit">
submit
</button>
{/* </div> */} {/* </div> */}
{/* <div className="text-muted small text-center mt-2"> {/* <div className="text-muted small text-center mt-2">
Type <kbd>Enter</kbd> to check Type <kbd>Enter</kbd> to check
@ -272,19 +299,23 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
</div> </div>
</form> </form>
</div> </div>
);
} }
function Instructions() { function Instructions() {
const desc = levelInfo.description; const desc = levelInfo.description;
return <div> return (
<div>
<p className="lead"> <p className="lead">
Write the {desc} verb to complete the phrase Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"} {desc ? "" : " (all tenses)"}
</p> </p>
</div> </div>
);
} }
return <GameCore return (
<GameCore
inChapter={inChapter} inChapter={inChapter}
studyLink={link} studyLink={link}
getQuestion={getQuestion} getQuestion={getQuestion}
@ -295,59 +326,37 @@ const VerbGame: GameSubCore<PerfectGameLevel> = ({ id, link, level, inChapter }:
amount={amount} amount={amount}
Instructions={Instructions} 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]
);
const v = getVerbFromBlocks(question.rendered.blocks);
const vEntry = v.block.verb.entry;
const infoV = getVerbInfo(vEntry)
const info = "grammaticallyTransitive" in infoV
? infoV.grammaticallyTransitive
: "stative" in infoV
? infoV.stative
: infoV;
return <div className="mb-3 mt-2">
<div className="mb-2">
<div>{vEntry.p} - {removeFVarients(vEntry.f)} <span className="text-muted">{vEntry.c}</span></div>
<div>"{getEnglishVerb(vEntry)}"</div>
</div>
<details style={{ marginBottom: 0 }}>
<summary>🌳 Show roots and stems</summary>
<RootsAndStems info={info} textOptions={defaultTextOptions} />
</details>
<div dir="rtl">{ps.p}</div>
<div dir="ltr">{ps.f}</div>
{question.phrase.e && <div className="text-muted mt-2">
{question.phrase.e.map(x => <div key={Math.random()}>
{x}
</div>)}
</div>}
<div>{humanReadableVerbForm(v.block.tense)}</div>
</div>;
}
function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element {
return <div>
<div> <div>
{getVerbPs(question.rendered).reduce(((accum, curr, i): JSX.Element[] => ( <div>
[ {getVerbPs(question.rendered).reduce(
(accum, curr, i): JSX.Element[] => [
...accum, ...accum,
...i > 0 ? [<span className="text-muted"> or </span>] : [], ...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>{curr.p} - {curr.f}</span>, <span key={i}>
] {curr.p} - {curr.f}
)), [] as JSX.Element[])} </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>; <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,13 +375,16 @@ function DisplayCorrectAnswer({ question }: { question: Question }): JSX.Element
// }); // });
// } // }
function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString): T.PsString { function addUserAnswer(
a: { withBa: boolean; answer: string },
ps: T.PsString
): T.PsString {
function addBa(x: T.PsString) { function addBa(x: T.PsString) {
if (!a.withBa) return x; if (!a.withBa) return x;
return { return {
p: x.p.replace(kidsBlank.p, baParticle.p), p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f), f: x.f.replace(kidsBlank.f, baParticle.f),
} };
} }
function addAnswer(x: T.PsString): T.PsString { function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x; if (!a.answer) return x;
@ -385,18 +397,26 @@ function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString):
return addAnswer(addBa(ps)); return addAnswer(addBa(ps));
} }
function makeVPS({ verb, king, servant, tense, defaultTransitivity }: { function makeVPS({
verb: T.VerbEntry, verb,
king: T.NPSelection, king,
servant: T.NPSelection, servant,
tense: T.PerfectTense, tense,
defaultTransitivity: "transitive" | "grammatically transitive" defaultTransitivity,
}: {
verb: T.VerbEntry;
king: T.NPSelection;
servant: T.NPSelection;
tense: T.PerfectTense;
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 =
vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity
? defaultTransitivity ? defaultTransitivity
: vps.verb.transitivity; : vps.verb.transitivity;
const ergative = vps.verb.transitivity !== "intransitive" && isPastTense(tense); const ergative =
vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king; const subject = ergative ? servant : king;
const object = ergative ? king : servant; const object = ergative ? king : servant;
return { return {
@ -421,33 +441,14 @@ function makeVPS({ verb, king, servant, tense, defaultTransitivity }: {
key: Math.random(), key: Math.random(),
block: { block: {
type: "objectSelection", type: "objectSelection",
selection: transitivity === "intransitive" selection:
transitivity === "intransitive"
? "none" ? "none"
: transitivity === "grammatically transitive" : transitivity === "grammatically transitive"
? T.Person.ThirdPlurMale ? 10
: object, : object,
}, },
}, },
]), ]),
}; };
} }
function getVerbPs({ blocks }: T.VPRendered): T.PsString[] {
const { perfectiveHead, verb } = blockUtils.getVerbAndHeadFromBlocks(blocks);
const mU = blocks[0].find(b => b.block.type === "negative" && b.block.imperative);
function vBase() {
if (!perfectiveHead) {
return flattenLengths(verb.block.ps);
}
return flattenLengths(verb.block.ps).map(r => concatPsString(perfectiveHead.ps, r));
}
if (mU) {
return vBase().map(b => concatPsString({ p: "مه", f: "mú" }, " ", b));
}
return vBase();
}
function verbHasBa({ blocks }: T.VPRendered): boolean {
const verb = blockUtils.getVerbFromBlocks(blocks);
return verb.block.hasBa;
}

View File

@ -1,7 +1,5 @@
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,
@ -15,8 +13,6 @@ import {
renderVP, renderVP,
makeVPSelectionState, makeVPSelectionState,
compileVP, compileVP,
blockUtils,
concatPsString,
isInvalidSubjObjCombo, isInvalidSubjObjCombo,
removeFVarients, removeFVarients,
getEnglishVerb, getEnglishVerb,
@ -27,10 +23,10 @@ import {
blank, blank,
kidsBlank, kidsBlank,
isPashtoScript, isPashtoScript,
combineIntoText,
} 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,8 +39,11 @@ 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", [
@ -68,7 +67,7 @@ const verbs = wordQuery("verbs", [
]); ]);
const nouns = wordQuery("nouns", [ const nouns = wordQuery("nouns", [
"saRey", "saRay",
"xudza", "xudza",
"maashoom", "maashoom",
"puxtoon", "puxtoon",
@ -77,26 +76,32 @@ const nouns = wordQuery("nouns", [
"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"
@ -123,25 +128,33 @@ function selectVerbPool({ type }: VerbGameLevel): VerbPoolName {
// 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,
}: {
inChapter: boolean;
id: string;
link: string;
level: VerbGameLevel;
}) => { }) => {
const personPool = makePool(level.type === "imperative" const personPool = makePool(
? secondPersons level.type === "imperative" ? secondPersons : persons
: persons
); );
const verbPools: Record<VerbPoolName, () => T.VerbEntry> = { const verbPools: Record<VerbPoolName, () => T.VerbEntry> = {
basic: makePool(verbs, 15), basic: makePool(verbs, 15),
transitivePast: makePool(transitivePastVerbs, 15), transitivePast: makePool(transitivePastVerbs, 15),
intransitivePast: makePool(intransitivePastVerbs, 15), intransitivePast: makePool(intransitivePastVerbs, 15),
mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15), mixedPast: makePool([...transitivePastVerbs, ...intransitivePastVerbs], 15),
mixedAll: makePool([...verbs, ...transitivePastVerbs, ...intransitivePastVerbs], 15), mixedAll: makePool(
[...verbs, ...transitivePastVerbs, ...intransitivePastVerbs],
15
),
}; };
const oneVerb: T.VerbEntry = verbPools[selectVerbPool(level)](); const oneVerb: T.VerbEntry = verbPools[selectVerbPool(level)]();
const getVerb = level.level === 1 const getVerb =
level.level === 1
? () => oneVerb ? () => oneVerb
: () => verbPools[selectVerbPool(level)](); : () => verbPools[selectVerbPool(level)]();
function makeRandomNoun(): T.NounSelection { function makeRandomNoun(): T.NounSelection {
@ -149,10 +162,14 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
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,
}; };
} }
function makeRandomVPS(tense: T.VerbTense | T.ImperativeTense): T.VPSelectionComplete { function makeRandomVPS(
tense: T.VerbTense | T.ImperativeTense
): T.VPSelectionComplete {
function personToNPSelection(p: T.Person): T.NPSelection { function personToNPSelection(p: T.Person): T.NPSelection {
if (isThirdPerson(p)) { if (isThirdPerson(p)) {
return { return {
@ -199,13 +216,16 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
VP, VP,
{ removeKing: false, shrinkServant: false }, { removeKing: false, shrinkServant: false },
true, true,
{ ba: true, verb: true, negative: true }, { ba: true, verb: true, negative: true }
); );
const phrase = { const phrase = {
ps: compiled.ps, ps: compiled.ps,
e: compiled.e, e: compiled.e,
}; };
return { return {
tense: VPS.verb.tense,
negative: VPS.verb.negative,
verb: VPS.verb.verb,
rendered: VP, rendered: VP,
phrase, phrase,
}; };
@ -214,31 +234,38 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
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 = ({
target: { value },
}: React.ChangeEvent<HTMLInputElement>) => {
if (value === "به " || value === "به ") { if (value === "به " || value === "به ") {
setWithBa(true); setWithBa(true);
setAnswer(""); setAnswer("");
return; return;
} }
setAnswer(value); setAnswer(value);
} };
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
const correct = comparePs(answer, getVerbPs(question.rendered)) const correct =
&& (withBa === verbHasBa(question.rendered)); comparePs(answer, getVerbPs(question.rendered)) &&
withBa === verbHasBa(question.rendered);
if (correct) { if (correct) {
setAnswer(""); setAnswer("");
} }
callback(correct); callback(correct);
} };
// useEffect(() => { // useEffect(() => {
// if (level === "allProduce") setWithBa(false); // if (level === "allProduce") setWithBa(false);
// }, [question]); // }, [question]);
return <div> return (
<QuestionDisplay question={question} userAnswer={{ <div>
<QuestionDisplay
question={question}
userAnswer={{
withBa, withBa,
answer, answer,
}} /> }}
/>
<form onSubmit={handleSubmit}> <form onSubmit={handleSubmit}>
<div className="form-check mt-1"> <div className="form-check mt-1">
<input <input
@ -246,10 +273,11 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
className="form-check-input" className="form-check-input"
type="checkbox" type="checkbox"
checked={withBa} checked={withBa}
onChange={e => setWithBa(e.target.checked)} onChange={(e) => setWithBa(e.target.checked)}
/> />
<label className="form-check-label text-muted" htmlFor="baCheckbox"> <label className="form-check-label text-muted" htmlFor="baCheckbox">
with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the <span style={{ color: kidsColor }}>kids' section</span> with <InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in
the <span style={{ color: kidsColor }}>kids' section</span>
</label> </label>
</div> </div>
<div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}> <div className="my-1" style={{ maxWidth: "200px", margin: "0 auto" }}>
@ -266,7 +294,9 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
</div> </div>
<div className="text-center my-2"> <div className="text-center my-2">
{/* <div> */} {/* <div> */}
<button className="btn btn-primary" type="submit">submit </button> <button className="btn btn-primary" type="submit">
submit
</button>
{/* </div> */} {/* </div> */}
{/* <div className="text-muted small text-center mt-2"> {/* <div className="text-muted small text-center mt-2">
Type <kbd>Enter</kbd> to check Type <kbd>Enter</kbd> to check
@ -274,19 +304,23 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
</div> </div>
</form> </form>
</div> </div>
);
} }
function Instructions() { function Instructions() {
const desc = levelToDescription(level); const desc = levelToDescription(level);
return <div> return (
<div>
<p className="lead"> <p className="lead">
Write the {desc} verb to complete the phrase Write the {desc} verb to complete the phrase
{desc ? "" : " (all tenses)"} {desc ? "" : " (all tenses)"}
</p> </p>
</div> </div>
);
} }
return <GameCore return (
<GameCore
inChapter={inChapter} inChapter={inChapter}
studyLink={link} studyLink={link}
getQuestion={getQuestion} getQuestion={getQuestion}
@ -297,68 +331,92 @@ const VerbGame: GameSubCore<VerbGameLevel> = ({ id, link, level, inChapter }: {
amount={amount} amount={amount}
Instructions={Instructions} Instructions={Instructions}
/> />
);
}; };
export default VerbGame; export default VerbGame;
function QuestionDisplay({ question, userAnswer }: { export function QuestionDisplay({
question: Question, question,
userAnswer: { withBa: boolean, answer: string },
}) {
const ps = addUserAnswer(
userAnswer, userAnswer,
flattenLengths(question.phrase.ps)[0] }: {
); question: Question;
const v = getVerbFromBlocks(question.rendered.blocks); userAnswer: { withBa: boolean; answer: string };
const vEntry = v.block.verb.entry; }) {
const infoV = getVerbInfo(vEntry) const ps = addUserAnswer(userAnswer, flattenLengths(question.phrase.ps)[0]);
const info = "grammaticallyTransitive" in infoV const infoV = getVerbInfo(question.verb.entry, question.verb.complement);
const info =
"grammaticallyTransitive" in infoV
? infoV.grammaticallyTransitive ? infoV.grammaticallyTransitive
: "stative" in infoV : "stative" in infoV
? infoV.stative ? infoV.stative
: infoV; : infoV;
return <div className="mb-3"> return (
<div className="mb-2">{vEntry.p} - {removeFVarients(vEntry.f)} "{getEnglishVerb(vEntry)}"</div> <div className="mb-3">
<div className="mb-2">
{question.verb.entry.p} - {removeFVarients(question.verb.entry.f)} "
{getEnglishVerb(question.verb.entry)}"
</div>
<details style={{ marginBottom: 0 }}> <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({
question,
}: {
question: Question;
}): JSX.Element {
return (
<div>
<div>
{getVerbPs(question.rendered).reduce(
(accum, curr, i): JSX.Element[] => [
...accum,
...(i > 0 ? [<span className="text-muted"> or </span>] : []),
<span key={i}>
{curr.p} - {curr.f}
</span>,
],
[] as JSX.Element[]
)}
</div>
<div>
<strong>{verbHasBa(question.rendered) ? "with" : "without"}</strong> a{" "}
<InlinePs opts={opts}>{grammarUnits.baParticle}</InlinePs> in the kids'
section.
</div>
</div>
);
}
function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString): T.PsString { function addUserAnswer(
a: { withBa: boolean; answer: string },
ps: T.PsString
): T.PsString {
function addBa(x: T.PsString) { function addBa(x: T.PsString) {
if (!a.withBa) return x; if (!a.withBa) return x;
return { return {
p: x.p.replace(kidsBlank.p, baParticle.p), p: x.p.replace(kidsBlank.p, baParticle.p),
f: x.f.replace(kidsBlank.f, baParticle.f), f: x.f.replace(kidsBlank.f, baParticle.f),
} };
} }
function addAnswer(x: T.PsString): T.PsString { function addAnswer(x: T.PsString): T.PsString {
if (!a.answer) return x; if (!a.answer) return x;
@ -371,7 +429,6 @@ function addUserAnswer(a: { withBa: boolean, answer: string }, ps: T.PsString):
return addAnswer(addBa(ps)); return addAnswer(addBa(ps));
} }
function levelToDescription({ type }: VerbGameLevel): string { function levelToDescription({ type }: VerbGameLevel): string {
return type === "presentVerb" return type === "presentVerb"
? "present" ? "present"
@ -393,11 +450,13 @@ function levelToDescription({ type }: VerbGameLevel): string {
? "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({
type,
}: VerbGameLevel): T.VerbTense | T.ImperativeTense {
return type === "presentVerb" return type === "presentVerb"
? type ? type
: type === "subjunctiveVerb" : type === "subjunctiveVerb"
@ -406,14 +465,16 @@ function levelToTense({ type }: VerbGameLevel): T.VerbTense | T.ImperativeTense
? randFromArray(["perfectiveFuture", "imperfectiveFuture"]) ? randFromArray(["perfectiveFuture", "imperfectiveFuture"])
: type === "imperative" : type === "imperative"
? randFromArray(["perfectiveImperative", "imperfectiveImperative"]) ? randFromArray(["perfectiveImperative", "imperfectiveImperative"])
: (type === "intransitiveImperfectivePast" || type === "transitiveImperfectivePast") : type === "intransitiveImperfectivePast" ||
type === "transitiveImperfectivePast"
? "imperfectivePast" ? "imperfectivePast"
: (type === "intransitivePerfectivePast" || type === "transitivePerfectivePast") : type === "intransitivePerfectivePast" ||
type === "transitivePerfectivePast"
? "perfectivePast" ? "perfectivePast"
: type === "habitualPast" : type === "habitualPast"
? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"]) ? randFromArray(["habitualPerfectivePast", "habitualImperfectivePast"])
// : type === "allPast" : // : type === "allPast"
: randFromArray([ randFromArray([
"perfectivePast", "perfectivePast",
"imperfectivePast", "imperfectivePast",
"habitualPerfectivePast", "habitualPerfectivePast",
@ -421,18 +482,26 @@ function levelToTense({ type }: VerbGameLevel): T.VerbTense | T.ImperativeTense
]); ]);
} }
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 =
vps.verb.transitivity === "transitive" && vps.verb.canChangeTransitivity
? defaultTransitivity ? defaultTransitivity
: vps.verb.transitivity; : vps.verb.transitivity;
const ergative = vps.verb.transitivity !== "intransitive" && isPastTense(tense); const ergative =
vps.verb.transitivity !== "intransitive" && isPastTense(tense);
const subject = ergative ? servant : king; const subject = ergative ? servant : king;
const object = ergative ? king : servant; const object = ergative ? king : servant;
return { return {
@ -457,10 +526,11 @@ function makeVPS({ verb, king, servant, tense, defaultTransitivity }: {
key: Math.random(), key: Math.random(),
block: { block: {
type: "objectSelection", type: "objectSelection",
selection: transitivity === "intransitive" selection:
transitivity === "intransitive"
? "none" ? "none"
: transitivity === "grammatically transitive" : transitivity === "grammatically transitive"
? T.Person.ThirdPlurMale ? 10
: object, : object,
}, },
}, },
@ -468,22 +538,20 @@ function makeVPS({ verb, king, servant, tense, defaultTransitivity }: {
}; };
} }
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

@ -7,16 +7,21 @@ import {
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",
@ -26,22 +31,19 @@ const nouns = wordQuery("nouns", [
]); ]);
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);
@ -62,7 +64,9 @@ export function randomEPSPool(l: T.EquativeTense | "allTenses") {
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 { return function makeRandomEPS(): T.EPSelectionComplete {
@ -76,16 +80,16 @@ export function randomEPSPool(l: T.EquativeTense | "allTenses") {
])(), ])(),
}; };
const pred = predPool(); const pred = predPool();
const tense = (l === "allTenses") const tense = l === "allTenses" ? tensePool() : l;
? tensePool()
: l;
return makeEPS(subj, pred, tense); return makeEPS(subj, pred, tense);
};
} }
} function makeEPS(
subject: T.NPSelection,
predicate: T.AdjectiveEntry | T.LocativeAdverbEntry,
function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry | T.LocativeAdverbEntry, tense: T.EquativeTense): T.EPSelectionComplete { tense: T.EquativeTense
): T.EPSelectionComplete {
return { return {
blocks: [ blocks: [
{ {
@ -100,11 +104,13 @@ function makeEPS(subject: T.NPSelection, predicate: T.AdjectiveEntry | T.Locativ
type: "predicateSelection", type: "predicateSelection",
selection: { selection: {
type: "complement", type: "complement",
selection: tp.isAdjectiveEntry(predicate) ? { selection: tp.isAdjectiveEntry(predicate)
? {
type: "adjective", type: "adjective",
entry: predicate, entry: predicate,
sandwich: undefined, sandwich: undefined,
} : { }
: {
type: "loc. adv.", type: "loc. adv.",
entry: predicate, entry: predicate,
}, },

View File

@ -8,7 +8,7 @@ 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",
@ -22,12 +22,12 @@ const nouns = wordQuery("nouns", [
"oobu", "oobu",
"korba", "korba",
"shpoon", "shpoon",
"gaawanDey", "gaawanDay",
"lmasey", "lmasay",
"lobghaaRey", "lobghaaRay",
"sandurghaaRey", "sandurghaaRay",
"malgurey", "malguray",
"shpoonkey", "shpoonkay",
"khalk", "khalk",
"ghul", "ghul",
"khur", "khur",
@ -35,22 +35,22 @@ const nouns = wordQuery("nouns", [
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",
@ -58,7 +58,7 @@ const adjectives = wordQuery("adjectives", [
"oom", "oom",
"khoG", "khoG",
"droond", "droond",
"loomRey", "loomRay",
"Roond", "Roond",
"prot", "prot",
"soR", "soR",
@ -74,7 +74,9 @@ const adjectives = wordQuery("adjectives", [
"naast", "naast",
]); ]);
export function makeNPAdjGenerator(pluralsLevel: "none" | "low" | "high"): () => T.NPSelection { export function makeNPAdjGenerator(
pluralsLevel: "none" | "low" | "high"
): () => T.NPSelection {
const nounPool = makePool(nouns); const nounPool = makePool(nouns);
const adjPool = makePool(adjectives); const adjPool = makePool(adjectives);
@ -83,12 +85,20 @@ export function makeNPAdjGenerator(pluralsLevel: "none" | "low" | "high"): () =>
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"
? ["singular", "plural", "plural", "plural", "singular"]
: ["singular", "plural", "singular"]
),
}
: {}),
...(ns.genderCanChange
? {
gender: randFromArray(["masc", "fem", "fem", "fem", "masc"]), gender: randFromArray(["masc", "fem", "fem", "fem", "masc"]),
} : {}, }
: {}),
}; };
return { return {
type: "NP", type: "NP",
@ -96,4 +106,3 @@ export function makeNPAdjGenerator(pluralsLevel: "none" | "low" | "high"): () =>
}; };
}; };
} }

View File

@ -639,7 +639,6 @@ export default [
1527821465, // ولی - wuléy 1527821465, // ولی - wuléy
1527812822, // کوچنی 1527812822, // کوچنی
1527822004, // آخرینی - aakhireenéy
1591872915426, // افغانی - afghaanéy 1591872915426, // افغانی - afghaanéy
1612616237182, // پاکستانی - paakistaanéy 1612616237182, // پاکستانی - paakistaanéy
1527813400, // اوسنی - oosanéy 1527813400, // اوسنی - oosanéy
@ -693,7 +692,7 @@ export default [
1527822859, // څپولی 1527822859, // څپولی
1527811466, // څېړونکی 1527811466, // څېړونکی
1527812377, // حکم منونکی 1527812377, // حکم منونکی
1527817299, // حیرانوونکی 1690458841825, // حیرانوونکی
1527813282, // خرڅوونکی 1527813282, // خرڅوونکی
1527812809, // خوار ځواکی 1527812809, // خوار ځواکی
1591871233587, // خوږژبی 1591871233587, // خوږژبی

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"