Skip to content

Commit

Permalink
fix: verb conjugation for imati, iměti
Browse files Browse the repository at this point in the history
  • Loading branch information
noomorph committed Jun 23, 2024
1 parent 53ad28c commit 2118618
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 60 deletions.
1 change: 1 addition & 0 deletions src/substitutions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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];
64 changes: 30 additions & 34 deletions src/verb/__tests__/__snapshots__/imperfect.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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,
}
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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,
}
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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ý (-á, -œ)",
}
`;

Expand All @@ -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",
Expand Down Expand Up @@ -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ý (-á, -œ)",
}
`;

Expand Down
53 changes: 27 additions & 26 deletions src/verb/conjugationVerb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 '];
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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';
Expand Down

0 comments on commit 2118618

Please sign in to comment.