lib/zenlish/wclasses/irregular_verb.rb in zenlish-0.2.01 vs lib/zenlish/wclasses/irregular_verb.rb in zenlish-0.2.02

- old
+ new

@@ -1,33 +1,59 @@ require_relative 'lexical_verb' +require_relative 'irregular_verb_extension' module Zenlish module WClasses class IrregularVerb < LexicalVerb # @return [Array<String>] [the past simple form, past participle form]. attr_writer :forms def initialize super() + @paradigms = {} init_feature_defs + init_paradigms end + + # The mix-in module used to extend the lexeme + # @return [Module, NilClass] + def extension + IrregularVerbExtension + end - def past_simple - raise StandardError - end - - def past_participle - raise StandardError - end - private - + def init_feature_defs - super() - # Define standard feature definitions for irregular verbs. - feature_def_dsl { - feature_def 'PARADIGM' => [identifier, 'Irregular_form'] # 2nd item is default value + super + # Create standard feature definitions for irregular verbs. + feature_def_dsl { + feature_def 'PARADIGM' => [identifier, 'Irregular_inflection'] # 2nd item is default value } end + + def init_paradigms + builder = Inflect::InflectionTableBuilder.new + table = builder.build('Irregular_inflection') do + feature_heading 'PERSON' + feature_heading 'NUMBER' + feature_heading 'TIME' + method_heading 'base_form' + # PERSON NUMBER TIME base_form + rule([not_equal(:third), dont_care, equals(:present), dont_care], col('base_form')) + rule([equals(:third), equals(:singular), equals(:present), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ies')) + rule([equals(:third), equals(:singular), equals(:present), matches(/(?:[osxz]|ch|sh)$/)], concat(col('base_form'), 'es')) + rule([equals(:third), equals(:singular), equals(:present), dont_care], concat(col('base_form'), 's')) + rule([dont_care, dont_care, equals(:progressive), matches(/ie$/)], sub(col('base_form'), /ie$/, 'ying')) + rule([dont_care, dont_care, equals(:progressive), matches(/[^e]e$/)], sub(col('base_form'), /e$/, 'ing')) + rule([dont_care, dont_care, equals(:progressive), dont_care], concat(col('base_form'), 'ing')) + rule([dont_care, dont_care, equals(:past_simple), dont_care], func('past_simple')) + rule([dont_care, dont_care, equals(:past_participle), dont_care], func('past_participle')) + end + add_paradigm(table) + end + + def add_paradigm(anInflectionTable) + @paradigms[anInflectionTable.name] = anInflectionTable + end end # class end # module end # module \ No newline at end of file