• 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
  • negate.js

  • ¶
    'use strict';
  • ¶

    recieves a verb object, and returns a negated string sort out don’t/didn’t/doesn’t/won’t

    const negate = function(v, form) {
    
      let exceptions = {
        'is': 'isn\'t',
        'are': 'aren\'t',
        'was': 'wasn\'t',
        'will': 'won\'t',
        'had': 'hadn\'t',
  • ¶

    modals

        'did': 'didn\'t',
        'would': 'wouldn\'t',
        'could': 'couldn\'t',
        'should': 'shouldn\'t',
        'can': 'can\'t',
        'must': 'mustn\'t',
        'have': 'hasn\'t',
        'does': 'doesn\'t',
  • ¶

    un-negate?

        'didn\'t': 'did',
        'doesn\'t': 'does',
        'wouldn\'t': 'would',
        'couldn\'t': 'could',
        'shouldn\'t': 'should',
        'can\'t': 'can',
        'won\'t': 'will',
        'mustn\'t': 'must',
        'shan\'t': 'shall',
        'shant': 'shall',
        'not': '',
        'don\'t': '',
      };
  • ¶

    hard-coded exceptions

      if (exceptions[v.normal]) {
        return exceptions[v.normal];
      }
  • ¶

    multiple-word verbs, like ‘have walked’

      let words = v.normal.split(' ');
      if (words.length > 1 && exceptions[words[0]]) {
        return exceptions[words[0]] + ' ' + words.slice(1, words.length).join(' ');
      }
      form = form || v.conjugation();
  • ¶

    walked -> didn’t walk

      if (form === 'PastTense') {
        return 'didn\'t ' + v.conjugate()['infinitive'];
      }
  • ¶

    walks -> doesn’t walk

      if (form === 'PresentTense') {
        return 'doesn\'t ' + v.conjugate()['infinitive'];
      }
  • ¶

    walking -> not walking

      if (form === 'Gerund') {
        return 'not ' + v.text;
      }
  • ¶

    walker -> non-walker ?

      if (form === 'Actor') {
        return 'non-' + v.text;
      }
  • ¶

    walk -> not walk ?

      if (form === 'Infinitive') {
        return 'not ' + v.text;
      }
    
      return v.text;
    
    };
    
    module.exports = negate;