linguistics_latin 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e13e86e29ef889a439466f81efdd0c7df98c6584
4
+ data.tar.gz: fba0b23996a56a673a6cffddfbf7a4f9e4c8b171
5
+ SHA512:
6
+ metadata.gz: b4dd43c73e2e1af98e137f7f1cd4a3f479be9f3250191a00cc4fc209d70748489d6aafcfc1d70a4a65282ed78882189d2badb77118971039fb1df93864b84866
7
+ data.tar.gz: dec9ff0d554fa1c1e5884e212135d6f06f4d56ff66f5176cc7634ce57899c9e783ede7f89523b181ff0e750edc3b10824572ed18ba624f742dfdf1b0e1f671e7
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in linguistics_latin.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Steven G. Harms
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # Linguistics::Latin
2
+
3
+ A module which models the Latin language's verbs an phonographic
4
+ behavior. These are behaviors and inhabitants of Latin grammar
5
+ universe. Regardless of which programs use these data, these behaviors
6
+ will always remain true.
7
+
8
+ By way of constrast, another library (say, [LatinVerb][]) might *use*
9
+ these definitions, but does not alter them. Particular data structures
10
+ for processing or mutating data are native to client libraries.
11
+
12
+ I should hope that in future this gem and others like it be merged into
13
+ a common Linguistics Gem.
14
+
15
+ [LatinVerb]: https://github.com/sgharms/LatinVerb
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ gem 'linguistics_latin'
22
+
23
+ And then execute:
24
+
25
+ $ bundle
26
+
27
+ Or install it yourself as:
28
+
29
+ $ gem install linguistics_latin
30
+
31
+ ## Usage
32
+
33
+ This is pretty much a library which defines some constants.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,114 @@
1
+ module Linguistics
2
+ module Latin
3
+ ##
4
+ #
5
+ # The Phonographia module handles the phonography of written Latin: how
6
+ # the sound of Latin is written. In particular, the sounds that need
7
+ # special notation are the vowels which may bear a long ("ā") or short
8
+ # ("a") quantity.
9
+ #
10
+ # When forming Latin words from heuristic (as LatinVerb does), certain
11
+ # phonographical structures arise that one does not see in the language as
12
+ # practiced by humans. For example, given "amāre," the stem is "amā."
13
+ # When the heuristic postpends "t" to get the present, indicative, third
14
+ # person singular, the result is "amāt," which, by rules of Latin
15
+ # phonology, must be made to bear a short sound in the ultimate vowel.
16
+ # This state is _phonographically_ notes as "amat." This module
17
+ # implements the appropriate rules for proper phonetic compliance.
18
+ #
19
+ # === DESCRIPTION
20
+ #
21
+ # Latin has several rules pertaining to how long sounds must behave
22
+ # based on their neighboring characters. The rules that +fix_macrons+
23
+ # tests are the following
24
+ #
25
+ # === RULES
26
+ #
27
+ # <b>Rule 1: </b>:: m/r/t at end of line shortens preceding vowel
28
+ # <b>Rule 2: </b>:: macron-bearing vowel before vowel, regardless of
29
+ # its quantity
30
+ # <b>Rule 3: </b>:: macron-bearing vowel before /n[td]/ anywhere in the string
31
+ #
32
+ # === ARGUMENTS
33
+ #
34
+ # +s+ :: a string which needs to be processed for Latin phonographic
35
+ # compliance
36
+ #
37
+ # === RETURNS
38
+ #
39
+ # String with consonants properly converted
40
+ #
41
+ # === EXAMPLE
42
+ #
43
+ # fix_macrons(fabām) #=> fabam ( Rule 1 )
44
+ # fix_macrons(cāīō) #=> caiō ( Rule 1, Rule 2 )
45
+ #
46
+ ##
47
+ module Phonographia
48
+ MACRON_TABLE = {
49
+ "\xc4\x81" => 'a',
50
+ "\xc4\x93" => 'e',
51
+ "\xc4\xab" => 'i',
52
+ "\xc5\x8d" => 'o',
53
+ "\xc5\xab" => 'u',
54
+ "\xc4\x80" => 'A',
55
+ "\xc4\x92" => 'E',
56
+ "\xc4\xaa" => 'I',
57
+ "\xc5\x8c" => 'O',
58
+ "\xc5\xaa" => 'U',
59
+ "ā" => 'a',
60
+ "ē" => 'e',
61
+ "ī" => 'i',
62
+ "ō" => 'o',
63
+ "ū" => 'u',
64
+ "Ā" => 'A',
65
+ "Ē" => 'E',
66
+ "Ī" => 'I',
67
+ "Ō" => 'O',
68
+ "Ū" => 'U'
69
+ }
70
+
71
+ class << self
72
+ def fix_macrons(s)
73
+ s = mrt_at_end_of_word(s)
74
+ s = macron_before_vowel(s)
75
+ s = macron_before_nd(s)
76
+ s
77
+ end
78
+
79
+ def mrt_at_end_of_word(s)
80
+ if s =~ /^(.*)([āēīōūĀĒĪŌŪ])([mrt])$/i
81
+ return $1 + MACRON_TABLE[$2] + $3
82
+ end
83
+ s
84
+ end
85
+
86
+ def macron_before_vowel(s)
87
+ if s =~ /(.*)([āēīōūĀĒĪŌŪ])([āēīōūĀĒĪŌŪaeiouAEIOU])(.*)/i
88
+ return self.fix_macrons $1 + MACRON_TABLE[$2] + $3 + $4
89
+ end
90
+ s
91
+ end
92
+
93
+ def macron_before_nd(s)
94
+ if s =~ /n[td]/
95
+ mutaturum = s.split(//)
96
+ mutatum = []
97
+ mutaturum.each_with_index do |e, i|
98
+ if ( e == "n" && mutaturum[i+1].match(/[td]/) && !MACRON_TABLE[mutaturum[i-1]].nil? )
99
+ mutatum[i-1] = MACRON_TABLE[mutaturum[i-1]]
100
+ end
101
+ mutatum << e
102
+ end
103
+ return mutatum.join ''
104
+ end
105
+ s
106
+ end
107
+ end
108
+
109
+ def fix_macrons(s)
110
+ Linguistics::Latin::Phonographia.fix_macrons(s)
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Defective < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Deponent < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Impersonal < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Irregular < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class PresentOnly < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Regular < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class Semideponent < ClassificationType
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ module Classification
5
+ class ClassificationType
6
+ def self.short_name
7
+ self.to_s.split('::').last
8
+ end
9
+
10
+ def self.short_name_key
11
+ short_name.to_sym
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ require_relative './classification_type/defective'
20
+ require_relative './classification_type/deponent'
21
+ require_relative './classification_type/impersonal'
22
+ require_relative './classification_type/irregular'
23
+ require_relative './classification_type/present_only'
24
+ require_relative './classification_type/regular'
25
+ require_relative './classification_type/semideponent'
@@ -0,0 +1,198 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ # :stopdoc:
5
+ # active_present_endings: ("ap_"-prefixed)
6
+ AP_FIRST_AND_SECOND_CONJUG_PERS_ENDINGS = %w(s t mus tis nt)
7
+ AP_THIRD_CONJUG_PERS_ENDINGS = %w(ō is it imus itis unt)
8
+ AP_THIRDIO_CONJG_PERS_ENDINGS = %w(is it imus itis iunt)
9
+
10
+ # active_imperfect_endings: ("ai_"-prefixed)
11
+ AI_FIRST_AND_SECOND_CONJUG_PERS_ENDINGS = %w(bam bās bat bāmus bātis bant)
12
+ AI_THIRD_CONJUG_PERS_ENDINGS = %w(ēbam ēbās ēbat ēbāmus ēbātis ēbant)
13
+
14
+ # active_future_endings: ("af_"-prefixed)
15
+ AF_ONE_TWO_ENDINGS = %w(bō bis bit bimus bitis bunt)
16
+ AF_OTHER_ENDINGS = %w(am ēs et ēmus ētis ent)
17
+
18
+ # active_perfect_present: ("aperf"-prefixed)
19
+ APERF_ENDINGS = %w(istī it imus istis ērunt)
20
+ APERF_PAST_ENDINGS = PLUPERF_ENDINGS =
21
+ %w(eram erās erat erāmus erātis erant)
22
+ APERF_FUTURE_ENDINGS = %w(erō eris erit erimus eritis erint)
23
+
24
+ # passive endings
25
+ PASSIVE_ENDINGS_FIRST_AND_SECOND_CONJG =
26
+ %w(r ris tur mur minī ntur)
27
+ PASSIVE_ENDINGS_OTHER =
28
+ %w(r eris itur imur iminī untur)
29
+
30
+ PASS_PERF_PRESENT_ENDINGS = %w(sum es est sumus estis sunt)
31
+ PASS_PERF_PAST_ENDINGS = %w(eram erās erat erāmus erātis erant)
32
+ PASS_PERF_FUTURE_ENDINGS = %w(erō eris erit erimus eritis erint)
33
+
34
+ PASS_PERF_SUBJUNCTIVE_ENDINGS = %w(sim sis sit simus sitis sint)
35
+ PASS_PLUPERF_PAST_ENDINGS = %w(essem essēs esset essēmus essētis essent)
36
+
37
+ # subjunctive tools
38
+ # hash for getting a verb's subjunctive stem
39
+ # based off the W[e] F[ea]r [A] L[ia]r mnemonic
40
+ ACTIVE_PRESENT_SUBJUNCTIVE_ENDINGS = {
41
+ :First => "ē" ,
42
+ :Second => "eā",
43
+ :Third => "ā" ,
44
+ :Fourth => "iā",
45
+ :ThirdIO => "iā"
46
+ }
47
+
48
+ # Listing of all defective verbs
49
+ # See A&G Sec. 205
50
+ DEFECTIVE_VERBS = %w{
51
+ addormisco
52
+ adolesco
53
+ aio
54
+ albesco
55
+ arboresco
56
+ aresco
57
+ assenesco
58
+ auresco
59
+ candesco
60
+ canesco
61
+ celebresco
62
+ cornesco
63
+ crudesco
64
+ dulcesco
65
+ effor
66
+ erubesco
67
+ extollo
68
+ grandesco
69
+ inquam
70
+ languesco
71
+ latesco
72
+ longisco
73
+ lucesco
74
+ marcesco
75
+ matresco
76
+ mollesco
77
+ remollesco
78
+ siccesco
79
+ sterto
80
+ tenebresco
81
+ tremesco
82
+ tumesco
83
+ veteresco
84
+ }
85
+
86
+ # Listing of all impersonal verbs
87
+ # See A&G #207
88
+ IMPERSONAL_VERBS = %w{
89
+ accidit
90
+ addecet
91
+ advesperascit
92
+ certum est
93
+ condecet
94
+ constat
95
+ contingit
96
+ cōnstat
97
+ decet
98
+ dedecet
99
+ dēlecat
100
+ evenit
101
+ fit
102
+ fulgerat
103
+ grandinat
104
+ ifvat
105
+ interest
106
+ licet
107
+ lūcīscit hōc
108
+ miseret
109
+ necesse est
110
+ ningit
111
+ obtingit
112
+ obvenit
113
+ oportet
114
+ paenitet
115
+ piget
116
+ placet
117
+ pluit
118
+ pluo
119
+ praestat
120
+ pudet
121
+ restat
122
+ rēfert
123
+ rōrat
124
+ superest
125
+ taedet
126
+ tonat
127
+ vacat
128
+ vesperāscit
129
+ vidētur
130
+ ēvenit
131
+ }
132
+
133
+ # Present system only. See A&G206
134
+ # There are probably more of these, but A&G only lists these two.
135
+ PRESENT_ONLY = %w{
136
+ maēre
137
+ ferīre
138
+ aiō
139
+ inquam
140
+ for
141
+ quaesō
142
+ ovāre
143
+ }
144
+
145
+ # See A&G # 192
146
+ SEMI_DEPONENTS = {
147
+ 'audeō' => %w(audēre ausus),
148
+ 'fidō' => %w(fidere fīsus),
149
+ 'gaudeō' => %w(gaudēre gāvīsus),
150
+ 'soleō' => %w(solēre solitus),
151
+ }
152
+
153
+ # Irregular Verbs. See A&G 197
154
+ IRREGULAR_VERBS = {
155
+ 'sum' => 'SUM_ESSE_FUĪ_FUTŪRUS',
156
+ 'possum' => 'POSSUM_POSSE_POTUĪ',
157
+ 'ferō' => 'FERŌ_FERRE_TULĪ_LĀTUM',
158
+ 'eō' => 'EŌ_ĪRE_IVĪ_ITUM',
159
+ 'nōlō' => 'NŌLŌ_NŌLLE_NŌLUĪ',
160
+ 'volō' => 'VOLŌ_VELLE_VOLUĪ',
161
+ 'mālō' => 'MĀLŌ_MĀLLE_MĀLUĪ',
162
+ 'dō' => 'DŌ_DĀRE_DEDĪ_DATUM',
163
+ 'edō' => 'EDŌ_ĒSSE_ĒDĪ_ĒSUM',
164
+ 'queō' => 'QUEŌ_QUĪRE_QUĪVĪ',
165
+ 'fiō' => 'FIŌ_FIĒRĪ_FACTUS',
166
+ 'prōsum' => 'PRŌSUM_PRŌDESSE_PRŌFUĪ_PRŌFUTŪRUS',
167
+ 'meminī' => 'MEMINĪ_MEMINISSE',
168
+ 'ōdī' => 'ODĪ_ŌDISSE',
169
+ 'coepī' => 'COEPĪ_COEPISSE_COEPTUM'
170
+ }
171
+
172
+ MEANINGS = {
173
+ :active_voice_imperative_mood_future_tense => "Command that something be done in the future",
174
+ :active_voice_indicative_mood_future_tense=> "Action to take place in the future: 'I will eat a hamburger.'" ,
175
+ :active_voice_indicative_mood_futureperfect_tense => "Action to be completed in the future: 'I will have eaten a hamburger.'" ,
176
+ :active_voice_indicative_mood_imperfect_tense => "Sustained, habitual action in the past: 'I was eating hamburgers daily when I was a freshman.'" ,
177
+ :active_voice_indicative_mood_pastperfect_tense => "Action completed prior to a point in the past under discussion: 'I had eaten all the hamburgers (before my mother found out).'" ,
178
+ :active_voice_indicative_mood_perfect_tense => "Action completed in the past: 'I ate a hamburger.'" ,
179
+ :active_voice_indicative_mood_present_tense => "Present, possibly ongoing action relative to the speaker: 'I am eating a hamburger. I eat a hamburger.'" ,
180
+ :active_voice_subjunctive_mood_imperfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
181
+ :active_voice_subjunctive_mood_pastperfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
182
+ :active_voice_subjunctive_mood_perfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
183
+ :active_voice_subjunctive_mood_present_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
184
+ :passive_voice_indicative_mood_future_tense => "Action to be performed on conjugant in future: 'The hamburger will be eaten.'" ,
185
+ :passive_voice_indicative_mood_futureperfect_tense => "Action is to be performed to completion on conjugant in future: 'The hamburger will have been eaten.'" ,
186
+ :passive_voice_indicative_mood_imperfect_tense => "Habitual action performed on the conjugant in the past: 'The hamburger was being eaten slowly by the BurgerHoarder.'" ,
187
+ :passive_voice_indicative_mood_pastperfect_tense => "Action was fully completed upon the conjugant at a time prior to a time in the past: 'The hamburger had been eaten before my mom came home.'" ,
188
+ :passive_voice_indicative_mood_perfect_tense => "Action was completed upon the conjugant in the past: 'The hamburger was eaten.'" ,
189
+ :passive_voice_indicative_mood_present_tense => "Conjugant is presently undergoing action in the present time: 'The hamburger is being eaten.'" ,
190
+ :passive_voice_subjunctive_mood_imperfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
191
+ :passive_voice_subjunctive_mood_pastperfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
192
+ :passive_voice_subjunctive_mood_perfect_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc." ,
193
+ :passive_voice_subjunctive_mood_present_tense => "Subjunctive uses apply: commands, contrary to fact wishes, etc."
194
+ }
195
+ # :startdoc:
196
+ end
197
+ end
198
+ end