aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mssola@mssola.com>2026-01-28 22:07:36 +0100
committerMiquel Sabaté Solà <mssola@mssola.com>2026-01-28 22:07:36 +0100
commit4b97729533f744b92b3aa6ea85468a4c6fffd8f6 (patch)
tree33d6d7f02f84cd0684ad6e8aff0ea4c742e9dadf /lib
parent765b569282c0494b2c7bac54d895a63b0577072a (diff)
downloadmihi-4b97729533f744b92b3aa6ea85468a4c6fffd8f6.tar.gz
mihi-4b97729533f744b92b3aa6ea85468a4c6fffd8f6.zip
Ensure that the locative is singular-only unless defective
The only case in which the locative form makes sense to be given is for words which are actually defective and only have a plural form (e.g. Athēnae). Other than that, it makes no sense to provide solutions like 'domibus', which have never been attested and are weird to think about. As a corollary, the inflection tests have been expanded with the examples on 'Athēnae' and 'domus', so we ensure the locative behaves as expected. Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/mihi/src/lib.rs14
1 files changed, 11 insertions, 3 deletions
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"),