• Jump To … +
    abbreviations.js adjectives.js convertables.js dates.js demonyms.js firstnames.js honourifics.js irregular_nouns.js irregular_verbs.js misc.js multiples.js numbers.js organisations.js phrasal_verbs.js places.js uncountables.js verbs.js fns.js index.js lexicon.js negate.js passive_voice.js contractions.js fancy_lumping.js grammar_rules.js parts_of_speech.js phrasal_verbs.js tagger.js word_rules.js question.js sentence.js statement.js tense.js adjective.js to_adverb.js to_comparative.js to_noun.js to_superlative.js adverb.js to_adjective.js is_acronym.js article.js date.js date_rules.js is_date.js parse_date.js is_plural.js is_uncountable.js noun.js is_organisation.js organisation.js gender.js is_person.js parse_name.js person.js is_place.js place.js pluralize.js pronoun.js singularize.js is_value.js numbers.js to_number.js units.js value.js term.js conjugate.js from_infinitive.js predict_form.js suffix_rules.js to_actor.js to_infinitive.js negate.js verb.js sentence_parser.js text.js
  • from_infinitive.js

  • ¶
    'use strict';
    
    let rules = [
      {
        reg: /(eave)$/i,
        repl: {
          pr: '$1s',
          pa: '$1d',
          gr: 'eaving',
          ar: '$1r'
        }
      },
      {
        reg: /(end)$/i,
        repl: {
          pr: '$1s',
          pa: 'ent',
          gr: '$1ing',
          ar: '$1er'
        }
      },
      {
        reg: /(ide)$/i,
        repl: {
          pr: '$1s',
          pa: 'ode',
          gr: 'iding',
          ar: 'ider'
        }
      },
      {
        reg: /(ake)$/i,
        repl: {
          pr: '$1s',
          pa: 'ook',
          gr: 'aking',
          ar: '$1r'
        }
      },
      {
        reg: /(eed)$/i,
        repl: {
          pr: '$1s',
          pa: '$1ed',
          gr: '$1ing',
          ar: '$1er'
        }
      },
    
      {
        reg: /(e)(ep)$/i,
        repl: {
          pr: '$1$2s',
          pa: '$1pt',
          gr: '$1$2ing',
          ar: '$1$2er'
        }
      }, {
        reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,
        repl: {
          pr: '$1es',
          pa: '$1ed',
          gr: '$1ing',
          prt: '$1en'
        }
      }, {
        reg: /([i|f|rr])y$/i,
        repl: {
          pr: '$1ies',
          pa: '$1ied',
          gr: '$1ying'
        }
      }, {
        reg: /([td]er)$/i,
        repl: {
          pr: '$1s',
          pa: '$1ed',
          gr: '$1ing'
        }
      }, {
        reg: /([bd]l)e$/i,
        repl: {
          pr: '$1es',
          pa: '$1ed',
          gr: '$1ing'
        }
      }, {
        reg: /(ish|tch|ess)$/i,
        repl: {
          pr: '$1es',
          pa: '$1ed',
          gr: '$1ing'
        }
      }, {
        reg: /(ion|end|e[nc]t)$/i,
        repl: {
          pr: '$1s',
          pa: '$1ed',
          gr: '$1ing'
        }
      }, {
        reg: /(om)e$/i,
        repl: {
          pr: '$1es',
          pa: 'ame',
          gr: '$1ing'
        }
      }, {
        reg: /([aeiu])([pt])$/i,
        repl: {
          pr: '$1$2s',
          pa: '$1$2',
          gr: '$1$2$2ing'
        }
      }, {
        reg: /(er)$/i,
        repl: {
          pr: '$1s',
          pa: '$1ed',
          gr: '$1ing'
        }
      }, {
        reg: /(en)$/i,
        repl: {
          pr: '$1s',
          pa: '$1ed',
          gr: '$1ing'
        },
      },
      {
        reg: /(..)(ow)$/i,
        repl: {
          pr: '$1$2s',
          pa: '$1ew',
          gr: '$1$2ing',
          prt: '$1$2n'
        }
      }
    ];
    
    let keys = {
      pr: 'present',
      pa: 'past',
      gr: 'gerund',
      prt: 'participle',
      ar: 'actor',
    };
    
    const from_infinitive = function(str) {
      let obj = {
        infinitive: str
      };
      if (!str || typeof str !== 'string') {
  • ¶

    console.log(str);

        return obj;
      }
      for(let i = 0; i < rules.length; i++) {
        if (str.match(rules[i].reg)) {
          Object.keys(rules[i].repl).forEach(function(k) {
            obj[keys[k]] = str.replace(rules[i].reg, rules[i].repl[k]);
          });
          return obj;
        }
      }
      return obj;
    };
  • ¶

    console.log(from_infinitive(‘watch’));

    module.exports = from_infinitive;