latinverb 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/Gemfile +4 -1
  2. data/Gemfile.lock +24 -0
  3. data/Guardfile +10 -0
  4. data/README.markdown +1 -1
  5. data/Rakefile +12 -9
  6. data/latinverb.gemspec +4 -0
  7. data/lib/latinverb/chart.rb +5 -5
  8. data/lib/latinverb/version.rb +1 -1
  9. data/lib/latinverb.rb +266 -534
  10. data/lib/linguistics/latin/verb/classification_types.rb +19 -17
  11. data/lib/linguistics/latin/verb/constants.rb +14 -14
  12. data/lib/linguistics/latin/verb/deponent_tense_methods.rb +8 -21
  13. data/lib/linguistics/latin/verb/imperative_block.rb +118 -0
  14. data/lib/linguistics/latin/verb/infinitive_block.rb +39 -0
  15. data/lib/linguistics/latin/verb/infinitives.rb +181 -181
  16. data/lib/linguistics/latin/verb/irregulars.rb +74 -74
  17. data/lib/linguistics/latin/verb/latinverb/classmethods.rb +36 -117
  18. data/lib/linguistics/latin/verb/latinverb/data.rb +12 -15
  19. data/lib/linguistics/latin/verb/latinverb/defective_checker.rb +17 -0
  20. data/lib/linguistics/latin/verb/latinverb/deponent.rb +159 -0
  21. data/lib/linguistics/latin/verb/latinverb/display.rb +1 -2
  22. data/lib/linguistics/latin/verb/latinverb/impersonal.rb +34 -0
  23. data/lib/linguistics/latin/verb/latinverb/irregular.rb +83 -0
  24. data/lib/linguistics/latin/verb/latinverb/latin_verb_type_evaluator.rb +32 -0
  25. data/lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb +100 -0
  26. data/lib/linguistics/latin/verb/latinverb/latinverb_input_sanitizer.rb +32 -0
  27. data/lib/linguistics/latin/verb/latinverb/latinverb_pp_extractor.rb +106 -0
  28. data/lib/linguistics/latin/verb/latinverb/metaprogramming.rb +30 -29
  29. data/lib/linguistics/latin/verb/latinverb/semideponent.rb +28 -0
  30. data/lib/linguistics/latin/verb/latinverb/validation.rb +5 -29
  31. data/lib/linguistics/latin/verb/latinverb/verbvector_description.rb +50 -0
  32. data/lib/linguistics/latin/verb/participle_block.rb +36 -0
  33. data/lib/linguistics/latin/verb/participles.rb +25 -25
  34. data/lib/linguistics/latin/verb/phonographia.rb +51 -51
  35. data/lib/linguistics/latin/verb/supine.rb +6 -6
  36. data/lib/linguistics/latin/verb/tense_block.rb +227 -0
  37. data/lib/linguistics/latin/verb/tense_definitions/first.rb +92 -0
  38. data/lib/linguistics/latin/verb/tense_definitions/fourth.rb +92 -0
  39. data/lib/linguistics/latin/verb/tense_definitions/impersonal.rb +25 -0
  40. data/lib/linguistics/latin/verb/tense_definitions/invariant.rb +613 -0
  41. data/lib/linguistics/latin/verb/tense_definitions/irregular.rb +82 -0
  42. data/lib/linguistics/latin/verb/tense_definitions/second.rb +97 -0
  43. data/lib/linguistics/latin/verb/tense_definitions/third.rb +86 -0
  44. data/lib/linguistics/latin/verb/tense_definitions/third_io.rb +91 -0
  45. data/test/testClusterResolution.rb +0 -1
  46. data/test/testDataStructures.rb +8 -5
  47. data/test/testDefectSemiImp.rb +9 -10
  48. data/test/testDeponentFirstConjugation.rb +2 -2
  49. data/test/testDeponentFourthConjugation.rb +2 -2
  50. data/test/testDeponentSecondConjugation.rb +2 -2
  51. data/test/testDeponentThirdConjugation.rb +2 -2
  52. data/test/testDeponentThirdIOConjugation.rb +2 -2
  53. data/test/testDeserializeInfinitives.rb +2 -4
  54. data/test/testFirstConjugation.rb +53 -53
  55. data/test/testFourthConjugation.rb +11 -11
  56. data/test/testFreakishVerbs.rb +12 -11
  57. data/test/testIrregulars.rb +24 -23
  58. data/test/testLatinVerb.rb +46 -55
  59. data/test/testSecondConjugation.rb +27 -27
  60. data/test/testThirdConjugation.rb +14 -14
  61. data/test/testThirdIOConjugation.rb +13 -13
  62. metadata +95 -53
  63. data/lib/linguistics/latin/verb/latinverb/auxiliary_classes.rb +0 -208
  64. data/lib/linguistics/latin/verb/tense_methods.rb +0 -950
@@ -0,0 +1,100 @@
1
+ # encoding: UTF-8
2
+ # vim: set fdm=marker tw=80 sw=2:
3
+
4
+ module Linguistics
5
+ # Generalized module for handling lingustics related to Latin
6
+ module Latin
7
+ # Generalized module for handling lingustics related to Latin's verbal aspects
8
+ module Verb
9
+ class LatinVerb
10
+ ### {{{
11
+ #
12
+ # == ARGUMENTS
13
+ #
14
+ # * s :: a "four principal parts" string whence can be derived
15
+ # the first person singular present indicative as well as the
16
+ # infinitive
17
+ #
18
+ # == RETURNS
19
+ #
20
+ # The classification, a subclass of VerbType
21
+ #
22
+ # == PURPOSE
23
+ #
24
+ # Given the principal parts as a string, decide which conjuation is
25
+ # in play
26
+ #
27
+ #
28
+ ### }}}
29
+ class LatinVerbClassifier# {{{
30
+ attr_reader :classification
31
+
32
+ def initialize(input)
33
+ @classification = self.classify input
34
+ end
35
+
36
+ def classify(s)
37
+
38
+ divided_string = s.split( /\s+/ )
39
+
40
+ first_pres = divided_string[0] || ''
41
+ infinitive = divided_string[1] || ''
42
+
43
+ return Linguistics::Latin::Verb::Classification::Defective if
44
+ Linguistics::Latin::Verb::LatinVerb::DEFECTIVE_VERBS.member? first_pres
45
+
46
+ return Linguistics::Latin::Verb::Classification::Irregular if
47
+ Linguistics::Latin::Verb::LatinVerb::IRREGULAR_VERBS.member? first_pres
48
+
49
+ return Linguistics::Latin::Verb::Classification::Semideponent if
50
+ Linguistics::Latin::Verb::LatinVerb::SEMI_DEPONENTS.keys.any?{ |k| first_pres=~/#{k}$/} &&
51
+ s !~ /PreventDeponentInfiniteRegress/
52
+
53
+ return Linguistics::Latin::Verb::Classification::Impersonal if
54
+ Linguistics::Latin::Verb::LatinVerb::IMPERSONAL_VERBS.member? s
55
+
56
+ # Very irregular irregulars, A&G206, e/f
57
+ return Linguistics::Latin::Verb::Classification::Irregular if
58
+ s =~ %r'^(aiō|quaesō|ovāre)$'
59
+
60
+ return Linguistics::Latin::Verb::Classification::Deponent if
61
+ (infinitive =~ /ī$/ and first_pres =~ /r$/)
62
+
63
+ return Linguistics::Latin::Verb::Classification::Regular
64
+
65
+ end
66
+
67
+ def set_as_defective
68
+ unless @classification == Linguistics::Latin::Verb::Classification::Impersonal
69
+ @classification = Linguistics::Latin::Verb::Classification::PresentOnly
70
+ end
71
+ end
72
+
73
+ def present_only?
74
+ @present_only ||= ( @classification == Linguistics::Latin::Verb::Classification::PresentOnly )
75
+ end
76
+
77
+ def deponent?
78
+ @deponent ||= (@classification == Linguistics::Latin::Verb::Classification::Deponent)
79
+ end
80
+
81
+ def semideponent?
82
+ @semideponent ||= (@classification == Linguistics::Latin::Verb::Classification::Semideponent)
83
+ end
84
+
85
+ def impersonal?
86
+ @impersonal ||= (@classification == Linguistics::Latin::Verb::Classification::Impersonal)
87
+ end
88
+
89
+ def irregular?
90
+ @irregular = @classification == Linguistics::Latin::Verb::Classification::Irregular
91
+ end
92
+
93
+ def regular?
94
+ @regular = @classification == Linguistics::Latin::Verb::Classification::Regular
95
+ end
96
+ end# }}}
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+ # vim: set fdm=marker tw=80 sw=2:
3
+
4
+ module Linguistics
5
+ # Generalized module for handling lingustics related to Latin
6
+ module Latin
7
+ # Generalized module for handling lingustics related to Latin's verbal aspects
8
+ module Verb
9
+ class LatinVerb
10
+ class LatinVerbInitializationError < Exception; end
11
+ class LatinVerbInputSanitizer# {{{
12
+ def initialize(raw_data)
13
+ @raw_data = raw_data.dup
14
+
15
+ unless ( raw_data.is_a? String )
16
+ raw_data_type = raw_data.class.to_s.downcase
17
+ method_prefix = 'construct_original_string_for_'
18
+ mutator = ( method_prefix + raw_data_type ).to_sym
19
+ raw_data = send(mutator, raw_data)
20
+ end
21
+
22
+ @sanitized_data = raw_data
23
+ end
24
+
25
+ def to_s
26
+ return @sanitized_data
27
+ end
28
+ end# }}}
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,106 @@
1
+ # encoding: UTF-8
2
+ # vim: set fdm=marker tw=80 sw=2:
3
+
4
+ module Linguistics
5
+ # Generalized module for handling lingustics related to Latin
6
+ module Latin
7
+ # Generalized module for handling lingustics related to Latin's verbal aspects
8
+ module Verb
9
+ class LatinVerb
10
+ class LatinVerbPPExtractor# {{{
11
+ attr_reader :passive_perfect_participle, :first_person_perfect, :present_active_infinitive, :first_person_singular
12
+
13
+ class << self# {{{
14
+
15
+ def calculate_stem(present_active_infinitive, first_person_singular)# {{{
16
+ if present_active_infinitive =~ /āre$/
17
+ return present_active_infinitive.gsub(/(.*)āre$/,'\\1ā')
18
+ end
19
+ if present_active_infinitive =~ /ēre$/
20
+ return present_active_infinitive.gsub(/(.*)ēre$/,'\\1ē')
21
+ end
22
+ if present_active_infinitive =~ /ere$/
23
+ if first_person_singular =~ /iō$/
24
+ return present_active_infinitive.gsub(/(.*)ere$/,'\\1')
25
+ else
26
+ return present_active_infinitive.gsub(/(.*)ere$/,'\\1')
27
+ end
28
+ end
29
+ if present_active_infinitive =~ /īre$/
30
+ return present_active_infinitive.gsub(/(.*)īre$/,'\\1')
31
+ end
32
+ end# }}}
33
+
34
+ def derive_parts_from_given_string(s)# {{{
35
+ s.split(/\s+/)
36
+ end# }}}
37
+
38
+ def calculate_participial_stem(present_active_infinitive, first_person_singular)
39
+ if present_active_infinitive.to_s =~ /(.*ā)re$/
40
+ return $1
41
+ end
42
+
43
+ if present_active_infinitive.to_s =~ /(.*ē)re$/
44
+ return $1
45
+ end
46
+
47
+ if present_active_infinitive.to_s =~ /(.*)ere$/
48
+ match=$1
49
+ if first_person_singular =~ /iō/
50
+ return match + "iē"
51
+ else
52
+ return match + "e"
53
+ end
54
+ end
55
+
56
+ if present_active_infinitive.to_s =~ /(.*)īre$/
57
+ return $1 + "iē"
58
+ end
59
+ end
60
+ end# }}}
61
+
62
+ def initialize(input_string, classification)# {{{
63
+ @data_string = input_string
64
+ @_classification = classification
65
+
66
+ non_defective = ( classified_as.deponent? or
67
+ classified_as.semideponent? or
68
+ classified_as.impersonal? )
69
+ unless non_defective
70
+ @principal_parts = self.class.derive_parts_from_given_string input_string
71
+ @first_person_singular, @present_active_infinitive,
72
+ @first_person_perfect, @passive_perfect_participle = @principal_parts
73
+ else
74
+ unless classified_as.impersonal?
75
+ @deponent_proxy = Linguistics::Latin::Verb::LatinVerb.create_pseudo_active_mask_for_deponent(input_string)
76
+ end
77
+ end
78
+ end# }}}
79
+
80
+ def participial_stem
81
+ @participial_stem ||= self.class.calculate_participial_stem(@present_active_infinitive, @first_person_singular)
82
+ end
83
+
84
+ def principal_parts
85
+ @principal_parts
86
+ end
87
+
88
+ def stem
89
+ @stem ||= self.class.calculate_stem(present_active_infinitive, first_person_singular)
90
+ end
91
+
92
+ def classification
93
+ @_classification
94
+ end
95
+ alias :classified_as :classification
96
+
97
+
98
+ end
99
+
100
+ def to_a
101
+ @principal_parts
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -1,5 +1,7 @@
1
- # encoding: UTF-8
2
-
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ class LatinVerb
3
5
  =begin rdoc
4
6
  #--
5
7
  # The purpose of this module is to contain the metaprogramming modules
@@ -7,10 +9,6 @@
7
9
  # ++
8
10
  =end
9
11
 
10
- module Linguistics
11
- module Latin
12
- module Verb
13
- class LatinVerb
14
12
 
15
13
  =begin rdoc
16
14
 
@@ -38,25 +36,21 @@ specifier, thus all 5/5 components of the fully-qualified vector can result in
38
36
  unique match.
39
37
 
40
38
  =end
41
- def method_missing(symbol, *args ) # :nodoc:
42
- super if @tense_list.nil?
43
- @tense_list.find do |e|
44
- if symbol.to_s.match /^(#{e})_(.*)/
45
- tense_method, vector_specifier = $1, $2
46
- # This is added to prevent stack-level too deep errors
47
- begin
48
- # Handle the base case
49
- if self.respond_to?(tense_method.to_sym)
50
- return send(tense_method.to_sym).send(vector_specifier.to_sym)
51
- end
52
- rescue SystemStackError => e
53
- STDERR.puts "We encountered a SystemStackError when calling #{tense_method}"
54
- STDERR.puts "WARNING: Failed to resolve [#{tense_method}] with [#{vector_specifier}]. \n\nMake sure #{tense_method} is defined."
55
- super
56
- end
57
- end
39
+ def method_missing(method_name, *args ) # :nodoc:
40
+ method_name_components = method_name.to_s.split('_')
41
+
42
+ tense_method = Array(method_name_components[0..5]).join('_')
43
+ vector_specifier = Array(method_name_components[6..-1]).join('_')
44
+
45
+ raise RuntimeError, "Lookup on #{method_name} failed" if tense_method.nil? || vector_specifier.nil?
46
+
47
+ if self.respond_to?(tense_method.to_sym)
48
+ tense_block = send(tense_method.to_sym)
49
+ raise RuntimeError, "Call for #{tense_method} failed" if tense_block.nil?
50
+ tense_block.send(vector_specifier.to_sym)
51
+ else
52
+ super
58
53
  end
59
- super
60
54
  end
61
55
 
62
56
  ##
@@ -66,11 +60,18 @@ unique match.
66
60
  # If it's in +respondable_methods+, we return true.
67
61
  #
68
62
  ##
69
- def respond_to?(symbol, include_private=false)
70
- super if respondable_methods.nil?
71
- super if respondable_methods.empty?
72
- self.respondable_methods.grep(Regexp.new %Q/^#{symbol}$/).empty? ?
73
- super : true
63
+ def respond_to_missing?(method_name, include_private = false) #:nodoc:
64
+ components = method_name.to_s.split('_')
65
+ tense_method = components[0..5].join('_').to_sym
66
+
67
+ return false unless @tense_list.nil? || @tense_list.include?( tense_method.to_s )
68
+
69
+ if components.length > 6
70
+ tb = self.send(tense_method)
71
+ vector_call = components[6..-1].join('_').to_sym
72
+ tb.class.instance_method(vector_call)
73
+ end
74
+
74
75
  end
75
76
  end
76
77
  end
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+ module Linguistics
3
+ module Latin
4
+ module Verb
5
+ class LatinVerb
6
+ module Semideponent
7
+ def self.extended(extending_instance)
8
+ extending_instance.instance_eval do
9
+ @proxy_verb_string = Linguistics::Latin::Verb::LatinVerb.create_pseudo_active_mask_for_deponent @original_string
10
+ @proxyVerb = Linguistics::Latin::Verb::LatinVerb.new @proxy_verb_string
11
+ apply_semi_deponent_masking
12
+ end
13
+ end
14
+ # Previously @deponent and @semideponent followed the same paths,
15
+ # but in semideponents, the "present system" is handled as normal
16
+ # (completed by _add_vector_methods, supra). We need only mask, as
17
+ # A&G #192 says: "the completed methods" i.e. the perfect system.
18
+ def apply_semi_deponent_masking
19
+ self.singleton_class.class_eval do
20
+ include Linguistics::Latin::Verb::DeponentTenseMethods
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -4,7 +4,7 @@ module Linguistics
4
4
  module Latin
5
5
  module Verb
6
6
  ##
7
- # == NAME
7
+ # == NAME
8
8
  #
9
9
  # Validation
10
10
  #
@@ -15,7 +15,6 @@ module Linguistics
15
15
  #
16
16
  ##
17
17
  module Validation
18
-
19
18
  ##
20
19
  #
21
20
  # == DESCRIPTION
@@ -24,7 +23,7 @@ module Linguistics
24
23
  # LatinVerb.initialize) for basic sanity.
25
24
  #
26
25
  # Here are its basic truths
27
- #
26
+ #
28
27
  # 1. Get +@original_string+ as an iVar
29
28
  # 1. Derive a classification (+@classification+) from the string
30
29
  # 1. Determine whether the string qualifies the verb as irregular
@@ -32,32 +31,9 @@ module Linguistics
32
31
  #
33
32
  ##
34
33
  def valid?
35
- os = @original_string
36
- instance_eval do
37
- begin
38
- @classification = Linguistics::Latin::Verb::LatinVerb.classify(os)
39
- @irregular =
40
- @classification == Linguistics::Latin::Verb::VerbTypes::Irregular ?
41
- true : false
42
- unless @irregular
43
- @stem ||= self.class.calculate_stem os.split(/\s+/)[1]
44
- @deponent = (@classification == Linguistics::Latin::Verb::VerbTypes::Deponent) ?
45
- true : false
46
- @semideponent = (@classification == Linguistics::Latin::Verb::VerbTypes::Semideponent) ?
47
- true : false
48
- @impersonal= (@classification == Linguistics::Latin::Verb::VerbTypes::Impersonal) ?
49
- true : false
50
- end
51
- rescue RuntimeError => detail
52
- STDERR.puts "WARNING: Improper use of rescue for decision structure in latinverb_validation"
53
- @irregular = true
54
- rescue Exception => e
55
- @classification_error = lambda do
56
- raise e
57
- end
58
- end
59
- end
60
- return true
34
+ !@original_string.nil? &&
35
+ !classification.nil? &&
36
+ ( irregular? ? true : !stem.nil? )
61
37
  end
62
38
  end
63
39
  end
@@ -0,0 +1,50 @@
1
+ # encoding: UTF-8
2
+ #
3
+
4
+ module Linguistics
5
+ # Generalized module for handling linguistics related to Latin
6
+ module Latin
7
+ # Generalized module for handling linguistics related to Latin's verbal aspects
8
+ module Verb
9
+ class LatinVerb
10
+ LATIN_VERBVECTOR_DESCRIPTION = Proc.new do
11
+ language :Latin do
12
+ all_vectors :start_with do
13
+ {
14
+ :voice => %w(active passive),
15
+ :mood => %w(indicative subjunctive imperative)
16
+ }
17
+ end
18
+ vectors_that(/.*_indicative_mood/) do
19
+ {
20
+ :tense => %w(present imperfect future
21
+ perfect pastperfect futureperfect)
22
+ }
23
+ end
24
+ vectors_that(/.*_subjunctive_mood/) do
25
+ {
26
+ :tense => %w(present imperfect
27
+ perfect pastperfect)
28
+ }
29
+ end
30
+ vectors_that(/.*_imperative_mood/) do
31
+ {
32
+ :tense => %w(present future)
33
+ }
34
+ end
35
+ all_vectors :end_with do
36
+ {
37
+ :person => %w(first second third),
38
+ :number => %w(singular plural)
39
+ }
40
+ end
41
+ exception :remove, :passive_voice_imperative_mood_present_tense
42
+ exception :remove, :passive_voice_imperative_mood_future_tense
43
+ cluster_on :tense, "as method", :tense_list
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+
@@ -0,0 +1,36 @@
1
+ module Linguistics
2
+ module Latin
3
+ module Verb
4
+ class ParticipleBlock
5
+ attr_reader :participle_methods
6
+
7
+ def initialize(s)
8
+ raise "ParticipleBlock instantiation argument was nil!" if s.nil?
9
+
10
+ if s.is_a? Hash
11
+ @participle_methods = s.keys
12
+ end
13
+
14
+ @participle_methods.each do |k|
15
+ v=s[k]
16
+ singleton_class.class_eval do
17
+ define_method k.to_sym do
18
+ return v
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ ##
25
+ #
26
+ # Required for deserialization
27
+ #
28
+ ##
29
+ def self.json_create(o)
30
+ new(o['data'])
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
@@ -3,9 +3,9 @@
3
3
  require 'latinverb'
4
4
  require 'linguistics/latin/verb/phonographia'
5
5
 
6
- module Linguistics
7
- module Latin
8
- module Verb
6
+ module Linguistics
7
+ module Latin
8
+ module Verb
9
9
  ##
10
10
  # == NAME
11
11
  #
@@ -31,7 +31,7 @@ module Linguistics
31
31
  # declension used only in the oblique cases of hte singular.
32
32
  # c. The Supine: this is in form a verbal noun of the fourth
33
33
  # declension in the accusative (-um) and dative or ablative (-ū)
34
- # singular
34
+ # singular
35
35
  # ...
36
36
  #
37
37
  ##
@@ -59,9 +59,9 @@ module Linguistics
59
59
  #
60
60
  ###
61
61
  def present_active_participle
62
- raise "Participial stem was nil" if @participial_stem.nil?
62
+ raise "Participial stem was nil" if participial_stem.nil?
63
63
  endings=%w(ns ntis)
64
- return endings.collect{ |x| Linguistics::Latin::Phonographia.fix_macrons(@participial_stem+x.chomp)}.join(', ')
64
+ return endings.collect{ |x| Linguistics::Latin::Phonographia.fix_macrons(participial_stem+x.chomp)}.join(', ')
65
65
  end
66
66
 
67
67
  ##
@@ -83,10 +83,10 @@ module Linguistics
83
83
  ###
84
84
  def future_active_participle
85
85
  # In case we have an irregular, or somehow already have a /ūrus$/ we shouldn't do this
86
- mybase = (@pass_perf_part =~ /ūru.$/) ?
87
- @pass_perf_part.gsub(/u[sm]$/,'')
86
+ mybase = (@passive_perfect_participle =~ /ūru.$/) ?
87
+ @passive_perfect_participle.gsub(/u[sm]$/,'')
88
88
  :
89
- @pass_perf_part.gsub(/u[sm]$/, "ūr")
89
+ @passive_perfect_participle.gsub(/u[sm]$/, "ūr")
90
90
 
91
91
  singular_endings=%w(us a um)
92
92
  return singular_endings.collect{|x| mybase+"#{x}".chomp}.join(', ')
@@ -117,7 +117,7 @@ module Linguistics
117
117
  #
118
118
  ###
119
119
  def perfect_passive_participle
120
- mybase=@pass_perf_part.sub(/u[sm]$/,'')
120
+ mybase=@passive_perfect_participle.sub(/u[sm]$/,'')
121
121
  singular_endings=%w(us a um)
122
122
  return singular_endings.collect{|x| mybase+"#{x}".chomp}.join(', ')
123
123
  end
@@ -138,7 +138,7 @@ module Linguistics
138
138
  #
139
139
  ###
140
140
  def future_passive_participle
141
- mybase = @participial_stem+"nd"
141
+ mybase = participial_stem+"nd"
142
142
  singular_endings=%w(us a um)
143
143
  return singular_endings.collect{|x|Linguistics::Latin::Phonographia.fix_macrons( mybase+"#{x}".chomp)}.join(', ')
144
144
  end
@@ -147,11 +147,11 @@ module Linguistics
147
147
  #
148
148
  # === GRAMMATICAL FUNCTION
149
149
  #
150
- # A&G, 158,d.
150
+ # A&G, 158,d.
151
151
  #
152
- # The Gerundive (ending in -ndus) has two uses:
152
+ # The Gerundive (ending in -ndus) has two uses:
153
153
  #
154
- # 1. ...an adjective implying obligation...
154
+ # 1. ...an adjective implying obligation...
155
155
  #
156
156
  # 2. In the oblique cases the Gerundive commonly has the same meaning as
157
157
  # the Gerund ... for examples see sec. 503
@@ -179,10 +179,10 @@ module Linguistics
179
179
  #
180
180
  # Gerundive: verbal achective
181
181
  # gerund: verbal noun
182
- #
182
+ #
183
183
  # gerund only has oblique
184
184
  # gerundive is passive in meaning, gerund is active:
185
- #
185
+ #
186
186
  # A FUNNY THING I ALWAYS FORGET:
187
187
  # studium legeni libros ==> studium librorum legendorum
188
188
  # discimus legendo libros ==> discimus libris legendis
@@ -190,13 +190,13 @@ module Linguistics
190
190
  # -- Source, Wheelock
191
191
  #++
192
192
  ##
193
- #alias_method :gerund, :gerundive
194
- def gerund
195
- b = gerundive.sub /.*\s+(.*)um.*$/, "\\1"
196
- b += "ī, ō, etc."
197
- return b
198
- end
199
- end
200
- end
201
- end
193
+ #alias_method :gerund, :gerundive
194
+ def gerund
195
+ b = gerundive.sub( /.*\s+(.*)um.*$/, "\\1" )
196
+ b += "ī, ō, etc."
197
+ return b
198
+ end
199
+ end
200
+ end
201
+ end
202
202
  end