aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/cli/src/inflection.rs9
-rw-r--r--lib/mihi/src/lib.rs14
-rw-r--r--testdata/test.sqlite3bin2916352 -> 2916352 bytes
3 files changed, 19 insertions, 4 deletions
diff --git a/crates/cli/src/inflection.rs b/crates/cli/src/inflection.rs
index b08942f..8799e9b 100644
--- a/crates/cli/src/inflection.rs
+++ b/crates/cli/src/inflection.rs
@@ -191,6 +191,10 @@ mod tests {
"Rōma | Rōma | Rōmam | Rōmae | Rōmae | Rōmā | Rōmae",
);
assert_noun_table(
+ "Athēnae, Athēnārum",
+ "Athēnae | Athēnae | Athēnās | Athēnārum | Athēnīs | Athēnīs | Athēnīs",
+ );
+ assert_noun_table(
"lupus, lupī",
"lupus, lupī | lupe, lupī | lupum, lupōs | lupī, lupōrum | lupō, lupīs | lupō, lupīs",
);
@@ -238,7 +242,10 @@ mod tests {
"cornū, cornūs",
"cornū, cornua | cornū, cornua | cornū, cornua | cornūs, cornuum | cornuī, cornibus | cornū, cornibus",
);
- // TODO: domus
+ assert_noun_table(
+ "domus, domūs/domī",
+ "domus, domūs | domus, domūs | domum, domūs/domōs | domūs/domī, domuum/domōrum | domuī/domō/domū, domibus | domū/domō, domibus | domī, ",
+ );
assert_noun_table(
"diēs, diēī",
"diēs, diēs | diēs, diēs | diem, diēs | diēī, diērum | diēī, diēbus | diē, diēbus",
diff --git a/lib/mihi/src/lib.rs b/lib/mihi/src/lib.rs
index 11d269a..b6abf2f 100644
--- a/lib/mihi/src/lib.rs
+++ b/lib/mihi/src/lib.rs
@@ -1779,18 +1779,26 @@ pub fn group_declension_inflections(
let mut table = DeclensionTable::default();
while let Some(row) = it.next().unwrap() {
+ let onlyplural = word.is_flag_set("onlyplural");
+
// Fetch the number and account for defectives on number.
let number_i: isize = row.get(1).unwrap();
let number: usize = usize::try_from(number_i).expect("not expecting a negative number");
- if (number == 0 && word.is_flag_set("onlyplural"))
- || (number == 1 && word.is_flag_set("onlysingular"))
- {
+ if (number == 0 && onlyplural) || (number == 1 && word.is_flag_set("onlysingular")) {
continue;
}
let case_i: isize = row.get(3).unwrap();
let term: String = row.get(4).unwrap();
+ // If this is the locative, on the plural, and 'onlyplural' was not
+ // specified, then chances are that the locative in the plural doesn't
+ // exist. That is because it only existed for defective nouns such as
+ // 'Athēnīs'.
+ if case_i == 6 && number == 1 && !onlyplural {
+ continue;
+ }
+
table.add(
word,
usize::try_from(case_i).expect("not expecting a negative number"),
diff --git a/testdata/test.sqlite3 b/testdata/test.sqlite3
index e7733f9..b728b03 100644
--- a/testdata/test.sqlite3
+++ b/testdata/test.sqlite3
Binary files differ