LatinVerb is a library, written in Ruby, that is used to make dealing with
verb objects, and in particular Latin verbs, easier. By providing a
definitional string like: amō amāre amāvī amatum
, LatinVerb will generate
the 100+ forms and allow you to access them via method calls like
passive_voice_subjunctive_mood_imperfect_tense_third_person_singular_number
and get back amaretur
.
LatinVerb also has tolerances for ambiguity. Where
passive_voice_subjunctive_mood_imperfect_tense_third_person_singular_number
is considered a "full" vector that uniquely identifies one value, it is
possible to pass "incomplete" vectors such as
passive_voice_subjunctive_mood_imperfect_tense_third_person
which
would return two values (amārētur
and amārentur
). Similarly, the person
could be dropped and the number included and three values would be returned:
amārētur
, amārēris
, and amārer
.
This library deals with some particularities of Latin verbs:
- Handling Unicode storage of characters with a long sound (macron)
- Handling of macron removal as according to the pronunciation rules of Latin (before repeated vowel, before certain consonants at end of word, etc.)
- Resolving certain vectors of specified forms: person, number, voice, mood, and tense.
Importantly, none of the values shown for the verbs are statically defined (save irregulars). Rather, each and every conjugated verb form is generated on the fly as a result of applying a heuristic transformation to the verb (i.e. "take the stem and add such-and-such ending(s) to it").
LatinVerb also supports irregular and deponent verbs. It also handles some of the "odder" types of verb (perfect only, impersonal, present only).
This is a complete overhaul of my earlier "LatinVerb" library. The (1) iteration did not have support for deponents or irregulars, nor was its metaprogrammatic model as tight nor were various components properly modularized.
- Prof. James Burleson for teaching me Latin
- Lauren Roth for everything but most of all her patience
- Mike Perham for "meaning" idea to a TenseBlock
Steven G. Harms (steven . harms AT gmail)