lib/zenlish/wclasses/personal_pronoun.rb in zenlish-0.2.04 vs lib/zenlish/wclasses/personal_pronoun.rb in zenlish-0.2.05
- old
+ new
@@ -1,12 +1,79 @@
require_relative 'pronoun'
+require_relative '../inflect/inflection_table_builder'
module Zenlish
module WClasses
# Personal pronouns refer to people or things involved in the text.
# They change according to person, number, gender and case.
# Subject forms: I, you, he/she/it, we, you, they
# Object forms: Me, you, him, her, it, us, you, them
class PersonalPronoun < Pronoun
+ def initialize
+ super()
+ init_feature_defs
+ init_paradigms
+ end
+
+ # @return [FalseClass] Indicates that demonstrative determiners inflects.
+ def invariable?
+ false
+ end
+
+ private
+
+ def init_feature_defs
+ # Create standard feature definitions for irregular verbs.
+ feature_def_dsl {
+ feature_def 'NUMBER' => enumeration(:singular, :plural)
+ feature_def 'PERSON' => enumeration(:first, :second, :third)
+ feature_def 'GENDER' => enumeration(:feminine, :masculine, :neuter)
+ feature_def 'CASE' => enumeration(:subject, :object)
+ feature_def 'PARADIGM' => [identifier, 'ppn_1st_paradigm'] # 2nd item is default value
+ }
+ end
+
+ def init_paradigms
+ # Conventional base forms in Zenlish are: I, you, it
+ builder = Inflect::InflectionTableBuilder.new
+ table = builder.build('ppn_1st_paradigm') do
+ feature_heading 'PERSON'
+ feature_heading 'NUMBER'
+ feature_heading 'GENDER'
+ feature_heading 'CASE'
+ # PERSON NUMBER GENDER CASE
+ rule([equals(:first), equals(:singular), not_equal(:neuter), equals(:subject)], func('base_form'))
+ rule([equals(:first), equals(:plural), not_equal(:neuter), equals(:subject)], literal('we'))
+ rule([equals(:first), equals(:singular), not_equal(:neuter), equals(:object)], literal('me'))
+ rule([equals(:first), equals(:plural), not_equal(:neuter), equals(:object)], literal('us'))
+ end
+ add_paradigm(table)
+
+ table = builder.build('ppn_2nd_paradigm') do
+ feature_heading 'PERSON'
+ feature_heading 'NUMBER'
+ feature_heading 'GENDER'
+ feature_heading 'CASE'
+ # PERSON NUMBER GENDER CASE
+ rule([equals(:second), dont_care, not_equal(:neuter), dont_care], func('base_form'))
+ end
+ add_paradigm(table)
+
+ table = builder.build('ppn_3rd_paradigm') do
+ feature_heading 'PERSON'
+ feature_heading 'NUMBER'
+ feature_heading 'GENDER'
+ feature_heading 'CASE'
+ # PERSON NUMBER GENDER CASE
+ rule([equals(:third), equals(:singular), equals(:neuter), dont_care], func('base_form'))
+ rule([equals(:third), equals(:singular), equals(:feminine), equals(:subject)], literal('she'))
+ rule([equals(:third), equals(:singular), equals(:masculine), equals(:subject)], literal('he'))
+ rule([equals(:third), equals(:plural), dont_care, equals(:subject)], literal('they'))
+ rule([equals(:third), equals(:singular), equals(:feminine), equals(:object)], literal('her'))
+ rule([equals(:third), equals(:singular), equals(:masculine), equals(:object)], literal('him'))
+ rule([equals(:third), equals(:plural), dont_care, equals(:object)], literal('them'))
+ end
+ add_paradigm(table)
+ end
end # class
end # module
end # module
\ No newline at end of file