APs and movable blocks in Equative Phrases!
This commit is contained in:
parent
5c9b7b7c3e
commit
f5ae11c1ad
|
@ -0,0 +1,505 @@
|
||||||
|
module.exports = [
|
||||||
|
{ ts: 1527812449, e: `there` }, // هلته - hálta, álta
|
||||||
|
{ ts: 1527823758, e: `only, just` }, // ایکي - eekee
|
||||||
|
{ ts: 1527813043, e: `without delay, immediately` }, // بې له ټاله - be la Taala
|
||||||
|
{ ts: 1527823145, e: `outside, from without, on the outside; abroad (as in out of country)` }, // بېرون - beróon
|
||||||
|
{ ts: 1527811735, e: `artistically, skillfully` }, // هنرمندانه - hUnarmandaana
|
||||||
|
{ ts: 1527813516, e: `how` }, // څنګه - tsanga, tsunga
|
||||||
|
{ ts: 1578014249199, e: `therein` }, // پکښې - pukxe
|
||||||
|
{ ts: 1527821618, e: `stupidly, foolishly, stupid, foolish; stupid, foolish` }, // احمقانه - ahmaqaana
|
||||||
|
{ ts: 1579824262965, e: `together, in one place; at the same time` }, // یو ځای - yo dzaay
|
||||||
|
{ ts: 1527822788, e: `tonight, this evening` }, // بېګاته - begáata
|
||||||
|
{ ts: 1527812183, e: `aware of, thinking of` }, // ورپام - wărpaam
|
||||||
|
{ ts: 1527814711, e: `soon, very soon, shortly` }, // لنډ پر لنډه - lanD par lanDa
|
||||||
|
{ ts: 1527821930, e: `impromptu, without preparation` }, // بالبدیهه - bilbadeehá
|
||||||
|
{ ts: 1527814164, e: `this side, on this side` }, // دېخوا - dekhwaa
|
||||||
|
{ ts: 1527815160, e: `yesterday` }, // پرون - paroon
|
||||||
|
{ ts: 1623688539364, e: `nasal (speaking through the nose)` }, // ګانګوړ - gaangóR, gaangwÚR
|
||||||
|
{ ts: 1588780597931, e: `near, close to, almost` }, // نېږدې - neGdé
|
||||||
|
{ ts: 1527821127, e: `specifically, especially, in particular` }, // مشخصاً - mUshakhkhasan
|
||||||
|
{ ts: 1527811221, e: `above, overhead` }, // پورته - porta
|
||||||
|
{ ts: 1611401028364, e: `physically` }, // جسماً - jismán
|
||||||
|
{ ts: 1527815099, e: `late` }, // نا وخته - naa wakhta
|
||||||
|
{ ts: 1527823029, e: `evident, open, manifestly, frankly` }, // برالا - baraalaa
|
||||||
|
{ ts: 1527817154, e: `after (as in going after), in pursuit, behind (د چا پسې خبرې کول – to talk bad about someone, gossip, or talk bad behind their back)` }, // پسې - pase
|
||||||
|
{ ts: 1527818325, e: `fee; useless person, idle, vagrant; barely, just, scarcely, only, merely` }, // اېله - elá
|
||||||
|
{ ts: 1610796256372, e: `forward` }, // مخ په وړاندې - mukh pu wRaande
|
||||||
|
{ ts: 1527819870, e: `unfaily, unjustly, falsely, undeservingly` }, // په ناحقه - pu naahaqa
|
||||||
|
{ ts: 1527815228, e: `slow; slowly` }, // رو - roo
|
||||||
|
{ ts: 1575236274891, e: `this way, here, over there` }, // دوري - dóoree
|
||||||
|
{ ts: 1527818064, e: `after him/her/it/them, behind` }, // ورپسې - warpase
|
||||||
|
{ ts: 1527820292, e: `behind` }, // شاته - shaata
|
||||||
|
{ ts: 1610443940798, e: `finally, end` }, // اخیر - akhéer
|
||||||
|
{ ts: 1527812428, e: `exactly, precisely, as is` }, // کټمټ - kaTmaT, kuTmuT
|
||||||
|
{ ts: 1527818594, e: `naturally, by nature, of course` }, // طبعاً - tab'án
|
||||||
|
{ ts: 1527822766, e: `suddenly, immediately, instantly, at once` }, // وار له واره - waar la waara
|
||||||
|
{ ts: 1527812448, e: `of course, certainly` }, // البته - albatta
|
||||||
|
{ ts: 1527812935, e: `face to face, across from, opposite; straight` }, // مخامخ - mukhaamukh
|
||||||
|
{ ts: 1527813711, e: `sudden, suddenly, unexpected, unexpectedly, unforeseen` }, // ناڅاپه - naatsaapa
|
||||||
|
{ ts: 1527823633, e: `let’s suppose, supposing, supposedly` }, // بالفرض - bilfárz
|
||||||
|
{ ts: 1527818327, e: `pure, uncontaminated; plain, simple; merely, only, purely` }, // محض - mahz
|
||||||
|
{ ts: 1527814561, e: `duty bound, answering the call of duty` }, // وظیفتاً - wazeefatan
|
||||||
|
{ ts: 1527821294, e: `never, not at all` }, // هرګز - hărgíz
|
||||||
|
{ ts: 1527815428, e: `alone, only` }, // یوازې - yawaaze
|
||||||
|
{ ts: 1527817895, e: `maybe, perhaps, possibly, apparently` }, // ګوندې - goonde
|
||||||
|
{ ts: 1527818439, e: `last night, yesterday evening; this evening, dusk` }, // بېګا - begaa
|
||||||
|
{ ts: 1527811712, e: `near, close, basically, approximately; control, check` }, // کابو - kaaboo
|
||||||
|
{ ts: 1527812665, e: `any time` }, // هر کله - hăr kala
|
||||||
|
{ ts: 1527822392, e: `all over, in every corner` }, // ګوټ ګوټ - gooT gooT
|
||||||
|
{ ts: 1527818697, e: `forgotten` }, // فراموش - faraamosh, faraamoosh
|
||||||
|
{ ts: 1595233263437, e: `suddenly, unexpectedly, out of turn, embarrassed` }, // بې واره - bewáara
|
||||||
|
{ ts: 1527817342, e: `scrutiny, deliberation, intent; carefully, watchfully, intently (as in looking at somebody intently – چا ته په ځير کتل)` }, // ځیر - dzeer
|
||||||
|
{ ts: 1527823024, e: `besides, except for, without (د دې نه بغير)` }, // بغیر - baghéyr
|
||||||
|
{ ts: 1566476668924, e: `practically, in practice` }, // عملاً - amalán
|
||||||
|
{ ts: 1527822699, e: `actually, in fact` }, // اساساً - asaasan
|
||||||
|
{ ts: 1595233763403, e: `attaining, achieving; precise, exact; height?` }, // رسا - rasáa, rusáa
|
||||||
|
{ ts: 1527823231, e: `evasively` }, // په جڼه جڼه - pu jaNa jaNa
|
||||||
|
{ ts: 1527812890, e: `usually` }, // معمولاً - mamoolan
|
||||||
|
{ ts: 1586363985796, e: `daily, each day` }, // روزانه - rozaaná
|
||||||
|
{ ts: 1527819008, e: `autocratic, despotic, absolute` }, // مطلق العنان - mUtlaq-Ul-'ináan
|
||||||
|
{ ts: 1527822660, e: `automatically, on one’s own, on it’s own` }, // خود به خود - khoodbakhood
|
||||||
|
{ ts: 1527823364, e: `in spite of, despite, notwithstading` }, // باوجود - baawujood
|
||||||
|
{ ts: 1527820143, e: `after, later, afterwards` }, // پسته - pasta
|
||||||
|
{ ts: 1527821368, e: `unconditional` }, // بلاشرط - bilaashárt
|
||||||
|
{ ts: 1527814075, e: `pure, entirely, totally, completely` }, // سوچ - sooch
|
||||||
|
{ ts: 1527814911, e: `near, close to, almost` }, // نږدې - naGde
|
||||||
|
{ ts: 1527822215, e: `by foot, on foot, walking` }, // پېدل - pedál
|
||||||
|
{ ts: 1527813790, e: `because of this, for this reason` }, // په دې خاطر - pu de khaatur
|
||||||
|
{ ts: 1527822329, e: `in a detailed fashion, thoroughly` }, // مفصلاً - mUfasalan
|
||||||
|
{ ts: 1527818655, e: `right up to, even; exactly, directly` }, // عن - an
|
||||||
|
{ ts: 1527815358, e: `all; gathered, collected; gross (as opposed to net)` }, // ټول - Tol
|
||||||
|
{ ts: 1527819777, e: `monthly, by the month, per month` }, // ماهواري - maahawaaree
|
||||||
|
{ ts: 1527818774, e: `without a doubt, undoubtedly, certain` }, // بې شبهه - be shÚbha
|
||||||
|
{ ts: 1527821224, e: `only, just, uniquely, that’s all, the end` }, // فقط - faqát
|
||||||
|
{ ts: 1527817302, e: `together, in one place` }, // یوځای - yodzaay
|
||||||
|
{ ts: 1527820499, e: `for a time, for temporary use, for rent` }, // عاریتاً - aariyatan
|
||||||
|
{ ts: 1527815959, e: `in an instant, in a flash, at once` }, // دم درحال - dam dărhaal
|
||||||
|
{ ts: 1527821253, e: `near, close (نژدې)` }, // نزدې - nizde, nazde
|
||||||
|
{ ts: 1527815997, e: `unfortunately` }, // بدبختانه - badbakhtaana
|
||||||
|
{ ts: 1584688791272, e: `on purpose, intentionally (قصداً)` }, // په لوی لاس - pu looy laas
|
||||||
|
{ ts: 1527814166, e: `side by side` }, // خوا په خوا - khwaa pu khwaa
|
||||||
|
{ ts: 1527818306, e: `daily, everyday` }, // هرورځنی - hărwradzanéy
|
||||||
|
{ ts: 1527815198, e: `formerly, before` }, // پخوا - pukhwaa
|
||||||
|
{ ts: 1527817953, e: `consciously, (doing something) while being informed` }, // اګاهانه - agaahaana
|
||||||
|
{ ts: 1586453865821, e: `at the same time` }, // هم مهاله - hum mahaala
|
||||||
|
{ ts: 1527818003, e: `obligatory, necessary; definitely, surely` }, // ضرور - zaróor
|
||||||
|
{ ts: 1527821734, e: `especially` }, // خاصتاً - khaassatán
|
||||||
|
{ ts: 1527813653, e: `in this way, like this` }, // دغسې - daghase
|
||||||
|
{ ts: 1527813773, e: `for example` }, // مثلاً - maslan
|
||||||
|
{ ts: 1527815963, e: `now, at this moment` }, // دم دستي - dam dastee
|
||||||
|
{ ts: 1527821877, e: `verbal, oral; verbally, orally` }, // شفاهي - shafaahee
|
||||||
|
{ ts: 1527819031, e: `by chance, coincidentally, accidentally` }, // تصادفاً - tasaadUfan
|
||||||
|
{ ts: 1527813109, e: `really, truly, real, true` }, // واقعي - waaqee
|
||||||
|
{ ts: 1578015603537, e: `above` }, // له پاسه - la paasa
|
||||||
|
{ ts: 1527823385, e: `cowardly` }, // بزدلانه - bUzdilaana
|
||||||
|
{ ts: 1586265891338, e: `until now, up until now, yet` }, // تر اوسه - turoosa
|
||||||
|
{ ts: 1527812743, e: `when, sometimes` }, // کله - kala
|
||||||
|
{ ts: 1527811637, e: `most, the majority, predominating` }, // زیاتره - zyaatara
|
||||||
|
{ ts: 1527811328, e: `sincerely, truthfully, faithfully` }, // صادقانه - saadiqaana
|
||||||
|
{ ts: 1576439306974, e: `honourably` }, // ابرومندانه - abroomandaana
|
||||||
|
{ ts: 1527822114, e: `barely, scarcely, just, hardly ever; just, so much; in vain, for naught, for no reason` }, // هیله بیله - heela beela
|
||||||
|
{ ts: 1527818329, e: `extremity, end, maximum, utmost; only, the thing is, at least` }, // منتها - mUntaháa
|
||||||
|
{ ts: 1527816311, e: `approximately, about` }, // تقریباً - taqreeban
|
||||||
|
{ ts: 1527820706, e: `extremely, ultimately` }, // نهایتاً - nihaayatan
|
||||||
|
{ ts: 1527818709, e: `in particular, especially` }, // خصوصاً - khUsoosan
|
||||||
|
{ ts: 1527822388, e: `immediately, instantly, right away` }, // ټک په ټک - Tak pu Tak
|
||||||
|
{ ts: 1584515639723, e: `at least` }, // اقلاً - aqalan
|
||||||
|
{ ts: 1578006215294, e: `beginner, new, inexperienced; a little bit` }, // نوکی - nawakéy
|
||||||
|
{ ts: 1527813279, e: `in front of, forward, ahead of` }, // مخته - mukhta
|
||||||
|
{ ts: 1527818411, e: `logically` }, // منتقاً - mantiqan
|
||||||
|
{ ts: 1527814269, e: `unfortunately, regretfully` }, // متاسفانه - mUtaasafaana
|
||||||
|
{ ts: 1527819967, e: `definitely, for sure, whether someone wants or not, willy-nilly (this last use more in Urdu)` }, // خامخا - khaamakhaa
|
||||||
|
{ ts: 1527815457, e: `all over, throughout` }, // سراسري - săraasaree
|
||||||
|
{ ts: 1527820539, e: `honourably, with dignity` }, // شرافتمندانه - sharaafatmandaana
|
||||||
|
{ ts: 1576103092146, e: `involuntarily, unintentionally` }, // غیر اختیاري - gheyr ikhtiyaaree
|
||||||
|
{ ts: 1527815347, e: `last year` }, // تېرکال - terkaal
|
||||||
|
{ ts: 1527811405, e: `officially` }, // رسماً - rasman
|
||||||
|
{ ts: 1527816897, e: `last year` }, // پروسږکال - prosaGkaal
|
||||||
|
{ ts: 1527818069, e: `in front of him/her/it/them` }, // وروړاندې - wărwRaande
|
||||||
|
{ ts: 1527812987, e: `the day after tomorrow` }, // پس صبا - passabaa
|
||||||
|
{ ts: 1527814452, e: `at the side of something, yonder, over there` }, // ایسته - eesta
|
||||||
|
{ ts: 1527819269, e: `individually, separately, apart` }, // ځانله - dzaanla
|
||||||
|
{ ts: 1527815243, e: `tomorrow, morning` }, // صبا - sabaa
|
||||||
|
{ ts: 1527811604, e: `intentionally, purposefully` }, // په قصد - pu qasd
|
||||||
|
{ ts: 1527813200, e: `just so much, exactly this much, only` }, // همدومره - hamdoomra
|
||||||
|
{ ts: 1527813586, e: `as` }, // په توګه - pu toga
|
||||||
|
{ ts: 1527823589, e: `poorly, miserably, thinly, sparsely` }, // ناداره - naadaará
|
||||||
|
{ ts: 1568927284353, e: `again and again, again, over and over (څو ځلې)` }, // په کراتو - pu karaato ??
|
||||||
|
{ ts: 1527812322, e: `just, just because; in vain, for no reason, to no avail` }, // هاسې - haase
|
||||||
|
{ ts: 1527822679, e: `successfully` }, // کامیابانه - kaamyaabaana
|
||||||
|
{ ts: 1566477540941, e: `totally, wholly, all together` }, // جمعاً - jam'an
|
||||||
|
{ ts: 1527815719, e: `in this way, in the same way, in just this way` }, // همدارنګه - hamdaaranga
|
||||||
|
{ ts: 1585821362480, e: `most, the majority, mostly` }, // اکثره - aksara
|
||||||
|
{ ts: 1527815385, e: `until the end, until the finish` }, // تر پایه - tur paaya
|
||||||
|
{ ts: 1527815193, e: `together, combined` }, // په ګډه - pu guDa
|
||||||
|
{ ts: 1527814109, e: `first, at first` }, // اول - awwal
|
||||||
|
{ ts: 1527811233, e: `openly, frankly` }, // ډاګه - Daaga
|
||||||
|
{ ts: 1585835393077, e: `last night` }, // برایي - baraayée
|
||||||
|
{ ts: 1527823027, e: `at least` }, // کم از کم - kam az kam
|
||||||
|
{ ts: 1527816912, e: `outside, outside of, beyond` }, // دباندي - dubaandee
|
||||||
|
{ ts: 1527816580, e: `direct, straight` }, // مستقیم - mUstaqeem
|
||||||
|
{ ts: 1527822780, e: `forward, towards` }, // ورمخته - wărmukhta
|
||||||
|
{ ts: 1527815242, e: `tomorrow, morning` }, // سبا - sabaa
|
||||||
|
{ ts: 1527815070, e: `all alone, alone` }, // یک تنها - yaktanhaa
|
||||||
|
{ ts: 1527819758, e: `totally, fully, completely` }, // کاملاً - kaamilan
|
||||||
|
{ ts: 1527817002, e: `along with, alongside of` }, // ترڅنګ - turtsang
|
||||||
|
{ ts: 1527818671, e: `once, ever, anytime, sometimes, now and then` }, // ګاهې - gaahe
|
||||||
|
{ ts: 1527822214, e: `by foot, on foot, walking; pedestrian, infantry` }, // پیاده - piyaada
|
||||||
|
{ ts: 1527813690, e: `above, on top` }, // بر - bar
|
||||||
|
{ ts: 1527814710, e: `soon, very soon, shortly` }, // نژدې پر نژدې - najzde par najzde
|
||||||
|
{ ts: 1527821743, e: `at first` }, // ابتداً - ibtidán
|
||||||
|
{ ts: 1527817155, e: `continuous, back to back, uninterrupted, constant, unceasing` }, // پرله پسې - parlapase
|
||||||
|
{ ts: 1527818323, e: `barely, just, scarcely, only, merely` }, // ایله - eelá
|
||||||
|
{ ts: 1527822464, e: `in imitation, in manner of copying` }, // تقلیداً - taqleedan
|
||||||
|
{ ts: 1527813650, e: `like, as, similar to; spot, stain` }, // لکه - lăka
|
||||||
|
{ ts: 1527811618, e: `as` }, // منحیث - minheys
|
||||||
|
{ ts: 1527822465, e: `with trouble, with difficulty, strained` }, // تقلیفاً - taqleefan
|
||||||
|
{ ts: 1527817294, e: `up, above` }, // پاس - paas
|
||||||
|
{ ts: 1527819016, e: `directly` }, // مستقیماً - mUstaqeeman
|
||||||
|
{ ts: 1527817351, e: `around, surrounding, encompassing` }, // ګرد چاپېره - gardchaapera
|
||||||
|
{ ts: 1527814605, e: `far, distant` }, // لرې - lure
|
||||||
|
{ ts: 1527819679, e: `special (fig. really, well, actually, totally)` }, // خاص - khaas
|
||||||
|
{ ts: 1527820827, e: `one time, once` }, // یوځل - yawdzal
|
||||||
|
{ ts: 1527821764, e: `wild, savage, barbaric` }, // وحشیانه - wahshiyaana
|
||||||
|
{ ts: 1527821332, e: `respectfully` }, // دست بسته - dastbastá
|
||||||
|
{ ts: 1527820017, e: `suddenly, at once, unexpectedly, by chance` }, // یوناڅاپه - yawnaatsáapa
|
||||||
|
{ ts: 1527818326, e: `merely, only` }, // صرفاً - sarfan
|
||||||
|
{ ts: 1527812371, e: `never` }, // هیڅ کله - heetskala
|
||||||
|
{ ts: 1527822803, e: `far, distantly, a bit further, to the side, back, away, direction` }, // هیسته - héesta
|
||||||
|
{ ts: 1610800613765, e: `as if, like, seemingly; or else, otherwise` }, // ګڼې - gaNe
|
||||||
|
{ ts: 1527819007, e: `absolute, fully, unconditional, absolutely` }, // مطلق - mUtláq
|
||||||
|
{ ts: 1527818714, e: `gradually` }, // په تدریجي ډول - pu tadreejee Dawul
|
||||||
|
{ ts: 1527817350, e: `around, surrounding, encompassing` }, // چاپېره - chaapera
|
||||||
|
{ ts: 1610800612067, e: `as if, like, seemingly; or else, otherwise` }, // ګنې - gane
|
||||||
|
{ ts: 1527816043, e: `still, even so` }, // بیا هم - byaa hum, byaa ham
|
||||||
|
{ ts: 1527818040, e: `fortunately` }, // د ښه مرغه - du xu murgha
|
||||||
|
{ ts: 1527814904, e: `empty, hollow; just` }, // تش - tush, tash
|
||||||
|
{ ts: 1527820490, e: `half-and-half, rented on a metayage basis` }, // نیمکاره - neemkaara
|
||||||
|
{ ts: 1527813874, e: `crooked, winding, twisted` }, // تاوراتاو - taawraataaw
|
||||||
|
{ ts: 1579389575376, e: `in name, by name only` }, // په نامه - pu naama
|
||||||
|
{ ts: 1527820440, e: `all the more, still more` }, // لاپسې - laapasé
|
||||||
|
{ ts: 1527818174, e: `how, like` }, // څرنګه - tsuranga
|
||||||
|
{ ts: 1527813915, e: `before, in front of` }, // مخکې - mukhke
|
||||||
|
{ ts: 1527818596, e: `naturally, by one’s nature` }, // طبیعتاً - tabiy'atan
|
||||||
|
{ ts: 1527819271, e: `relatively` }, // نسبتاً - nisbatan
|
||||||
|
{ ts: 1527819335, e: `on an empty stomach, not having eaten` }, // نهار نهور - niháar nUhóor
|
||||||
|
{ ts: 1527811270, e: `from a distance, from afar, distantly` }, // له ورا - lawraa
|
||||||
|
{ ts: 1527815317, e: `immediately, instantly` }, // سمدستي - sumdustee
|
||||||
|
{ ts: 1527816034, e: `behind` }, // تر شا - tur shaa
|
||||||
|
{ ts: 1610454983695, e: `at this place, at that place, here` }, // دغلته - daghalta
|
||||||
|
{ ts: 1527811243, e: `even, even up to, as far as, right up to, precisely` }, // ان - an
|
||||||
|
{ ts: 1527818049, e: `foolishly, ignorantly, carelessly (often religious, ignoring eternal consequences)` }, // غافلانه - ghaafilaana
|
||||||
|
{ ts: 1595517249765, e: `quickly` }, // په جلتۍ - pu jaltúy
|
||||||
|
{ ts: 1622875116871, e: `just like that/this (abrev of هم دغسې)` }, // همدغسې - humdaghase
|
||||||
|
{ ts: 1527815135, e: `now` }, // اوس - oos
|
||||||
|
{ ts: 1527815433, e: `one each` }, // یو یو - yo yo
|
||||||
|
{ ts: 1577390288042, e: `colloqiual/dialectical contraction of the adverb پرې (thereupon, thereon)` }, // پې - pe
|
||||||
|
{ ts: 1527811986, e: `similarly` }, // همداراز - humdaaraaz
|
||||||
|
{ ts: 1566476674338, e: `theoretically, in theory` }, // نظراً - nazarán
|
||||||
|
{ ts: 1527820087, e: `time and again, occasionally ???` }, // وخت ناوخت - wakhtnaawakht
|
||||||
|
{ ts: 1527814163, e: `that side, across` }, // اخوا - akhwaa
|
||||||
|
{ ts: 1527822165, e: `straight, level, right away, direct, frank` }, // سیده - seeda
|
||||||
|
{ ts: 1527814912, e: `near, close to` }, // رانږدې - raanaGde
|
||||||
|
{ ts: 1593176318060, e: `openly, direct` }, // ډانګ پېیلی - Daang pe`yúley
|
||||||
|
{ ts: 1527819455, e: `because of this` }, // د دې له کبله - du de la kabala
|
||||||
|
{ ts: 1578330078760, e: `badly, bad` }, // بدبد - badbad, budbud
|
||||||
|
{ ts: 1527815962, e: `in the middle of the night` }, // شومه دم - shooma dam
|
||||||
|
{ ts: 1527816658, e: `immediately, at once, right away` }, // دم په دستي - dampudastee
|
||||||
|
{ ts: 1527819321, e: `down, below; slope` }, // کښته - kxúta
|
||||||
|
{ ts: 1527812559, e: `very, lots, many` }, // ډېر - Der
|
||||||
|
{ ts: 1527812683, e: `also, too, as well, even more` }, // هم - hum, ham, hUm
|
||||||
|
{ ts: 1527812413, e: `after oneself` }, // راپسې - raapase
|
||||||
|
{ ts: 1527823390, e: `deliberately, intentionally, on purpose` }, // عمداً - amadan
|
||||||
|
{ ts: 1527815532, e: `undoubtably, absolutely, without doubt, of course` }, // بې شک - beshak
|
||||||
|
{ ts: 1588781449015, e: `around, surrounding, encompassing` }, // چار چاپېره - chaarchaapera
|
||||||
|
{ ts: 1527814278, e: `on purpose, intentionally` }, // قصداً - qasdan
|
||||||
|
{ ts: 1527811781, e: `in the same degree, insofar as, in the same measure` }, // هماغومره - humaaghaoomra
|
||||||
|
{ ts: 1645130994575, e: `apparently, visibly, ostensibly, by appearance, outwardly` }, // ظاهراً - zaahiran
|
||||||
|
{ ts: 1527820016, e: `until` }, // ترهغه - turhaghú
|
||||||
|
{ ts: 1527813259, e: `finally, at last (Arabic)` }, // بالاخره - bilaakhira
|
||||||
|
{ ts: 1527818438, e: `with dignity, respectfully` }, // با عزت - baa izzat
|
||||||
|
{ ts: 1527813122, e: `inside, within, interior` }, // دننه - dununa
|
||||||
|
{ ts: 1527815318, e: `immediately, urgently, instantly` }, // سملاستي - sumlaastee
|
||||||
|
{ ts: 1527819294, e: `in the morning` }, // سهر وختي - sahar wakhtee
|
||||||
|
{ ts: 1527811327, e: `sincere; sincerely, in a heartfelt manner` }, // صمیمانه - sameemaana
|
||||||
|
{ ts: 1577390207734, e: `thereupon, thereon, په plus something previously mentioned` }, // پرې - pre
|
||||||
|
{ ts: 1527818716, e: `gradually` }, // تدریجاً - tadreejan
|
||||||
|
{ ts: 1527822285, e: `all, the whole, total` }, // کل - kUl
|
||||||
|
{ ts: 1527822183, e: `according to Sharia law` }, // شرعاً - sharan
|
||||||
|
{ ts: 1527818276, e: `at the time of, during (د ... پر مهال)` }, // پرمهال - purmahaal
|
||||||
|
{ ts: 1527814270, e: `unfortunately, regretfully` }, // له بده مرغه - la buda margha, la buda murgha
|
||||||
|
{ ts: 1527820764, e: `wise, sensible, intelligent, prudent` }, // عاقلانه - aaqilaana
|
||||||
|
{ ts: 1527814453, e: `over here, this side` }, // را ایسته - raaeesta
|
||||||
|
{ ts: 1527815261, e: `around, all around, approximately` }, // شاوخوا - shaawkhwaa, shaa-U-khwaa
|
||||||
|
{ ts: 1527818186, e: `after you (sing and plural)` }, // درپسې - dărpase
|
||||||
|
{ ts: 1527820198, e: `completely, totally, absolutely` }, // مطلقاً - mUtlaqán
|
||||||
|
{ ts: 1584689085630, e: `indirectly` }, // نامستقیماً - naamUstaqeeman
|
||||||
|
{ ts: 1527814881, e: `urgently, sudden` }, // فوري - foree, fauree
|
||||||
|
{ ts: 1527819385, e: `especially, in particular` }, // بالخصوص - bilkhUsóos
|
||||||
|
{ ts: 1527814146, e: `slowly, gently, quietly, softly` }, // سوکه سوکه - sawka sawka
|
||||||
|
{ ts: 1527813591, e: `friendly, in a friendly manner` }, // دوستانه - dostaana
|
||||||
|
{ ts: 1576104020648, e: `involuntarily, unintentionally` }, // غیر ارادي - gheyr iraadee
|
||||||
|
{ ts: 1527816767, e: `obvious, openly, boldly, immodestly` }, // رډ رډ - raDraD
|
||||||
|
{ ts: 1527812520, e: `again` }, // بیا - byaa
|
||||||
|
{ ts: 1527812496, e: `completely, totally` }, // بېخي - bekhee
|
||||||
|
{ ts: 1527817710, e: `that side, across` }, // ها خوا - haakhwaa
|
||||||
|
{ ts: 1527814067, e: `this very` }, // همدا - hamdaa
|
||||||
|
{ ts: 1527817230, e: `by force` }, // په زور - pu zor
|
||||||
|
{ ts: 1571626944932, e: `always, forever` }, // همېش - hamésh
|
||||||
|
{ ts: 1614083674358, e: `hurridly, urgently` }, // عاجلانه - aajilaana
|
||||||
|
{ ts: 1527813595, e: `such, as much, so much, much, as much as, until` }, // چندان - chandaan
|
||||||
|
{ ts: 1527811222, e: `like, similar to, in this style, manner` }, // په څېر - pu tser
|
||||||
|
{ ts: 1527813692, e: `for the sake of, because of, out of deference to` }, // په خاطر - pu khaatir
|
||||||
|
{ ts: 1623688507454, e: `nasal (speaking through the nose)` }, // ګنګوړ - gangóR, gangwÚR
|
||||||
|
{ ts: 1527820344, e: `voluntarily` }, // په داوطلب ډول - pu daawtaláb Dawul
|
||||||
|
{ ts: 1527811360, e: `at the same time, simultaneous` }, // هم مهاله - hammahaala
|
||||||
|
{ ts: 1527812498, e: `yes (from Farsi)` }, // بلې - băle
|
||||||
|
{ ts: 1586262008294, e: `never, not at all` }, // پېټ - peT
|
||||||
|
{ ts: 1527818646, e: `double, twofold` }, // یو په دوه - yawpudwá
|
||||||
|
{ ts: 1527812762, e: `empty, only, just` }, // خالي - khaalee
|
||||||
|
{ ts: 1600075984510, e: `especially, specifically` }, // په تېره بیا - pu tera byaa
|
||||||
|
{ ts: 1527818642, e: `double, twin, duplicate, twofold, duplex, both at once` }, // غبرګ - ghbarg
|
||||||
|
{ ts: 1573149071525, e: `up and down, all over, encompassing the whole geographic range (of a country/land)` }, // لروبر - larobar
|
||||||
|
{ ts: 1527814268, e: `unfortunately, regretfully` }, // درېغی - dreghey
|
||||||
|
{ ts: 1527823634, e: `if it so happens that..., possibly` }, // احیاناً - ahiyaanan
|
||||||
|
{ ts: 1579462935759, e: `more, other, still, yet, various, remaining` }, // نور - nor, noor
|
||||||
|
{ ts: 1527813588, e: `for instance, for example` }, // د ساري په توګه - du saaree pu toga
|
||||||
|
{ ts: 1527813038, e: `at once, suddenly, all of a sudden` }, // دواره - duwaara
|
||||||
|
{ ts: 1527815418, e: `slow` }, // ورو - wroo
|
||||||
|
{ ts: 1527815215, e: `since (له ... راپدېخوا)` }, // راپدېخوا - raapudekhwaa
|
||||||
|
{ ts: 1527815260, e: `around, approximately` }, // شاوخوا - shaawkhwaa
|
||||||
|
{ ts: 1527817261, e: `without reason, for no reason` }, // وچ په وچه - wuchpuwucha
|
||||||
|
{ ts: 1527814708, e: `close, near, soon, almost` }, // نژدې - nijzde, najzde
|
||||||
|
{ ts: 1527813686, e: `opposite, on the contrary` }, // برعکس - baraks, barakis
|
||||||
|
{ ts: 1527819388, e: `inside, in` }, // وردننه - wardunúna
|
||||||
|
{ ts: 1617989716527, e: `out of place, improperly, incorrectly, irrelevant, incorrect` }, // بېځایه - bedzáaya
|
||||||
|
{ ts: 1527819899, e: `gradually` }, // د استدراج په توګه - du istidraaj pu toga
|
||||||
|
{ ts: 1527821015, e: `especially, in particular` }, // خاصکر - khaaskar
|
||||||
|
{ ts: 1527818185, e: `wherever` }, // هرچرته - hărcharta
|
||||||
|
{ ts: 1568927364452, e: `automatic, automatically` }, // اتومات - atomáat
|
||||||
|
{ ts: 1527815533, e: `undoubtably, absolutely, without doubt, of course` }, // بې شکه - beshaka
|
||||||
|
{ ts: 1527816301, e: `free, wandering, loose, open, not serious; with nonsense, foolishly` }, // یله - yala
|
||||||
|
{ ts: 1610796249240, e: `forward` }, // مخ پر وړاندې - mukh pur wRaande
|
||||||
|
{ ts: 1588073608418, e: `suddenly, immediately, at once, currently` }, // دفعتاً - daf'atan
|
||||||
|
{ ts: 1527822216, e: `by foot, on foot, walking` }, // پیاده پا - piyaada paa
|
||||||
|
{ ts: 1527823047, e: `suddenly, unexpectedly, all of a sudden` }, // اچانک - achaanak
|
||||||
|
{ ts: 1527813881, e: `by name, called, so-called` }, // په نامه - pu naama
|
||||||
|
{ ts: 1527817130, e: `alongside, beside` }, // ترخوا - turkhwaa
|
||||||
|
{ ts: 1595515640766, e: `more or less (suitable), sooner or later, approximate, changing` }, // تېر و بېر - ter-U-ber
|
||||||
|
{ ts: 1527822042, e: `above, overhead` }, // راپورته - raaporta
|
||||||
|
{ ts: 1527818051, e: `eternally, forever, constantly, for eternity` }, // تر ابده - tur abada
|
||||||
|
{ ts: 1585821444042, e: `accidentally, by chance; unanimously, by consensus` }, // اتفاقاً - itifaaqan
|
||||||
|
{ ts: 1527818054, e: `merely, only, just (محض)` }, // مازې - máaze
|
||||||
|
{ ts: 1585489925980, e: `yet, still, hitherto` }, // هنوز - hanóoz
|
||||||
|
{ ts: 1621018588552, e: `by nature, naturally` }, // ذاتاً - zaatan
|
||||||
|
{ ts: 1527815195, e: `by force` }, // په زوره - pu zora
|
||||||
|
{ ts: 1527818717, e: `probably, perhaps, possibly, maybe` }, // شاید - shaayad
|
||||||
|
{ ts: 1645041265197, e: `publicly` }, // علناً - alanan
|
||||||
|
{ ts: 1527823077, e: `vainly, in vain` }, // بېهوده - behoodá
|
||||||
|
{ ts: 1527823222, e: `without rhyme or reason, for no reason at all` }, // سلابلا - salaabaláa
|
||||||
|
{ ts: 1575239139152, e: `again` }, // باره - baara
|
||||||
|
{ ts: 1527818524, e: `probably, in all probability, most likely` }, // غالباً - ghaalibán
|
||||||
|
{ ts: 1527812952, e: `slave-like, slavish, servant-like, servile` }, // غلامانه - ghUlaamaana
|
||||||
|
{ ts: 1527811234, e: `openly, frankly` }, // په ډاګه - pu Daaga
|
||||||
|
{ ts: 1527817157, e: `just like that, in just that manner` }, // همداسې - hamdaase
|
||||||
|
{ ts: 1527814437, e: `shared, together` }, // په شریکه - pu shareeka
|
||||||
|
{ ts: 1527812780, e: `down, beneath` }, // ښکته - xkuta
|
||||||
|
{ ts: 1586340494373, e: `at least, minimum (from Farsi)` }, // حد اقل - had-i-aqul
|
||||||
|
{ ts: 1578080952673, e: `outside, outside of, beyond` }, // دباندې - dubaande
|
||||||
|
{ ts: 1622374915074, e: `probably, likely, presumptively, having preference/advantage` }, // اغلب - aghláb
|
||||||
|
{ ts: 1527813323, e: `fortunately, luckily` }, // خوشبختانه - khoshbakhtaana
|
||||||
|
{ ts: 1527819156, e: `cruel, cruelly, evil` }, // ظالمانه - zaalimaana
|
||||||
|
{ ts: 1527818313, e: `bi-weekly, every two weeks, fortnightly pay` }, // پنځلس ورځنی - pindzúlaswradzanéy
|
||||||
|
{ ts: 1527812670, e: `just, basically` }, // هسې - hase
|
||||||
|
{ ts: 1527818324, e: `barely, just, scarcely, only, merely` }, // په مټې - pumúTe
|
||||||
|
{ ts: 1527820205, e: `sometimes` }, // کله ناکله - kalanaakala
|
||||||
|
{ ts: 1527812278, e: `exactly that` }, // هماغه - hamaagha
|
||||||
|
{ ts: 1527813688, e: `lower, below, down` }, // کوز - kooz
|
||||||
|
{ ts: 1527821666, e: `magisterial, authoritative` }, // آمرانه - aamuraana
|
||||||
|
{ ts: 1527817845, e: `exactly, precisely, as is` }, // کټ مټ - kaTmaT, kuTmuT
|
||||||
|
{ ts: 1527822351, e: `more or less suitable, approximate, changing, alternating, sooner or later` }, // تېر و بېر - ter-U-ber
|
||||||
|
{ ts: 1527813618, e: `by nature, naturally` }, // طبعاً - taban
|
||||||
|
{ ts: 1527821531, e: `always, forever, constantly` }, // تل - tul
|
||||||
|
{ ts: 1527817255, e: `far, distant` }, // لیرې - leere
|
||||||
|
{ ts: 1527812472, e: `again and again, often` }, // بار بار - baar baar
|
||||||
|
{ ts: 1527811459, e: `gradually, in turns` }, // وار په وار - waar pu waar
|
||||||
|
{ ts: 1527814590, e: `alongside, along with this` }, // تر څنګ - tur tsang
|
||||||
|
{ ts: 1610796828062, e: `pride, arrogance, haughtiness; arrogantly, proudly` }, // ناغ - naagh
|
||||||
|
{ ts: 1527817080, e: `totally, absolutely, entirely, wholly; that’s right, yep` }, // بالکل - bilkUl
|
||||||
|
{ ts: 1622369722256, e: `directly` }, // نېغ په نېغه - negh pu negha
|
||||||
|
{ ts: 1527813928, e: `right here, in this very place` }, // همدلته - hamdalta
|
||||||
|
{ ts: 1527812293, e: `with you` }, // درسره - dărsara
|
||||||
|
{ ts: 1527819160, e: `absolutely, decisively, categorically` }, // قطعاً - qattan
|
||||||
|
{ ts: 1527814690, e: `this year, current year` }, // سږکال - suGkaal
|
||||||
|
{ ts: 1527814145, e: `slowly, gently, quietly, softly` }, // سوکه - sawka
|
||||||
|
{ ts: 1527812983, e: `after, later, afterwards, susequently` }, // پس - pas
|
||||||
|
{ ts: 1574354759066, e: `slowly, gently, quietly, softly` }, // سوکه - sooka
|
||||||
|
{ ts: 1527821252, e: `always, constantly, eternally` }, // همېشه - hamesha
|
||||||
|
{ ts: 1591984859456, e: `perhaps, really?` }, // ګڼې - gaNé
|
||||||
|
{ ts: 1527819835, e: `all at once, straight away, right away; quite, completely` }, // یواریځ - yawaaréedz
|
||||||
|
{ ts: 1527812671, e: `definitely` }, // حتماً - hatman
|
||||||
|
{ ts: 1574354762646, e: `slowly, gently, quietly, softly` }, // سوکه سوکه - sooka sooka
|
||||||
|
{ ts: 1527822241, e: `sudden, suddenly, unexpected, unexpectedly, unforeseen (ناڅاپه)` }, // ناببره - naabUbúra
|
||||||
|
{ ts: 1527814256, e: `full, complete, total, totally, entire` }, // پوره - poora
|
||||||
|
{ ts: 1527811269, e: `from afar, clearly, apparent` }, // له ورایه - lawraaya, la weraya
|
||||||
|
{ ts: 1527822218, e: `by foot, on foot, walking` }, // پیاده روي - piyaada rawee
|
||||||
|
{ ts: 1527822286, e: `totally, entirely` }, // کلاً - kUllan
|
||||||
|
{ ts: 1527815291, e: `only, just` }, // صرف - sirf
|
||||||
|
{ ts: 1527812419, e: `fully, quite` }, // هډو - haDo
|
||||||
|
{ ts: 1527818118, e: `everywhere, every place` }, // هرځای - hărdzaay
|
||||||
|
{ ts: 1527811773, e: `very much, exceedingly` }, // زښت - zuxt
|
||||||
|
{ ts: 1527815454, e: `quickly, fast` }, // زر - zur
|
||||||
|
{ ts: 1577408435617, e: `unwillingly, grudingly` }, // په نه زړه - pu nu zRu
|
||||||
|
{ ts: 1527814568, e: `willingly, voluntarily` }, // په خوښه - pu khwaxa
|
||||||
|
{ ts: 1527819158, e: `exactly, precisely` }, // دقیقاً - daqeeqan
|
||||||
|
{ ts: 1527819818, e: `last, final; lately, at last, in recently` }, // آخر - aakhir, aakhur
|
||||||
|
{ ts: 1527818408, e: `last year` }, // پروسه کال - parosa kaal
|
||||||
|
{ ts: 1527823722, e: `right away, immediately, at once, urgently` }, // فوراً - forán, faurán
|
||||||
|
{ ts: 1527819029, e: `by chance, coincidental, coincidentally, accidental, accidentally` }, // تصادفي - tasaadUfee
|
||||||
|
{ ts: 1527815188, e: `besides, without` }, // پرته - prata
|
||||||
|
{ ts: 1527812721, e: `quickly, fast` }, // ژر - jzur
|
||||||
|
{ ts: 1527811873, e: `seperately, apart, scattered, strew about` }, // تار په تار - taarputaar
|
||||||
|
{ ts: 1527815416, e: `ahead, forward, before, earlier` }, // وړاندې - wRaande
|
||||||
|
{ ts: 1527822222, e: `above` }, // د پاسه - du paasa
|
||||||
|
{ ts: 1527819243, e: `immediately, right away, quickly` }, // سمدلاسه - samdalaasa
|
||||||
|
{ ts: 1527819393, e: `over/across to you/there` }, // درپورې - darpore
|
||||||
|
{ ts: 1527815136, e: `presently` }, // اوسمهال - oosmahaal
|
||||||
|
{ ts: 1584549648579, e: `suddenly, at once, all of a sudden` }, // ناګهانه - naagahaana
|
||||||
|
{ ts: 1527814324, e: `probably, possibly` }, // ښایي - xaayee
|
||||||
|
{ ts: 1527812138, e: `as fast as possible, as quickly as possible, immediately` }, // ژر تر ژره - jzurturjzura
|
||||||
|
{ ts: 1527816581, e: `indirect` }, // غیر مستقیم - gheyr-i-mUstaqeem
|
||||||
|
{ ts: 1527811508, e: `completely, totally` }, // په بشپړه توګه - pu bushpuRa toga
|
||||||
|
{ ts: 1527815514, e: `especially, particularly` }, // مخصوصاً - makhsoosan
|
||||||
|
{ ts: 1527815069, e: `on one's own, single handed` }, // تکې تنها - tuketanhaa
|
||||||
|
{ ts: 1527812321, e: `such, like this, like that, like` }, // داسې - daase
|
||||||
|
{ ts: 1527823533, e: `there, in that place, thence` }, // هغلته - haghalta
|
||||||
|
{ ts: 1620041996603, e: `air, to do with air/aviation; by air (adv. ie. هوایي راغلې - you came by flying)` }, // هوائي - hawaa`ee
|
||||||
|
{ ts: 1527817156, e: `continuous, back to back, uninterrupted, constant, unceasing` }, // پرلپسې - parlapase
|
||||||
|
{ ts: 1527820289, e: `truly, really, actually` }, // واقعاً - waaqi'an, waaqiyan
|
||||||
|
{ ts: 1588786919406, e: `as fast as possible, as quickly as possible, immediately` }, // زر تر زره - zur tur zura
|
||||||
|
{ ts: 1575642923868, e: `even, in fact` }, // حتیٰ - hattaa
|
||||||
|
{ ts: 1527813261, e: `at that time (used in correspondence with کله), in that case, then` }, // هله - hala
|
||||||
|
{ ts: 1593173287113, e: `summary, synopsis; brief, short; in short, in summary` }, // مجمل - mUjmál
|
||||||
|
{ ts: 1527815224, e: `right, true, truly` }, // رښتیا - rixtiyaa
|
||||||
|
{ ts: 1594909066356, e: `around, in the area` }, // خوا و شا - khwaa-U-shaa
|
||||||
|
{ ts: 1527819344, e: `after` }, // پسه - pása
|
||||||
|
{ ts: 1527817032, e: `that much, so much, so much as` }, // دغومره - daghaoomra
|
||||||
|
{ ts: 1527822217, e: `by foot, on foot, walking` }, // پیاده پای - piyaada paay
|
||||||
|
{ ts: 1527818507, e: `noble, well-known, nobly, with dignity and honour` }, // شریفانه - shareefaana
|
||||||
|
{ ts: 1527819500, e: `against (د ... پر ضد)` }, // پرضد - purzid
|
||||||
|
{ ts: 1593683680743, e: `in general, in broad areas, usually, normally` }, // عموماً - Umóoman
|
||||||
|
{ ts: 1527811333, e: `sincere, frank, open` }, // خلاملا - khalaamalaa
|
||||||
|
{ ts: 1527821125, e: `logically` }, // په منطقي ډول - pu mantiqee Dawul
|
||||||
|
{ ts: 1527812137, e: `eternal, everlasting, forever` }, // تل تر تله - tulturtula
|
||||||
|
{ ts: 1527812375, e: `back (as in return)` }, // واپس - waapus
|
||||||
|
{ ts: 1527821736, e: `temporarily` }, // په موقت ډول - pu mUwaqqat Dawul
|
||||||
|
{ ts: 1527816129, e: `scattered, speed, thrown about` }, // خواره واره - khwaarawaara
|
||||||
|
{ ts: 1527812572, e: `like … (in comparison)` }, // د ... په شان - du … pu shaan
|
||||||
|
{ ts: 1527811423, e: `below, beneath` }, // لاندې - laande
|
||||||
|
{ ts: 1527820416, e: `commanding, authoritative` }, // حاکمانه - haakimaana
|
||||||
|
{ ts: 1527812866, e: `at least` }, // لږترلږه - luG tur luGa
|
||||||
|
{ ts: 1527822631, e: `side, beside` }, // څېرمه - tsérma
|
||||||
|
{ ts: 1527818039, e: `unfortunately` }, // د بده مرغه - du buda murgha
|
||||||
|
{ ts: 1527816088, e: `always, at all times` }, // همیشه - hameysha
|
||||||
|
{ ts: 1527815951, e: `constantly, every instant` }, // دم پدم - dampudam
|
||||||
|
{ ts: 1527819360, e: `towards (د چا خوا ته)` }, // خواته - khwaata
|
||||||
|
{ ts: 1527817550, e: `conservatively, conservative` }, // محافظه کارانه - mUhaafizakaaraana
|
||||||
|
{ ts: 1527823349, e: `certainly, surely, definitely` }, // یقیناً - yaqeenan
|
||||||
|
{ ts: 1527815124, e: `these days` }, // نن سبا - nun sabaa
|
||||||
|
{ ts: 1527818245, e: `extremely, bound, limit; extreme, excessive` }, // نهایت - nihaayat
|
||||||
|
{ ts: 1527820609, e: `good, well, firmly (انګليسي ښه ټايټه زده دا - he’s learn’t English really well)` }, // ټایټ - TaayT
|
||||||
|
{ ts: 1527816045, e: `itself, himself, herself, etc.` }, // په خپله - pukhpula
|
||||||
|
{ ts: 1527813061, e: `quickly, without delay` }, // بې درنګه - bediranga
|
||||||
|
{ ts: 1527818056, e: `now, presently, currently, right now, for now, at once, immediately` }, // فی الحال - filháal
|
||||||
|
{ ts: 1527818654, e: `eye, source, well-spring, essence; exact, precisely, exactly` }, // عین - ayn
|
||||||
|
{ ts: 1527818669, e: `childishly` }, // ماشومانه - maashoomaana
|
||||||
|
{ ts: 1527822765, e: `suddenly, immediately, instantly, at once` }, // له واره - la waara
|
||||||
|
{ ts: 1527814913, e: `near, close to` }, // ورنږدې - warnaGde
|
||||||
|
{ ts: 1527816312, e: `about, estimated` }, // تخمیناً - takhmeenan
|
||||||
|
{ ts: 1578191355725, e: `obvious, evident; bold, impertinent, rude; complex, confused; completely, quite` }, // رټ - raT, ruT
|
||||||
|
{ ts: 1527820456, e: `on me, on us (باندې with 1st person directive pronoun)` }, // راباندې - raabaande
|
||||||
|
{ ts: 1527812457, e: `actually` }, // اصلاً - aslan
|
||||||
|
{ ts: 1527813034, e: `without delay, quickly` }, // بې ځنډه - be dzunDa
|
||||||
|
{ ts: 1617989743649, e: `out of place, improperly, incorrectly, irrelevant, incorrect` }, // بې ځایه - be dzáaya
|
||||||
|
{ ts: 1527811244, e: `even, even up to, as far as, right up to, precisely` }, // آن - aan
|
||||||
|
{ ts: 1527816949, e: `as much as` }, // هومره - hoomra
|
||||||
|
{ ts: 1527821995, e: `finally, end` }, // اخر - akhúr, akhír
|
||||||
|
{ ts: 1527817078, e: `sure, certainly, totally, surely, aware` }, // خود - khood, khwud
|
||||||
|
{ ts: 1527823176, e: `surely, naturally, independently` }, // آخود - aakhwad
|
||||||
|
{ ts: 1586626956539, e: `all, everything, everyone` }, // درست - drust, drast
|
||||||
|
{ ts: 1527818644, e: `existing, current; currently, on the present` }, // برحال - barháal
|
||||||
|
{ ts: 1527815340, e: `repeating, repitition, repeated; again` }, // تکرار - tăkraar
|
||||||
|
{ ts: 1527811636, e: `most, the majority, mostly` }, // اکثر - aksar
|
||||||
|
{ ts: 1620904454896, e: `sincerely, sincere` }, // مخلصانه - mUkhlisaana
|
||||||
|
{ ts: 1581189430959, e: `ahead, in front; earlier, first, before` }, // پېش - pesh
|
||||||
|
{ ts: 1527818710, e: `fortunately, luckily, thankfully` }, // خوشبختانه - khooshbakhtaana
|
||||||
|
{ ts: 1527819419, e: `still` }, // لاهم - laahum
|
||||||
|
{ ts: 1527811657, e: `air, to do with air/aviation; by air (adv. ie. هوایي راغلې - you came by flying)` }, // هوایي - hawaayee
|
||||||
|
{ ts: 1527822405, e: `every moment, constantly` }, // دم په دم - dámpudam
|
||||||
|
{ ts: 1527818249, e: `as if, as though, like, as if it was, it seems, perhaps` }, // ګویا - goyaa, gooyaa
|
||||||
|
{ ts: 1610797421074, e: `unconscious, subconscious, un-aware, slow-witted` }, // لاشعوري - laashU'ooree
|
||||||
|
{ ts: 1527822198, e: `continually, perpetually, permanently, always` }, // مدام - mUdáam
|
||||||
|
{ ts: 1527819210, e: `late` }, // ناوخته - naawakhta
|
||||||
|
{ ts: 1527812558, e: `here` }, // دلته - dălta
|
||||||
|
{ ts: 1650297924157, e: `humble, humbly` }, // عاجزانه - aajizaana
|
||||||
|
{ ts: 1527813772, e: `for example` }, // د بېلګې په توګه - du belge pu toga
|
||||||
|
{ ts: 1527815029, e: `alone, lone, solitary, only; desolate` }, // تنها - tanhaa
|
||||||
|
{ ts: 1527820921, e: `separate, separately` }, // علیحده - aleyhida, alaeyda
|
||||||
|
{ ts: 1527817376, e: `from you` }, // درڅخه - dărtsukha
|
||||||
|
{ ts: 1527822852, e: `this way and that way, here and there` }, // دېخوا هاخوا - dekhwaa haakhwaa
|
||||||
|
{ ts: 1527820103, e: `required (as of a payment or penalty), at once, immediately, forthwith` }, // یوموټ - yawmóoT
|
||||||
|
{ ts: 1527820737, e: `in this/that way, like this/that` }, // هغسې - haghase
|
||||||
|
{ ts: 1527823338, e: `that much, so much (هغومره)` }, // هاغومره - haaghoomra
|
||||||
|
{ ts: 1527814318, e: `in front, forward, before` }, // مخکښې - mukhkxe
|
||||||
|
{ ts: 1584689070748, e: `indirect` }, // نامستقیم - naamUstaqeem
|
||||||
|
{ ts: 1527821752, e: `except for, excepting, with the exception of` }, // ماسوا - maasiwáa
|
||||||
|
{ ts: 1527812477, e: `after` }, // بعد - bad
|
||||||
|
{ ts: 1591382269266, e: `near, close, basically, approximately; control, check` }, // قابو - qaaboo
|
||||||
|
{ ts: 1527818586, e: `without exception` }, // بلا استثنیٰ - bilaaistisnaa
|
||||||
|
{ ts: 1527820750, e: `at random, haphazardly` }, // چوټ انداز - choT andaaz, chooT andaaz ??
|
||||||
|
{ ts: 1527812504, e: `back (as in go back, give back etc.)` }, // بېرته - berta
|
||||||
|
{ ts: 1571526377164, e: `with a family, having a family` }, // کډن - kaDún
|
||||||
|
{ ts: 1527819764, e: `monthly, every month` }, // ماهانه - maahaaná
|
||||||
|
{ ts: 1527822366, e: `willy-nilly` }, // حق ناحق - haqnaaháq
|
||||||
|
{ ts: 1527819438, e: `far, distant, removed` }, // لېرې - lere
|
||||||
|
{ ts: 1527819392, e: `moreover, besides, in addition to, apart from, over, above, more than, on top of` }, // برسېره - barséra
|
||||||
|
{ ts: 1527822184, e: `morally, ethically` }, // اخلاقاً - akhlaaqan
|
||||||
|
{ ts: 1527813260, e: `finally, totally, completely, all together, in full` }, // تماماً - tamaaman
|
||||||
|
{ ts: 1588758935200, e: `that way, direction, over there` }, // وراخوا - wăraakhwaa
|
||||||
|
{ ts: 1527822230, e: `regular, regularly; repaired, restored` }, // باقاعده - baaqaa'ida
|
||||||
|
{ ts: 1527821919, e: `immediately, right away, instantly` }, // دستي - dustée
|
||||||
|
{ ts: 1527813778, e: `barefoot` }, // په چپه پښه - pu chapa pxa
|
||||||
|
{ ts: 1527820805, e: `right there, in the same place, in the very same place` }, // هماغلته - hamáaghalta
|
||||||
|
{ ts: 1572991416788, e: `definately, for sure, I'll bet, certainly` }, // هرو مرو - haroo maroo
|
||||||
|
{ ts: 1527819298, e: `early, soon` }, // وختي - wakhtee
|
||||||
|
{ ts: 1527813064, e: `just, only` }, // ذره - zára
|
||||||
|
{ ts: 1527819293, e: `immediately, right away, quickly` }, // سملاسي - samlaasee
|
||||||
|
{ ts: 1527816310, e: `round about, around` }, // چاپېر - chaaper
|
||||||
|
{ ts: 1527815123, e: `today, these days` }, // نن - nun
|
||||||
|
{ ts: 1593173323555, e: `in summary, briefly` }, // په مجمله توګه - pu mUjmala toga
|
||||||
|
{ ts: 1527815410, e: `why` }, // ولې - wăle
|
||||||
|
{ ts: 1527821715, e: `accordingly, appropriately, in parallel` }, // په موازي ډول - pu mUwaazee Dawul
|
||||||
|
{ ts: 1527814073, e: `therein` }, // پکې - puke
|
||||||
|
{ ts: 1527819612, e: `one’s own (misspelling of په خپل - cf. پخپله)` }, // پخپل - pukhpul
|
||||||
|
{ ts: 1527821074, e: `independently` }, // مستقلانه - mUstaqilaana
|
||||||
|
{ ts: 1527818081, e: `still, even so, yet` }, // بیاهم - byaahum
|
||||||
|
{ ts: 1527818237, e: `(doing something) himself, herself, myself, ourself etc., used to indicate actions that the subject does himself` }, // پخپله - pukhpula
|
||||||
|
{ ts: 1527813053, e: `slow, quiet; slowly, quietly` }, // آهسته - aahista
|
||||||
|
{ ts: 1527811453, e: `until, as much, so that, in order that` }, // ترڅو - turtso
|
||||||
|
{ ts: 1527816656, e: `now, presently, currently, right now, for now` }, // فعلاً - fi'lan
|
||||||
|
{ ts: 1577999518050, e: `there, over there, thither` }, // هورې - hooré
|
||||||
|
{ ts: 1527815225, e: `right, true, truly` }, // رشتیا - rishtiyaa
|
||||||
|
{ ts: 1527815456, e: `really, lots, tons, maximum, more; much, more, many, excess, most` }, // زیات - zyaat
|
||||||
|
{ ts: 1584518205499, e: `repeatedly` }, // تکراراً - takraaran
|
||||||
|
{ ts: 1527812415, e: `immediately, at once, instantly` }, // سم دلاسه - samdulaasa
|
||||||
|
{ ts: 1527823339, e: `that much, so much` }, // هغومره - haghoomra
|
||||||
|
{ ts: 1527821616, e: `victimly, pitiful` }, // مظلومانه - mazloomaana
|
||||||
|
{ ts: 1584691547040, e: `politely, with courtesy, nicely` }, // مودبانه - mUaddabaana
|
||||||
|
{ ts: 1527812324, e: `in vain, to no avail` }, // هاسې په هاسې - haase pu haase
|
||||||
|
{ ts: 1527815420, e: `later, after, behind` }, // وروسته - wroosta
|
||||||
|
{ ts: 1527818595, e: `by nature, naturally` }, // قدرتاً - qUdratan
|
||||||
|
{ ts: 1527823755, e: `again, once more` }, // دوباره - doobáara
|
||||||
|
{ ts: 1527816771, e: `short-term` }, // لنډ مهال - lanDmahaal
|
||||||
|
{ ts: 1588758395153, e: `just like that (abrev. of هم هغسې)` }, // همغسې - humaghase
|
||||||
|
{ ts: 1527811620, e: `as` }, // په حیث - pu heys
|
||||||
|
];
|
|
@ -1,4 +1,5 @@
|
||||||
module.exports = [
|
module.exports = [
|
||||||
|
{ ts: 1527812828, e: "house" }, // kor
|
||||||
{ ts: 1527812432, e: `sky, heaven` }, // آسمان - aasmaan
|
{ ts: 1527812432, e: `sky, heaven` }, // آسمان - aasmaan
|
||||||
{ ts: 1527812431, e: `mango` }, // آم - aam
|
{ ts: 1527812431, e: `mango` }, // آم - aam
|
||||||
{ ts: 1527812434, e: `sound, voice` }, // آواز - aawaaz
|
{ ts: 1527812434, e: `sound, voice` }, // آواز - aawaaz
|
||||||
|
|
15
package.json
15
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@lingdocs/pashto-inflector",
|
"name": "@lingdocs/pashto-inflector",
|
||||||
"version": "2.5.7",
|
"version": "2.5.8",
|
||||||
"author": "lingdocs.com",
|
"author": "lingdocs.com",
|
||||||
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
||||||
"homepage": "https://verbs.lingdocs.com",
|
"homepage": "https://verbs.lingdocs.com",
|
||||||
|
@ -23,6 +23,8 @@
|
||||||
"registry": "https://npm.lingdocs.com"
|
"registry": "https://npm.lingdocs.com"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@formkit/auto-animate": "^1.0.0-beta.1",
|
||||||
|
"assert-never": "^1.2.1",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"jsurl2": "^2.1.0",
|
"jsurl2": "^2.1.0",
|
||||||
"lz-string": "^1.4.4",
|
"lz-string": "^1.4.4",
|
||||||
|
@ -78,7 +80,16 @@
|
||||||
"react-app/jest"
|
"react-app/jest"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"no-warning-comments": [1, {"terms": ["fixme", "xxx"], "location": "anywhere"}]
|
"no-warning-comments": [
|
||||||
|
1,
|
||||||
|
{
|
||||||
|
"terms": [
|
||||||
|
"fixme",
|
||||||
|
"xxx"
|
||||||
|
],
|
||||||
|
"location": "anywhere"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
|
|
|
@ -68,6 +68,11 @@ pre {
|
||||||
background: var(--closer);
|
background: var(--closer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.block-card {
|
||||||
|
background: var(--theme-shade);
|
||||||
|
border-color: var(--farther);
|
||||||
|
}
|
||||||
|
|
||||||
.list-group {
|
.list-group {
|
||||||
background: var(--closer);
|
background: var(--closer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ import {
|
||||||
Modal
|
Modal
|
||||||
} from "react-bootstrap";
|
} from "react-bootstrap";
|
||||||
import * as T from "./types";
|
import * as T from "./types";
|
||||||
import { isAdjectiveEntry, isLocativeAdverbEntry, isNounEntry } from "./lib/type-predicates";
|
import { isAdjectiveEntry, isAdverbEntry, isLocativeAdverbEntry, isNounEntry } from "./lib/type-predicates";
|
||||||
import defualtTextOptions from "./lib/default-text-options";
|
import defualtTextOptions from "./lib/default-text-options";
|
||||||
import PhraseBuilder from "./components/vp-explorer/VPExplorer";
|
import PhraseBuilder from "./components/vp-explorer/VPExplorer";
|
||||||
import useStickyState from "./lib/useStickyState";
|
import useStickyState from "./lib/useStickyState";
|
||||||
|
@ -38,11 +38,13 @@ const verbTypes: VerbType[] = [
|
||||||
const nouns = nounsAdjs.filter(isNounEntry);
|
const nouns = nounsAdjs.filter(isNounEntry);
|
||||||
const adjectives = nounsAdjs.filter(isAdjectiveEntry);
|
const adjectives = nounsAdjs.filter(isAdjectiveEntry);
|
||||||
const locativeAdverbs = nounsAdjs.filter(isLocativeAdverbEntry);
|
const locativeAdverbs = nounsAdjs.filter(isLocativeAdverbEntry);
|
||||||
|
const adverbs = nounsAdjs.filter(isAdverbEntry);
|
||||||
const entryFeeder: T.EntryFeeder = {
|
const entryFeeder: T.EntryFeeder = {
|
||||||
locativeAdverbs,
|
locativeAdverbs,
|
||||||
nouns,
|
nouns,
|
||||||
adjectives,
|
adjectives,
|
||||||
verbs,
|
verbs,
|
||||||
|
adverbs,
|
||||||
};
|
};
|
||||||
|
|
||||||
const transitivities: T.Transitivity[] = [
|
const transitivities: T.Transitivity[] = [
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
import { useState, useEffect } from "react";
|
||||||
|
import * as T from "../../types";
|
||||||
|
import SandwichPicker from "../np-picker/SandwichPicker";
|
||||||
|
import AdverbPicker from "./AdverbPicker";
|
||||||
|
type APType = "adverb" | "sandwich";
|
||||||
|
const types: APType[] = ["adverb", "sandwich"];
|
||||||
|
|
||||||
|
function APPicker(props: {
|
||||||
|
phraseIsComplete: boolean,
|
||||||
|
onChange: (comp: T.APSelection | undefined) => void,
|
||||||
|
AP: T.APSelection | undefined,
|
||||||
|
opts: T.TextOptions,
|
||||||
|
cantClear?: boolean,
|
||||||
|
heading?: JSX.Element | string,
|
||||||
|
entryFeeder: T.EntryFeeder,
|
||||||
|
onRemove: () => void,
|
||||||
|
}) {
|
||||||
|
const [type, setType] = useState<APType | undefined>(props.AP
|
||||||
|
? props.AP.type
|
||||||
|
: undefined);
|
||||||
|
useEffect(() => {
|
||||||
|
setType(props.AP
|
||||||
|
? props.AP.type
|
||||||
|
: undefined);
|
||||||
|
}, [props.AP]);
|
||||||
|
function handleClear() {
|
||||||
|
setType(undefined);
|
||||||
|
props.onChange(undefined);
|
||||||
|
}
|
||||||
|
function handleCompTypeChange(ctp: APType) {
|
||||||
|
props.onChange(undefined);
|
||||||
|
setType(ctp);
|
||||||
|
}
|
||||||
|
function handleSandwichExit() {
|
||||||
|
setType(undefined);
|
||||||
|
props.onChange(undefined);
|
||||||
|
}
|
||||||
|
const clearButton = (type && !props.cantClear)
|
||||||
|
? <button className="btn btn-sm btn-light mb-2" onClick={handleClear}>X</button>
|
||||||
|
: (!props.cantClear)
|
||||||
|
? <div>
|
||||||
|
<div className="clickable" onClick={props.onRemove}><i className="fas fa-trash" /></div>
|
||||||
|
</div>
|
||||||
|
: <div></div>;
|
||||||
|
return <>
|
||||||
|
<div className="d-flex flex-row justify-content-between">
|
||||||
|
<div></div>
|
||||||
|
<div>
|
||||||
|
{typeof props.heading === "string"
|
||||||
|
? <div className="h5 text-center">{props.heading}</div>
|
||||||
|
: props.heading}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{clearButton}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!type && <div className="text-center">
|
||||||
|
<div className="h6 mr-3">
|
||||||
|
Choose AP
|
||||||
|
</div>
|
||||||
|
{types.map((apt) => <div key={apt} className="mb-2">
|
||||||
|
<button
|
||||||
|
key={apt}
|
||||||
|
type="button"
|
||||||
|
className="mr-2 btn btn-sm btn-outline-secondary"
|
||||||
|
onClick={() => handleCompTypeChange(apt)}
|
||||||
|
>
|
||||||
|
{apt}
|
||||||
|
</button>
|
||||||
|
</div>)}
|
||||||
|
</div>}
|
||||||
|
<div style={{ minWidth: "9rem" }}>
|
||||||
|
{type === "adverb" ?
|
||||||
|
<AdverbPicker
|
||||||
|
entryFeeder={props.entryFeeder.adverbs}
|
||||||
|
adjective={props.AP?.type === "adverb" ? props.AP : undefined}
|
||||||
|
opts={props.opts}
|
||||||
|
onChange={props.onChange}
|
||||||
|
/>
|
||||||
|
: type === "sandwich" ?
|
||||||
|
<SandwichPicker
|
||||||
|
onChange={props.onChange}
|
||||||
|
opts={props.opts}
|
||||||
|
sandwich={props.AP?.type === "sandwich" ? props.AP : undefined}
|
||||||
|
entryFeeder={props.entryFeeder}
|
||||||
|
phraseIsComplete={props.phraseIsComplete}
|
||||||
|
onExit={handleSandwichExit}
|
||||||
|
/>
|
||||||
|
: null}
|
||||||
|
</div>
|
||||||
|
</>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default APPicker;
|
|
@ -0,0 +1,37 @@
|
||||||
|
import * as T from "../../types";
|
||||||
|
import EntrySelect from "../EntrySelect";
|
||||||
|
|
||||||
|
function AdverbPicker(props: {
|
||||||
|
entryFeeder: T.EntryFeederSingleType<T.AdverbEntry>,
|
||||||
|
adjective: T.AdverbSelection | undefined,
|
||||||
|
onChange: (p: T.AdverbSelection | undefined) => void,
|
||||||
|
opts: T.TextOptions,
|
||||||
|
}) {
|
||||||
|
function onEntrySelect(entry: T.AdverbEntry | undefined) {
|
||||||
|
if (!entry) {
|
||||||
|
return props.onChange(undefined);
|
||||||
|
}
|
||||||
|
props.onChange(makeAdverbSelection(entry));
|
||||||
|
}
|
||||||
|
return <div style={{ maxWidth: "225px", minWidth: "125px" }}>
|
||||||
|
<h6>Adverb</h6>
|
||||||
|
<div>
|
||||||
|
<EntrySelect
|
||||||
|
value={props.adjective?.entry}
|
||||||
|
entryFeeder={props.entryFeeder}
|
||||||
|
onChange={onEntrySelect}
|
||||||
|
name="Adverb"
|
||||||
|
opts={props.opts}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AdverbPicker;
|
||||||
|
|
||||||
|
function makeAdverbSelection(entry: T.AdverbEntry): T.AdverbSelection {
|
||||||
|
return {
|
||||||
|
type: "adverb",
|
||||||
|
entry: entry,
|
||||||
|
};
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ import { completeEPSelection, renderEP } from "../../lib/phrase-building/render-
|
||||||
import { compileEP } from "../../lib/phrase-building/compile";
|
import { compileEP } from "../../lib/phrase-building/compile";
|
||||||
import Examples from "../Examples";
|
import Examples from "../Examples";
|
||||||
import ButtonSelect from "../ButtonSelect";
|
import ButtonSelect from "../ButtonSelect";
|
||||||
|
import { getRenderedSubjectSelection, getSubjectSelection } from "../../lib/phrase-building/blocks-utils";
|
||||||
|
|
||||||
function EPDisplay({ eps, opts, setOmitSubject }: {
|
function EPDisplay({ eps, opts, setOmitSubject }: {
|
||||||
eps: T.EPSelectionState,
|
eps: T.EPSelectionState,
|
||||||
|
@ -10,19 +11,21 @@ function EPDisplay({ eps, opts, setOmitSubject }: {
|
||||||
setOmitSubject: (value: "true" | "false") => void,
|
setOmitSubject: (value: "true" | "false") => void,
|
||||||
}) {
|
}) {
|
||||||
const EP = completeEPSelection(eps);
|
const EP = completeEPSelection(eps);
|
||||||
|
const subject = getSubjectSelection(eps.blocks);
|
||||||
if (!EP) {
|
if (!EP) {
|
||||||
return <div className="lead text-center my-4">
|
return <div className="lead text-center my-4">
|
||||||
{(!eps.subject && !eps.predicate[eps.predicate.type])
|
{(!subject && !eps.predicate[eps.predicate.type])
|
||||||
? "Select Subject and Predicate"
|
? "Select Subject and Predicate"
|
||||||
: (eps.subject && !eps.predicate[eps.predicate.type])
|
: (subject && !eps.predicate[eps.predicate.type])
|
||||||
? "Select Predicate"
|
? "Select Predicate"
|
||||||
: (!eps.subject && eps.predicate[eps.predicate.type])
|
: (!subject && eps.predicate[eps.predicate.type])
|
||||||
? "Select Subject"
|
? "Select Subject"
|
||||||
: ""}
|
: ""}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
const rendered = renderEP(EP);
|
const rendered = renderEP(EP);
|
||||||
const result = compileEP(rendered);
|
const result = compileEP(rendered);
|
||||||
|
const renderedSubject = getRenderedSubjectSelection(rendered.blocks).selection;
|
||||||
return <div className="text-center pt-3">
|
return <div className="text-center pt-3">
|
||||||
<div className="mb-2">
|
<div className="mb-2">
|
||||||
<ButtonSelect
|
<ButtonSelect
|
||||||
|
@ -47,7 +50,7 @@ function EPDisplay({ eps, opts, setOmitSubject }: {
|
||||||
{result.e.map((e, i) => <div key={i}>{e}</div>)}
|
{result.e.map((e, i) => <div key={i}>{e}</div>)}
|
||||||
</div>}
|
</div>}
|
||||||
{EP.predicate.selection.type === "participle" && <div style={{ maxWidth: "6 00px", margin: "0 auto" }} className="alert alert-warning mt-3 pt-4">
|
{EP.predicate.selection.type === "participle" && <div style={{ maxWidth: "6 00px", margin: "0 auto" }} className="alert alert-warning mt-3 pt-4">
|
||||||
<p>⚠️ NOTE: This means that the subject {rendered.subject.e ? `(${rendered.subject.e})` : ""} is <strong>the action/idea</strong> of
|
<p>⚠️ NOTE: This means that the subject {renderedSubject.e ? `(${renderedSubject.e})` : ""} is <strong>the action/idea</strong> of
|
||||||
{` `}
|
{` `}
|
||||||
"{rendered.predicate.e ? rendered.predicate.e : "the particple"}".</p>
|
"{rendered.predicate.e ? rendered.predicate.e : "the particple"}".</p>
|
||||||
<p>It <strong>does not</strong> mean that the subject is doing the action, which is what the transaltion sounds like in English.</p>
|
<p>It <strong>does not</strong> mean that the subject is doing the action, which is what the transaltion sounds like in English.</p>
|
||||||
|
|
|
@ -8,10 +8,14 @@ import EqCompPicker from "./eq-comp-picker/EqCompPicker";
|
||||||
import { roleIcon } from "../vp-explorer/VPExplorerExplanationModal";
|
import { roleIcon } from "../vp-explorer/VPExplorerExplanationModal";
|
||||||
import EqChartsDisplay from "./EqChartsDisplay";
|
import EqChartsDisplay from "./EqChartsDisplay";
|
||||||
import epsReducer from "./eps-reducer";
|
import epsReducer from "./eps-reducer";
|
||||||
import { useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { completeEPSelection } from "../../lib/phrase-building/render-ep";
|
import { completeEPSelection } from "../../lib/phrase-building/render-ep";
|
||||||
|
import { makeEPSBlocks, getSubjectSelection } from "../../lib/phrase-building/blocks-utils";
|
||||||
|
import APPicker from "../ap-picker/APPicker";
|
||||||
|
import autoAnimate from "@formkit/auto-animate";
|
||||||
|
|
||||||
const blankEps: T.EPSelectionState = {
|
const blankEps: T.EPSelectionState = {
|
||||||
subject: undefined,
|
blocks: makeEPSBlocks(),
|
||||||
predicate: {
|
predicate: {
|
||||||
type: "Complement",
|
type: "Complement",
|
||||||
NP: undefined,
|
NP: undefined,
|
||||||
|
@ -31,9 +35,14 @@ function EPExplorer(props: {
|
||||||
entryFeeder: T.EntryFeeder,
|
entryFeeder: T.EntryFeeder,
|
||||||
}) {
|
}) {
|
||||||
const [mode, setMode] = useStickyState<"charts" | "phrases">("charts", "EPExplorerMode");
|
const [mode, setMode] = useStickyState<"charts" | "phrases">("charts", "EPExplorerMode");
|
||||||
const [eps, adjustEps] = useStickyReducer(epsReducer, blankEps, "EPState2", flashMessage);
|
const [eps, adjustEps] = useStickyReducer(epsReducer, blankEps, "EPState4", flashMessage);
|
||||||
const [alert, setAlert] = useState<string | undefined>(undefined);
|
const [alert, setAlert] = useState<string | undefined>(undefined);
|
||||||
const king = eps.subject?.type === "pronoun"
|
const parent = useRef<HTMLDivElement>(null);
|
||||||
|
useEffect(() => {
|
||||||
|
parent.current && autoAnimate(parent.current);
|
||||||
|
}, [parent])
|
||||||
|
const subject = getSubjectSelection(eps.blocks).selection;
|
||||||
|
const king = subject?.type === "pronoun"
|
||||||
? "subject"
|
? "subject"
|
||||||
: eps.predicate.type === "Complement"
|
: eps.predicate.type === "Complement"
|
||||||
? "subject"
|
? "subject"
|
||||||
|
@ -56,21 +65,48 @@ function EPExplorer(props: {
|
||||||
handleChange={setMode}
|
handleChange={setMode}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="d-flex flex-row justify-content-around flex-wrap" style={{ marginLeft: "-0.5rem", marginRight: "-0.5rem" }}>
|
<div className="clickable h5" onClick={() => adjustEps({ type: "insert new AP" })}>+ AP</div>
|
||||||
|
<div ref={parent} className="d-flex flex-row justify-content-around flex-wrap" style={{ marginLeft: "-0.5rem", marginRight: "-0.5rem" }}>
|
||||||
{mode === "phrases" && <>
|
{mode === "phrases" && <>
|
||||||
<div className="my-2">
|
{eps.blocks.map(({ block, key }, i) => (
|
||||||
<NPPicker
|
<div className="my-2 card block-card p-1 mx-1" key={key}>
|
||||||
|
<div className="d-flex flex-row justify-content-between mb-1" style={{ height: "1rem" }}>
|
||||||
|
{i > 0 ? <div
|
||||||
|
className="small clickable ml-1"
|
||||||
|
onClick={() => adjustEps({ type: "shift block", payload: { index: i, direction: "back" }})}
|
||||||
|
>
|
||||||
|
<i className="fas fa-chevron-left" />
|
||||||
|
</div> : <div/>}
|
||||||
|
{i < eps.blocks.length - 1 ? <div
|
||||||
|
className="small clickable mr-1"
|
||||||
|
onClick={() => adjustEps({ type: "shift block", payload: { index: i, direction: "forward" }})}
|
||||||
|
>
|
||||||
|
<i className="fas fa-chevron-right" />
|
||||||
|
</div> : <div/>}
|
||||||
|
</div>
|
||||||
|
{block && block.type === "subjectSelection"
|
||||||
|
? <NPPicker
|
||||||
phraseIsComplete={phraseIsComplete}
|
phraseIsComplete={phraseIsComplete}
|
||||||
heading={<div className="h5 text-center">Subject {king === "subject" ? roleIcon.king : ""}</div>}
|
heading={<div className="h5 text-center">Subject {king === "subject" ? roleIcon.king : ""}</div>}
|
||||||
entryFeeder={props.entryFeeder}
|
entryFeeder={props.entryFeeder}
|
||||||
np={eps.subject}
|
np={block.selection}
|
||||||
counterPart={undefined}
|
counterPart={undefined}
|
||||||
role="subject"
|
role="subject"
|
||||||
onChange={payload => adjustEps({ type: "set subject", payload })}
|
onChange={payload => adjustEps({ type: "set subject", payload })}
|
||||||
opts={props.opts}
|
opts={props.opts}
|
||||||
/>
|
/>
|
||||||
|
: <APPicker
|
||||||
|
phraseIsComplete={phraseIsComplete}
|
||||||
|
heading="AP"
|
||||||
|
entryFeeder={props.entryFeeder}
|
||||||
|
AP={block}
|
||||||
|
opts={props.opts}
|
||||||
|
onChange={AP => adjustEps({ type: "set AP", payload: { index: i, AP } })}
|
||||||
|
onRemove={() => adjustEps({ type: "remove AP", payload: i })}
|
||||||
|
/>}
|
||||||
</div>
|
</div>
|
||||||
<div className="my-2">
|
))}
|
||||||
|
<div className="my-2 card block-card p-1">
|
||||||
<div className="h5 text-center">Predicate {king === "predicate" ? roleIcon.king : ""}</div>
|
<div className="h5 text-center">Predicate {king === "predicate" ? roleIcon.king : ""}</div>
|
||||||
<div className="mb-2 text-center">
|
<div className="mb-2 text-center">
|
||||||
<ButtonSelect
|
<ButtonSelect
|
||||||
|
|
|
@ -5,6 +5,8 @@ import {
|
||||||
} from "../../lib/misc-helpers";
|
} from "../../lib/misc-helpers";
|
||||||
import { isUnisexNounEntry } from "../../lib/type-predicates";
|
import { isUnisexNounEntry } from "../../lib/type-predicates";
|
||||||
import { checkForMiniPronounsError } from "../../lib/phrase-building/compile";
|
import { checkForMiniPronounsError } from "../../lib/phrase-building/compile";
|
||||||
|
import { adjustSubjectSelection, getSubjectSelection, makeAPBlock } from "../../lib/phrase-building/blocks-utils";
|
||||||
|
import { assertNever } from "assert-never";
|
||||||
|
|
||||||
type EpsReducerAction = {
|
type EpsReducerAction = {
|
||||||
type: "set predicate type",
|
type: "set predicate type",
|
||||||
|
@ -24,6 +26,23 @@ type EpsReducerAction = {
|
||||||
} | {
|
} | {
|
||||||
type: "set equative",
|
type: "set equative",
|
||||||
payload: T.EquativeSelection,
|
payload: T.EquativeSelection,
|
||||||
|
} | {
|
||||||
|
type: "insert new AP",
|
||||||
|
} | {
|
||||||
|
type: "set AP",
|
||||||
|
payload: {
|
||||||
|
index: number,
|
||||||
|
AP: T.APSelection | undefined,
|
||||||
|
},
|
||||||
|
} | {
|
||||||
|
type: "remove AP",
|
||||||
|
payload: number,
|
||||||
|
} | {
|
||||||
|
type: "shift block",
|
||||||
|
payload: {
|
||||||
|
index: number,
|
||||||
|
direction: "back" | "forward",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAction, sendAlert?: (msg: string) => void): T.EPSelectionState {
|
export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAction, sendAlert?: (msg: string) => void): T.EPSelectionState {
|
||||||
|
@ -41,7 +60,7 @@ export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAc
|
||||||
if (!subject) {
|
if (!subject) {
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
subject,
|
blocks: adjustSubjectSelection(eps.blocks, subject),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (subject.type === "pronoun" && eps.predicate.type === "NP" && eps.predicate.NP?.type === "noun" && isUnisexNounEntry(eps.predicate.NP.entry)) {
|
if (subject.type === "pronoun" && eps.predicate.type === "NP" && eps.predicate.NP?.type === "noun" && isUnisexNounEntry(eps.predicate.NP.entry)) {
|
||||||
|
@ -57,7 +76,7 @@ export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAc
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
subject,
|
blocks: adjustSubjectSelection(eps.blocks, subject),
|
||||||
predicate: {
|
predicate: {
|
||||||
...eps.predicate,
|
...eps.predicate,
|
||||||
NP: adjusted,
|
NP: adjusted,
|
||||||
|
@ -66,7 +85,7 @@ export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAc
|
||||||
}
|
}
|
||||||
const n: T.EPSelectionState = {
|
const n: T.EPSelectionState = {
|
||||||
...eps,
|
...eps,
|
||||||
subject,
|
blocks: adjustSubjectSelection(eps.blocks, subject),
|
||||||
};
|
};
|
||||||
return subject ? ensureMiniPronounsOk(eps, n, sendAlert) : n;
|
return subject ? ensureMiniPronounsOk(eps, n, sendAlert) : n;
|
||||||
}
|
}
|
||||||
|
@ -81,16 +100,17 @@ export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAc
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (eps.subject?.type === "pronoun" && selection.type === "noun" && isUnisexNounEntry(selection.entry)) {
|
const subject = getSubjectSelection(eps.blocks).selection;
|
||||||
|
if (subject?.type === "pronoun" && selection.type === "noun" && isUnisexNounEntry(selection.entry)) {
|
||||||
const { gender, number } = selection;
|
const { gender, number } = selection;
|
||||||
const pronoun = eps.subject.person;
|
const pronoun = subject.person;
|
||||||
const newPronoun = movePersonNumber(movePersonGender(pronoun, gender), number);
|
const newPronoun = movePersonNumber(movePersonGender(pronoun, gender), number);
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
subject: {
|
blocks: adjustSubjectSelection(eps.blocks, {
|
||||||
...eps.subject,
|
...subject,
|
||||||
person: newPronoun,
|
person: newPronoun,
|
||||||
},
|
}),
|
||||||
predicate: {
|
predicate: {
|
||||||
...eps.predicate,
|
...eps.predicate,
|
||||||
NP: selection,
|
NP: selection,
|
||||||
|
@ -122,12 +142,59 @@ export default function epsReducer(eps: T.EPSelectionState, action: EpsReducerAc
|
||||||
};
|
};
|
||||||
return ensureMiniPronounsOk(eps, n, sendAlert);
|
return ensureMiniPronounsOk(eps, n, sendAlert);
|
||||||
}
|
}
|
||||||
// if (action.type === "set equative") {
|
if (action.type === "set equative") {
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
equative: action.payload,
|
equative: action.payload,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (action.type === "insert new AP") {
|
||||||
|
return {
|
||||||
|
...eps,
|
||||||
|
blocks: [makeAPBlock(), ...eps.blocks],
|
||||||
|
};
|
||||||
|
// const index = action.payload;
|
||||||
|
// const newAP = undefined;
|
||||||
|
// return {
|
||||||
|
// ...eps,
|
||||||
|
// blocks: [...eps.blocks].splice(index, 0, newAP),
|
||||||
|
// };
|
||||||
|
}
|
||||||
|
if (action.type === "set AP") {
|
||||||
|
const blocks = [...eps.blocks];
|
||||||
|
const { index, AP } = action.payload;
|
||||||
|
blocks[index].block = AP;
|
||||||
|
return {
|
||||||
|
...eps,
|
||||||
|
blocks,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (action.type === "remove AP") {
|
||||||
|
const blocks = [...eps.blocks];
|
||||||
|
blocks.splice(action.payload, 1);
|
||||||
|
return {
|
||||||
|
...eps,
|
||||||
|
blocks,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (action.type === "shift block") {
|
||||||
|
const { index, direction } = action.payload;
|
||||||
|
const newIndex = index + (direction === "forward" ? 1 : -1);
|
||||||
|
const blocks = [...eps.blocks];
|
||||||
|
if (newIndex >= blocks.length || newIndex < 0) {
|
||||||
|
return eps;
|
||||||
|
// var k = newIndex - blocks.length + 1;
|
||||||
|
// while (k--) {
|
||||||
|
// blocks.push(undefined);
|
||||||
// }
|
// }
|
||||||
|
}
|
||||||
|
blocks.splice(newIndex, 0, blocks.splice(index, 1)[0]);
|
||||||
|
return {
|
||||||
|
...eps,
|
||||||
|
blocks,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
assertNever(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ensureMiniPronounsOk(old: T.EPSelectionState, eps: T.EPSelectionState, sendAlert?: (msg: string) => void): T.EPSelectionState {
|
function ensureMiniPronounsOk(old: T.EPSelectionState, eps: T.EPSelectionState, sendAlert?: (msg: string) => void): T.EPSelectionState {
|
||||||
|
|
|
@ -30,6 +30,10 @@ function EqCompPicker(props: {
|
||||||
props.onChange(undefined);
|
props.onChange(undefined);
|
||||||
setCompType(ctp);
|
setCompType(ctp);
|
||||||
}
|
}
|
||||||
|
function handleSandwichExit() {
|
||||||
|
setCompType(undefined);
|
||||||
|
props.onChange(undefined);
|
||||||
|
}
|
||||||
const clearButton = (compType && !props.cantClear)
|
const clearButton = (compType && !props.cantClear)
|
||||||
? <button className="btn btn-sm btn-light mb-2" onClick={handleClear}>X</button>
|
? <button className="btn btn-sm btn-light mb-2" onClick={handleClear}>X</button>
|
||||||
: <div></div>;
|
: <div></div>;
|
||||||
|
@ -82,6 +86,7 @@ function EqCompPicker(props: {
|
||||||
opts={props.opts}
|
opts={props.opts}
|
||||||
sandwich={props.comp?.type === "sandwich" ? props.comp : undefined}
|
sandwich={props.comp?.type === "sandwich" ? props.comp : undefined}
|
||||||
entryFeeder={props.entryFeeder}
|
entryFeeder={props.entryFeeder}
|
||||||
|
onExit={handleSandwichExit}
|
||||||
// TODO: get phraseIsComplete working here
|
// TODO: get phraseIsComplete working here
|
||||||
phraseIsComplete={props.phraseIsComplete}
|
phraseIsComplete={props.phraseIsComplete}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -28,14 +28,19 @@ function AdjectivePicker(props: {
|
||||||
setAddingSandwich(false);
|
setAddingSandwich(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function handleSandwichExit() {
|
||||||
|
setAddingSandwich(false);
|
||||||
|
props.onChange(undefined);
|
||||||
|
}
|
||||||
return <div style={{ maxWidth: "225px", minWidth: "125px" }}>
|
return <div style={{ maxWidth: "225px", minWidth: "125px" }}>
|
||||||
{(props.adjective?.sandwich || addingSandwich) && <SandwichPicker
|
{(props.adjective?.sandwich || addingSandwich) && <SandwichPicker
|
||||||
onChange={handleSandwichChange}
|
onChange={handleSandwichChange}
|
||||||
opts={props.opts}
|
opts={props.opts}
|
||||||
sandwich={props.adjective?.sandwich}
|
sandwich={props.adjective?.sandwich}
|
||||||
entryFeeder={props.entryFeeder}
|
entryFeeder={props.entryFeeder}
|
||||||
// TODO: get phraseIsComplete working here
|
onExit={handleSandwichExit}
|
||||||
phraseIsComplete={props.phraseIsComplete}
|
// TODO: not allowing shrinking any possesisives on sandwiches for now - need to work with the blocks and their special behaviour
|
||||||
|
phraseIsComplete={false}
|
||||||
/>}
|
/>}
|
||||||
<div className="d-flex flex-row justify-content-between align-items-baseline">
|
<div className="d-flex flex-row justify-content-between align-items-baseline">
|
||||||
{!props.noTitle && <div>
|
{!props.noTitle && <div>
|
||||||
|
|
|
@ -10,6 +10,7 @@ function SandwichPicker(props: {
|
||||||
sandwich: T.SandwichSelection<T.Sandwich> | undefined;
|
sandwich: T.SandwichSelection<T.Sandwich> | undefined;
|
||||||
entryFeeder: T.EntryFeeder,
|
entryFeeder: T.EntryFeeder,
|
||||||
phraseIsComplete: boolean,
|
phraseIsComplete: boolean,
|
||||||
|
onExit: () => void,
|
||||||
}) {
|
}) {
|
||||||
const [sandwichBase, setSandwichBase] = useState<T.Sandwich | undefined>(undefined);
|
const [sandwichBase, setSandwichBase] = useState<T.Sandwich | undefined>(undefined);
|
||||||
function handleNounChange(n: T.NPSelection | undefined) {
|
function handleNounChange(n: T.NPSelection | undefined) {
|
||||||
|
@ -36,11 +37,14 @@ function SandwichPicker(props: {
|
||||||
...s,
|
...s,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function handleExit() {
|
||||||
|
props.onExit();
|
||||||
|
}
|
||||||
return <div>
|
return <div>
|
||||||
<div className="d-flex flex-row justify-content-between">
|
<div className="d-flex flex-row justify-content-between">
|
||||||
<div></div>
|
<div></div>
|
||||||
<div className="text-center">🥪 Sandwich</div>
|
<div className="text-center">🥪 Sandwich</div>
|
||||||
<div className="clickable" onClick={() => props.onChange(undefined)}>
|
<div className="clickable" onClick={handleExit}>
|
||||||
<i className="fas fa-trash" />
|
<i className="fas fa-trash" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -54,9 +58,7 @@ function SandwichPicker(props: {
|
||||||
role="object"
|
role="object"
|
||||||
cantClear={true}
|
cantClear={true}
|
||||||
entryFeeder={props.entryFeeder}
|
entryFeeder={props.entryFeeder}
|
||||||
// TODO: the shrinking of possesives in sandwiches gets messed up with compilinig 😩
|
phraseIsComplete={props.phraseIsComplete}
|
||||||
// disabling it for now
|
|
||||||
phraseIsComplete={false}
|
|
||||||
/>
|
/>
|
||||||
</div>}
|
</div>}
|
||||||
<SandwichSelect
|
<SandwichSelect
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
import * as T from "../../types";
|
||||||
|
|
||||||
|
export function getSubjectSelection(blocks: T.EPSBlockComplete[]): T.SubjectSelectionComplete;
|
||||||
|
export function getSubjectSelection(blocks: T.EPSBlock[]): T.SubjectSelection;
|
||||||
|
export function getSubjectSelection(blocks: T.EPSBlock[] | T.EPSBlockComplete[]): T.SubjectSelection | T.SubjectSelectionComplete {
|
||||||
|
const b = blocks.find(f => f.block?.type === "subjectSelection");
|
||||||
|
if (!b || !b.block || b.block.type !== "subjectSelection") {
|
||||||
|
throw new Error("subjectSelection not found in blocks");
|
||||||
|
}
|
||||||
|
return b.block;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRenderedSubjectSelection(blocks: (T.Rendered<T.SubjectSelectionComplete> | T.Rendered<T.APSelection>)[]): T.Rendered<T.SubjectSelectionComplete> {
|
||||||
|
const b = blocks.find(f => f.type === "subjectSelection");
|
||||||
|
if (!b || b.type !== "subjectSelection") {
|
||||||
|
throw new Error("subjectSelection not found in blocks");
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function makeEPSBlocks(): T.EPSBlock[] {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
key: Math.random(),
|
||||||
|
block: {
|
||||||
|
type: "subjectSelection",
|
||||||
|
selection: undefined,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function makeAPBlock(): T.EPSBlock {
|
||||||
|
return {
|
||||||
|
key: Math.random(),
|
||||||
|
block: undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function makeSubjectSelection(selection: T.NPSelection | undefined): T.SubjectSelection {
|
||||||
|
return {
|
||||||
|
type: "subjectSelection",
|
||||||
|
selection,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function EPSBlocksAreComplete(blocks: T.EPSBlock[]): blocks is T.EPSBlockComplete[] {
|
||||||
|
if (blocks.some(block => block.block === undefined)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const subject = getSubjectSelection(blocks);
|
||||||
|
return !!subject.selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function adjustSubjectSelection(blocks: T.EPSBlock[], subject: T.SubjectSelectionComplete | T.NPSelection): T.EPSBlockComplete[];
|
||||||
|
export function adjustSubjectSelection(blocks: T.EPSBlock[], subject: T.SubjectSelection | undefined): T.EPSBlock[];
|
||||||
|
export function adjustSubjectSelection(blocks: T.EPSBlock[], subject: T.SubjectSelection | T.SubjectSelectionComplete | T.NPSelection | undefined): T.EPSBlock[] | T.EPSBlockComplete[] {
|
||||||
|
const nb = [...blocks];
|
||||||
|
const i = nb.findIndex(b => b.block && b.block.type === "subjectSelection");
|
||||||
|
if (i === -1) {
|
||||||
|
throw new Error("couldn't find subjectSelection to modify");
|
||||||
|
}
|
||||||
|
nb[i].block = subject?.type === "subjectSelection" ? subject : makeSubjectSelection(subject);
|
||||||
|
return nb;
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ import { pronouns } from "../grammar-units";
|
||||||
import { completeEPSelection, renderEP } from "./render-ep";
|
import { completeEPSelection, renderEP } from "./render-ep";
|
||||||
import { completeVPSelection } from "./vp-tools";
|
import { completeVPSelection } from "./vp-tools";
|
||||||
import { renderVP } from "./render-vp";
|
import { renderVP } from "./render-vp";
|
||||||
|
import { getRenderedSubjectSelection } from "./blocks-utils";
|
||||||
|
|
||||||
const blank: T.PsString = {
|
const blank: T.PsString = {
|
||||||
p: "______",
|
p: "______",
|
||||||
|
@ -62,6 +63,7 @@ type CompilePsInput = {
|
||||||
},
|
},
|
||||||
VP: T.VPRendered,
|
VP: T.VPRendered,
|
||||||
}
|
}
|
||||||
|
|
||||||
function compilePs({ NPs, kids, verb: { head, rest }, VP }: CompilePsInput): T.SingleOrLengthOpts<T.PsString[]> {
|
function compilePs({ NPs, kids, verb: { head, rest }, VP }: CompilePsInput): T.SingleOrLengthOpts<T.PsString[]> {
|
||||||
if ("long" in rest) {
|
if ("long" in rest) {
|
||||||
return {
|
return {
|
||||||
|
@ -277,7 +279,19 @@ export function compileEP(EP: T.EPRendered, combineLengths?: boolean, blankOut?:
|
||||||
|
|
||||||
export function getEPSegmentsAndKids(EP: T.EPRendered, blankOut?: BlankoutOptions): { kids: Segment[], NPs: Segment[] } {
|
export function getEPSegmentsAndKids(EP: T.EPRendered, blankOut?: BlankoutOptions): { kids: Segment[], NPs: Segment[] } {
|
||||||
const possToShrink = findPossesivesToShrinkInEP(EP);
|
const possToShrink = findPossesivesToShrinkInEP(EP);
|
||||||
const subject = makeSegment(getPashtoFromRendered(EP.subject, false));
|
const blocks = EP.blocks.reduce((accum, block) => {
|
||||||
|
if (block.type === "subjectSelection") {
|
||||||
|
if (EP.omitSubject) return accum;
|
||||||
|
return [
|
||||||
|
...accum,
|
||||||
|
makeSegment(getPashtoFromRendered(block.selection, false)),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
...accum,
|
||||||
|
makeSegment(getPashtoFromRendered(block, false)),
|
||||||
|
];
|
||||||
|
}, [] as Segment[]);
|
||||||
const predicate = makeSegment(getPashtoFromRendered(EP.predicate, false));
|
const predicate = makeSegment(getPashtoFromRendered(EP.predicate, false));
|
||||||
return {
|
return {
|
||||||
kids: blankOut?.kidsSection ? [kidsBlank] : orderKidsSection([
|
kids: blankOut?.kidsSection ? [kidsBlank] : orderKidsSection([
|
||||||
|
@ -288,7 +302,7 @@ export function getEPSegmentsAndKids(EP: T.EPRendered, blankOut?: BlankoutOption
|
||||||
...possToShrink.map(a => shrinkNP(a.np)),
|
...possToShrink.map(a => shrinkNP(a.np)),
|
||||||
]),
|
]),
|
||||||
NPs: [
|
NPs: [
|
||||||
...EP.omitSubject ? [] : [subject],
|
...blocks,
|
||||||
predicate
|
predicate
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
@ -319,18 +333,30 @@ function compileEPPs({ NPs, kids, equative, negative }: {
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileEPEnglish(EP: T.EPRendered): string[] | undefined {
|
function compileEPEnglish(EP: T.EPRendered): string[] | undefined {
|
||||||
function insertEWords(e: string, { subject, predicate }: { subject: string, predicate: string }): string {
|
function insertEWords(e: string, { subject, predicate, APs }: { subject: string, predicate: string, APs: string }): string {
|
||||||
return e.replace("$SUBJ", subject).replace("$PRED", predicate || "");
|
return e.replace("$SUBJ", subject).replace("$PRED", predicate || "") + APs;
|
||||||
}
|
}
|
||||||
const engSubj = getEnglishFromRendered(EP.subject);
|
const engSubj = getRenderedSubjectSelection(EP.blocks).selection.e;
|
||||||
const engPred = getEnglishFromRendered(EP.predicate);
|
const engPred = getEnglishFromRendered(EP.predicate);
|
||||||
|
const engAPs = getEnglishAPs(EP.blocks);
|
||||||
// require all English parts for making the English phrase
|
// require all English parts for making the English phrase
|
||||||
return (EP.englishBase && engSubj && engPred)
|
const b = (EP.englishBase && engSubj && engPred)
|
||||||
? EP.englishBase.map(e => insertEWords(e, {
|
? EP.englishBase.map(e => insertEWords(e, {
|
||||||
subject: engSubj,
|
subject: engSubj,
|
||||||
predicate: engPred,
|
predicate: engPred,
|
||||||
|
APs: engAPs,
|
||||||
}))
|
}))
|
||||||
: undefined;
|
: undefined;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEnglishAPs(blocks: (T.Rendered<T.SubjectSelectionComplete> | T.Rendered<T.APSelection>)[]) {
|
||||||
|
const APs = blocks.filter(x => x.type !== "subjectSelection") as T.Rendered<T.APSelection>[];
|
||||||
|
return APs.reduce((accum, curr) => {
|
||||||
|
const e = getEnglishFromRendered(curr);
|
||||||
|
if (!e) return accum;
|
||||||
|
return `${accum} ${e}`;
|
||||||
|
}, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -497,7 +523,24 @@ type FoundNP = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export function findPossesivesToShrinkInEP(EP: T.EPRendered): FoundNP[] {
|
export function findPossesivesToShrinkInEP(EP: T.EPRendered): FoundNP[] {
|
||||||
const inSubject: FoundNP[] = findPossesivesInNP(EP.subject).map(np => ({ np, from: "subject" }));
|
const inBlocks: FoundNP[] = EP.blocks.reduce((accum, block): FoundNP[] => {
|
||||||
|
if (block.type === "subjectSelection") {
|
||||||
|
if (EP.omitSubject) return accum;
|
||||||
|
const found: FoundNP[] = findPossesivesInNP(block.selection).map(np => ({ np, from: "subject" }));
|
||||||
|
return [
|
||||||
|
...accum,
|
||||||
|
...found,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
if (block.type === "sandwich") {
|
||||||
|
const found: FoundNP[] = findPossesivesInNP(block.inside).map(np => ({ np, from: "AP" }));
|
||||||
|
return [
|
||||||
|
...accum,
|
||||||
|
...found,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return accum;
|
||||||
|
}, [] as FoundNP[]);
|
||||||
const inPredicate: FoundNP[] = ((EP.predicate.type === "loc. adv.")
|
const inPredicate: FoundNP[] = ((EP.predicate.type === "loc. adv.")
|
||||||
? []
|
? []
|
||||||
: (EP.predicate.type === "adjective")
|
: (EP.predicate.type === "adjective")
|
||||||
|
@ -507,9 +550,9 @@ export function findPossesivesToShrinkInEP(EP: T.EPRendered): FoundNP[] {
|
||||||
EP.predicate as T.NPSelection
|
EP.predicate as T.NPSelection
|
||||||
)).map(np => ({ np, from: "predicate" }));
|
)).map(np => ({ np, from: "predicate" }));
|
||||||
return [
|
return [
|
||||||
...inSubject,
|
...inBlocks,
|
||||||
...inPredicate,
|
...inPredicate,
|
||||||
].filter(found => !(found.from === "subject" && EP.omitSubject));
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// export function findPossesiveToShrinkInVP(VP: T.VPRendered): T.Rendered<T.NPSelection>[] {
|
// export function findPossesiveToShrinkInVP(VP: T.VPRendered): T.Rendered<T.NPSelection>[] {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import {
|
||||||
import * as T from "../../types";
|
import * as T from "../../types";
|
||||||
import { concatPsString } from "../p-text-helpers";
|
import { concatPsString } from "../p-text-helpers";
|
||||||
|
|
||||||
function getBaseAndAdjectives(np: T.Rendered<T.NPSelection | T.EqCompSelection>): T.PsString[] {
|
function getBaseAndAdjectives(np: T.Rendered<T.NPSelection | T.EqCompSelection | T.APSelection>): T.PsString[] {
|
||||||
if (np.type === "sandwich") {
|
if (np.type === "sandwich") {
|
||||||
return getSandwichPsBaseAndAdjectives(np);
|
return getSandwichPsBaseAndAdjectives(np);
|
||||||
}
|
}
|
||||||
|
@ -73,26 +73,26 @@ function trimOffShrunkenPossesive(p: T.Rendered<T.NPSelection>): T.Rendered<T.NP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPashtoFromRendered(np: T.Rendered<T.NPSelection> | T.Rendered<T.EqCompSelection>, subjectsPerson: false | T.Person): T.PsString[] {
|
export function getPashtoFromRendered(b: T.Rendered<T.NPSelection> | T.Rendered<T.EqCompSelection> | T.Rendered<T.APSelection>, subjectsPerson: false | T.Person): T.PsString[] {
|
||||||
const base = getBaseAndAdjectives(np);
|
const base = getBaseAndAdjectives(b);
|
||||||
if (np.type === "loc. adv.") {
|
if (b.type === "loc. adv." || b.type === "adverb") {
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
if (np.type === "adjective") {
|
if (b.type === "adjective") {
|
||||||
if (!np.sandwich) {
|
if (!b.sandwich) {
|
||||||
return base
|
return base
|
||||||
}
|
}
|
||||||
const sandwichPs = getPashtoFromRendered(np.sandwich, false);
|
const sandwichPs = getPashtoFromRendered(b.sandwich, false);
|
||||||
return base.flatMap(p => (
|
return base.flatMap(p => (
|
||||||
sandwichPs.flatMap(s => (
|
sandwichPs.flatMap(s => (
|
||||||
concatPsString(s, " ", p)
|
concatPsString(s, " ", p)
|
||||||
))
|
))
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
const trimmed = np.type === "sandwich" ? {
|
const trimmed = b.type === "sandwich" ? {
|
||||||
...np,
|
...b,
|
||||||
inside: trimOffShrunkenPossesive(np.inside),
|
inside: trimOffShrunkenPossesive(b.inside),
|
||||||
} : trimOffShrunkenPossesive(np);
|
} : trimOffShrunkenPossesive(b);
|
||||||
if (trimmed.type === "sandwich") {
|
if (trimmed.type === "sandwich") {
|
||||||
return trimmed.inside.possesor
|
return trimmed.inside.possesor
|
||||||
? addPossesor(trimmed.inside.possesor.np, base, subjectsPerson)
|
? addPossesor(trimmed.inside.possesor.np, base, subjectsPerson)
|
||||||
|
@ -190,12 +190,12 @@ function pronounPossEng(p: T.Person): string {
|
||||||
return "their";
|
return "their";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getEnglishFromRendered(r: T.Rendered<T.NPSelection | T.EqCompSelection>): string | undefined {
|
export function getEnglishFromRendered(r: T.Rendered<T.NPSelection | T.EqCompSelection | T.APSelection>): string | undefined {
|
||||||
if (r.type === "sandwich") {
|
if (r.type === "sandwich") {
|
||||||
return getEnglishFromRenderedSandwich(r);
|
return getEnglishFromRenderedSandwich(r);
|
||||||
}
|
}
|
||||||
if (!r.e) return undefined;
|
if (!r.e) return undefined;
|
||||||
if (r.type === "loc. adv.") {
|
if (r.type === "loc. adv." || r.type === "adverb") {
|
||||||
return r.e;
|
return r.e;
|
||||||
}
|
}
|
||||||
if (r.type === "adjective") {
|
if (r.type === "adjective") {
|
||||||
|
|
|
@ -11,24 +11,28 @@ import { psStringFromEntry } from "../p-text-helpers";
|
||||||
import { isLocativeAdverbEntry } from "../type-predicates";
|
import { isLocativeAdverbEntry } from "../type-predicates";
|
||||||
import { renderAdjectiveSelection } from "./render-adj";
|
import { renderAdjectiveSelection } from "./render-adj";
|
||||||
import { renderSandwich } from "./render-sandwich";
|
import { renderSandwich } from "./render-sandwich";
|
||||||
|
import { EPSBlocksAreComplete, getSubjectSelection } from "./blocks-utils";
|
||||||
|
|
||||||
export function renderEP(EP: T.EPSelectionComplete): T.EPRendered {
|
export function renderEP(EP: T.EPSelectionComplete): T.EPRendered {
|
||||||
const king = (EP.subject.type === "pronoun")
|
const subject = getSubjectSelection(EP.blocks).selection;
|
||||||
|
const king = (subject.type === "pronoun")
|
||||||
? "subject"
|
? "subject"
|
||||||
: EP.predicate.type === "NP"
|
: EP.predicate.type === "NP"
|
||||||
? "predicate"
|
? "predicate"
|
||||||
: "subject";
|
: "subject";
|
||||||
// TODO: less repetative logic
|
// TODO: less repetative logic
|
||||||
const kingPerson = king === "subject"
|
const kingPerson = king === "subject"
|
||||||
? getPersonFromNP(EP.subject)
|
? getPersonFromNP(subject)
|
||||||
: EP.predicate.type === "NP"
|
: EP.predicate.type === "NP"
|
||||||
? getPersonFromNP(EP.predicate.selection)
|
? getPersonFromNP(EP.predicate.selection)
|
||||||
: getPersonFromNP(EP.subject);
|
: getPersonFromNP(subject);
|
||||||
const kingIsParticiple = EP[king].type === "participle";
|
const kingIsParticiple = king === "subject"
|
||||||
|
? (subject.type === "participle")
|
||||||
|
: (EP.predicate.type === "NP" && EP.predicate.selection.type === "participle");
|
||||||
return {
|
return {
|
||||||
type: "EPRendered",
|
type: "EPRendered",
|
||||||
king: EP.predicate.type === "Complement" ? "subject" : "predicate",
|
king: EP.predicate.type === "Complement" ? "subject" : "predicate",
|
||||||
subject: renderNPSelection(EP.subject, false, false, "subject", king === "subject" ? "king" : "none"),
|
blocks: renderEPSBlocks(EP.blocks, king),
|
||||||
predicate: EP.predicate.type === "NP"
|
predicate: EP.predicate.type === "NP"
|
||||||
? renderNPSelection(EP.predicate.selection, false, true, "subject", "king")
|
? renderNPSelection(EP.predicate.selection, false, true, "subject", "king")
|
||||||
: renderEqCompSelection(EP.predicate.selection, kingPerson),
|
: renderEqCompSelection(EP.predicate.selection, kingPerson),
|
||||||
|
@ -54,6 +58,21 @@ export function getEquativeForm(tense: T.EquativeTense): { hasBa: boolean, form:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderEPSBlocks(blocks: T.EPSBlockComplete[], king: "subject" | "predicate"): (T.Rendered<T.SubjectSelectionComplete> | T.Rendered<T.APSelection>)[] {
|
||||||
|
return blocks.map(({ block }): (T.Rendered<T.SubjectSelectionComplete> | T.Rendered<T.APSelection>) => {
|
||||||
|
if (block.type === "adverb") {
|
||||||
|
return renderAdverbSelection(block);
|
||||||
|
}
|
||||||
|
if (block.type === "sandwich") {
|
||||||
|
return renderSandwich(block);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: "subjectSelection",
|
||||||
|
selection: renderNPSelection(block.selection, false, false, "subject", king === "subject" ? "king" : "none")
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function renderEquative(es: T.EquativeSelection, person: T.Person): T.EquativeRendered {
|
function renderEquative(es: T.EquativeSelection, person: T.Person): T.EquativeRendered {
|
||||||
const { form, hasBa } = getEquativeForm(es.tense)
|
const { form, hasBa } = getEquativeForm(es.tense)
|
||||||
const ps = getPersonFromVerbForm(form, person);
|
const ps = getPersonFromVerbForm(form, person);
|
||||||
|
@ -65,6 +84,20 @@ function renderEquative(es: T.EquativeSelection, person: T.Person): T.EquativeRe
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderAdverbSelection(a: T.AdverbSelection): T.Rendered<T.AdverbSelection> {
|
||||||
|
const e = getEnglishWord(a.entry);
|
||||||
|
if (!e || typeof e !== "string") {
|
||||||
|
console.log(e);
|
||||||
|
throw new Error("error getting english for compliment");
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: "adverb",
|
||||||
|
entry: a.entry,
|
||||||
|
ps: [psStringFromEntry(a.entry)],
|
||||||
|
e,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function renderEqCompSelection(s: T.EqCompSelection, person: T.Person): T.Rendered<T.EqCompSelection> {
|
function renderEqCompSelection(s: T.EqCompSelection, person: T.Person): T.Rendered<T.EqCompSelection> {
|
||||||
if (s.type === "sandwich") {
|
if (s.type === "sandwich") {
|
||||||
return renderSandwich(s);
|
return renderSandwich(s);
|
||||||
|
@ -160,7 +193,7 @@ function getEnglishConj(p: T.Person, e: string | T.EnglishBlock): string {
|
||||||
|
|
||||||
|
|
||||||
export function completeEPSelection(eps: T.EPSelectionState): T.EPSelectionComplete | undefined {
|
export function completeEPSelection(eps: T.EPSelectionState): T.EPSelectionComplete | undefined {
|
||||||
if (!eps.subject) {
|
if (!EPSBlocksAreComplete(eps.blocks)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
if (eps.predicate.type === "Complement") {
|
if (eps.predicate.type === "Complement") {
|
||||||
|
@ -168,7 +201,7 @@ export function completeEPSelection(eps: T.EPSelectionState): T.EPSelectionCompl
|
||||||
if (!selection) return undefined;
|
if (!selection) return undefined;
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
subject: eps.subject,
|
blocks: eps.blocks,
|
||||||
predicate: {
|
predicate: {
|
||||||
type: "Complement",
|
type: "Complement",
|
||||||
selection,
|
selection,
|
||||||
|
@ -180,7 +213,7 @@ export function completeEPSelection(eps: T.EPSelectionState): T.EPSelectionCompl
|
||||||
if (!selection) return undefined;
|
if (!selection) return undefined;
|
||||||
return {
|
return {
|
||||||
...eps,
|
...eps,
|
||||||
subject: eps.subject,
|
blocks: eps.blocks,
|
||||||
predicate: {
|
predicate: {
|
||||||
type: "NP",
|
type: "NP",
|
||||||
selection,
|
selection,
|
||||||
|
|
|
@ -216,48 +216,6 @@ export function switchSubjObj(vps: T.VPSelectionState | T.VPSelectionComplete):
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// export function insertSubjectSelection(vps: T.VPSelectionState, s: T.SubjectSelection): T.VPSelectionState {
|
|
||||||
// const index = vps.blocks.findIndex(f => f.type === "subjectSelection");
|
|
||||||
// if (index === -1) {
|
|
||||||
// throw new Error("couldn't find subjectSelection to insert over");
|
|
||||||
// }
|
|
||||||
// const blocks = [...vps.blocks];
|
|
||||||
// blocks[index] = s;
|
|
||||||
// return {
|
|
||||||
// ...vps,
|
|
||||||
// blocks,
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export function insertObjecttSelection(vps: T.VPSelectionState, o: T.ObjectSelection): T.VPSelectionState {
|
|
||||||
// const index = vps.blocks.findIndex(f => f.type === "objectSelection");
|
|
||||||
// if (index === -1) {
|
|
||||||
// throw new Error("couldn't find objectSelection to insert over");
|
|
||||||
// }
|
|
||||||
// const blocks = [...vps.blocks];
|
|
||||||
// blocks[index] = o;
|
|
||||||
// return {
|
|
||||||
// ...vps,
|
|
||||||
// blocks,
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export function getSubjectSelection(vps: T.VPSelectionState): T.SubjectSelection {
|
|
||||||
// const subject = vps.blocks.find(f => f.type === "subjectSelection");
|
|
||||||
// if (subject?.type !== "subjectSelection") {
|
|
||||||
// throw new Error("couldn't find subjectSelection");
|
|
||||||
// }
|
|
||||||
// return subject;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export function getObjectSelection(vps: T.VPSelectionState): T.ObjectSelection {
|
|
||||||
// const object = vps.blocks.find(f => f.type === "objectSelection");
|
|
||||||
// if (object?.type !== "objectSelection") {
|
|
||||||
// throw new Error("couldn't find objectSelection");
|
|
||||||
// }
|
|
||||||
// return object;
|
|
||||||
// }
|
|
||||||
|
|
||||||
export function completeVPSelection(vps: T.VPSelectionState): T.VPSelectionComplete | undefined {
|
export function completeVPSelection(vps: T.VPSelectionState): T.VPSelectionComplete | undefined {
|
||||||
if (vps.subject === undefined) {
|
if (vps.subject === undefined) {
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
|
@ -92,6 +92,12 @@ export const sandwiches: T.Sandwich[] = [
|
||||||
after: { p: "غوندې", f: "ghwunde" },
|
after: { p: "غوندې", f: "ghwunde" },
|
||||||
e: "like",
|
e: "like",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: "sandwich",
|
||||||
|
before: { p: "د", f: "du" },
|
||||||
|
after: { p: "په حیث", f: "pu heys" },
|
||||||
|
e: "as",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default sandwiches;
|
export default sandwiches;
|
File diff suppressed because one or more lines are too long
35
src/types.ts
35
src/types.ts
|
@ -541,7 +541,7 @@ export type ObjectSelection = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SubjectSelectionComplete = {
|
export type SubjectSelectionComplete = {
|
||||||
type: "subjectSelectionComplete",
|
type: "subjectSelection",
|
||||||
selection: NPSelection,
|
selection: NPSelection,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -676,10 +676,17 @@ export type RenderedPossesorSelection = {
|
||||||
shrunken: boolean,
|
shrunken: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Rendered<T extends NPSelection | EqCompSelection | AdjectiveSelection | SandwichSelection<Sandwich>> = T extends SandwichSelection<Sandwich>
|
export type Rendered<T extends NPSelection | EqCompSelection | AdjectiveSelection | SandwichSelection<Sandwich> | APSelection | SubjectSelectionComplete> = T extends SandwichSelection<Sandwich>
|
||||||
? Omit<SandwichSelection<Sandwich>, "inside"> & {
|
? Omit<SandwichSelection<Sandwich>, "inside"> & {
|
||||||
inside: Rendered<NPSelection>,
|
inside: Rendered<NPSelection>,
|
||||||
}
|
}
|
||||||
|
: T extends AdverbSelection
|
||||||
|
? {
|
||||||
|
type: "adverb",
|
||||||
|
entry: AdverbEntry,
|
||||||
|
ps: PsString[],
|
||||||
|
e?: string,
|
||||||
|
}
|
||||||
: T extends AdjectiveSelection
|
: T extends AdjectiveSelection
|
||||||
? {
|
? {
|
||||||
type: "adjective",
|
type: "adjective",
|
||||||
|
@ -690,6 +697,11 @@ export type Rendered<T extends NPSelection | EqCompSelection | AdjectiveSelectio
|
||||||
inflected: boolean,
|
inflected: boolean,
|
||||||
person: Person,
|
person: Person,
|
||||||
}
|
}
|
||||||
|
: T extends SubjectSelectionComplete
|
||||||
|
? {
|
||||||
|
type: "subjectSelection",
|
||||||
|
selection: Rendered<NPSelection>,
|
||||||
|
}
|
||||||
: ReplaceKey<
|
: ReplaceKey<
|
||||||
Omit<T, "changeGender" | "changeNumber" | "changeDistance" | "adjectives" | "possesor">,
|
Omit<T, "changeGender" | "changeNumber" | "changeDistance" | "adjectives" | "possesor">,
|
||||||
"e",
|
"e",
|
||||||
|
@ -710,7 +722,7 @@ export type Rendered<T extends NPSelection | EqCompSelection | AdjectiveSelectio
|
||||||
// TODO: recursive changing this down into the possesor etc.
|
// TODO: recursive changing this down into the possesor etc.
|
||||||
|
|
||||||
export type EPSelectionState = {
|
export type EPSelectionState = {
|
||||||
subject: NPSelection | undefined,
|
blocks: EPSBlock[],
|
||||||
predicate: {
|
predicate: {
|
||||||
type: "NP" | "Complement",
|
type: "NP" | "Complement",
|
||||||
NP: NPSelection | undefined,
|
NP: NPSelection | undefined,
|
||||||
|
@ -720,8 +732,17 @@ export type EPSelectionState = {
|
||||||
omitSubject: boolean,
|
omitSubject: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type EPSelectionComplete = Omit<EPSelectionState, "subject" | "predicate"> & {
|
export type EPSBlock = {
|
||||||
subject: NPSelection,
|
key: number,
|
||||||
|
block: SubjectSelection | APSelection | undefined,
|
||||||
|
};
|
||||||
|
export type EPSBlockComplete = {
|
||||||
|
key: number,
|
||||||
|
block: SubjectSelectionComplete | APSelection,
|
||||||
|
};
|
||||||
|
|
||||||
|
export type EPSelectionComplete = Omit<EPSelectionState, "predicate" | "blocks"> & {
|
||||||
|
blocks: EPSBlockComplete[],
|
||||||
predicate: {
|
predicate: {
|
||||||
type: "NP",
|
type: "NP",
|
||||||
selection: NPSelection,
|
selection: NPSelection,
|
||||||
|
@ -760,7 +781,7 @@ export type EquativeRendered = EquativeSelection & {
|
||||||
export type EPRendered = {
|
export type EPRendered = {
|
||||||
type: "EPRendered",
|
type: "EPRendered",
|
||||||
king: "subject" | "predicate",
|
king: "subject" | "predicate",
|
||||||
subject: Rendered<NPSelection>,
|
blocks: (Rendered<SubjectSelectionComplete> | Rendered<APSelection>)[],
|
||||||
predicate: Rendered<NPSelection> | Rendered<EqCompSelection>,
|
predicate: Rendered<NPSelection> | Rendered<EqCompSelection>,
|
||||||
equative: EquativeRendered,
|
equative: EquativeRendered,
|
||||||
englishBase?: string[],
|
englishBase?: string[],
|
||||||
|
@ -772,11 +793,13 @@ export type EntryFeeder = {
|
||||||
verbs: EntryLookupPortal<VerbEntry>,
|
verbs: EntryLookupPortal<VerbEntry>,
|
||||||
adjectives: EntryLookupPortal<AdjectiveEntry>,
|
adjectives: EntryLookupPortal<AdjectiveEntry>,
|
||||||
locativeAdverbs: EntryLookupPortal<LocativeAdverbEntry>,
|
locativeAdverbs: EntryLookupPortal<LocativeAdverbEntry>,
|
||||||
|
adverbs: EntryLookupPortal<AdverbEntry>,
|
||||||
} | {
|
} | {
|
||||||
nouns: NounEntry[],
|
nouns: NounEntry[],
|
||||||
verbs: VerbEntry[],
|
verbs: VerbEntry[],
|
||||||
adjectives: AdjectiveEntry[],
|
adjectives: AdjectiveEntry[],
|
||||||
locativeAdverbs: LocativeAdverbEntry[],
|
locativeAdverbs: LocativeAdverbEntry[],
|
||||||
|
adverbs: AdverbEntry[],
|
||||||
}
|
}
|
||||||
|
|
||||||
export type EntryFeederSingleType<X extends VerbEntry | DictionaryEntry> = X[] | EntryLookupPortal<X>;
|
export type EntryFeederSingleType<X extends VerbEntry | DictionaryEntry> = X[] | EntryLookupPortal<X>;
|
||||||
|
|
10
yarn.lock
10
yarn.lock
|
@ -1336,6 +1336,11 @@
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
|
"@formkit/auto-animate@^1.0.0-beta.1":
|
||||||
|
version "1.0.0-beta.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@formkit/auto-animate/-/auto-animate-1.0.0-beta.1.tgz#aec5fd2ea5e499ceb7eb117c7fd1217a7f100748"
|
||||||
|
integrity sha512-I3OWOBaPZKSJL4bsooXI8kC3q7bcgibD2oML0P/Lir6MnbvUe/0/7EH8br024juvM/Ulm9C9xGx9CJUQYrOWSA==
|
||||||
|
|
||||||
"@fortawesome/fontawesome-free@^5.15.2":
|
"@fortawesome/fontawesome-free@^5.15.2":
|
||||||
version "5.15.4"
|
version "5.15.4"
|
||||||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5"
|
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5"
|
||||||
|
@ -2757,6 +2762,11 @@ asn1.js@^5.2.0:
|
||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.0"
|
||||||
safer-buffer "^2.1.0"
|
safer-buffer "^2.1.0"
|
||||||
|
|
||||||
|
assert-never@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe"
|
||||||
|
integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==
|
||||||
|
|
||||||
assert@^1.1.1:
|
assert@^1.1.1:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
|
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
|
||||||
|
|
Loading…
Reference in New Issue