4.2.2
=====
- Set env.TZ setting to default timezone if not already set

4.2.1
=====
17 January 2025
- Fix github CI to use sbt

4.2.0
=====
12 January 2025
- Use unique id to name video file attachments
- Synchronise masked value cache

4.1.2
=====
27 December 2024
- Update dependencies
  - Update scala from v3.5.2 to v3.6.2
  - Update gherkin from v30.0.0 to v30.0.4
  - Update jline from v3.27.1 to v3.28.0
  - Update logback-core from v1.5.12 to v1.5.15
  - Update commons-text from v1.12.0 to v1.13.0
  - Update jackson-databind from v2.18.1 to v2.18.2

4.1.1
=====
23 December 2024
- Revert:
  - Do not honor `@Try` annotation in dry run mode when a reference is invalid

4.1.0
=====
19 December 2024
- Add support for masking input data fields
- Ensure masked fields are unmasked when evaluating javascript
- Added DSLs
  - `<step> <while|until> <name> is[ not] <blank|empty>`
  - `<step> <while|until> <name> is[ not] "<value>"`
  - `<step> <while|until> <name> <match> "<expression>"`
  - `<step> <while|until> <name> does not <match> "<expression>"`
- Do not honor `@Try` annotation in dry run mode when a reference is invalid

4.0.3
=====
10 December 2024
- Do not check step rules when resolving guard references in dry runs

4.0.2
=====
10 December 2024
- Resolve guard references in dry runs

4.0.1
=====
15 November 2024
- Load associative meta after common meta

4.0.0
=====
15 November 2024
- Introduce profiles to support multiple launch configurations
  - `-p|--profile` option
 - Internal engine enhancements
  - Replace redundant multi scoped data caches with one single scoped cache
  - Manage settings internally without exposing them as system properties
  - Manage implicits at lifecycle level using boundary level caching
- Require Java 17+ instead of Java 11+
- Use logback instead of log4j for logging
- Support `empty` literal in DSLs wherever `blank` is accepted
- Make all input data read only by default
- Add `--repl` option to open REPL regardless of batch and feature options
- Change ignore placeholder syntax in template matcher from `!{}` to `@{*}`
- Add `@{**}` placeholder to template matcher to support ignoring multiple lines
- Print gwen launch arguments on startup
- Synchronise system process bindings when resolving value from output stream
- Do not permit scope attribute on results file configuration when logging with annoation or DSL
- Only log results file records if results format is specified in launch options
- Skip logging to result file if the scope or status don't match
  - and disable calling step when logged via DSL
- Log unresolved field value if interpolation fails during result file logging
- Support relative file locations in `@Import` and `@Examples` annotations
- Load all associative meta if features are specified with `--repl` option
- Auto discover associative meta only
- Update dependencies
  - Update scala from v3.5.0 to v3.5.2
  - Update gherkin from v29.0.0 to v30.0.0
  - Update jline from v3.26.3 to v3.27.1
  - Update logback-core from v1.5.9 to v1.5.12
  - Update logback-classic from v1.5.9 to v1.5.12
  - Update jackson-databind from v2.17.2 to v2.18.1
- Add settings(s):
  - `gwen.input.data.readOnly`
- Add implicit variable(s):
  - `gwen.profile.name`
- Add environment variable(s)
  - `GWEN_PROFILE`
- Add DSL step(s):
  - `I attach "<filepath>"`
    - For attaching files to Gwen reports (where the name of the attachment will be the name of the file)
  - `I log record to <resultsFileId> file`
    - For explicitly logging records to configured results files
- Raise deprecations as errors by default instead of logging them as warnings
  | Setting                     | Old default | New default |
  | :-------------------------- | :---------: | :---------: |
  | `gwen.logLevel.deprecations`|   `warn`    |   `error`   |
- | Deprecated Settings          | Use this instead               |
  | :--------------------------- | :----------------------------- |
  | `gwen.cli.options.batch`     | `gwen.launch.options.batch`    |
  | `gwen.cli.options.format`    | `gwen.launch.options.format`   |
  | `gwen.cli.options.inputData` | `gwen.launch.options.inputData`|
  | `gwen.cli.options.dryRun`    | `gwen.launch.options.dryRun`   |
  | `gwen.cli.options.features`  | `gwen.launch.options.features` |
  | `gwen.cli.options.parallel`  | `gwen.launch.options.parallel` |
  | `gwen.cli.options.meta`      | `gwen.launch.options.meta`     |
  | `gwen.cli.options.report`    | `gwen.launch.options.report`   |
  | `gwen.cli.options.tags`      | `gwen.launch.options.tags`     |
  | Removed Settings               | Use this instead           |
  | :----------------------------- | :--------------------------|
  | `gwen.auto.discover.data.csv`  | `-i|--input` launch option |
  | `gwen.auto.discover.data.json` | `-i|--input` launch option |
  | `gwen.auto.discover.meta`      | `-m|--meta` launch option  |
  | `gwen.associative.meta`        | This is now always on      |
- | Deprecated Implicit values            | Use this instead                              |
  | :------------------------------------ | :-------------------------------------------- |
  | `gwen.eval.status.keyword`            | `gwen.feature.eval.status.keyword`            |
  | `gwen.eval.status.keyword.upperCased` | `gwen.feature.eval.status.keyword.upperCased` |
  | `gwen.eval.status.keyword.lowerCased` | `gwen.feature.eval.status.keyword.lowerCased` |
  | `gwen.eval.status.keyword.isPassed`   | `gwen.feature.eval.status.keyword.isPassed`   |
  | `gwen.eval.status.keyword.isFailed`   | `gwen.feature.eval.status.keyword.isFailed`   |
  | `gwen.eval.status.message`            | `gwen.feature.eval.status.message`            |
  | `gwen.eval.status.message.escaped`    | `gwen.feature.eval.status.message.escaped`    |
  | `gwen.eval.status.message.csvEscaped` | `gwen.feature.eval.status.message.csvEscaped` |
  | `gwen.eval.duration`                  | `gwen.feature.eval.duration`                  |
  | `gwen.eval.duration.msecs`            | `gwen.feature.eval.duration.msecs`            |
  | `gwen.eval.duration.secs`             | `gwen.feature.eval.duration.secs`             |
  | `data record number`                  | `gwen.data.record.number`                     |
  | `data.record.number`                  | `gwen.data.record.number`                     |
  | `data.record.index`                   | `gwen.data.record.index`                      |
  | `record.number`                       | `gwen.table.record.number`                    |
  | `record.index`                        | `gwen.table.record.index`                     |
  | `iteration.number`                    | `gwen.iteration.number`                       |
  | `iteration.index`                     | `gwen.iteration.index`                        |
- Drop deprecated features:
  - Gwen Workspaces warning
  - `-p|--properties` option
  - Report portal integration
  - Matrix tables
  - Core DSL steps
    - `I wait <duration> second[s] when <element> is <actioned>`
    - `I wait until <condition> when <element> is <actioned>`
  - Core DSL steps in favour of base step with `@Timeout` and `@Delay` annotations
    - `<step> <until|while> <condition> using <delay> <delayUnit> delay`
    - `<step> <until|while> <condition> using <timeout> <timeoutUnit> timeout`
    - `<step> <until|while> <condition> using <delay> <delayUnit> delay and <timeout> <timeoutUnit> timeout`
    - `<step> <until|while> <condition> using no delay and <timeout> <timeoutUnit> timeout`
    - `<step> <until|while> <condition> using no delay`
    - `<step> <until|while> <condition> using no delay and <timeout> <timeoutUnit> timeout`

3.66.0
======
9 October 2024
- Add `results` report format option for declarative CSV reporting
- Introduce `@Results` annotation to support logging CSV results at any node level
- Improved error handling and reporting
- Add implicit variables:
  - `gwen.feature.displayName`
  - `gwen.feature.eval.started`
  - `gwen.feature.eval.finished`
  - `gwen.rule.eval.started`
  - `gwen.rule.eval.finished`
  - `gwen.scenario.displayName`
  - `gwen.scenario.eval.started`
  - `gwen.scenario.eval.finished`
  - `gwen.stepDef.displayName`
  - `gwen.stepDef.eval.started`  
  - `gwen.stepDef.eval.finished`
  - `gwen.examples.name`
  - `gwen.examples.eval.start.msecs`
  - `gwen.examples.eval.started`
  - `gwen.examples.eval.finished`
  - `gwen.examples.eval.status.keyword`

3.65.0
======
26 September 2024
- Surround filename in file compare error messages with single quotes instead of double quotes
- Introduce new implicit attribute:
  - `gwen.eval.status.message.csvEscaped` = CSV escaped equivalent of `gwen.eval.status.message`

3.64.0
======
23 September 2024
- Add file based DSL steps
  - `<step> if "<filepath>" file[ not] exists`
  - `<step> if "<filepath>" file does not exist`
  - `<step> if <filepathRef file>[ not] exists`
  - `<step> if <filepathRef file> does not exist`
  - `<step> if "<filepath>" file is[ not] empty`
  - `<step> if <filepathRef file> is[ not] empty`
  - `<step> <until|while> "<filepath>" file[ not] exists`
  - `<step> <until|while> "<filepath>" file does not exist`
  - `<step> <until|while> <filepathRef file>[ not] exists`
  - `<step> <until|while> <filepathRef file> does not exist`
  - `<step> <until|while> "<filepath>" file is[ not] empty`
  - `<step> <until|while> <filepathRef file> is[ not] empty`
  - `I wait until "<filepath>" file[ not] exists`
  - `I wait until "<filepath>" file does not exist`
  - `I wait until <filepathRef file>[ not] exists`
  - `I wait until <filepathRef file> does not exist`
  - `I wait until "<filepath>" file is[ not] empty`
  - `I wait until <filepathRef file> is[ not] empty`
  - `"<filepath>" file should[ not] exist`
  - `<filepathRef file> should[ not] exist`
  - `"<filepath>" file should[ not] be empty`
  - `<filepathRef file> should[ not] be empty`
  
3.63.2
======
20 September 2024
- Interpolate step level tags
- Report deprecation error even if step contains `@Try`

3.63.1
======
19 September 2024
- Fix deprecation msg

3.63.0
======
19 September 2024
- Introduce `gwen.logLevel.deprecations` to control how deprecations are reported.
  - Supported values include:
    - `warn` to log deprecations as warnings (default)
    - `error` to raise and report deprecations as errors
    - `none` to suppress logging or reporting of deprecation messages (no operation)

3.62.0
======
18 September 2024
- Introduce `@Timeout` and `@Delay` annotations for overriding timeouts and delays on wait, until/while, for-each and element assertion DSLs
- Deprecate all DSLs that specify delay or timeout in favor of new Wait and Delay annotations
- Update dependencies
  - Update scala from v3.4.2 to v3.5.0
  - Update gherkin from v28.0.0 to v29.0.0
  - Update log4j-slf4j-impl from v2.23.1 to v2.24.0
  - Update scala-csv from v1.4.1 to v2.0.0
  - Update commons-model from v5.11.1 to v5.12.0
  - Update pdfbox from v3.0.2 to v3.0.3
  - Update pdfbox-io from v3.0.2 to v3.0.3
  - Update guava from v33.2.1-jre to v33.3.0-jre

3.61.7
======
2 September 2024
- Detect and report multi-line input data field names as errors

3.61.6
======
28 August 2024
- Report malformed data file error when an input data file fails to parse

3.61.5
======
27 August 2024
- Fix JS function calls with multiline string arguments

3.61.4
======
18 August 2024
- Deprecate report portal integration

3.61.3
======
15 August 2024
- Remove unnecessary logging of features filtered by tags

3.61.2
======
20 July 2024
- Update dependencies
  - Update scala from v3.4.1 to v3.4.2
  - Update jline from v3.26.1 to v3.26.3
  - Update commons-codec from v1.17.0 to v1.17.1
  - Update commons-text from v1.11.0 to v1.12.0
  - Update scala-csv from v1.3.10 to v1.4.1
  - Update jackson-databind from v2.17.1 to v2.17.2
  - Update guava from v33.2.0-jre to v33.2.1-jre

3.61.1
======
9 July 2024
- Use `ISO-8859-1` encoding if text files cannot be read using `UTF-8`

3.61.0
======
9 July 2024
- Add DSL to read in file using a given character encoding
  - `<name> is defined by <encoding> file "<filepath>"`

3.60.1
======
9 July 2024
- Fix `gwen.eval.status.message` implicit

3.60.0
======
8 July 2024
- Fix context cloning and Synchronized StepDefs for parallel outline examples
- Replace flash scope with scope reference
- Set transparent background on HTML report dropdowns
- Introduce implicit feature, rule, scenario and StepDef level scopes

3.59.0
======
3 Jul 2024
- Introduce `Parallel` annotation on outline examples
  - Cannot be used in a nested manner (an error will be raised on any such detection)
  - Effective only when Gwen is invoked without the `--parallel` option (i.e: when no other parallel execution is taking place). It will be implicitly removed otherwise.
- Added implicit value `gwen.feature.language` 

3.58.2
======
24 Jun 2024
- Add implicit values for capturing evaluation duration in seconds
  - `gwen.eval.duration.secs` - the formatted duration (eg: 23s)

3.58.1
======
22 Jun 2024
- Fix implicit duration values for scenario level state

3.58.0
======
22 Jun 2024
- Add implicit values for capturing evaluation duration
  - `gwen.eval.duration` - the formatted duration (eg: 1s 234ms)
  - `gwen.eval.duration.msecs` - the duration in milliseconds (eg: 1234)

3.57.1
======
19 Jun 2024
- Fix ordering of x is "y" DSL

3.57.0
======
18 Jun 2024
- Add `@Masked` annotation to mask dynamically evaluated data bound by the following DSLs. If specified, then returned data will be masked in all logs and outputs.
  - `<name> is defined by <javascript|js> "<expression>"`
  - `<name> is defined by <javascriptRef> applied to "<argument>"`
  - `<name> is defined by <javascriptRef> applied to "<arguments>" delimited by "<delimiter>"`
  - `<name> is defined by system process "<process>"`
  - `<name> is defined by system process "<process>" delimited by "<delimiter>"`
  - `<name> is defined by unix system process "<process>"`
  - `<name> is defined by the <text|node|nodeset> in <xmlRef> by xpath "<expression>"`
  - `<name> is defined in <textRef> by regex "<expression>"`
  - `<name> is defined in <jsonRef> by json path "<expression>"`
  - `<name> is defined in the <dbName> database by sql "<selectStmt>"`

3.56.0
======
13 Jun 2024
- Json data bindings for nested array loops
- Simplified DSL for looping over JSON arrays
  - `<step> for each <entry> in <arrayRef> array`

3.55.0
======
12 Jun 2024
- Enhanced support for JSON input data
- Add new DSL for looping over JSON arrays
  - `<step> for each <entry> in <json|JSON> array <arrayRef>`

3.54.1
======
10 Jun 2024
- Support single top level object in JSON input data (in addition to array)
- Sort JSON input data by key names
- Convert nulls to blank when reading JSON properties

3.54.0
======
9 Jun 2024
- Add support for structured JSON input data

3.53.6
======
27 May 2024
- Use fixed thread pool executor (instead of work stealing thread pool) for parallel excecution

3.53.5
======
May 20, 2024
- Fix HTML report summary table to cater for sustained errors

3.53.4
======
May 11, 2024
- Update dependencies
  - Update jline from v3.25.1 to v3.26.1
  - Update log4j-slf4j-impl from v2.23.0 to v2.23.1
  - Update commons-codec from v1.16.1 to v1.17.0
  - Update commons-text from v1.11.0 to v1.12.0
  - Update scalatags from v0.12.0 to v0.13.1
  - Update client-java from v5.2.5 to v5.2.14
  - Update pdfbox from v3.0.1 to v3.0.2
  - Update pdfbox-io from v3.0.1 to v3.0.2
  - Update jackson-databind from v2.16.1 to v1.17.1
  - Update guava from v33.0.0-jre to v33.2.0-jre
  - Update scala from v3.4.0 to v3.4.1

3.53.3
======
May 7, 2024
- Generate No-op HTML report when no input data is provided

3.53.2
======
May 2, 2024
- Fix parameters delimiter in JS function resolver to accept blanks

3.53.1
======
Apr 15, 2024
- Fix alignment of Message annotations in formatter to cater for step level tags

3.53.0
======
Apr 14, 2024
- Add Trim and IgnoreCase annotations to support trimming and ignoring case in match DSLs 

3.52.3
======
Apr 12, 2024
- Fix alignment of Message annotations in formatter to cater for step level tags

3.52.2
======
Apr 8, 2024
- Do not accumulate errors raised in an active `@Try` scope or a disabled step

3.52.1
======
Apr 8, 2024
- Do not accumulate errors raised in `@Try` steps

3.52.0
======
Apr 6, 2024
- Add accumulated errors and asserts
  - Add DSL `I reset accumulated errors` to reset (clear) any currently accumulated errors and demarcate a boundary for new ones
  - Add DSL `there should be no accumulated errors`
    - When called after a series of failed soft or sustained assertions, will raise an error containing all accumulated failure messages
  - Accumulated error messages can also be referenced throughout specifications as:
    - `${gwen.accumulated.errors}` - A numbered list of accumulated errors, example:
        ```
        2 errors:
        (1) x should not be blank
        (2) y should be true but got false
        ```
    - `${gwen.accumulated.errors:JSONArray}` - A JSON array of accumulated errors, example:
        ```
        ["x should be blank", "y should not be true but got false"]
        ```

3.51.11
=======
Apr 3, 2024
- Bind first record of input data file when launching Gwen in REPL mode

3.51.10
=======
Mar 22, 2024
- Fix data feeds to cater for multiline data

3.51.9
======
Mar 11, 2024
- Update build tooling

3.51.8
======
Mar 11, 2024
- Update library dependencies
  - Update gherkin from v27.0.0 to v28.0.0
  - Update log4j-slf4j-impl from v2.22.1 to v2.23.0
  - Update commons-codec from v1.16.0 to v1.16.1
  - Update commons-model from v5.11.0 to 5.11.1
  - Update client-java from v5.2.2 to v5.2.5
  - Update scala from v3.3.1 to v3.4.0

3.51.7
======
Mar 06, 2024
- Include sustained errors in HTML summary report

3.51.6
======
Mar 04, 2024
- Consolidate assertion failed messages

3.51.5
======
Mar 4, 2024
- Remove `assertion failed:` prefix from assertion errors

3.51.4
======
Feb 29, 2024
- Change assertion error messages to be more fluent

3.51.3
======
Feb 7, 2024
- Update library dependencies
    Update log4j-slf4j-impl from v2.21.1 to v2.22.1

3.51.2
======
Jan 31, 2024
- Fix transitive dependencies

3.51.1
======
Jan 31, 2024
- Update library dependencies
  - Update jline from v3.23.0 to v3.25.1
  - Update commons-codec from v1.10.0 to v1.11.0
  - Update json-path from v2.8.0 to v2.9.0
  - Update commons-model from v5.10.0 to v5.11.1
  - Update client-java from v5.1.23 to v5.2.2
  - Update pdfBox from v3.0.0 to v3.0.1
- Update library dependency overrides
  - Update guava from v32.1.3-jre to v33.0.0-jre

3.51.0
======
Nov 7, 2023
- Add new DSLs for conditionally evaluating steps based on compare operations
  - `<step> if <name> is[ not] blank`
  - `<step> if <name> is not "<expression>"`
  - `<step> if <name> <contains|starts with|ends with|matches regex|matches xpath|matches json path|matches template|matches template file> "<expression>"`
  - `<step> if <name> does not <contain|start with|end with|match regex|match xpath|match json path|match template|match template file>"<expression>"`
- Add DSL to assign blank or boolean literal
  - `<name> is <blank|true|false>`

3.50.2
======
Oct 30, 2023
- Fix dry run for file write DSLs

3.50.1
======
Oct 28, 2023
- Hyperlink each data table row in HTML reports to associated StepDef
- Update library dependencies
  - Update gherkin from v26.2.0 to v27.0.0
  - Update log4j-slf4j-impl from v2.20.0 to v2.21.1
  - Update config from v1.4.2 to v1.4.3
  - Update jansi from v2.4.0 to v2.4.1
  - Update commons-model from v5.8.1 to v5.10.0
  - Update client-java from v5.1.22 to v5.1.23
  - Update guava from v32.1.2-jre to 32.1.3-jre
  - Update jackson-databind from v2.15.2 to v2.15.3
  - Update okio from v1.17.5 to v1.17.6
  - Update reactive-streams from v1.0.3 to v1.0.4
- Update test library dependencies
  - Update scalatest from v3.2.16 to v3.2.17
  - Update h2 from v2.2.220 to v2.2.224

3.50.0
======
Oct 24, 2023
- Add DSLs for downloading files from a URL
  - `I download "<url>" to "<filepath>"`
  - `I download "<url>" to <filepathRef file>`

3.49.2
======
Oct 19, 2023
- Fix issue with negated if conditions when using data tables

3.49.1
======
Oct 19, 2023
- Retry PDF text capture until timeout

3.49.0
======
Oct 18, 2023
- Add new DSLs for conditionally evaluating repeating steps based on whether or not a binding is defined
  - `<step> <repeat|until> <attribute> is[ not] defined`

3.48.1
======
Oct 10, 2023
- Fix arrow function parser to skip over standard js functions

3.48.0
======
Oct 10, 2023
- Add JS arrow functions
    - Syntax: `(args) => body`
    - Add arrow function evaluation to REPL
    - Add new `gwen.report.attach.functions` setting to control whether or not to attach functions to steps (default is `true`)
- Introduce boolean `true` and `false` literals
- Annotation attributes can now be surrounded by back-ticks, in addition to single or double quotes
- Include messages and location of errors at end of console report
- Remove joda-time dependency and use java.time package instead
- Only override bindings if their values differ to current ones

3.47.5
======
Sep 19, 2023
- Improved syntax error reporting for annotations

3.47.4
======
Sep 19, 2023
- Support square brackets in addition to curly braces for list values in annotations (former preferred)
- Override transitive libararies to pick up vulnerability fixes
  - Update guava from v32.0.1-jre to v32.1.2-jre
  - Update okio from v1.172. to v1.17.5

3.47.3
======
Sep 18, 2023
- All annotations can now accept single or double quoted values
- Prefer single quoted values over double for all annotations
- Update scala from v3.3.0 to v3.3.1

3.47.2
======
Sep 16, 2023
- Use And keyword in trailing expanded dry run value steps

3.47.1
======
Sep 16, 2023
- Fix dry run annotation logic in for-each loop
- Remove pre-existing same named loop var check and restore value when for-each finishes

3.47.0
======
Sep 15, 2023
- Introduce DryRun Annotations to specify values for bindings that cannot be resolved in dry runs
  - `@DryRun(name = '<name>', value = '<value>')`
    - To specify a single dry run value
    - The step having the annotation will be called once with this value in a dry run
  - `@DryRun(name = '<name>', value = {'<value-1>', '<value-2>', '<value-N>'})`
    - To specify multiple dry run values
    - The step having the annotation will be repeatedly called for each value in a dry run
- Both Message and DryRun annotations can now accept single quotes in addition to double quotes around values

3.46.0
======
Sep 7, 2023
- Any type of binding can now be used as a boolean condition throughout the DSLs (in prior versions only JS or simple bindings were accepted).

3.45.0
======
Sep 7, 2023
- Add DSLs to capture PDF text content
  - `I capture the PDF text from url "<url>" `
  - `I capture the PDF text from url "<url>" as <name>`
  - `I capture the PDF text from file "<filepath>"`
  - `I capture the PDF text from file "<filepath>" as <name>`
- Introduce JSONArray notation for accessing list values in settings as JSON array literals

3.44.7
======
Aug 28, 2023
- Runtime library updates
  - Update htmlcleaner from v2.28 to v2.29
  - Update commons-codec from v1.15 to v1.16.0
  - Update commons-model from v5.8.0 to v5.8.1
  - Update client-java from v5.1.20 to v5.1.22
- Test library updates
  - Update h2 from v2.1.214 to v2.2.220

3.44.6
======
Aug 3, 2023
- Fix dry run checks for boolean JS references

3.44.5
======
July 24, 2023
- Check that arguments[index] placholders are defined for all parameters passed to JS function bindings

3.44.4
======
July 14, 2023
- Fix typo in exception message

3.44.3
======
July 6, 2023
- Fix dry run for literal boolean conditions used in while-until DSLs

3.44.2
======
July 5, 2023
- Preserve previous implicit `gwen.eval.status.keyword` and `gwen.eval.status.message` state for steps and StepDefs called with Try annotation

3.44.1
======
July 5, 2023
- Fixed implicit `gwen.eval.status.keyword` and `gwen.eval.status.message` for StepDefs called with Try annotation

3.44.0
======
July 5, 2023
- Fixed implicit `gwen.eval.status.keyword` and `gwen.eval.status.message` for steps having Try annotation
- Introduced new implicit attributes:
  - `gwen.eval.status.keyword.upperCased` = Value of `gwen.eval.status.keyword` in upper case
  - `gwen.eval.status.keyword.lowerCased` = Value of `gwen.eval.status.keyword` in lower case

3.43.0
======
July 5, 2023
- Introduced new implicit attributes:
  - `gwen.eval.status.message.escaped` = Java escaped equivalent of `gwen.eval.status.message`
  - `gwen.eval.status.isFailed` = `true` if current feature evaluation is in error, `false` otherwise
  - `gwen.eval.status.isPassed` = `true` if current feature evaluation is not in error, `false` otherwise
- Add support for boolean literals in place of javascript expressions as conditions in DSLs

3.42.1
======
June 30, 2023
- Use ✘ icon for failed steps in console and REPL output
- Fix event dispatching of empty examples with empty tables

3.42.0
======
June 30, 2023
- Add implicit attribute for accessing the name of the feature file currently being executed (excluding file extension)
  - `gwen.feature.file.simpleName`

3.41.0
======
June 29, 2023
- Add the following implicit attributes for accessing the number and index of the current input data record being processed
  - `data.record.number` = the current record number starting at 1
  - `data.record.index` = the current record index starting at 0
- Add the following implicit attributes for accessing the number and index of the current while, until, or foreach iteration
  - `iteration.number` = the current iteration number starting at 1
  - `iteration.index` = the current iteration index starting at 0

3.40.0
======
June 26, 2023
- Add support for JSON data feeds and lookups

3.39.0
======
June 17, 2023
- Use checkmark icon ✔ for passed steps in console and REPL output

3.38.2
======
June 16, 2023
- Fix for gwen-interpreter/gwen-web#105
  - Do not raise missing steps error if feature only contains an example annotated scenario outline

3.38.1
======
June 15, 2023
- Update CI workflow

3.38.0
======
June 15, 2023
- Build with Java 11

3.37.3
======
June 14, 2023
- Remove zero char from custom message
- Library updates
  - Update scala from v3.2.2 to v3.3.0
  - Update gherkin from v26.0.3 to v26.2.0
  - Update json-path from v2.7.0 to v2.8.0
  - Update joda-time from v2.12.2 to v2.12.5
  - Update htmlcleaner from v2.26 to v2.28
  - Update RP commons-model from v5.7.3 to v5.8.0
  - Update RP client-java from v5.1.15 to v5.1.20
  - Update jackson-databind from v2.14.2 to v2.15.2
  - Update guava from v31.1-jre to v32.0.1-jre

3.37.2
======
June 13, 2023
- Honor assertion mode in custom assertion errors

3.37.1
======
June 11, 2023
- Fix dry run for while/until steps

3.37.0
======
June 10, 2023
- Abstract condition out of Repeat class

3.36.0
======
June 10, 2023
- Add Hard, Soft, and Sustained annotations for overriding the default assertion mode at the step level

3.35.6
======
May 17, 2023
- Check that functions applied to values in DSL steps have been defined

3.35.5
======
May 12, 2023
- Do not pause at breakpoints twice on guarded steps

3.35.4
======
May 10, 2023
- Trim headers from CSV data feeds

3.35.3
======
Apr 28, 2023
- Fix new line issue in REPL paste mode: dont print No-op

3.35.2
======
Apr 27, 2023
- Only print and evaluate each step once in REPL

3.35.1
======
Apr 24, 2023
- Evaluate multiple steps in REPL when copy pasted

3.35.0
======
Apr 8, 2023
- Refactored string interpolation
- Improved error reporting in CSV lookup DSL
- Improved Examples annotation CSV processing and error reporting
- Print Abstained status to standard out for steps that pass but were not executed due to negative guards or empty iteration conditions
- Implicitly log steps to console at inifite depth for dry runs

3.34.4
======
Mar 28, 2023
- Fix StepDef parameter interpolation checks in dry runs

3.34.3
======
Mar 27, 2023
- Log warning and return code 1 if context fails to close on exit

3.34.2
======
Mar 27, 2023
- Allow all interrupts resulting from cntl-c to exit REPL quietly

3.34.1
======
Mar 27, 2023
- Only load Gwen banner a second time when starting REPL if in verbose mode or evaluation occured on features
- Fix launch issue where no meta or feature files are provided
- Allow cntl-c to exit REPL quietly

3.34.0
======
Mar 25, 2023
- Introduce auto suggestions in the REPL console
- Introduce new settings to enable or disable auto suggestions and tab completion
  - `gwen.console.repl.autoSuggestions=true|false` (default is true for enabled)
  - `gwen.console.repl.tabCompletion=true|false` (default is true for enabled)

3.33.4
======
Mar 25, 2023
- Do not escape inputs in REPL
- Smaller StepDef indents in HTML reports
  - New default of 20 pixels for `gwen.report.stepDef.indent.pixels` setting

3.33.3
======
Mar 21, 2023
- Allow cntl-d to exit REPL quietly

3.33.2
======
Mar 18, 2023
- Fix environment variable overrides for Settings
- Do no load Gwen banner a second time when starting REPL and loading meta unless verbose logging is enabled
- Use SpecPrinter to print step on breakpoints

3.33.1
======
Mar 16, 2023
- Relax strict and declarative rules when in REPL

3.33.0
======
Mar 15, 2023
- Bind implicit `gwen.stepDef.name` attribute to the currently executing StepDef name

3.32.0
======
Mar 15, 2023
- Add `format --pretty` CLI command for formatting feature and meta files for consistent and tidy Gherkin

3.31.1
======
Mar 14, 2023
- Include exception cause in reported javascript errors
- Reload tab completer when meta is reloaded in REPL
- Disable tab completion in REPL when in paste mode
- Pause node event listeners when at breakpoint in REPL session
- Report unknown input or command when REPL input is not recognised
- Make interpolation of Message annotations lenient
- Dependency udpates
  - Update jline from v2.14.6 to v3.23.0
  - Update log4j-slf4j-impl from v2.19.0 to v2.20.0
  - Update scalatest from v3.2.14 to v3.2.15
  - Update mockito-core from v4.9.0 to v4.11.0

3.31.0
======
Mar 8, 2023
- Softer border colors in HTML reports
- Stronger StepDef indents in HTML reports
- Add new `gwen.report.stepDef.indent.pixels` setting to configure StepDef indent size in HTML reports (default is 30 pixels)

3.30.1
======
Mar 6, 2023
- Fix soft and sustained assertions
- List all errors at summary level in HTML report
- Fix sustained assertion count

3.30.0 
======
Mar 3, 2023
- New feature request gwen-interpreter/gwen-web#103
  - Introduce `load` command in REPL console for reloading changed meta

3.29.7
======
Mar 1, 2023
- Accept meta having no steps

3.29.6
======
Mar 1, 2023
- Fix configured CLI input data option to accept single entry only

3.29.5
======
Feb 25, 2023
- Only require at least one input for dry run when data input file is specified

3.29.4
======
Feb 17, 2023
- Defer initialisation of HTML report file resources until needed

3.29.3
======
Feb 16, 2023
- Update dependencies
  - Update scala from v3.2.1 to v3.2.2
  - Update gherkin from v25.0.2 to v26.0.3
  - Update rp-common from v5.3.3 to v5.7.3
  - Update client-java from v5.0.22 to v5.1.15
- Update dependency overrides
  - Update jackson-databind from v2.14.1 to 2.14.2
  - Removed tika-core
- Update copyright year

3.29.2
======
Dec 23, 2022
- Update transitive dependencies (security upgrade)

3.29.1
======
Dec 23, 2022
- Include lapsed time in HTML summaries and remove overhead times

3.29.0
======
Dec 9, 2022
- Add new DSL for conditionally evaluating steps based on whether or not a binding is defined
  - `<step> if <attribute> is[ not] defined`

3.28.17
=======
Dec 6, 2022
- Update runtime dependencies
  - Update scala from v3.2.0 to v3.2.1
  - Update gherkin from v24.0.0 to v25.0.2
  - Update commons-text from v1.9 to v1.10.0
  - Update joda-time from v2.11.2 to v2.12.2
- Update runtime overrides
  - Update jackson-databind from v2.13.4 to 2.14.1
- Update test dependencies
  - Update mockito-core from v4.8.0 to v4.9.0

3.28.16
=======
Nov 6, 2022
- Raise error when attempt is made to parse empty feature file
- Raise error when attempt is made to process feature with no steps
- Fix resolve of nested masked settings
- At least one input required for dry run

3.28.15
=======
Oct 17, 2022
- Align Gwen logo in HTML reports

3.28.14
=======
Oct 14, 2022
- Minor update to Gwen logo in HTML reports

3.28.13
=======
Oct 10, 2022
- Remove experimental `: "<message>"` syntax for custom assertion messages. Use `@Message("<message>")` annotation instead. Fixes issue gwen-interpreter/gwen-web#99
  
3.28.12
=======
Oct 9, 2022
- Update Gwen logo in HTML reports

3.28.11
=======
Oct 6, 2022
- Remove scala2 v2.13.9 override which breaks system process on directories with trailing slashes on windows (pick up v2.13.8 instead). Fixes issue gwen-interpreter/gwen-web#98

3.28.10
=======
Sep 30, 2022
- Windows fix for escaping new line characters in steps (issue gwen-interpreter/gwen-web#96)

3.28.9
======
Sep 30, 2022
- Windows fix for escaping new line characters from data table cells (issue gwen-interpreter/gwen-web#96)
- Fix spelling of behavior rules setting in error messages

3.28.8
======
Sep 30, 2022
- Escape new line characters from data table cells (issue gwen-interpreter/gwen-web#96)
- Execute windows system processes as single command strings instead of a sequence (issue gwen-interpreter/gwen-web#97)

3.28.7
======
Sep 29, 2022
- Update runtime dependencies
  - Update scala from v3.1.2 to v3.2.0
  - Update gherkin from v23.0.1 to v24.0.0
  - Update slf4j from v1.7.32 to v1.7.36
  - Update slf4jLog4j from v2.17.1 to v2.19.0
  - Update scopt from v4.0.1 to 4.1.0
  - Update jodaTime v2.10.14 to v2.11.2
  - Update scalatags from v0.11.1 to v0.12.0
  - Update jackson-databind from v2.13.3 to v2.13.4
  - Update tika-core from v1.28.4 to v1.28.5
- Update test dependencies
  - Update scalaTest from v3.2.11 to v3.2.14
  - Update scalaTestPlusMockito from v3.2.10.0 to v3.2.11.0
  - Update mockitoCore from v3.12.4 to v4.8.0
  - Update h2 from v1.4.200 to v2.1.214

3.28.4
======
Sep 29, 2022
- Ignore empty CSV records in examples and lookups

3.28.3
======
Sep 28, 2022
- Load first record of CSV file passed into `-i/--input-data` option when launching Gwen in REPL mode

3.28.2
======
Sep 14, 2022
- Add synthetic delay step between each while and until loop iteration

3.28.1
======
Sep 7, 2022
- Treat failed interpolations as unresolved if the name is not bound otherwise throw underlying error.

3.28.0
======
Sep 6, 2022
- Introduced `gwen.error.messages.inline.locators=true|false` setting to control whether or not to inline locator information next to all named bindings in error messages (default is `false`)
- Remove CSV record descriptor suffix from normalised meta spec name
- Remove with literal between success and sustained error badge in HTML report

3.27.0
======
Aug 24, 2022
- Introduce CSV lookup DSLs:
  - `I lookup <name> in the "<filepath>" file where "<predicate>"`
  - `I lookup <name> in <filepathRef file> where "<predicate>"`
  - `I lookup <column> in the "<filepath>" file as <name> where "<predicate>"`
  - `I lookup <column> in <filepathRef file> as <name> where "<predicate>"`

3.26.1
======
Aug 23, 2022
- Report Boolean type error if a conditional returns a non boolean value

3.26.0
======
Aug 17, 2022
- Include root cause in nested unbound attribute errors
- Throw root cause instead of overriding error message when exceptions occur during assertion checks
- Add new DSLs for checking presence or absence of bindings
  - `<name> should be defined`
  - `<name> should not be defined`
 
3.25.2
======
Aug 9, 2022
- Resolve parameters when evaluating `where` filters in `Examples` annotations

3.25.1
======
Aug 9, 2022
- Add breakpoint indicator on REPL prompt

3.25.0
======
Aug 8, 2022
- Preserve table binding name when reporting on `Examples` `where` filter 
- Do not interpolate step message with `NoData` annotation
- Introduce `gwen.dryRun.limit.tableData.outline.examples.records` setting to control the maximum number of outline examples records to include in dry runs

3.24.1
======
Aug 5, 2022
- Update tika-core from v1.28.3 to security patch v1.28.4

3.24.0
======
Aug 5, 2022
- Add configurable name `prefix` to `Examples` annotation
- Make `where` filter in `Examples` annotation accept a JavaScript expression
- Internal enhancement for better handling of unresolved references during interpolation
  - Use `String => Option[String]` instead of `String => String` interpolator signature (internal enhancement)
- Retry boolean JavaScript conditions on error until timeout
- Expand scenario outline StepDefs at call site
- Only accept first 10 records of CSV provided in `Examples` annotation for dry runs to keep performance optimal

3.23.0
======
Jul 26, 2022
- Introduce `gwen.auto.trim.data.csv=true|false` to control whether or not to trim csv data (default is `false`)
- Add new DSLs to compare blank strings
  - `<textRef> should[ not] be blank`
  - `<jsonRef> at json xpath "<path>" should[ not] be blank`
  - `<xmlRef> at xpath "<path>" should[ not] be blank`

3.22.0
======
Jul 21, 2022
- Add more DSLs to support writing to files
  - `I <write|append> "<text>" to "<filepath>" file`
  - `I <write|append> <textRef> to "<filepath>" file`
  - `I <write|append> new line to "<filepath>" file`
  - `I <write|append> "<text>" to <filepathRef file>`
  - `I <write|append> <textRef> to <filepathRef file>`
  - `I <write|append> new line to <filepathRef file>`

3.21.0
======
Jul 20, 2022
- Add DSLs to support writing to files
  - `I write "<text>" to "<filepath>" file`
  - `I write <textRef> to "<filepath>" file`
  - `I write new line to "<filepath>" file`

3.20.1
======
Jul 20, 2022
- Fix list values in settings

3.20.0
======
Jul 18, 2022
- Drop configurable `gwen.launch.options.conf` setting
- Give GWEN_XXX environment variables precedence over settings and system properties
- Cater for settings with multi name-value pairs

3.19.1
======
Jul 13, 2022
- Relax imperative step rules for Data and NoData annotated steps

3.19.0
======
Jun 30, 2022
- Add optional `required` attriubte to `Examples` tag 
  - If `true`, raise error if no data is found and tag background steps with `NoData` annotation
  - If `false` (default), no erorr is raised
- Include deep nested attachemnts in outlines in html reports
- Override assertion exceptions with custom messages if specified

3.18.1
======
Jun 28, 2022
- Fix dry run for system process bindings

3.18.0
======
Jun 28, 2022
- Add DSL for defining bindings by unix system process
  - `<attribute> <is|will be> defined by unix system process "<expression>"`
- Dropped DSL for executing delimited unix system process
  - `I execute unix system process "<process>" delimited by "<delimiter>"`

3.17.1
======
Jun 27, 2022
- Capture cause in exception when a system process call fails

3.17.0
======
Jun 26, 2022
- `gwen.parallel.maxThreads` 
  - can be set to `auto` for one thread per available core
  - can be set to a number that exceeds total available cores (multiple threads per core)
- Add ability to override `gwen.parallel.maxThreads` setting with an environment variable:
  - `GWEN_THREADS=auto|number` to set the maxium number of parallel threads

3.16.4
======
Jun 23, 2022
- Adjust feature column in HTML summary report for best fit

3.16.3
======
Jun 22, 2022
- Fix last (feature file) column in html summary report

3.16.2
======
Jun 20, 2022
- Make video button column width in HTML report 60px or 0px if there no vidoes

3.16.1
======
Jun 20, 2022
- Auto adjust summary table columns for best fit in HTML reports

3.16.0
======
Jun 20, 2022
- Allow project init in non empty directory
- Add `--force` option to `init` command to regenerate and replace existing files

3.15.0
======
Jun 19, 2022
- Add total CSV record count to record descriptor suffix to console report output
- Ignore empty CSV records
- Add ability to overrdie `gwen.launch.options.dryRun` setting with an environment variable:
    - `GWEN_DRY_RUN=true|false`
  - Add ability to overrdie `gwen.launch.options.parallel` setting with an environment variable:
    - `GWEN_PARALLEL=true|false` to set default `--parallel` option
- Drop `--parallelFeatures` CLI option and `gwen.launch.options.parallelFeatures` setting
  - Feature or scenarios run in parallel based on `--parallel` option and state level only
- Log scenario worker thread to console report when running scenarios in parallel
- Add `--docker` and `jenkins` options to gwen init do generate docker and Jenkins files

3.14.3
======
Jun 17, 2022
- Add total CSV record count to record descriptor suffix to console reporter output
- Ignore empty CSV records

3.14.2
======
Jun 16, 2022
- Do nothing in foreach steps if there are no elements in iteration
- Do nothing in table steps if there are no rows of data

3.14.1
======
Jun 14, 2022
- Fix data file name in expanded CSV examples

3.14.0
======
Jun 14, 2022
- Introduce new setting to bind row data in outline examples tables to same named attributes in the current scope:
  - `gwen.auto.bind.tableData.outline.examples = true|false`
    - `true` (default) to bind table data to same named attributes in the current scope for each row
    - `false` to not bind table data to attributes in the current scope
- Introduce new setting to set console logging depth
  - `gwen.console.log.depth=number|infinity` (default is 1)
    - Accepts a number greater than 1 representing the step depth to log to
      - or `infinity` to log all depths
- Add total CSV record count to record descriptor suffix
  - examples: `1` becomes `1 of n` where `n` = total number of records)
- Allow applied function references to be used in if, while, or until conditionals
- Add Data annotation to CSV and table data binding steps and defer interpolation

3.13.6
======
Jun 5, 2022
- Add horizontal scrolling to tables in HTML reports

3.13.5
======
Jun 2, 2022
- Support DocString in javascript function application DSL

3.13.4
======
Jun 2, 2022
- Support masked data in system process DSLs

3.13.3
======
Jun 2, 2022
- Update tikaCore from v1.28.2 to v1.28.3

3.13.2
======
Jun 1, 2022
- Add overloaded DSLs:
  - `I execute unix system process "<process>"`
  - `I execute unix system process "<process>" delimited by "<delimiter>"`

3.13.1
======
Jun 1, 2022
- Do not allow quotes in if condition reference names

3.13.0
======
May 31, 2022
- Remove concatenation syntax in favor of interpolation/substitution
- Add line break between each status group in console report summary

3.12.3
======
May 30, 2022
- Update console summary report indenting

3.12.2
======
May 30, 2022
- Update console summary report to include feature name

3.12.1
======
May 25, 2022
- Update libs
  - Update scala from v3.1.1 to v3.1.2
  - Update tika-core from v1.26 to v1.28.2
  - Update jackson-databind from v2.13.2.2 to v2.13.3
  - Update gherkin from v22.0.0 to v23.0.1
  - Update scala-logging from v3.9.4 to v3.9.5

3.12.0
======
May 25, 2022
- Add where clause (filter) to `@Examples` tag
- Add note for turning off declarative feature mode and strict behavior rules in respective error messages
- Interpolate input data into feature and scenario level tags, names and descriptions
- No wrap on table data rows in HTML

3.11.10
=======
May 23, 2022
- Fix Lazy/Eager validation

3.11.9
======
May 12, 2022
- Remove redundant data from negated assertion error messages

3.11.8
======
May 11, 2022
- Adjust keyword column width in HTML reports

3.11.7
======
May 04, 2022
- Auto expand low level single step links in HTHML reports
- Include `not` prefix when naming negated synthetic If stepDefs

3.11.6
======
May 03, 2022
- Grey attachments for ignored steps in HTML reports

3.11.5
======
Apr 28, 2022
- HTML encode error messages in HTML detail reports

3.11.4
======
Apr 27, 2022
- Change summary HTML report heading from Feature Summary to Results Summary
- Change detail HTML report heading from Feature Detail to Feature Specification

3.11.3
======
Apr 22, 2022
- Fix positioning of attachments dropdown and video buttons in HTML reports
- Improve layout of summary lines in HTML reports

3.11.2
======
Apr 20, 2022
- Optimised Gwen logo image in HTML report to exact size

3.11.1
======
Apr 20, 2022
- Add video, attachments, and error message to HTML report summary lines
- Support CSV data interpolation in feature name and description
- Improve summary layout in HTML reports
- Use higher resolution Gwen logo image in HTML reports

3.11.0
======
Apr 19, 2022
- Add DSL's to support text similarity checks using the DSC (Dice Similarity Coefficient) algorithm:
  - `<textRef> should[ not] <be|be less than|be at most|be more than|be at least> <percentage>% similar to "<text>"`
  - `<textRef1> should[ not] <be|be less than|be at most|be more than|be at least> <percentage>% similar to <textRef2>`
  - `I capture the similarity score of <textRef> compared to "<text>" as <name>`
  - `I capture the similarity score of <textRef1> compared to <textRef2> as <name>`
  - `I capture the similarity score of <textRef> compared to "<text>"`
  - `I capture the similarity score of <textRef1> compared to <textRef2>`

3.10.2
======
Apr 7, 2022
- Fix: include attachments of ignored steps in reports

3.10.1
======
Apr 6, 2022
- Add duration to `Ignored` status and render ignored stepdef links in grey
- Change CSV record number label suffix from ' (plus input data record n)' to ' + Input data record n'

3.10.0
======
Apr 6, 2022
- Introduced `@Try` annotation and `Ignored` status
  - Steps annotated with `@Try` that fail will be reported as `Ignored`
- Fix: Accept blank arguments into JS function application bindings

3.9.1
=====
Apr 5, 2022
- JS function application binding without delimiter takes single argument only
  - `<name> is defined by <javascriptRef> applied to "<argument>"`

3.9.0
=====
Apr 5, 2022
- JS function application bindings
  - `<name> is defined by <javascriptRef> applied to "<arguments>"`
  - `<name> is defined by <javascriptRef> applied to "<arguments>" delimited by "<delimiter>"`

3.8.1
=====
Apr 4, 2022
- Fix `@Lazy` bindings for if conditions

3.8.0
=====
Apr 3, 2022
- Introduce `@Eager` and `@Lazy` annotations for `X defined by Y` DSL steps
  - `@Eager` evaluates Y on the spot and assigns the value to X for subsequent reuse
  - `@Lazy` evaluates Y when referenced the first time and assigns the value to X for subsequent reuse
  - Neither (the default) evaluates Y when referenced every time and assigns the value to X for one-time use
- Refactor: renamed ReservedTags to Annotations
- Parse out custom assert messages so they do not appear in reported step output
- Introduce `@Message("msg")` annotation for custom assertion messages in addition to `: "msg"` notation
  - Example: 
    - Without custom message (the standard assertion message will be reported if assertion fails): 
      - `Then x should be y`
    - With custom message: 
      - `Then x should be y  @Message("This custom message will be reported if assertion fails")` (new approach)
      - or `Then x should be y: "This custom message will be reported if assertion fails"` (old approach)

3.7.3
=====
Mar 31, 2022
- Update dependencies to eliminate transitive vulnerabilities:
  - Update tika-core from v1.22 to v1.26
  - Update guava from v29.0-jre to v31.1-jre

3.7.2
=====
Mar 31, 2022
  - Update dependencies to eliminate transitive vulnerabilities:
    - Update jackson-databind from v2.10.2 to v2.13.2.2
    - Update guava from v28.2-jre to v29.0-jre
    - Update tika-core from v1.20 to v1.22

3.7.1
=====
Mar 31, 2022
- Log error instead of failing when timing out waiting for video files

3.7.0
=====
Mar 29, 2022
- Add video attachments to HTML reports
- Update scala from v3.1.0 to v3.1.1
- Update scala-csv from v1.3.8 to v1.3.10
- Update json-path from v2.6.0 to v2.7.0
- Update joda-time from v2.10.12 to 2.10.14
- Update scalatags from v0.9.4 to v0.11.1
- Update htmlCleaner from v2.25 to v2.26
- Update config from v1.4.1 to v1.4.2
- Update scalatest from v3.2.10 to v3.2.11

3.6.2
=====
Mar 24, 2022
- Invert links in HTML reports
- Fix rendering of non expanded outlines in HTML reports

3.6.1
=====
Mar 23, 2022
- Skip empty step defs

3.6.0
=====
Mar 22, 2022
- Treat  `true` and `false` string attribute bindings as booleans
  - So now , the `x` in `x is "true"` will be bound as a JavaScript expression instead of a plain string
    enabling it to be used as a boolean condition in control flow steps (if, while or until steps).

3.5.1
=====
Mar 11, 2022
- Fix if conditions match to capture condition after last if keyword

3.5.0
=====
Mar 9, 2022
- Add support for custom messages to all assertion steps using `: "<message>"` suffix.
  - Example: 
    - Without custom message (the standard assertion message will be reported if assertion fails): 
      - `Then x should be y`
    - With custom message: 
      - `Then x should be y: "This custom message will be reported if assertion fails"`

3.4.0
=====
Mar 7, 2022
- Add support for negated if conditions
- Introduce abstained status for steps that are skipped due to false if conditions
  - Greyed out in HTML reports

3.3.2
=====
Feb 25, 2022
- Put gwen REPL .history file in output directory instead of root

3.3.1
=====
Feb 25, 2022
- Only generate slideshow report if screenshotting is enabled

3.3.0
=====
Feb 22, 2022
- Remove redundant reference to data file record number in html reports
- Report undefined step errors in StepDefs
- Handle breakpoints entered in REPL
- Add `@Finally` step annotation
  - Steps with this annotation will execute regardless of current evaluation status
- Add implicit attributes
  - `gwen.eval.status.keyword`
    - The current evaluation status
  - `gwen.eval.status.message` 
    - The current evaluation status message (if failed or sustained, blank otherwise)

3.2.0
=====
Feb 2, 2022
- Improved Background reporting
  - Put Backgrounds above Sceanrios in HTML reports
  - Remove name/value parameters from generated input data steps
  - Include input data file name and record number in generated Background description
- Add support for adding breakpoints to feature and meta steps
  - Breakpoints are created by adding `@Breakpoint ` to the start of step expressions
  - Breakpoints are activated by invoking Gwen with the new `-d|--debug` CLI option
- Fix Gwen impl name and version outputs
- Update Scala from v3.0.2 to v3.1.0

3.1.6
=====
Jan 14, 2022
- Fix issue gwen-interpreter/gwen-web#95:
  - Handle similar step defs

3.1.5
=====
Jan 13, 2022
- Handle env vars in masked settings

3.1.4
=====
Jan 11, 2022
- Fix issue gwen-interpreter/gwen-web#94:
  - Handle wait/until errors correctly
- Fix issue gwen-interpreter/gwen-web#95:
  - Handle similar step defs

3.1.3
=====
Dec 30, 2021
- Update log4j from version 2.17.0 to 2.17.1

3.1.2
=====
Dec 26, 2021
- Fix issue gwen-interpreter/gwen-web#93:
  - Resolve composite step conflicts

3.1.1
=====
Dec 18, 2021
- Update log4j from version 2.16.0 to 2.17.0

3.1.0
=====
Dec 16, 2021
- Update log4j from version 1.2.17 to 2.16.0
  - Precautionary measure to update to the most recent log4j impelementation
    and migitate against the CVE-2021-44228 and CVE-2021-45046 vulnerabilities

3.0.9
=====
Dec 11, 2021
- Fix issue gwen-interpreter/gwen-web#93:
  - Handle step defs containing reserved DSL keywords and resolve conflicts

3.0.8
=====
Dec 9, 2021
- Fix issue gwen-interpreter/gwen-web#93:
  - Handle step defs containing if keyword in name

3.0.7
=====
Dec 8, 2021
- Fix issue gwen-interpreter/gwen-web#92:
  - Honor launch settings for RP reruns

3.0.6
=====
Dec 7, 2021
- Fix issue gwen-interpreter/gwen-web#91:
  - Resolve properties in table steps

3.0.5
=====
Dec 4, 2021
- Fix issue gwen-interpreter/gwen-web#89:
  - Skip tag filtering for meta specs
- Fix issue gwen-interpreter/gwen-web#90:
  - Fix evaluation of JS containing if condition

3.0.4
=====
Nov 27, 2021
- Fix issue #61 - NPE if meta directory does not exist

3.0.2
=====
Nov 19, 2021
- Fix Ansi colors for windows
- Restore `gwen.console.log.colors` default to true
- Fix encoding of non breaking space in HTML reports

3.0.1
=====
Nov 18, 2021
- Set default mask char to '*' instead of '●'
- Temporaritly default `gwen.console.log.colors` to false (until windows ANSI issues are fixed)

3.0.0
=====
Nov 16, 2021
- Gwen 3 release
  - Refactor and migrate codebase to Scala 3
  - Update Gherkin parser and all dependencies
  - Introduce pretty console logger ( supports [NO_COLOR](https://no-color.org/) )
  - Settings changes:
    - Support *.conf (HOCON), and *.json settings files in addition to *.properties files
    - Renamed settings:
      - `gwen.feature.failfast` renamed to `gwen.feature.failfast.enabled`
      - `gwen.rp.heartbeat` renamed to `gwen.rp.heartbeat.enabled`
    - Changed settings defaults:
      - `gwen.associative.meta = true` instead of `false`
      - `gwen.behavior.rules = strict` instead of `lenient`
      - `gwen.feature.mode = declarative` instead of `imperative`
      - `gwen.report.suppress.meta = true` instead of `false`
      - `gwen.auto.discover.data.csv = false` instead of `true`
    - Removed settings alias
      - `gwen.behaviour.rules` in favor of `gwen.behavior.rules`
    - New settings
      - Configurable base and output directories
        - `gwen.baseDir` (default = .)
        - `gwen.outDir` (default = ${gwen.baseDir}/output)
      - Configurable CLI options:
        - `gwen.launch.options.parallel`
        - `gwen.launch.options.parallelFeatures`
        - `gwen.launch.options.batch`
        - `gwen.launch.options.dryRun`
        - `gwen.launch.options.report`
        - `gwen.launch.options.format`
        - `gwen.launch.options.tags`
        - `gwen.launch.options.inputData`
        - `gwen.launch.options.meta`
        - `gwen.launch.options.features`
  - CLI changes:
    - New command
      - `init` for initialising a new Gwen working directory
    - New options
      - `-c|--conf` for loading .conf, .json and .properties settings files
      - `-f|--format none` for no report generation
      - `-v|--verbose` for verbose logging (pretty logging otherwise)
    - Deprecated option
      -  `-p|--properties` in favor of `-c|--conf`
    - Configurable defaults for all CLI options
    - Generate HTML reports by default
  - Add alternative DSL for attaching files to report (without quotes around name)
    - `I attach "<filepath>" as <name>`
  - Simplified @DataTable annotation
    - Read top header row by default and use names in header to lookup cell values
  - New user documentation
    - At Gwen home page here: https://gweninterpreter.org/

2.34.6
======
Nov 2, 2021
- Remove trailing commas in JSON report gwen-interpreter/gwen-web#86

2.34.5
======
Oct 11, 2021
- Fix RP heartbeat timeout issue gwen-interpreter/gwen-web#85:
  - Close input stream after reading RP heartbeat response.
  - Keep retrying failed RP heartbeats until configured timeout expires

2.35.4
======
Oct 7, 2021
- Close input stream after reading RP heartbeat response

2.34.3
======
Sep 8, 2021
- Improved CLI usage text
- Update Gwen core from v2.34.3 to v[2.34.4](https://github.com/gwen-interpreter/gwen/releases/tag/v2.34.4)
  - Console banner fix

2.34.2
======
July 29, 2021
- Improved usage (--help) text
- Issue gwen-interpreter/gwen-web#79: resolve attributes in examples tables
- Fix parallel scenario-level execution for Gherkin's spoken languages/dialects

2.34.1
======
July 31, 2021
- Default `gwen.rp.send.annotations` setting to false

2.34.0
======
July 2, 2021
- Add new DSLs to support invoking system processes with quoted strings and other special cases
  - `I execute system process "<process>" delmited by "<delimiter>"`
  - `I execute a unix system process "<process>" delmited by "<delimiter>"`
  - `<attribute> <is|will be> defined by system process "<expression>" delmited by "<delimiter>"`
- Support passing DocStrings as parameters to StepDefs (addresses issue gwen-interpreter/gwen#60)
- Update report portal client-java from v5.0.21 to v5.0.22
  - Long name trunctation fix

2.33.0
======
June 22, 2021
- Report portal integration release
- Add `nodePath` and `sourceRef` options to `gwen.rp.testCaseId.keys` setting to support
  generating test case ID's based on node path or source reference only.
June 7, 2021 - 2.33.0-rc-rp.2
- Fix name clash between parameters and attributes in interpolator
- Convert back slashes in sourceRef and nodePath to forward slashes on Windows
- Send sourceRef as item attribute in report portal if it is less than or equal to 128 
  characeters in length, otherwise append it to the item description instead.
- Enforce case sensitivity on all report portal setting names.
- Improved test case ID generation for nodePath+params mode:
  - Remove all keywords from node paths and use node names only
  - Remove table cooridnates and `Examples` keyword from expanded scenario names in outlines
  - Use single dimension occurrence in node path of ForEach, While, and Until iterations
  - Pass cumulative parameters to report portal 
    - Incuding current parameters and all those previously visible in the call chain
- Remove node path logging on node descriptions
- Introduce new setting `gwen.rp.debug=true|false` to control whether or not
  to log debug messages containing the node path and parameters for all nodes
  in report portal. Default is false.
May 31, 2021 - 2.33.0-rc-rp.1
- Fix duplicate launch histories in RP for scenario outlines
- Send table row data associated with expanded scenarios of outlines to report portal as parameters
- Send all parameters passed to stepdefs to report portal as parameters
- Introduce node paths and use those in conjunction with parameters sent to report portal 
  to generate unique test case IDs (SHA 256 hashes) for all nodes in RP instead of relying on 
  the default auto generation based on line numbers in codeRefs. This ensures that history 
  in RP remains in tact for nodes if their line numbers change (as long as nodes are not 
  renamed and identically named sibling nodes are not deleted).
- Add new configuration settings to control how test case IDs are generated in report portal:
  - `gwen.rp.testCaseId.keys = nodePath+params | sourceRef+params | auto`
  - Default is `nodePath+params`
- Append source refs and node paths to descriptions of nodes in report portal
  - Do not send source refs as attributes 
  - This is to avoid 128 char limit on attributes in RP
- Remove support for @TestCaseId annotation which was previously implemented on an invalid assumption
- Drop column number from sourceRef string representation and codeRef sent to report portal
- Ensure attachments are still logged in report portal when step def reporting is disabled
- Drop Repeat prefix from While/Until keywords in reports
- Change `gwen.rp.send.tags` setting to only send marker tags if enabled (default is true: enabled)
- Add `gwen.rp.send.annotations` setting to send annotations if enabled (default is false: disabled)
- Add parameters passed to StepDef's, expanded outlines and for-each records to HTML report

2.32.0-beta-rp.10
=================
Apr 22, 2021 - 2.32.0-beta-rp.10
- Add RP hearteat timeout setting (default is 3 seconds):
  - `gwen.rp.heartbeat.timeoutSecs`
- Truncate RP item names greater than 1024 chars and add `... ` to end and log INFO message
- Log DocStrings and data tables as INFO messages in RP
- Changed RP heartbeat to use /health URL and check payload
- Added new setting `gwen.rp.send.markdownBlocks = true | false` (default is true)
  - When enabled, surrounds all markdown content with triple back ticks to force block style render
    and preserve original text as much as possible in report portal markdown view
  - When disabled, sends all content to report portal as is (unmodified for markdown)
- Removed setting `gwen.rp.escapeForMarkdown` (character level markdown escapes no longer supported)
Apr 20, 2021 - 2.31.1-beta-rp.9
- Replace double space with ` &nbsp;` when escaping for HTML
- Skip RP reporting for skipped features
- Add heartbeat to monitor RP connection during execution through setting:
  - `gwen.rp.hearbeat = true | false` default is `true`
    - If enabled, Gwen will check the report portal connection before the first step in each 
      scenario is executed and fail fast if it's gone offline
Apr 17, 2021 - 2.31.1-beta-rp.8
- Enrich assertion errors to include binding information
- Escape spaces and tildes in RP logs
- Add `gwen.rp.escapeForMarkdown` setting to control whether or not to escape for markdown in report portal
Apr 12, 2021 - 2.31.1-beta-rp.7
- Fix parameter interpolation involving if conditions
Apr 11, 2021 - 2.31.1-beta-rp.6
- Fix composite steps involving if conditions
- Add 1 ms delay to all lifecyce events to ensure millisecond timestamp accuracy for RP
Apr 7, 2021 - 2.31.1-beta-rp.5
- Add locator info to non interactable error
- Fix report portal markdown escaping to encode `<>*` characters only
- Fix sequence of skipped steps in report portal
- Introduce synthetic stepdefs for `if` and `repeat` steps for consistent structure
Mar 26, 2021 - 2.31.1-beta-rp.4
- Fix logging of steps with "if" conditions to report portal
- Update report portal library from v5.0.18 to v5.0.21
Mar 25, 2021 - 2.31.1-beta-rp.3
- Fix interrupted steps in report portal
- Fix screenshot attachemnts in HTML report
- Fix undefined step issue in report portal
Mar 20, 2021 - 2.31.1-beta-rp.2
- Fix report portal data table issues
- Setting for optionally sending tags to report portal
Feb 25, 2021 - 2.31.1-beta-rp.1
- Introduce report portal integration
  
2.32.1
======
May 4, 2021
- Do not allow nested if-conditions in composite steps (only trailing posiion permitted)
- Add screenshot and error details when while/until errors or times out

2.32.0
======
Apr 21, 2021
- Replace double space with ` &nbsp;` when escaping for HTML
- Add heath check hook into lifecycle events
- Enrich assertion errors to include binding information
- Introduce synthetic stepdefs for `if` and `repeat` steps for consistent structure
- Fix screenshot attachemnts in HTML report

2.31.1
======
Dec 4, 2020
- Optimisation: bypass masked settings lookups for non-masked cases

2.31.0
======
Dec 1, 2020
- Introduce masked settings to make all your private and sensitive settings appear 
  as `●●●●●` in all Gwen logs, reports, errors and console outputs
- Internal cleanup and Refactor
  - Improved Gwen Gherkin model
  - Add UUID to each node
  - Add uri and source reference to each node
  - Introduce lifecycle events and listeners

2.30.0
======
Oct 20, 2020
- Introduce @ForEach annotation to simplify looping over records in data tables

2.29.0
======
Oct 17, 2020
- Introduce shorter DSL literals for convenience
  - JavaScript DSLs accept `javascript` or `js` for short

2.28.1
======
Sep 27, 2020
- Update build tooling

2.28.0
======
Sep 26, 2020
- Added `gwen.parallel.maxThreads` to enable users to set the maximum number 
  number of threads used for parallel execution (default = total available CPU processors)
- Optimised parallel execution for both features and scenarios
- Update libarary dependencies
  - Update scala from 2.12.8 to 2.13.3
  - Update gherkin from 8.1.1 to 15.0.2
  - Update slf4j-log4j12 from 1.7.25 to 1.7.30
  - Update commons-codec from 1.12 to 1.15
  - Update commons-text from 1.6 to 1.9
  - Update scala-csv from 1.3.5 to 1.3.6
  - Update joda-time from 2.10.1 to 2.10.6
- Update build tooling
  - Migrate from SBT 0.13.17 to 1.3.4

2.27.3
======
Sep 19, 2020
- Use work-stealing thread pool for parallel execution to ensure that all available processors 
  are effectively utilised.

2.27.2
======
May 8, 2020
- Fix `empty.max` error in HTML report generator

2.27.1
======
May 1, 2020
- Fix loading of custom log4j configuration (issue #55)

2.27.0
======
March 28, 2020
- Treat universal `*` keyword as `And`

2.26.0
======
March 27, 2020
- I18n (issue #53): Add support for writing feature specs with Gherkin's spoken languages
- Add setting `gwen.feature.dialect`
  - Used to set the default dialect for Gherkin keywords in feature files and the REPL console 
    (so you don't have to set the # language header in every feature file). Default is `en`. 
    Dialects do not apply to meta files which must use English keywords only.

2.25.1
======
March 11, 2020
- Dry run fix for nexted foreach steps
- Fix ForEach label in reports

2.25.0
======
March 8, 2020
- Introduce behavior rules setting to enforce good Gherkin style
  - `gwen.behavior.rules=strict|lenient`
    - `strict`: The following rules are enforced in feature files with violations reported as errors:
      - Steps in scenarios and backgrounds must satisfy *Given-When-Then* order
      - *Given* steps must set context
      - *When* steps must perform actions
      - *Then* steps must perform assertions
      - *But* steps must perform assertions (and are permitted after *Then* steps)
    - `lenient`: no rules are enforced
    - Default is `lenient` for backwards compatiblity but plan is to change it 
      to `strict` in upcoming major (v3.0.0) release

2.24.0
======
January 29, 2020
- Add assocative meta setting:
  - `gwen.associative.meta=true|false` (default is false)
  - If enabled, then if a meta file has the same name (excluding file extension) and is 
    in the same location as a feature, then load that meta last for that feature only and skip over 
    all other meta in the path to the feature that is assocaited in same way to any other features. 
    This enables users to define meta that is bound to one feature only by defininig it in a meta 
    file in the same location as the feature and naming it with the same name as the feature but 
    with the .meta extension instead (handy for cases where a meta per feature is desirable).
  - This setting is only honoured if `gwen.auto.discover.meta` is enabled (which it is by default).

2.23.0
======
January 21, 2020
- Introduce "declarative" mode for features to prevent the user of imperative 
  steps in features. Controlled through mew Gwen setting
  - `gwen.feature.mode=declarative|imperative` (imperative is default)

2.22.2
======
November 28, 2019
- Calculate summary overhead to be the sum of all feature overheads

2.22.1
======
November 23, 2019
- Introduce state levels and parallel execution for scenarios in addition to features.
  State levels are configurable with the `gwen.state.level` setting which can be set to:
  - `feature`: to give each feature a state that is shared across scenarios (default)
  - `scenario`: to give each scenario a new state that is not shared across scenarios
- The `--parallel` option now runs:
  - features in parallel when configured state level is `feature`
  - scenarios in parallel when the configured state level is `scenario`
- Added `--parallel-features` command line option to force parallel feature execution
  regardless of state level
- Input CSV data records are now resolved to Backgrounds instead of top level Scenarios
  to support both feature and scenario level states

2.21.0
======
November 12, 2019
- Integated latest Gherkin 8.1.1 parser from Cucumber to support rules and 
  [example mapping](https://cucumber.io/blog/2015/12/08/example-mapping-introduction) 
   - `Rule` and `Example` keywords, synonyms, etc..

2.20.0
======
August 18, 2019
- Add support for interpolating environment variables using ${env.VARNAME} syntax

2.19.4
======
August 16, 2019
- Only log stack traces to console if DEBUG logging is enabled
- Allow up to 18 frames per second in slideshow playback (default is now 4 instead of 1)

2.19.3
======
July 29, 2019
- Ensure error attachments are always added to reports for failing steps

2.19.2
======
July 27, 2019
- Use sbt 0.13.17 for builds

2.19.1
======
March 28, 2019
- Resolve hostname in JUnit reports

2.19.0
======
March 24, 2019
- Introduce Disabled evaluation status to support conditionally disabling steps
- Upgrade library dependencies
  - scopt from 3.7.0 to 3.7.1
  - scala-logging from 3.9.0 to 3.9.2
  - commons-codec from 1.11 to 1.12
  - commons-text from 1.4 to 1.6
  - joda-time from 2.10 to 2.10.1

2.18.3
======
March 12, 2019
- Clear thread local settings before executing each feature
- Log non assertion exceptions as errors in console
- Update Scala from 2.12.7 to 2.12.8

2.18.2
======
February 17, 2019
- Fixed issue with `record.index`

2.18.1
======
February 17, 2019
- Honor hard, soft, and sustained assertion modes when processing data table records
- Add implicit `record.index` attribute to current data table record scope
  - `record.index` starts at 0 (whereas `record.number` starts at 1)

2.18.0
======
January 26, 2019
- Add support for hard, soft, and sustained assertion modes
  though new setting:
  - `gwen.assertion.mode`
    - Set to one of these values:
      - `hard` to halt execution on first assertion error and report failure (default)
      - `soft` to collect all assertion errors and continue execution whilst reporting them as failures
      - `sustained` to collect all assertion errors and continue execution without reporting them as failures

2.17.0
======
November 24, 2018
- Add global default and working Gwen properties. Properties are loaded in the following order of precedence:
  - System properties passed through `-D` Java command line option
  - `~/gwen.properties` file in root of user directory (user overrides)
  - Properties files passed into Gwen through the -p/--properties command line option
    - These are loaded in the order provided so that later ones override earlier ones
  - `./gwen.properties` file in working directory where Gwen is invoked (working defaults)
  - `~/.gwen/gwen.properties file` in `.gwen` folder of user home directory (global defaults)

2.16.3
======
November 17, 2018
- Add settings exception for raising invalid settings errors

2.16.2
======
October 6, 2018
- Use java futures instead of parallel collections to ensure that all cores are utilised at all times during parallel
  execution.
- Update scala from version 2.12.6 to 2.12.7

2.16.1
======
October 2, 2018
- Use `==` instead of `.equals` for string equality check in assertions (as per scala recommendation)

2.16.0
======
September 1, 2018
- Introduced @Synchronized annotation for StepDefs to support synchronized execution of certain steps.
  StepDefs having this annotation will have their steps executed by a single feature thread at a time in the case
  of parallel execution. This feature was requested through PR gwen-interpreter/gwen-web#63 raised by @rkevin99 and
  implemented in PR #42 in the core interpreter.
- Number all attachment items in reports

2.15.2
======
June 23, 2018
- Update scala from version 2.12.4 to 2.12.6
- Update gherkin from version 5.0.0 to 5.1.0
- Update scalaLogging from version 3.8.0 to 3.9.0
- Update jline from version 2.14.5 to 2.14.6
- Update commonsText from version 1.2 to 1.4
- Update jodaTime from version 2.9.9 to 2.10

2.15.1
======
June 19, 2018
- add tag filtering for Examples clauses

2.15.0
======
June 5, 2018
- Add support for loading settings from one comma separated setting and from many individual
  settings with arbitrarily named suffixes. If both forms are provided, then all values are merged.
  - For example, the following 3 settings..
      ```
      setting.values=value1,value2=2
      setting.values.0=value3
      setting.values.1=valueX=1,valueY=2
      ```
      ..will resolve to the following 4 values:
      - `value1`
      - `value2=2`
      - `value3`
      - `valueX=1,valueY=2`

2.14.0
======
May 13, 2018
- Add support for thread-local Gwen settings

2.13.2
======
May 9, 2018
- fix multi-valued settings

2.13.1
======
Apr 11, 2018
- trim extracted xpath nodes
- add some unit tests

2.13.0
======
Mar 24, 2018
- Contributions by @acuciureanu
  - PR #42 - Unit tests for SQL support
  - PR #43 - Refactoring of sbt build file
- Introduce template matching
  - The following DSL's where introduced
    - `<reference> <should|should not> match template "<expression>"`
    - `<reference> <should|should not> match template file "<filepath>"`
    - `<source> at <json path|xpath> "<path>" <should|should not> match template "<expression>"`
    - `<source> at <json path|xpath> "<path>" <should|should not> match template file "<filepath>"`
  - Template expressions may contain:
    - Extract attributes: `@{name}`
      - Extracts and binds the source value at `@{name}` in the template to the `name` attribute in the feature scope
    - Ignore values: `!{}`
      - Ignores the source value at `!{}` in the template
    - Inject values: `${name}`
      - Injects the value bound to the `name` attribute into `${name}` in the template

2.12.6
======
Mar 3, 2018
- Update library dependencies
  - scala-logging 3.7.2 to 3.8.0
  - commons-text 1.1 to 1.2
  - scalatest 3.0.4 to 3.0.5

2.12.5
======
Feb 24, 2018
- Fix issue gwen-interpreter/gwen-web#50 raised by @Rahul9844
  - Only log the visible environment bindings (global or global+scoped) on failure

2.12.4
======
Feb 5, 2008
- Fix StepDef parameter matching
- Fix issue gwen-interpreter/gwen-web#48 raised by @Rahul9844: report count is incorrect in case of scenario outline

2.12.3
======
Feb 2, 2018
- Fix issue with masking underlying errors

2.12.2
======
Jan 23, 2018
- Fix issue gwen-interpreter/gwen-web#46 raised by @Rahul9844: infinite recursion error when calling a step that
  - expects a data table with no data table followed by another call with a data table

2.12.1
======
Jan 22, 2018
- Improved error handling for Gherkin syntax errors
- Suppressed stack trace of errors handled by Gwen

2.12.0
======
Jan 15, 2018
- Add support for loading multi valued settings from single setting contain CSV or name-value pairs or multiple
  individual settings with the same prefixed and different suffixed name. If both forms are provided, then all values
  are merged.
  - Example:
    - CSV
        ```
        setting.values=value1=1,value2=2
        ```
    - Prefix + suffix
        ```
        setting.value3=3
        setting.value4=4
        ```

2.11.4
======
Jan 9, 2018
- Fix issue gwen-interpreter/gwen-web#45 raised by @ketu4u2010: Gwen fails to handle DSL keywords in string literals

2.11.3
======
Dec 23, 2017
- Fix issue #40 reopened by @Rahul9844: support empty StepDef params in any position

2.11.2
======
Dec 21, 2017
- Fix issue #40 raised by @Rahul9844: support empty StepDef params

2.11.1
======
Nov 4, 2017
- Update scala from 2.12.3 to 2.12.4
- Update gherkin from 4.1.3 to 5.0.0
- Update scopt from 3.6.0 to 3.7.0
- Update slf4j-log4j from 1.7.22 to 1.7.25
- Update scala-logging from 3.5.0 to 3.7.2
- Update jline from 2.14.2 to 2.14.5
- Update commons-codec from 1.10 to 1.11
- Update scala-csv from 1.3.4 to 1.3.5
- Update json-path from 2.2.0 to 2.4.0
- Update joda-time from 2.9.7 to 2.9.9

2.11.0
======
Sep 26, 2017
- <step> for each <entry> in <source> delimited by "<delimiter>"
   - Calls <step> for each string entry in <source> text delimited by some value
- Refactored attachments handling

2.10.1
======
Sep 21, 2017
- Improved error handling for @Examples tag

2.10.0
======
Sep 19, 2017
- Allow attributes in scoped data bindings to be overridden with blanks.
- Add new DSLs
  - I capture <attribute> by javascript "<expression>"
    - Eagerly captures the result of a javascript expression
  - <step> if <condition>
    - Calls <step> if a javascript predicate <condition> returns true (skips it otherwise)
  - Feature request #34 - SQL insert, update, and delete support
    - I update the <dbName> database by sql "<updateSmt>"
      - Runs an insert, update, or delete statement on a database
      - Number of rows affected accessible as attribute named '<dbName> rows affected'
- Make current record of data feeds available through 'data record number' attribute
- Make current record of for-each iteration available through '<element name> number' attribute
- Make current record of repeat-until iteration available through '<element name> iteration' attribute
- Fix error reporting for priority steps
- Better error reporting for
  - nested settings properties that fail to resolve at load time
  - javascript errors
- Implement #36 - access feature file name and scenario name
- Allow override when using the following DSL to set a property value:
  - my <name> <property|setting> <is|will be> "<value>"
- Add interpolation for filepath in @Examples tag

2.9.2
=====
Sep 1, 2017
- If no elements are found by for-each step, then set status to Passed instead of Skipped
  and display '-- none found --' in report line.

2.9.1
=====
Aug 31, 2017
- Allow dry run in REPL mode
- Check sql db properties on dry run
- ensure that repeat while/until steps fail correctly if the terminating condition is not satisfied before timeout
- Use filename as hyperlink in HTML report summary line if feature has no name

2.9.0
======
Aug 23, 2017
- Update Scala from 2.12.1 to 2.12.3
- Update Gherkin from 4.0.0 to 4.1.3
- Update Scopt from 3.5.0 to 3.6.0
- send errors to system error
- print REPL banner after meta load
- use warn log level for case where no features were provided
- Added support for binding SQL query using DocString syntax
  - <attribute> <is|will be> defined in the <dbName> database by sql
      """
      <selectStmt>
      """

2.8.0
=====
Jul 17, 2017
- Add support for DocStrings
- Evaluate all javascript expressions in anonymous function block and move to ScriptSupport class
- Add paste mode to REPL to support multiline step evaluation (steps with tables or docStrings)
- Add Gherkin language header to Gwen model

2.7.3
=====
Jul 11, 2017
- Fix fail handling where cause was not being reported correctly

2.7.2
=====
Jul 10, 2017
- Add syntax checking for DataTable tags
- Report error if Data Table tag is specified without StepDef tag
- Give steps that call other steps execution priority over all other steps or StepDefs that may have the same
  structure to ensure that they are evaluated and not raised as conflicts that require renaming.
- All data table cell references must be include data record index unless in foreach step

2.7.1
=====
Jul 8, 2017
- Renamed JS methods for consistency
- Changed dry run values for consistency

2.7.0
=====
Jul 7, 2017
- PR gwen-interpreter/gwen#32 - Add support for Gherkin data tables (horizontal, vertical, and matrix forms)
- Log the results of bound value lookups at debug level
- Refactor of code to make dry run more seamless

2.6.1
=====
Jun 27, 2017
- Correct id in example rows for scenario outlines in JSON reports
- Use StringEscapeUtils from Apache Commons to escape HTML, XML, and JSON in reports where necessary

2.6.0
=====
Jun 25, 2017
- Add cucumber compliant JSON output reports
  - json -f/--formats option
  - evaluated scenario outlines are expanded in the report (and not expanded if not evaluated)
- Expand evaluated scenario outlines in JUnit-XML reports (and do not expanded if not evaluated)
- Capture location of all gherkin nodes instead of just steps only
- Add support for binding closure functions to data scopes

2.5.0
=====
Jun 9, 2017
- Make string interpolation work with multi-line strings (use DOTALL mode in regex matcher)
- Introduce Java Scripting API (JSR 223) to support JavaScript evaluation in non web engines
- Merge common steps into default engine support class so other engines can easily inherit them

2.4.1
=====
Jun 1, 2017
- Make env REPL output more compact and readable
- Remove json-play dependency

2.4.0
=====
May 30, 2017
- Enable cntl-d in REPL for exit (issue #31 raised by @asgillet)

2.3.1
=====
May 20, 2017
- Add findEntries function to scoped data stack to enable finding entries by predicate

2.3.0
=====
Apr 11, 2017
- Add cache in feature scope for storing temporary objects (non string values)
- Add support for sourcing examples tables from CSV files in scenario outlines
- Add settings for enabling or disabling auto meta and CSV data file discovery
  - gwen.auto.discover.meta (true to enable auto meta discovery, false to disable, default is true for enabled)
  - gwen.auto.discover.data.csv (true to enable auto CSV data discovery, false to disable, default is true for enabled)

2.2.1
=====
Mar 31, 2017
- Only generate slideshow in report if screen shot capture is enabled

2.2.0
=====
Mar 12, 2017
- Added support for scenario outlines (see PR #29)
  - You can use them inline or as StepDefs
  - Examples records in outlines are expanded into scenarios during the normalisation phase
  - Each example record is a hyperlink in the HTML report that expands the scenario when clicked
- Escape description lines in HTML report

2.1.0
=====
Feb 10, 2017
- Added support for binding SQL query results to attributes
- Introduced GWEN_CLASSPATH environment variable for adding external JARs to Gwen classpath

2.0.0
=====
Jan 20, 2017
- Update to Java 8 (Java 7 no longer supported)
- Update from Scala 2.11.8 to 2.12.1
- Updated following dependencies
  - json-play from 2.3.9 to 2.6.0-M1
  - scopt from 3.3.0 to 3.5.0
  - slf4j-log4j12 from 1.7.7 to 1.7.22
  - jline from 2.13 to 2.14.2
  - scala-csv from 1.2.2 to 1.3.4
  - scala-test from 2.2.4 to 3.0.1
- Added dependencies
  - joda-time 2.9.7
  - scala-logging 3.5.0
- Removed dependencies
  - scala-logging-slf4j 2.1.2
  
1.4.3
=====
Nov 24, 2016, 9:43 AM GMT+10 (AEDT)
- Fixed issue with junit reports that caused an exception to be thrown when
  the feature file being reported on is in the top level working directory.
- Move generic compare logic into core environment context
- Mix XPath, Regex, and JSON support into core environment context
    
1.4.2
=====
Oct 11, 2016, 9:16 PM GMT+10 (AEDT)
- Fixed play function in modal popup slideshow. Solution was to:
  - add `height="100%"` to the slideshow image tag
  - if the 1st frame is displayed then point the reel control to the last frame 
    and immediately back to 1st frame before triggering play

1.4.1
=====
Sep 14, 2016, 12:42 PM GMT+10 (AEST)
- Fix analytics and timings in reports
- Suppress hyperlink for 'Loaded' status in reports

1.4.0
=====
Sep 12, 2016, 10:37 PM GMT+10 (AEST)
- Include total elapsed time at the top of all reports
- Include start and finish times at the top of all reports
- Make failed status in detail report a hyperlink to first failed scenario
- Enhancement #26: meta imports 
  - to allow fine grained and explicit control over how meta is loaded
- Internally store tags in list instead of set
- Display elapsed time on report summary lines
- Do not auto discover CSV files below feature directory
- Do not treat embedded '+' literals in strings as concatenation operator
- Use flash scope to track changes made to global attributes in local scopes
- wrap long text in reports
- store atts as list of nvp tuples instaed of json
- update gherkin parser from v3.1.2 to v4.0.0
- improved stepdef lookup performance (use lazy iterator)

1.3.4
=====
Aug 17, 2016, 8:32 PM GMT+10 (AEST)
- Report ambiguous stepdef lookup errors instead of exiting interpreter
- Raise invalid property error if a property without a key is found in a 
  properties file

1.3.3
=====
Jul 22, 2016, 11:48 AM GMT+10 (AEST)
- Expose duration formatter in Predefs object
- Preserve order of fields when reading CSV data
- Do not evaluate StepDef if calling step fails interpolation

1.3.2
=====
Jul 18, 2016, 8:11 PM GMT+10 (AEST)
- Fix version hyperlink in report 
- Update scala version from 2.11.7 to 2.11.8

1.3.1
=====
Jul 15, 2016, 11:10 PM GMT+10 (AEST)
- Wrap list of meta that is displayed in HTML detail reports with a 
  collapsable container that is hidden by default and can be expanded when 
  user clicks the 'no of meta files' hyperlink.
- Link version number in report to release notes

1.3.0
=====
Jun 21, 2016, 7:09 PM GMT+10 (AEST)
- User request #21
  - Implemented ability to discover multiple meta files in directories
    instead of just one
- Fix issue #23 
  - Raise ambigious error if a step resolves to more than one StepDef at runtime
- Fix issue #24
  - Change stepdef parameter interpolation for dry run mode so that 
    `$<name>` becomes `$[param:name]` (otherwise it forever recurses)
- Implement enhancement #25
  - Add support for passing directories to the `-m/--meta` option instead of 
    just files. All meta files within a specified directory will be recursively 
    loaded.
    
1.2.1
=====
May 24, 2016, 7.23 PM GMT+10 (AEST)
- Issue gwen-interpreter/gwen-web#24 
    Fixed tag filtering to accept tagged features and scenarios that have at 
    least one specified include tag and exclude all specified exclude tags. The 
    specified include and exclude tags are now partitioned and evaluated 
    separately (as per above) instead of being logically ANDed together from 
    left to right.
- Only dump environment on failure when in batch mode

1.2.0
=====
Apr 12, 2016, 10.01 PM GMT+10 (AEST)
- Added JSON path matching support using library: https://github.com/jayway/JsonPath

1.1.2
=====
Mar 30, 2016, 1:23 AM GMT+11 (AEDT)
- Prefix all attachment filenames with the sequence counter number

1.1.1
=====
Mar 6, 2016, 10:08 PM GMT+11 (AEDT)
- Return exit code zero when exiting REPL if no feature or meta files 
  were passed in.

1.1.0
=====
Feb 29, 2016, 8:50 PM GMT+11 (AEDT)
- Added support for configuring a ramp up interval (in seconds) for 
  staggered parallel execution ~ for user request issue #18. The 
  interval can be set through the `gwen.rampup.interval.seconds` setting
  This setting is only applicable for parallel execution mode. If it is 
  not set or is set to zero, then no staggering will occur (as per default 
  behavior). 
- Added new `gwen.report.suppress.meta` setting for controlling whether or 
  not meta reports should be generated with HTML reports (default value is 
  false). If you have a lot of meta, suppressing the meta reports can 
  save a lot of disk space. Enabling this setting does not suppress the 
  hyperlinked stepdefs in feature reports (they will always be rendered).

1.0.3
=====
Feb 11, 2016, 11:33 PM GMT+11 (AEDT)
- Do not allow StepDef names to start with keywords Given, When, Then, And or But
  - throw error and immediately abort execution when not satisfied

1.0.2
=====
Feb 4, 2016, 2:10 AM GMT+11 (AEDT)
- Fixed #17 - Map null values in scoped attributes to None in getOpt calls
 
1.0.1
=====
Jan 26, 2016, 11:00 PM GMT+11 (AEDT)
- Resolved #15 - Use compact report attachment names

1.0.0
=====
Jan 19, 2016, 11:24 PM GMT+11 (AEDT)
First gwen release.
- Uses:
  - io.cucumber gherkin3 v3.1.2
  - com.typesafe.play play-json v2.3.9
  - com.github.scopt scopt v3.3.0
  - com.typesafe.scala-logging scala-logging-slf4j v2.1.2
  - org.slf4j slf4j-log4j12 v1.7.7
  - jline jline v2.13
  - commons-codec commons-codec v1.10
  - com.github.tototoshi scala-csv v1.2.2
- Requires:
  - Java 7+
- Introduces:
  - Abstract evaluation engine
  - REPL console with commands:
    - help
    - env -a|-f "filter"
    - history
    - !# (history bang operator)
    - Given|When|Then|And|But <step> (evaluates a step)
    - exit|quit|bye
    - <tab> (for tab completion)
  - Batch execution
  - Evaluation reports (Rich HTML and JUnit-XML)
  - Slideshows in reports
  - Data scopes (global, local, and user defined scopes)
  - Meta features
  - Composable step definitions (@StepDef) with parameters
  - Serial and parallel execution
  - Feature and scenario level tags (annoations)
  - Static validation (--dry-run)
  - Data driven execution (csv data feeds)
  - System process calls
  - Fail fast options
  - Hybrid engine support   
  - String interpolation
  - User level properties and meta overrides
  - @Ignore tag
  - Base64 encoding and decoding
  - XML matching using XPath expressions
  - Configuration settings:
    - gwen.feature.failfast
    - gwen.feature.failfast.exit
    - gwen.report.slideshow.framespersecond
    - gwen.report.overwrite
    - log4j.configuration
- Usage and options:
```
Usage: install-dir/bin/gwen.sh|gwen.bat [options] [<features>]

  [options]
  --version
        Prints the implementation version
  --help
        Prints this usage text
  -b | --batch
        Batch/server mode
  -| | --parallel
        Parallel batch execution mode)
  -p <properties files> | --properties <properties files>
        Comma separated list of properties file paths
  -r <report directory> | --report <report directory>
        Evaluation report output directory
  -f <formats> | --formats <formats>
        Comma separated list of report formats to produce
         - Supported formats include: html,junit (default is html)
  -t <tags> | --tags <tags>
        Comma separated list of @include or ~@exclude tags
  -n | --dry-run
        Do not evaluate steps on engine (validate for correctness only)
  -i <input data file> | --input-data <input data file>
        Input data (CSV file with column headers)
  -m <meta files> | --meta <meta files>
        Comma separated list of meta file paths

  [<features>]
       Space separated list of feature files and/or directory paths
```
