From 2118618eccd7f4b0d0a36cf7e5b92733efa956a1 Mon Sep 17 00:00:00 2001 From: Yaroslav Serhieiev Date: Mon, 17 Jun 2024 22:12:07 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20verb=20conjugation=20for=20imati,=20im?= =?UTF-8?q?=C4=9Bti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/substitutions.ts | 1 + .../__snapshots__/imperfect.test.ts.snap | 64 +++++++++---------- src/verb/conjugationVerb.ts | 53 +++++++-------- 3 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/substitutions.ts b/src/substitutions.ts index 6ec6943..b43448a 100644 --- a/src/substitutions.ts +++ b/src/substitutions.ts @@ -21,6 +21,7 @@ export const LJj_NJj = ['lj', 'ĺj', 'ľj', 'lj', 'nj', 'ńj', 'ňj', 'ñj', 'nj export const BIG_YUS = 'ų'; export const SMALL_YUS = 'ę'; export const BIG_YUS_LOOSE = ['u', BIG_YUS]; +export const IOTATED_SMALL_YUS = 'ję'; export const SMALL_YUS_LOOSE = ['e', SMALL_YUS]; export const NASAL_VOWELS = [SMALL_YUS, BIG_YUS]; export const NASAL_VOWELS_LOOSE = [...SMALL_YUS_LOOSE, ...BIG_YUS_LOOSE]; diff --git a/src/verb/__tests__/__snapshots__/imperfect.test.ts.snap b/src/verb/__tests__/__snapshots__/imperfect.test.ts.snap index 83d403e..f37d775 100644 --- a/src/verb/__tests__/__snapshots__/imperfect.test.ts.snap +++ b/src/verb/__tests__/__snapshots__/imperfect.test.ts.snap @@ -3218,7 +3218,7 @@ exports[`verb imperfect 417 1`] = ` "bųdųt imětì", ], "gerund": "iměńje", - "imperative": "imaj, imajmȯ, imajte", + "imperative": "imaĵ, imaĵmȯ, imaĵte", "imperfect": [ "iměh", "iměše", @@ -3252,15 +3252,14 @@ exports[`verb imperfect 417 1`] = ` "běhų iměli", "", ], - "prap": "imajųćí (imajųćá, imajųćé)", + "prap": "imaĵųćí (imaĵųćá, imaĵųćé)", "present": [ - "imajų, imajem", - "imaješ", - "imaje", - "imajemȯ", - "imajete", + "imajų, imam", + "imaješ, imaš", + "imaje, ima", + "imajemȯ, imamo", + "imajete, imate", "imajųt", - "", ], "prpp": undefined, } @@ -3288,7 +3287,7 @@ exports[`verb imperfect 417-1 1`] = ` "bųdųt imatì", ], "gerund": "imańje", - "imperative": "imaj, imajmȯ, imajte", + "imperative": "imaĵ, imaĵmȯ, imaĵte", "imperfect": [ "imah", "imaše", @@ -3322,15 +3321,14 @@ exports[`verb imperfect 417-1 1`] = ` "běhų imali", "", ], - "prap": "imajųćí (imajųćá, imajųćé)", + "prap": "imaĵųćí (imaĵųćá, imaĵųćé)", "present": [ - "imajų, imajem", - "imaješ", - "imaje", - "imajemȯ", - "imajete", + "imajų, imam", + "imaješ, imaš", + "imaje, ima", + "imajemȯ, imamo", + "imajete, imate", "imajųt", - "", ], "prpp": undefined, } @@ -7934,7 +7932,7 @@ exports[`verb imperfect 875 1`] = ` "bųdųt imětì", ], "gerund": "iměńje", - "imperative": "imaj, imajmȯ, imajte", + "imperative": "imaĵ, imaĵmȯ, imaĵte", "imperfect": [ "iměh", "iměše", @@ -7968,17 +7966,16 @@ exports[`verb imperfect 875 1`] = ` "běhų iměli", "", ], - "prap": "imajųćí (imajųćá, imajųćé)", + "prap": "imaĵųćí (imaĵųćá, imaĵųćé)", "present": [ - "imajų, imajem", - "imaješ", - "imaje", - "imajemȯ", - "imajete", + "imajų, imam", + "imaješ, imaš", + "imaje, ima", + "imajemȯ, imamo", + "imajete, imate", "imajųt", - "", ], - "prpp": "imajemý (imajemá, imajemœ)", + "prpp": "imajemý (-á, -œ), imamý (-á, -œ)", } `; @@ -8004,7 +8001,7 @@ exports[`verb imperfect 875-1 1`] = ` "bųdųt imatì", ], "gerund": "imańje", - "imperative": "imaj, imajmȯ, imajte", + "imperative": "imaĵ, imaĵmȯ, imaĵte", "imperfect": [ "imah", "imaše", @@ -8038,17 +8035,16 @@ exports[`verb imperfect 875-1 1`] = ` "běhų imali", "", ], - "prap": "imajųćí (imajųćá, imajųćé)", + "prap": "imaĵųćí (imaĵųćá, imaĵųćé)", "present": [ - "imajų, imajem", - "imaješ", - "imaje", - "imajemȯ", - "imajete", + "imajų, imam", + "imaješ, imaš", + "imaje, ima", + "imajemȯ, imamo", + "imajete, imate", "imajųt", - "", ], - "prpp": "imajemý (imajemá, imajemœ)", + "prpp": "imajemý (-á, -œ), imamý (-á, -œ)", } `; diff --git a/src/verb/conjugationVerb.ts b/src/verb/conjugationVerb.ts index e466bce..f29d16d 100644 --- a/src/verb/conjugationVerb.ts +++ b/src/verb/conjugationVerb.ts @@ -4,6 +4,12 @@ import { compactArray, matchEnd } from '../utils'; import { parsePos, Verb } from '../partOfSpeech'; +import { + BIG_YUS, + BIG_YUS_LOOSE, + IOTATED_SMALL_YUS, + SMALL_YUS, +} from '../substitutions'; const _SE = [' se', ' se']; const SE_ = ['sę ', 'se ']; @@ -358,36 +364,29 @@ function derive_present_tense_stem(infinitive_stem_string: string): string { // ...ĵ in cases where most Slavic languages have contraction -aje- > -a- let result = infinitive_stem_string; - if (['ova', 'eva'].includes(result.slice(-3)) && result !== 'hova') { + if (result === 'vzę') { + result = 'vȯzm'; + } else if (result === 'umě') { + result = 'uměĵ'; + } else if (result === 'hova') { + result = 'hovaĵ'; + } else if (matchEnd(result, [['o', 'e'], 'va'])) { result = result.slice(0, -3) + 'uj'; - } else if (result.length > 3 && ['nu', 'nų'].includes(result.slice(-2))) { + } else if (result.length > 3 && matchEnd(result, ['n', BIG_YUS_LOOSE])) { result = result.slice(0, -1); - } else if (result.slice(-1) === 'ę') { - if (result.slice(-2) === 'ję') { - if (['bję', 'dję', 'sję', 'zję'].includes(result.slice(-3))) { - result = result.slice(0, -2) + 'ȯjm'; - } else { - result = result.slice(0, -1) + 'm'; - } - } else if (result === 'vzę') { - result = 'vȯzm'; - } else { - result = result.slice(0, -1) + 'n'; - } - } else if (result.slice(-1) === 'ų') { + } else if (result.length < 4 && matchEnd(result, [['o', 'u', 'e', 'ě']])) { + result = result + 'j'; + } else if (matchEnd(result, [['b', 'd', 's', 'z'], IOTATED_SMALL_YUS])) { + result = result.slice(0, -2) + 'ȯjm'; + } else if (result.endsWith(IOTATED_SMALL_YUS)) { + result = result.slice(0, -1) + 'm'; + } else if (result.endsWith(SMALL_YUS)) { + result = result.slice(0, -1) + 'n'; + } else if (result.endsWith(BIG_YUS)) { result = result.slice(0, -1) /*+ 'm'*/; - } else if ( - result.length < 4 && - ['o', 'u', 'e', 'ě'].includes(result.slice(-1)) - ) { - if (result.charAt(0) === 'u') { - result = result + 'ĵ'; - } else { - result = result + 'j'; - } - } else if (result.slice(-1) === 'y') { + } else if (result.endsWith('y')) { result = result + 'j'; - } else if (['a', 'e', 'ě'].includes(result.slice(-1))) { + } else if (matchEnd(result, [['a', 'e', 'ě']])) { result = result + 'ĵ'; } return result; @@ -448,6 +447,8 @@ function process_present_tense_stem_exceptions( result = 'da'; } else if (result == 'žeg' || result == 'žž') { result = 'žg'; + } else if (result.endsWith('maj')) { + result = result.slice(0, -1) + 'ĵ'; } if (result == 'jěhaĵ' || (result == 'jě' && is == 'jěha')) { result = 'jěd';