llt-form_builder 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +8 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +29 -0
  8. data/Rakefile +8 -0
  9. data/lib/llt/form/adjective.rb +19 -0
  10. data/lib/llt/form/adverb.rb +13 -0
  11. data/lib/llt/form/cardinal.rb +31 -0
  12. data/lib/llt/form/conjunction.rb +7 -0
  13. data/lib/llt/form/declinable.rb +23 -0
  14. data/lib/llt/form/demonstrative_pronoun.rb +7 -0
  15. data/lib/llt/form/ethnic.rb +6 -0
  16. data/lib/llt/form/fp.rb +6 -0
  17. data/lib/llt/form/gerund.rb +9 -0
  18. data/lib/llt/form/gerundive.rb +12 -0
  19. data/lib/llt/form/indefinite_pronoun.rb +7 -0
  20. data/lib/llt/form/infinitive.rb +13 -0
  21. data/lib/llt/form/interrogative_pronoun.rb +7 -0
  22. data/lib/llt/form/noun.rb +17 -0
  23. data/lib/llt/form/participle.rb +9 -0
  24. data/lib/llt/form/personal_pronoun.rb +13 -0
  25. data/lib/llt/form/ppa.rb +6 -0
  26. data/lib/llt/form/ppp.rb +6 -0
  27. data/lib/llt/form/preposition.rb +32 -0
  28. data/lib/llt/form/pronoun.rb +17 -0
  29. data/lib/llt/form/relative_pronoun.rb +7 -0
  30. data/lib/llt/form/subjunction.rb +7 -0
  31. data/lib/llt/form/supinum.rb +6 -0
  32. data/lib/llt/form/uninflectable.rb +22 -0
  33. data/lib/llt/form/verb.rb +28 -0
  34. data/lib/llt/form/verbal_noun.rb +18 -0
  35. data/lib/llt/form.rb +80 -0
  36. data/lib/llt/form_builder/adjective_builder.rb +86 -0
  37. data/lib/llt/form_builder/adverb_builder.rb +25 -0
  38. data/lib/llt/form_builder/declinable_builder.rb +164 -0
  39. data/lib/llt/form_builder/ethnic_builder.rb +17 -0
  40. data/lib/llt/form_builder/fp_builder.rb +13 -0
  41. data/lib/llt/form_builder/gerund_builder.rb +37 -0
  42. data/lib/llt/form_builder/gerundive_builder.rb +24 -0
  43. data/lib/llt/form_builder/helpers/adjective_like_building.rb +29 -0
  44. data/lib/llt/form_builder/helpers/pronoun_segments.rb +226 -0
  45. data/lib/llt/form_builder/helpers/stem_hash_parser.rb +263 -0
  46. data/lib/llt/form_builder/helpers/verb_segments.rb +562 -0
  47. data/lib/llt/form_builder/infinitivum_builder.rb +19 -0
  48. data/lib/llt/form_builder/irregular_gerund_builder.rb +7 -0
  49. data/lib/llt/form_builder/irregular_gerundive_builder.rb +7 -0
  50. data/lib/llt/form_builder/irregular_ppa_builder.rb +7 -0
  51. data/lib/llt/form_builder/irregular_praesens_builder.rb +5 -0
  52. data/lib/llt/form_builder/irregular_praesens_infinitivum_builder.rb +5 -0
  53. data/lib/llt/form_builder/noun_builder.rb +24 -0
  54. data/lib/llt/form_builder/perfectum_builder.rb +14 -0
  55. data/lib/llt/form_builder/perfectum_infinitivum_builder.rb +7 -0
  56. data/lib/llt/form_builder/personal_pronoun_builder.rb +107 -0
  57. data/lib/llt/form_builder/ppa_builder.rb +20 -0
  58. data/lib/llt/form_builder/ppp_builder.rb +10 -0
  59. data/lib/llt/form_builder/praesens_builder.rb +41 -0
  60. data/lib/llt/form_builder/praesens_infinitivum_builder.rb +9 -0
  61. data/lib/llt/form_builder/pronoun_builder.rb +106 -0
  62. data/lib/llt/form_builder/supinum_builder.rb +23 -0
  63. data/lib/llt/form_builder/verb_builder.rb +37 -0
  64. data/lib/llt/form_builder/version.rb +5 -0
  65. data/lib/llt/form_builder.rb +370 -0
  66. data/lib/llt/stem/adjective_pack.rb +122 -0
  67. data/lib/llt/stem/adjective_stem.rb +23 -0
  68. data/lib/llt/stem/ethnic_stem.rb +9 -0
  69. data/lib/llt/stem/noun_pack.rb +14 -0
  70. data/lib/llt/stem/noun_stem.rb +26 -0
  71. data/lib/llt/stem/pack.rb +46 -0
  72. data/lib/llt/stem/verb_pack.rb +53 -0
  73. data/lib/llt/stem/verb_stem.rb +18 -0
  74. data/lib/llt/stem.rb +145 -0
  75. data/lib/llt/stem_builder.rb +53 -0
  76. data/llt-form_builder.gemspec +30 -0
  77. data/spec/lib/llt/form/adjective_spec.rb +10 -0
  78. data/spec/lib/llt/form/adverb_spec.rb +17 -0
  79. data/spec/lib/llt/form/conjunction_spec.rb +23 -0
  80. data/spec/lib/llt/form/demonstrative_pronoun_spec.rb +14 -0
  81. data/spec/lib/llt/form/fp_spec.rb +12 -0
  82. data/spec/lib/llt/form/functions_spec.rb +13 -0
  83. data/spec/lib/llt/form/gerund_spec.rb +10 -0
  84. data/spec/lib/llt/form/gerundive_spec.rb +13 -0
  85. data/spec/lib/llt/form/noun_spec.rb +18 -0
  86. data/spec/lib/llt/form/ppa_spec.rb +12 -0
  87. data/spec/lib/llt/form/ppp_spec.rb +12 -0
  88. data/spec/lib/llt/form/preposition_spec.rb +43 -0
  89. data/spec/lib/llt/form/supinum_spec.rb +9 -0
  90. data/spec/lib/llt/form/verb_spec.rb +14 -0
  91. data/spec/lib/llt/form_builder/adjective_builder_spec.rb +182 -0
  92. data/spec/lib/llt/form_builder/adverb_builder_spec.rb +27 -0
  93. data/spec/lib/llt/form_builder/ethnic_builder_spec.rb +17 -0
  94. data/spec/lib/llt/form_builder/form_builder_spec.rb +16 -0
  95. data/spec/lib/llt/form_builder/fp_builder_spec.rb +42 -0
  96. data/spec/lib/llt/form_builder/gerund_builder_spec.rb +80 -0
  97. data/spec/lib/llt/form_builder/gerundive_builder_spec.rb +102 -0
  98. data/spec/lib/llt/form_builder/helpers/stem_hash_parser_spec.rb +197 -0
  99. data/spec/lib/llt/form_builder/irregular_gerund_builder_spec.rb +22 -0
  100. data/spec/lib/llt/form_builder/irregular_gerundive_builder_spec.rb +21 -0
  101. data/spec/lib/llt/form_builder/irregular_praesens_builder_spec.rb +14 -0
  102. data/spec/lib/llt/form_builder/irregular_praesens_infinitivum_builder_spec.rb +32 -0
  103. data/spec/lib/llt/form_builder/noun_builder_spec.rb +245 -0
  104. data/spec/lib/llt/form_builder/personal_pronoun_builder_spec.rb +49 -0
  105. data/spec/lib/llt/form_builder/ppa_builder_spec.rb +137 -0
  106. data/spec/lib/llt/form_builder/ppp_builder_spec.rb +45 -0
  107. data/spec/lib/llt/form_builder/pronoun_builder_spec.rb +203 -0
  108. data/spec/lib/llt/form_builder/supinum_builder_spec.rb +24 -0
  109. data/spec/lib/llt/form_builder/verb_builder_spec.rb +557 -0
  110. data/spec/lib/llt/form_spec.rb +27 -0
  111. data/spec/lib/llt/stem/adjective_pack_spec.rb +78 -0
  112. data/spec/lib/llt/stem/adjective_stem_spec.rb +15 -0
  113. data/spec/lib/llt/stem/noun_pack_spec.rb +20 -0
  114. data/spec/lib/llt/stem/noun_stem_spec.rb +14 -0
  115. data/spec/lib/llt/stem/verb_pack_spec.rb +56 -0
  116. data/spec/lib/llt/stem_builder_spec.rb +20 -0
  117. data/spec/spec_helper.rb +21 -0
  118. metadata +330 -0
@@ -0,0 +1,562 @@
1
+ module LLT
2
+ class FormBuilder
3
+ class VerbSegments
4
+ attr_reader :inflection_class, :modus
5
+
6
+ include Helpers::Initialize
7
+ include Helpers::Normalizer
8
+ extend Helpers::Normalizer
9
+
10
+ def self.get(method, args)
11
+ c = if temp = args[:tempus]
12
+ const_get("#{t.send(temp, :camelcase)}Segments")
13
+ else
14
+ PraesensSegments
15
+ end
16
+ c.new(args).send(method).to_s # to_s to capture all nil returns and give back an empty string
17
+ end
18
+
19
+ def initialize(args)
20
+ extract_normalized_args!(args)
21
+ end
22
+
23
+ def init_keys
24
+ %i{ sexus casus modus inflection_class numerus persona ending genus }
25
+ end
26
+
27
+ private
28
+
29
+ #%w{ esse posse ferre ire velle nolle malle fieri edere }.each do |irreg|
30
+ # class_eval <<-STR
31
+ # def #{irreg}
32
+ # :#{irreg}
33
+ # end
34
+ # STR
35
+ #end
36
+
37
+ def a_or_e_conjugation
38
+ @inflection_class == 1 || @inflection_class == 2
39
+ end
40
+
41
+ def c_or_m_conjugation
42
+ @inflection_class == 3 || @inflection_class == 5
43
+ end
44
+
45
+ def first_sg
46
+ @persona == 1 && @numerus == 1
47
+ end
48
+
49
+ def third_pl
50
+ @persona == 3 && @numerus == 2
51
+ end
52
+
53
+ def special_thematic_for_i_conj
54
+ if third_pl
55
+ n(:THEMATIC_U)
56
+ end
57
+ end
58
+ alias :thematic_indicativus_4 :special_thematic_for_i_conj
59
+
60
+ def n(arg)
61
+ LLT::Constants::Markers::Verb.const_get(arg)
62
+ end
63
+
64
+ def usual_thematic_vowels
65
+ case @ending
66
+ when /^[stm]/ then n(:THEMATIC_I)
67
+ when /^r/ then n(:THEMATIC_E)
68
+ when /^n/ then n(:THEMATIC_U)
69
+ end
70
+ end
71
+ alias :thematic_indicativus_3 :usual_thematic_vowels
72
+
73
+ def thematic
74
+ send("thematic_" + modus_term)
75
+ end
76
+
77
+ def modus_term
78
+ "#{t.send(@modus, :full)}"
79
+ end
80
+
81
+ def stem_of_fieri
82
+ "fi"
83
+ end
84
+
85
+ def stem_of_malle
86
+ "mal"
87
+ end
88
+
89
+ def stem_of_nolle
90
+ "nol"
91
+ end
92
+
93
+ def stem_of_ferre
94
+ "fer"
95
+ end
96
+
97
+ def stem
98
+ send("stem_of_#{@inflection_class}")
99
+ end
100
+
101
+ class PraesensSegments < VerbSegments
102
+ def extension
103
+ arr = %i{ esse velle nolle malle edere posse }
104
+ if @modus == t.coniunctivus
105
+ case @inflection_class
106
+ when 1
107
+ n(:PRAESENS_CONIUNCTIVUS_A)
108
+ when ->(x) { arr.include?(x) }
109
+ n(:PRAESENS_CONIUNCTIVUS_IRREGULAR)
110
+ else
111
+ n(:PRAESENS_CONIUNCTIVUS)
112
+ end
113
+ end
114
+ end
115
+
116
+ def stem_of_edere
117
+ case @modus
118
+ when t.indicativus then indicativus_stem_of_edere
119
+ when t.coniunctivus then "ed"
120
+ when t.imperativus then "es"
121
+ when t.infinitivum then "es"
122
+ end
123
+ end
124
+
125
+ def indicativus_stem_of_edere
126
+ case [@persona, @numerus]
127
+ when [2, 1] then "es"
128
+ when [3, 1] then "es"
129
+ when [2, 2] then "es"
130
+ else "ed"
131
+ end
132
+
133
+ end
134
+
135
+ def stem_of_malle
136
+ case @modus
137
+ when t.indicativus then indicativus_stem_of_malle
138
+ when t.coniunctivus then "mal"
139
+ when t.infinitivum then "mal"
140
+ end
141
+ end
142
+
143
+ def indicativus_stem_of_malle
144
+ case [@persona, @numerus]
145
+ when [2, 1] then "mavi"
146
+ when [3, 1] then "mavul"
147
+ when [2, 2] then "mavul"
148
+ else "mal"
149
+ end
150
+ end
151
+
152
+ def stem_of_velle
153
+ case @modus
154
+ when t.indicativus then indicativus_stem_of_velle
155
+ when t.coniunctivus then "vel"
156
+ when t.infinitivum then "vel"
157
+ end
158
+ end
159
+
160
+ def indicativus_stem_of_velle
161
+ case [@persona, @numerus]
162
+ when [2, 1] then "vi"
163
+ when [3, 1] then "vul"
164
+ when [2, 2] then "vul"
165
+ else "vol"
166
+ end
167
+ end
168
+
169
+ def stem_of_ire
170
+ case @modus
171
+ when t.indicativus then indicativus_stem_of_ire
172
+ when t.coniunctivus then "e"
173
+ when t.imperativus then "i"
174
+ when t.infinitivum then "i"
175
+ when t.gerundium then "e"
176
+ when t.gerundivum then "e"
177
+ when t.participium then iens ? "i" : "e"
178
+ end
179
+ end
180
+
181
+ def iens
182
+ if @numerus == 1
183
+ @casus == 1 || @casus == 5 || ( @casus == 4 && @sexus == :n )
184
+ end
185
+ end
186
+
187
+ def indicativus_stem_of_ire
188
+ if third_pl || @persona == 1 && @numerus == 1
189
+ "e"
190
+ else
191
+ "i"
192
+ end
193
+ end
194
+
195
+ def stem_of_esse
196
+ case @modus
197
+ when t.indicativus then
198
+ if ( @numerus == 1 && @persona == 1 ) || ( @numerus == 2 && ( @persona == 1 || @persona == 3 ))
199
+ n(:STEM_ESSE_S)
200
+ else
201
+ n(:STEM_ESSE_ES)
202
+ end
203
+ when t.coniunctivus then n(:STEM_ESSE_S)
204
+ when t.imperativus then n(:STEM_ESSE_ES)
205
+ when t.infinitivum then n(:STEM_ESSE_ES)
206
+ when t.participium then n(:STEM_ESSE_E)
207
+ end
208
+ end
209
+
210
+ def stem_of_posse
211
+ if @modus == t.infinitivum
212
+ "po" + stem_of_esse[1..-1]
213
+ else
214
+ esse_stem = stem_of_esse
215
+ potis = esse_stem =~ /^s/ ? "pos" : "pot"
216
+ potis + esse_stem
217
+ end
218
+ end
219
+
220
+ private
221
+
222
+ def thematic_participium
223
+ if @inflection_class == 3 || @inflection_class == 4 || @inflection_class == :ferre
224
+ n(:THEMATIC_E)
225
+ elsif @inflection_class == 5
226
+ n(:THEMATIC_I) + n(:THEMATIC_E)
227
+ elsif @inflection_class == :ire
228
+ if iens
229
+ if @modus == t.gerundium || @modus == t.gerundivum
230
+ n(:THEMATIC_U)
231
+ else
232
+ n(:THEMATIC_E)
233
+ end
234
+ else
235
+ n(:THEMATIC_U)
236
+ end
237
+ else
238
+ ""
239
+ end
240
+ end
241
+ alias :thematic_gerundivum :thematic_participium
242
+ alias :thematic_gerundium :thematic_participium
243
+
244
+ def thematic_coniunctivus
245
+ if @inflection_class == 5
246
+ n(:THEMATIC_I)
247
+ else
248
+ ""
249
+ end
250
+ end
251
+
252
+ def thematic_infinitivum
253
+ if c_or_m_conjugation
254
+ usual_thematic_vowels
255
+ elsif @inflection_class == :fieri
256
+ n(:THEMATIC_E)
257
+ end
258
+ end
259
+ def thematic_indicativus
260
+ send("thematic_indicativus_" + "#{inflection_class}")
261
+ end
262
+ alias :thematic_imperativus :thematic_indicativus
263
+
264
+ def thematic_indicativus_esse
265
+ if @persona == 1 || third_pl
266
+ n(:THEMATIC_U)
267
+ else
268
+ ""
269
+ end
270
+ end
271
+ alias :thematic_indicativus_posse :thematic_indicativus_esse
272
+ alias :thematic_indicativus_fieri :thematic_indicativus_esse
273
+
274
+ def thematic_indicativus_ferre
275
+ if (@persona == 1 && @numerus == 2) || (@persona == 2 && @numerus == 2 && @genus == t.pass)
276
+ n(:THEMATIC_I)
277
+ elsif third_pl
278
+ n(:THEMATIC_U)
279
+ else
280
+ ""
281
+ end
282
+ end
283
+ alias :thematic_indicativus_edere :thematic_indicativus_ferre
284
+
285
+ def thematic_indicativus_velle
286
+ if @persona == 1 && @numerus == 2
287
+ n(:THEMATIC_U)
288
+ elsif third_pl
289
+ n(:THEMATIC_U)
290
+ else
291
+ ""
292
+ end
293
+ end
294
+ alias :thematic_indicativus_nolle :thematic_indicativus_velle
295
+ alias :thematic_indicativus_malle :thematic_indicativus_velle
296
+
297
+ def thematic_indicativus_ire
298
+ if third_pl
299
+ n(:THEMATIC_U)
300
+ else
301
+ ""
302
+ end
303
+ end
304
+ alias :thematic_indicativus_fieri :thematic_indicativus_ire
305
+
306
+ def thematic_indicativus_1
307
+ end
308
+
309
+ def thematic_indicativus_2
310
+ end
311
+
312
+ def thematic_indicativus_5
313
+ if @ending =~ /^o/
314
+ n(:THEMATIC_I)
315
+ elsif third_pl
316
+ n(:THEMATIC_I) + n(:THEMATIC_U)
317
+ else
318
+ usual_thematic_vowels
319
+ end
320
+ end
321
+ end
322
+
323
+ class ImperfectumSegments < VerbSegments
324
+ def stem_of_esse
325
+ case @modus
326
+ when t.indicativus then "er"
327
+ when t.coniunctivus then n(:STEM_ESSE_ES)
328
+ end
329
+ end
330
+
331
+ def stem_of_edere
332
+ case @modus
333
+ when t.indicativus then "ed"
334
+ when t.coniunctivus then "es"
335
+ end
336
+ end
337
+
338
+ def stem_of_posse
339
+ case @modus
340
+ when t.indicativus then "pot" + stem_of_esse
341
+ when t.coniunctivus then "po" + stem_of_esse[1..-1]
342
+ end
343
+ end
344
+
345
+ def stem_of_velle
346
+ if @modus == t.indicativus
347
+ "vol"
348
+ else
349
+ "vel"
350
+ end
351
+ end
352
+
353
+ def stem_of_ire
354
+ "i"
355
+ end
356
+
357
+ def extension
358
+ send("extension_" + modus_term)
359
+ end
360
+
361
+ private
362
+
363
+ def extension_coniunctivus
364
+ case @inflection_class
365
+ when ->(x) { %i{ esse posse edere }.include?(x) } then n(:IMPERFECTUM_CONIUNCTIVUS_SE)
366
+ when ->(x) { %i{ velle nolle malle }.include?(x) } then n(:IMPERFECTUM_CONIUNCTIVUS_LE)
367
+ else
368
+ n(:IMPERFECTUM_CONIUNCTIVUS)
369
+ end
370
+ end
371
+
372
+ def extension_indicativus
373
+ case @inflection_class
374
+ when :esse then n(:IMPERFECTUM_INDICATIVUS_ESSE)
375
+ when :posse then n(:IMPERFECTUM_INDICATIVUS_ESSE)
376
+ else
377
+ n(:IMPERFECTUM_INDICATIVUS) #ba
378
+ end
379
+ end
380
+
381
+ def thematic_coniunctivus
382
+ if c_or_m_conjugation || @inflection_class == :fieri
383
+ n(:THEMATIC_E)
384
+ else
385
+ ""
386
+ end
387
+ end
388
+
389
+ def thematic_indicativus
390
+ arr = %i{ edere ferre velle nolle malle fieri }
391
+
392
+ case @inflection_class
393
+ when 5 then n(:THEMATIC_I) + n(:THEMATIC_E)
394
+ when 3 then n(:THEMATIC_E)
395
+ when 4 then n(:THEMATIC_E)
396
+ when ->(x) { arr.include?(x) } then n(:THEMATIC_E)
397
+ end
398
+ end
399
+ end
400
+
401
+ class PerfectStemSegments < VerbSegments
402
+ def thematic
403
+ ""
404
+ end
405
+
406
+ def stem_of_ferre
407
+ "tul"
408
+ end
409
+ end
410
+
411
+ class PerfectumSegments < PerfectStemSegments
412
+ def extension
413
+ if @modus == t.coniunctivus
414
+ n(:PERFECTUM_SUFFIX_1) + n(:PERFECTUM_CONIUNCTIVUS)
415
+ else
416
+ ""
417
+ end
418
+ end
419
+ end
420
+
421
+ class PlusquamperfectumSegments < PerfectStemSegments
422
+ def extension
423
+ if @modus == t.indicativus
424
+ n(:PERFECTUM_SUFFIX_1) + n(:PLUSQUAMPERFECTUM_INDICATIVUS)
425
+ else
426
+ n(:PERFECTUM_SUFFIX_2) + n(:PLUSQUAMPERFECTUM_CONIUNCTIVUS)
427
+ end
428
+ end
429
+ end
430
+
431
+ class FuturumSegments < VerbSegments
432
+ def stem_of_velle
433
+ "vol"
434
+ end
435
+
436
+ def stem_of_edere
437
+ case @modus
438
+ when t.indicativus then "ed"
439
+ when t.imperativus then edere_fut_imps
440
+ end
441
+ end
442
+
443
+ def stem_of_esse
444
+ case @modus
445
+ when t.indicativus then "er"
446
+ when t.imperativus then esse_fut_imps
447
+ end
448
+ end
449
+
450
+ def stem_of_posse
451
+ "pot" + stem_of_esse
452
+ end
453
+
454
+ def stem_of_ire
455
+ if @modus == t.imperativus
456
+ if third_pl
457
+ "e"
458
+ end
459
+ else
460
+ "i"
461
+ end
462
+ end
463
+
464
+ def edere_fut_imps
465
+ if third_pl
466
+ "ed"
467
+ else
468
+ "es"
469
+ end
470
+ end
471
+
472
+ def esse_fut_imps
473
+ if third_pl
474
+ n(:STEM_ESSE_S)
475
+ else
476
+ n(:STEM_ESSE_ES)
477
+ end
478
+ end
479
+
480
+ def extension
481
+ if @modus == t.indicativus
482
+ futurum_sign
483
+ else
484
+ ""
485
+ end
486
+ end
487
+
488
+ private
489
+
490
+ def thematic_imperativus
491
+ #refactor pending
492
+ case @inflection_class
493
+ when 1..2 then ""
494
+ when 4 then special_thematic_for_i_conj
495
+ when 3 then usual_thematic_vowels
496
+ when 5 then thematic_imperativus_5
497
+ else thematic_imperativus_esse # esse ferre edere fieri nolle ire
498
+ end
499
+ end
500
+
501
+ def thematic_imperativus_5
502
+ if third_pl
503
+ n(:THEMATIC_I) + n(:THEMATIC_U)
504
+ else
505
+ usual_thematic_vowels
506
+ end
507
+ end
508
+
509
+ def thematic_imperativus_esse
510
+ if third_pl
511
+ n(:THEMATIC_U)
512
+ else
513
+ ""
514
+ end
515
+ end
516
+
517
+ def futurum_sign
518
+ if a_or_e_conjugation || @inflection_class == :ire
519
+ n(:FUTURUM_A)
520
+ elsif @inflection_class == :esse || @inflection_class == :posse
521
+ ""
522
+ else
523
+ futurm_signs_c
524
+ end
525
+ end
526
+
527
+ def futurm_signs_c
528
+ if first_sg
529
+ n(:FUTURUM_C_1)
530
+ else
531
+ n(:FUTURUM_C)
532
+ end
533
+ end
534
+
535
+ def thematic_indicativus
536
+ case @inflection_class
537
+ when 1 then usual_thematic_vowels
538
+ when 2 then usual_thematic_vowels
539
+ when 5 then n(:THEMATIC_I)
540
+ when :esse then usual_thematic_vowels
541
+ when :posse then usual_thematic_vowels
542
+ when :ire then usual_thematic_vowels
543
+ end
544
+ end
545
+ end
546
+
547
+ class FuturumExactumSegments < PerfectStemSegments
548
+ def thematic
549
+ ""
550
+ end
551
+
552
+ def extension
553
+ if first_sg
554
+ n(:PERFECTUM_SUFFIX_1)
555
+ else
556
+ n(:PERFECTUM_SUFFIX_1) + n(:FUTURUM_EXACTUM_INDICATIVUS)
557
+ end
558
+ end
559
+ end
560
+ end
561
+ end
562
+ end
@@ -0,0 +1,19 @@
1
+ module LLT
2
+ class InfinitivumBuilder < VerbBuilder
3
+ builds_with :modus
4
+ has_modus t.inf
5
+
6
+ form_class :infinitive
7
+
8
+ look_up :thematic
9
+
10
+ def indices
11
+ { genus: (@deponens ? [1] : [0,1]) }
12
+ end
13
+
14
+ def new_form_through_index(ending, i)
15
+ g, t = attributes_by_index(i)
16
+ new_form(ending: ending, genus: g, tempus: t, index: i)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module LLT
2
+ class IrregularGerundBuilder < GerundBuilder
3
+ form_class :gerund
4
+ look_up :stem, :thematic
5
+ uses_endings_of :gerund
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module LLT
2
+ class IrregularGerundiveBuilder < GerundiveBuilder
3
+ form_class :gerundive
4
+ look_up :stem, :thematic
5
+ uses_endings_of :gerundive
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module LLT
2
+ class IrregularPpaBuilder < PpaBuilder
3
+ form_class :ppa
4
+ look_up :stem, :thematic
5
+ uses_endings_of :ppa
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module LLT
2
+ class IrregularPraesensBuilder < PraesensBuilder
3
+ look_up :stem, :thematic, :extension
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module LLT
2
+ class IrregularPraesensInfinitivumBuilder < PraesensInfinitivumBuilder
3
+ look_up :stem
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ module LLT
2
+ class NounBuilder < DeclinableBuilder
3
+ builds_with :sexus, :persona, :place
4
+ endings_defined_through :inflection_class, :sexus
5
+
6
+ attr_reader :persona, :place
7
+
8
+ def init_keys
9
+ super + %i{ persona place }
10
+ end
11
+
12
+ def stays_capitalized
13
+ @persona || @place
14
+ end
15
+
16
+ def nominatives
17
+ [[@nom, 1, 1]]
18
+ end
19
+
20
+ def er_nominative_possible?
21
+ @inflection_class == 2 && ! o_declension_on_ius? # fili has no ending as well!
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ module LLT
2
+ class PerfectumBuilder < VerbBuilder
3
+ look_up :thematic, :extension # investigate why this is needed an not handled through inheritance
4
+
5
+ def indices
6
+ { persona: persona_index,
7
+ numerus: [0, 3],
8
+ genus: [0],
9
+ modus: [0, 6],
10
+ tempus: [nil, nil, nil, 0, 12, 24],
11
+ }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module LLT
2
+ class PerfectumInfinitivumBuilder < InfinitivumBuilder
3
+ def indices
4
+ super.merge(tempus: [nil, nil, nil, 0])
5
+ end
6
+ end
7
+ end