6个版本 (破坏性更新)
0.5.1 | 2019年8月9日 |
---|---|
0.5.0 | 2019年6月29日 |
0.4.0 | 2019年3月16日 |
0.3.0 | 2018年12月29日 |
0.1.0 | 2018年12月11日 |
#784 in 文本处理
在 sententiae 中使用
175KB
2.5K SLoC
Verba
Verba是一个用于处理拉丁词汇的库。这个库旨在处理大部分语法工作,例如名词和形容词的变格以及动词的变位,对于单个拉丁词汇。
名词
拉丁名词根据数和格进行变格。名词模块包含用于创建规则、不规则和不可变格名词的子模块。每种类型都实现了Noun特质,它有一个变格函数,该函数接受一个数和格。
例如,要创建规则第一变格名词porta,portae,您将调用 verba::Regular::new("porta".to_string(), "portae".to_string());
。
要变格属格复数,您将调用 noun.decline(Number::Plural, Case::Genitive);
。
不规则名词使用包含不规则变格的覆盖的 HashMap<(Number, Case), Option<Vec<String>>>
创建。例如,要创建不规则名词vīs,vīs,您首先创建覆盖的HashMap
overrides.insert((Number::Singular, Case::Nominative), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Singular, Case::Genitive), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Singular, Case::Dative), Some(vec!["vī".to_string()]));
overrides.insert((Number::Singular, Case::Accusative), Some(vec!["vim".to_string()]));
overrides.insert((Number::Singular, Case::Ablative), Some(vec!["vī".to_string()]));
overrides.insert((Number::Singular, Case::Vocative), Some(vec!["vīs".to_string()]));
overrides.insert((Number::Plural, Case::Genitive), Some(vec!["vīrium".to_string()]));
overrides.insert((Number::Plural, Case::Accusative), Some(vec!["vīrēs".to_string(), "vīrīs".to_string()]));
这个HashMap重写了所有六个单数情况以及复数的属格和宾格形式。剩余的情况;复数的主格、与格、宾格和呼格;将按照普通名词的规则变化。为了实现这一点,verba::noun::Irregular::new
函数也需要传递一个词根和一个变化组。要创建不规则名词,请调用verba::Irregular::new(declension, Gender::Feminine, "vīr".to_string(), Group::Third)
。
调用变化函数时,如果传递的数字和情况出现在传递的HashMap中,则会提供不规则形式;否则,将使用传递的词根和变化组将其变化为普通名词。例如,noun.decline(Number::Singular, Case::Genitive)
将返回Some(vec!["vīs.to_string()])
;调用不在重写HashMap中的noun.decline(Number::Plural, Case::Dative)
将返回Some(vec!["vīribus".to_string()]))
。
不可变化名词在变化时不会改变形式。要创建不可变化的名词nīl,请调用verba::Indeclinable::new("nīl".to_string(), Gender::Neuter)
。
调用其变化将返回nīl,无论传递给它的数字和情况如何。
形容词
拉丁形容词根据语法数、格和性别进行变化。形容词模块目前仅包含用于创建普通形容词的子模块。
拉丁形容词的词典形式可以有多种形式。对于第一和第二变化组的形容词,提供了阳性、阴性和中性的形式。要创建形容词,首先需要创建词典形式,然后将该词典形式传递给新函数
let dictionary = A::DictionaryForm::Three("altus".to_string(), "alta".to_string(), "altum".to_string());
let adjective;
match A::Regular::new(dictionary) {
Ok(a) => adjective = a,
Err(_) => panic!("Failed to create a regular adjective.");
}
要获取单数的阴性所有格形式,您将调用 adjective.decline(Number::Singular, Case::Genitive, Gender::Feminine)
,这将返回 Some((vec!(["altae".to_string()]))
.
动词
拉丁动词根据语气、语态、时态、数和人称进行变化。动词模块目前仅包含创建不规则动词的子模块。
要创建不规则动词 laudō, laudāre, laudāvī, laudātum,您将调用 verba::Regular::new(("laudō".to_string(), "laudāre".to_string(), "laudāre".to_string(), "laudāvī".to_string())
.
要获取动词的第一人称复数现在主动直陈述语态形式,您将调用 verb.conjugate((V::Person::First, V::Number::Plural, V::Tense::Present, V::Voice::Active, V::Mood::Indicative)
,这将返回 Conjugation::Complete((vec!(["laudāmus".to_string()]))
.
conjugate函数返回一个Conjugate枚举,可以是Complete,表示存储的形态是完整的形态,或者是一个PassivePerfect。拉丁动词的被动完成形态是形容词形态加上sum的变位形式。PassivePerfect包含一个动词形容词形态的引用以及适当的sum形态。
要完成词尾变化,形容词形式必须根据数、格和性别进行变化。例如,调用 conjugation.decline(Number::Singular, Case::Nominative, Gender::Masculine)
将返回形容词形式的单数、主格、阳性的完整变化形式以及伴随的形式。
依赖关系
~7.5MB
~155K SLoC