<!--
Copyright 2019 Ludan Stoecklé
SPDX-License-Identifier: CC-BY-4.0
-->
# English verbs conjugation

## Features

Agreement of English verbs, based on a few rules and on linguistic resources.

You have to import and provide independently linguistic resources:
- use `english-verbs-irregular` for a list of irregular verbs (with their preterit and past participle)
- use `english-verbs-gerunds` for a list of irregular gerunds (`ing`)

These resources are not declared as dependencies so that they are not automatically bundled in a browser package.

If you do not provide linguistic resources, very basic rules will be used: adding `ing` for gerunds, and `ed` for past and participles.


## Usage

`getConjugation` will return the conjugated verb based on:
- information about irregular verbs (preteric, past participle and gerund):
  - you can just put `null` if you don't care about irregular verbs, or if your tenses don't require them (only `SIMPLE_PRESENT` and `SIMPLE_FUTURE`)
  - other provide irregular verbs info, using `english-verbs-irregular`, and/or `english-verbs-gerunds`, using the provided helper `mergeVerbsData`
- the verb as a string
- the tense
- the person: 0=I, 1=you (singular), 2=he/she/it, 3=we, 4=you (plural), 5=they.
- `ExtraParams`: 
  - for `SIMPLE_FUTURE`, you can add `{ GOING_TO: true }` to trigger the _going to_ form; default is `{ WILL: true }`
  - use `{ NEGATIVE: true }` to trigger the negative form; additionnaly add `CONTRACT: true` to get the contracted version (will not => won't, etc.); when using the verb `to have`, you can choose whether to generate `hasn't` or `does not have` using `NO_DO: true`

Available tenses are: `SIMPLE_PAST` (or `PAST`), `SIMPLE_PRESENT` (or `PRESENT`), `SIMPLE_FUTURE` (or `FUTURE`), `PROGRESSIVE_PAST`, `PROGRESSIVE_PRESENT`, `PROGRESSIVE_FUTURE`, `PERFECT_PAST`, `PERFECT_PRESENT`, `PERFECT_FUTURE`, `PERFECT_PROGRESSIVE_PAST`, `PERFECT_PROGRESSIVE_PRESENT`, `PERFECT_PROGRESSIVE_FUTURE`.

`mergeVerbsData` will simply combine irregular verbs info and gerunds, to be used in `getConjugation`. In practice you will have `swim: ['swam', 'swum', 'swimming']`, here combining an irregular preterit, past participle and gerund. Parameters:
- `VerbsIrregularInfo`: use `english-verbs-irregular`, or null (irregular verbs are only required for some tenses)
- `GerundsInfo`: use `english-verbs-gerunds`, or null (gerunds are only required for some tenses)


## Limitations

- no interrogative form
- modals


## Installation 
```sh
npm install english-verbs-helper
```

## Usage

```javascript
const EnglishVerbs = require('english-verbs-helper');
const Irregular = require('english-verbs-irregular/dist/verbs.json');
const Gerunds = require('english-verbs-gerunds/dist/gerunds.json');

const VerbsData = EnglishVerbs.mergeVerbsData(Irregular, Gerunds);

// (he/she) eats
console.log(EnglishVerbs.getConjugation(null, 'eat', 'PRESENT', 2));

// (he/she) ate
console.log(EnglishVerbs.getConjugation(VerbsData, 'eat', 'SIMPLE_PAST', 2));

// swimming
console.log(EnglishVerbs.getIngPart(VerbsData, 'swim'));
```
