Blame doc/Changelog.md

Packit d0b620
# Changelog
Packit d0b620
Packit d0b620
## 2.7.0
Packit d0b620
Packit d0b620
Released 2018-07-31
Packit d0b620
Packit d0b620
* Added [`mmap_file<>`](Inputs-and-Parsing.md#file-input) support for Windows.
Packit d0b620
* Added [deduction guides](https://en.cppreference.com/w/cpp/language/class_template_argument_deduction) for the input classes when compiling with C++17.
Packit d0b620
Packit d0b620
## 2.6.1
Packit d0b620
Packit d0b620
Released 2018-07-22
Packit d0b620
Packit d0b620
* Fixed endianness detection in test program.
Packit d0b620
Packit d0b620
## 2.6.0
Packit d0b620
Packit d0b620
Released 2018-06-22
Packit d0b620
Packit d0b620
* Added [Conan](https://conan.io/) [packages](https://bintray.com/taocpp/public-conan/pegtl%3Ataocpp/).
Packit d0b620
* Fixed the UTF-8 decoder to no longer accept UTF-16 surrogates.
Packit d0b620
* Fixed the UTF-16 decoder to no longer accept UTF-16 unmatched surrogates.
Packit d0b620
* Fixed the UTF-32 "decoder" to no longer accept UTF-16 surrogates.
Packit d0b620
* Fixed `pegtl/contrib/unescape.hh` to no longer accept unmatched surrogates.
Packit d0b620
* Optimised convenience rule [`two`](Rule-Reference.md#two-c-).
Packit d0b620
* Added new convenience rule [`three`](Rule-Reference.md#three-c-).
Packit d0b620
Packit d0b620
## 2.5.2
Packit d0b620
Packit d0b620
Released 2018-05-31
Packit d0b620
Packit d0b620
* Fixed [`opt`](Rule-Reference.md#opt-r-) and [`until`](Rule-Reference.md#until-r-s-) to work as documented in some rare edge cases.
Packit d0b620
* Used [`opt_must`](Rule-Reference.md#opt_must-r-s-) and [`star_must`](Rule-Reference.md#star_must-r-s-) to optimise some included grammars.
Packit d0b620
Packit d0b620
## 2.5.1
Packit d0b620
Packit d0b620
Released 2018-05-14
Packit d0b620
Packit d0b620
* Added new convenience rule [`opt_must`](Rule-Reference.md#opt_must-r-s-).
Packit d0b620
* Optimised convenience rule [`if_must`](Rule-Reference.md#if_must-r-s-).
Packit d0b620
* Fixed examples to compile with Visual Studio and MinGW.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with GCC 8.
Packit d0b620
Packit d0b620
## 2.5.0
Packit d0b620
Packit d0b620
Released 2018-05-01
Packit d0b620
Packit d0b620
* Added rules to match Unicode properties via [ICU](http://site.icu-project.org) to contrib.
Packit d0b620
* Improved the [Parse Tree / AST interface](Parse-Tree.md).
Packit d0b620
* Fixed parse tree node generation to correctly remove intermediate nodes.
Packit d0b620
* Added big- and little-endian support to the UTF-16 and UTF-32 rules.
Packit d0b620
* Added rules for UINT-8 and big- and little-endian UINT-16, UINT-32 and UINT-64.
Packit d0b620
* Added function to `memory_input<>` to obtain the line around a position.
Packit d0b620
* Added function to `memory_input<>` to start again from the beginning.
Packit d0b620
* Added example for Python-style indentation-aware grammars.
Packit d0b620
* Added examples for regular, context-free, and context-sensitive grammars.
Packit d0b620
* Added example for how to parse with a symbol table.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang 6.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang's `-fms-extensions`.
Packit d0b620
* Fixed build with Clang when `-fms-extensions` is used (`clang-cl`).
Packit d0b620
Packit d0b620
## 2.4.0
Packit d0b620
Packit d0b620
Released 2018-02-17
Packit d0b620
Packit d0b620
* Improved and documented the [Parse Tree / AST support](Parse-Tree.md).
Packit d0b620
* Changed prefix of all macros from `TAOCPP_PEGTL_` to `TAO_PEGTL_`. Compatibility macros with the old names are provided, they will be removed in version 3.0.
Packit d0b620
* Added a deleted overload to prevent creating a `memory_input<>` from a temporary `std::string`.
Packit d0b620
Packit d0b620
## 2.3.4
Packit d0b620
Packit d0b620
Released 2018-02-08
Packit d0b620
Packit d0b620
* Fixed build on older systems where `O_CLOEXEC` is not available.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Android 6.0 and 7.0.
Packit d0b620
Packit d0b620
## 2.3.3
Packit d0b620
Packit d0b620
Released 2018-01-01
Packit d0b620
Packit d0b620
* Added more `noexcept`-specifications.
Packit d0b620
* Fixed most `clang-tidy`-issues.
Packit d0b620
Packit d0b620
## 2.3.2
Packit d0b620
Packit d0b620
Released 2017-12-16
Packit d0b620
Packit d0b620
* Worked around a Visual Studio 15.5 bug.
Packit d0b620
Packit d0b620
## 2.3.1
Packit d0b620
Packit d0b620
Released 2017-12-14
Packit d0b620
Packit d0b620
* Fixed linkage of `tao::pegtl::internal::file_open`.
Packit d0b620
* Improved error message for missing `source` parameter of `string_input<>`.
Packit d0b620
Packit d0b620
## 2.3.0
Packit d0b620
Packit d0b620
Released 2017-12-11
Packit d0b620
Packit d0b620
* Added constructor to `read_input<>` that accepts a `FILE*`, see issue [#78](https://github.com/taocpp/PEGTL/issues/78).
Packit d0b620
* Enhanced [`apply`](Rule-Reference.md#apply-a-), [`apply0`](Rule-Reference.md#apply0-a-) and [`if_apply`](Rule-Reference.md#if_apply-r-a-) to support `apply()`/`apply0()`-methods returning boolean values.
Packit d0b620
* Simplified implementation of [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp), the optional `Contents...` rules' `apply()`/`apply0()`-methods are now called with the original states.
Packit d0b620
* Fixed the tracer to work with `apply()`/`apply0()`-methods returning boolean values. (Thanks Joel Frederico)
Packit d0b620
* Fixed, simplified and improved [`examples/parse_tree.cpp`](Contrib-and-Examples.md#srcexamplepegtlparse_treecpp).
Packit d0b620
Packit d0b620
## 2.2.2
Packit d0b620
Packit d0b620
Released 2017-11-22
Packit d0b620
Packit d0b620
* Bumped version.
Packit d0b620
Packit d0b620
## 2.2.1
Packit d0b620
Packit d0b620
Released 2017-11-22
Packit d0b620
Packit d0b620
* Celebrating the PEGTL's 10th anniversary!
Packit d0b620
* Fixed missing call to the [control class'](Control-and-Debug.md#control-functions) `failure()`-method when a rule with an `apply()`-method with a boolean return type fails.
Packit d0b620
* Fixed string handling in [`examples/abnf2pegtl.cc`](Contrib-and-Examples.md#srcexamplepegtlabnf2pegtlcpp).
Packit d0b620
* Simplified/improved Android build.
Packit d0b620
Packit d0b620
## 2.2.0
Packit d0b620
Packit d0b620
Released 2017-09-24
Packit d0b620
Packit d0b620
* Added possibility for actions' `apply()`- or `apply0()`-methods to return a `bool` which is then used to determine overall success or failure of the rule to which such an action was attached.
Packit d0b620
* Added [`<tao/pegtl/contrib/parse_tree.hpp>`](Contrib-and-Examples.md#taopegtlcontribparse_treehpp) and the [`examples/parse_tree.cpp`](Contrib-and-Examples.md#srcexamplepegtlparse_treecpp) application that shows how to build a [parse tree](https://en.wikipedia.org/wiki/Parse_tree). The example goes beyond a traditional parse tree and demonstrates how to select which nodes to include in the parse tree and how to transform the nodes into an [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree)-like structure.
Packit d0b620
* Added `bom` rules for UTF-8, UTF-16 and UTF-32.
Packit d0b620
* Added some missing includes for `config.hpp`.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang 5.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Xcode 9.
Packit d0b620
Packit d0b620
## 2.1.4
Packit d0b620
Packit d0b620
Released 2017-06-27
Packit d0b620
Packit d0b620
* Fixed shadow warning.
Packit d0b620
Packit d0b620
## 2.1.3
Packit d0b620
Packit d0b620
Released 2017-06-27
Packit d0b620
Packit d0b620
* Fixed [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp) with optional parameters.
Packit d0b620
Packit d0b620
## 2.1.2
Packit d0b620
Packit d0b620
Released 2017-06-25
Packit d0b620
Packit d0b620
* Bumped version.
Packit d0b620
Packit d0b620
## 2.1.1
Packit d0b620
Packit d0b620
Released 2017-06-25
Packit d0b620
Packit d0b620
* Fixed build with MinGW on Windows.
Packit d0b620
* Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with MinGW.
Packit d0b620
Packit d0b620
## 2.1.0
Packit d0b620
Packit d0b620
Released 2017-06-23
Packit d0b620
Packit d0b620
* Added optional template parameters to [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp) for rules that the content must match.
Packit d0b620
* Added new contrib rules [`rep_one_min_max`](Contrib-and-Examples.md#taopegtlcontribrep_one_min_maxhpp) and `ellipsis`.
Packit d0b620
* Fixed broken [`TAOCPP_PEGTL_KEYWORD`](Rule-Reference.md#tao_pegtl_keyword--) macro.
Packit d0b620
* Fixed a bug in the contrib HTTP grammar which prevented it from parsing status lines in some cases.
Packit d0b620
* Fixed build with MinGW-w64 on Windows.
Packit d0b620
* Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with MinGW-w64.
Packit d0b620
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with GCC 7.
Packit d0b620
Packit d0b620
## 2.0.0
Packit d0b620
Packit d0b620
Released 2017-05-18
Packit d0b620
Packit d0b620
* Project
Packit d0b620
Packit d0b620
  * Migrated to ["The Art of C++"](https://github.com/taocpp).
Packit d0b620
  * A [**migration guide**](Migration-Guide.md#from-1y-to-2z) for porting applications from 1.y to 2.z is available.
Packit d0b620
  * Version 2.z can be installed and used in parallel to version 1.y of the PEGTL.
Packit d0b620
  * The semantics of all parsing rules and grammars is the same as for versions 1.y.
Packit d0b620
Packit d0b620
* Input Layer
Packit d0b620
Packit d0b620
  * Added support for custom [incremental input](Inputs-and-Parsing.md#incremental-input) readers.
Packit d0b620
  * Added support for parsing [C streams](Inputs-and-Parsing.md#stream-inputs), i.e. `std::FILE*`.
Packit d0b620
  * Added support for parsing [C++ streams](Inputs-and-Parsing.md#stream-inputs), i.e. `std::istream`.
Packit d0b620
  * Added support for different [EOL-styles](Inputs-and-Parsing.md#line-ending).
Packit d0b620
  * Renamed class `position_info` to `position`.
Packit d0b620
  * Added the byte position to input classes and `position`.
Packit d0b620
  * Added [fast parsing without line counting](Inputs-and-Parsing.md#tracking-mode) (except in errors).
Packit d0b620
  * Refactored the `input` class into multiple input classes.
Packit d0b620
  * Refactored the file parser classes into [input classes](Inputs-and-Parsing.md#file-input).
Packit d0b620
  * Refactored the handling of [nested parsing](Inputs-and-Parsing.md#nested-parsing).
Packit d0b620
  * Removed the `begin()` member from class `position`.
Packit d0b620
  * Removed most [parsing front-end functions](Inputs-and-Parsing.md#parse-function).
Packit d0b620
Packit d0b620
* Parsing Rules
Packit d0b620
Packit d0b620
  * Added combinator class [`minus`](Rule-Reference.md#minus-m-s-).
Packit d0b620
  * Added ASCII rule class [`keyword`](Rule-Reference.md#keyword-c--).
Packit d0b620
  * Added [`string`](Rule-Reference.md#string-c--1) rules for UTF-8, UTF-16 and UTF-32.
Packit d0b620
  * Added [`apply`](Rule-Reference.md#apply-a-), [`apply0`](Rule-Reference.md#apply0-a-) and [`if_apply`](Rule-Reference.md#if_apply-r-a-) rules for intrusive actions.
Packit d0b620
  * Added incremental input support rules [`discard`](Rule-Reference.md#discard) and [`require`](Rule-Reference.md#require-num-).
Packit d0b620
Packit d0b620
* String Macros
Packit d0b620
Packit d0b620
  * Renamed to [`TAOCPP_PEGTL_(I)STRING`](Rule-Reference.md#tao_pegtl_istring--).
Packit d0b620
  * Increased allowed string length to 512.
Packit d0b620
  * Allowed embedded null bytes.
Packit d0b620
  * Reduced template instantiation depth.
Packit d0b620
Packit d0b620
* Other Changes
Packit d0b620
Packit d0b620
  * Added `apply()` and `apply0()` methods to [control class](Control-and-Debug.md#control-functions).
Packit d0b620
  * Optimised superfluous input markers.
Packit d0b620
  * Allowed optimisation of [actions that do not need the input](Actions-and-States.md#apply0).
Packit d0b620
  * Replaced layered matching with superior Duseltronikâ„¢.
Packit d0b620
  * Reduced template instantiation depth.
Packit d0b620
  * Added support for [CMake](https://cmake.org/).
Packit d0b620
  * Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with Visual Studio 2015 and 2017.
Packit d0b620
  * Added automated testing with Android 5.1, NDK r10e.
Packit d0b620
Packit d0b620
## 1.3.1
Packit d0b620
Packit d0b620
Released 2016-04-06
Packit d0b620
Packit d0b620
* Fixed unit test to use `eol` instead of hard-coded line ending.
Packit d0b620
Packit d0b620
## 1.3.0
Packit d0b620
Packit d0b620
Released 2016-04-06
Packit d0b620
Packit d0b620
* Tentative Android compatibility.
Packit d0b620
* Fixed build with MinGW on Windows.
Packit d0b620
* Changed file reader to open files in binary mode.
Packit d0b620
* Changed `eol` and `eolf` to accept both Unix and MS-DOS line endings.
Packit d0b620
* Optimised bumping the input forward and removed little used bump function.
Packit d0b620
* Simplified grammar analysis algorithm (and more `analyze()` tests).
Packit d0b620
Packit d0b620
## 1.2.2
Packit d0b620
Packit d0b620
Released 2015-11-12
Packit d0b620
Packit d0b620
* Improved the JSON grammar and JSON string escaping.
Packit d0b620
* Added JSON test suite from http://json.org/JSON_checker/.
Packit d0b620
* Optimised bumping the input forward and string unescaping.
Packit d0b620
* Promoted `examples/json_changes.hh` to `pegtl/contrib/changes.hh`.
Packit d0b620
Packit d0b620
## 1.2.1
Packit d0b620
Packit d0b620
Released 2015-09-21
Packit d0b620
Packit d0b620
* Added `file_parser` as alias for `mmap_parser` or `read_parser` depending on availability of the former.
Packit d0b620
* Added Clang 3.7 to the automated tests.
Packit d0b620
* Added Mac OS X with Xcode 6 and Xcode 7 to the automated tests.
Packit d0b620
* Added coverage test and improved test coverage to 100%.
Packit d0b620
* Fixed state changing bug in `json_build_one` example.
Packit d0b620
Packit d0b620
## 1.2.0
Packit d0b620
Packit d0b620
Released 2015-08-23
Packit d0b620
Packit d0b620
* Added [`pegtl_string_t`](Rule-Reference.md#tao_pegtl_string--) and [`pegtl_istring_t`](Rule-Reference.md#tao_pegtl_istring--) to simplify string definitions as follows:
Packit d0b620
```c++
Packit d0b620
   pegtl::string< 'h', 'e', 'l', 'l', 'o' >  // Normal
Packit d0b620
   pegtl_string_t( "hello" )                 // New shortcut
Packit d0b620
```
Packit d0b620
* Added [`examples/abnf2pegtl.cc`](Contrib-and-Examples.md#srcexamplepegtlabnf2pegtlcpp) application that converts grammars based on [ABNF (RFC 5234)](https://tools.ietf.org/html/rfc5234) into a PEGTL C++ grammar.
Packit d0b620
* Added [`contrib/alphabet.hh`](Contrib-and-Examples.md#taopegtlcontribalphabethpp) with integer constants for alphabetic ASCII letters.
Packit d0b620
Packit d0b620
## 1.1.0
Packit d0b620
Packit d0b620
Released 2015-07-31
Packit d0b620
Packit d0b620
* Renamed namespace `pegtl::ucs4` to `pegtl::utf32` and generally adopted UTF-32 in all naming.
Packit d0b620
* Added experimental support for UTF-16 similar to the previously existing UTF-32 parsing rules.
Packit d0b620
* Added support for merging escaped UTF-16 surrogate pairs to `pegtl/contrib/unescape.hh`.
Packit d0b620
* Fixed incorrect handling of escaped UTF-16 surrogate pairs in the JSON examples.
Packit d0b620
* A [state](Rule-Reference.md#state-s-r-)'s `S::success()`-method can now have an extended signature to get access to the current `apply_mode`, *action*- and *control* class (template).
Packit d0b620
* The `contrib/raw_string` class template now calls `Action<raw_string<...>::content>::apply()` with the user's state(s).
Packit d0b620
Packit d0b620
## 1.0.0
Packit d0b620
Packit d0b620
Released 2015-03-29
Packit d0b620
Packit d0b620
Version 1.0.0 was a very large refactoring based on the previous years of experience.
Packit d0b620
The core design and approach were kept, but nearly all details of the implementation were changed, and some parts were added to, or removed from, the library.
Packit d0b620
Semantic versioning was introduced with version 1.0.0.
Packit d0b620
Packit d0b620
* Deprecated old site on Google code and published new version on GitHub.
Packit d0b620
* Removed the semi-automatic pretty-printing of grammar rules; now the class names are used, when possible demangled.
Packit d0b620
* Renamed rule classes with multiple words in their names to use underscores, e.g. `ifmust<>` is now `if_must<>`.
Packit d0b620
* Removed support for incremental/stream parsing to allow for some simplifications and optimisations (*reintroduced in 2.0.0*).
Packit d0b620
* Removed the rules `apply<>` and `if_apply<>` that were used to directly call actions from within the grammar (*reintroduced in 2.0.0*), and:
Packit d0b620
* Where the other method of attaching actions to rules in PEGTL 0.x required specialisation of a given class template `action<>`, in PEGTL 1.y the action class template can be chosen by the user and changed at any point in the grammar.
Packit d0b620
* As a side-effect there is a much cleaner way of enabling and disabling actions in a portion of the grammar.
Packit d0b620
* Actions now have access to the current position in the input, i.e. to the filename, and line and column number.
Packit d0b620
* Actions now receive a pointer to, and the size of, the matched portion of the input (previously a `std::string` with a copy of the matched data), therefore:
Packit d0b620
* ~~There is no distinction between actions that require access to the matched data and those that don't, furthermore~~:
Packit d0b620
* The object via which actions gain access to the matched data is similar to that which rules receive ~~so actions can easily invoke another grammar on the matched data.~~
Packit d0b620
* The `at<>` and `not_at<>` rules now call their subordinate rules with actions disabled.
Packit d0b620
* The variadic `states...` arguments that are passed through all rule invocations for use by the actions are *not* forwarded with `std::forward<>` anymore since it (usually) doesn't make much sense to move them, and accidentially moving multiple times was a possible error scenario.
Packit d0b620
* There are now five different `rep` rules for repeating a sequence of rules with more control over the acceptable or required number of repetitions.
Packit d0b620
* There are new rules `try_catch<>` and `try_catch_type<>` that convert global errors, i.e. exceptions, into local errors, i.e. a return value of `false`.
Packit d0b620
* Unified concept for actions and debug hooks, i.e. just like the actions are called from a class template that is passed into the top-level `parse()`-function, there is another class template that is called for debug/trace and error throwing purposes; both can be changed at any point within the grammar.
Packit d0b620
* A large under-the-hood reorganisation has the benefit of preventing actions from being invoked on rules that are implementation details of other rules, e.g. the `pad< Rule, Padding >` rule contains `star< Padding >` in its implementation, so a specialisation of the action-class-template for `star< Padding >` would be called within `pad<>`, even though the `star< Pad >` was not explicitly written by the user; in PEGTL 1.y these unintended action invocations no longer occur.
Packit d0b620
* Partial support for Unicode has been added in the form of some basic rules like `one<>` and `range<>` also being supplied in a UTF-8 (and experimental UTF-16 and UTF-32) aware version(s) that can correctly process arbitrary code points from `0` to `0x10ffff`.
Packit d0b620
* The supplied input classes work together with the supplied exception throwing to support better error locations when performing nested file parsing, i.e. a `parse_error` contains a vector of parse positions.
Packit d0b620
* Added a function to analyse a grammar for the presence of infinite loops, i.e. cycles in the rules that do not (necessarily) consume any input like left recursion.
Packit d0b620
* As actions are applied to a grammar in a non-invasive way, several common grammars were added to the PEGTL as documented in [Contrib and Examples](Contrib-and-Examples.md).
Packit d0b620
* The `list<>`-rule was replaced by a set of new list rules with different padding semantics.
Packit d0b620
* The `at_one<>` and other rules `foo` that are merely shortcuts for `at< foo >` were removed.
Packit d0b620
* The `if_then<>` rule was removed.
Packit d0b620
* The `error_mode` flag was removed.
Packit d0b620
* The semantics of the `must<>` rules was changed to convert local failure to global failure only for the immediate sub-rules of a `must<>` rule.
Packit d0b620
* The `parse` methods now return a `bool` and can also produce local failures. To obtain the previous behaviour of success-or-global-failure, the top-level grammar rule has to be wrapped in a `must<>`.
Packit d0b620
Packit d0b620
## 0.32
Packit d0b620
Packit d0b620
Released 2012-12
Packit d0b620
Packit d0b620
* Removed superfluous includes (issue 5 from Google code hosting).
Packit d0b620
* Fixed bug in `not_at` rule regarding wrong propagation of errors (issue 3 from Google code hosting).
Packit d0b620
Packit d0b620
## 0.31
Packit d0b620
Packit d0b620
Released 2011-02
Packit d0b620
Packit d0b620
* Fixed bug in `not_at` rule regarding wrong propagation of errors (issue 3 from Google code hosting).
Packit d0b620
Packit d0b620
## 0.30
Packit d0b620
Packit d0b620
* Fixed missing template arguments in the implementation of `smart_parse_string()`.
Packit d0b620
Packit d0b620
## 0.29
Packit d0b620
Packit d0b620
* Fixed broken convenience rules `space_until_eof` and `blank_until_eol`.
Packit d0b620
* Extended the included examples that show how to build parse trees etc.
Packit d0b620
Packit d0b620
## 0.28
Packit d0b620
Packit d0b620
* Optimised object file footprint of class `printer` and some related functions.
Packit d0b620
* Renamed class `rule_helper` to `rule_base` and `action_helper` to `action_base`.
Packit d0b620
Packit d0b620
## 0.27
Packit d0b620
Packit d0b620
* Changed the type of exceptions thrown by the library to `pegtl::parse_error`.
Packit d0b620
* Changed class `basic_debug` to only generate a grammar back-trace when a `pegtl::parse_error` is flying.
Packit d0b620
* Changed logging to use a virtual method on the debug class inherited from common debug base class.
Packit d0b620
* Removed all `*_parse_*_nothrow()` parse functions.
Packit d0b620
* Removed the `_throws` substring from all remaining parse functions and changed the return type to `void`.
Packit d0b620
* Added convenience classes `file_input`, `ascii_file_input` and `dummy_file_input` for custom parse functions.
Packit d0b620
Packit d0b620
## 0.26
Packit d0b620
Packit d0b620
* Changed pretty-printing of the `until` and `if...` rules (consistency).
Packit d0b620
* Changed pretty-printing of rules to use ":=" instead of "===" (conciseness).
Packit d0b620
* Renamed rule `action` to `ifapply` and removed rule `action_nth` (orthogonality).
Packit d0b620
* Renamed action `apply_nth` to `nth`, and renamed some other actions (consistency).
Packit d0b620
* Extended pretty-printing to the `apply` and `ifapply` rules (completeness).
Packit d0b620
Packit d0b620
The last of these changes effectively requires custom action classes to derive either from a valid rule class, or from the new class `pegtl::action_helper<>`, passing itself as template argument.
Packit d0b620
Packit d0b620
## 0.25
Packit d0b620
Packit d0b620
* Fixed and cleaned up the rule pretty-printer in many places (readability).
Packit d0b620
* Added new convenience rule `enclose`, useful for quoted strings (convenience).
Packit d0b620
* Added new rule `apply` to unconditionally apply an action with empty matched string (convenience).
Packit d0b620
* Added action argument to `list` rule and added action `nop` for use as default action (convenience).
Packit d0b620
Packit d0b620
## 0.24
Packit d0b620
Packit d0b620
* Fixed some bugs in the pretty-printer; still in the experimental phase (usability).
Packit d0b620
Packit d0b620
## 0.23
Packit d0b620
Packit d0b620
* Added new rules `padl` and `padr` (convenience).
Packit d0b620
* Added example for quoted strings with arbitrary unicode characters (documentation).
Packit d0b620
* Changed rule `pad` to not suppress the padding in diagnostic messages (consistency).
Packit d0b620
Packit d0b620
## 0.22
Packit d0b620
Packit d0b620
* Cleaned up the source to compile with `-std=c++0x -pedantic` (compliance).
Packit d0b620
* Cleaned out some superfluous compiler flags from the Makefile (minimalism).
Packit d0b620
* Changed the default compiler to `g++`, which can be overriden by `$CXX` (consistency).
Packit d0b620
* Cleaned up unittests for where `char` is signed but `-fno-strict-overflow` is not given (compliance).
Packit d0b620
* Removed `list/not_list/at_list/at_not_list`, but `one/not_one/at_one/at_not_one` are now variadic (orthogonality).
Packit d0b620
* Removed the redundant rules `space_star`, `space_plus`, `blank_star`, and `blank_plus` (minimalism).
Packit d0b620
* Added new rule class `list` (not to be confused with the old, very different, rule `list`) (convenience).
Packit d0b620
* Changed class `seq` to invoke the `marker` with a modified `Must` flag for single-rule sequences (performance).
Packit d0b620
* Changed rule class `until1` to be a specialisation of `until`, rather than have a different name (consistency).
Packit d0b620
* Changed around the order of the template arguments of the `until` rule (consistency and flexibility).
Packit d0b620
* Changed around the order of the template arguments of the `rep` rule and reduced to strict repeat (minimalism).
Packit d0b620
* Changed many rule classes from one template argument to variadic sequence of arguments (flexibility).
Packit d0b620
Packit d0b620
## 0.21
Packit d0b620
Packit d0b620
* Changed the pretty-printing of rules, this is work in progress (aesthetics).
Packit d0b620
* Fixed the exception that occurred when `mmap()`ing an empty file (correctness).
Packit d0b620
Packit d0b620
## 0.20
Packit d0b620
Packit d0b620
* Added the missing `pegtl.hh` header file to the release archive...
Packit d0b620
Packit d0b620
## 0.19
Packit d0b620
Packit d0b620
* Cleanly layered implementation of `action_nth` (flexibility).
Packit d0b620
* Renamed class `action_all` back to `action` (was better that way).
Packit d0b620
* Moved main `pegtl.hh` include file out of `pegtl` directory (simplicity).
Packit d0b620
* Renamed the rule method from `s_match` to `match` (readability).
Packit d0b620
* Renamed the action method from `matched` to `apply` (readability).
Packit d0b620
* Renamed the rule method from `s_insert` to `prepare` (consistency).
Packit d0b620
* Changed the input iterator classes to report byte offsets (consistency).
Packit d0b620
* Added rule and action class to match captured sub-expressions (experiment).
Packit d0b620
* Changed class `action` to invoke arbitrary many actions (succinctness).
Packit d0b620
* Changed classes `ifmust` and `ifthen` to accept arbitrary many 'then' rules (succinctness).
Packit d0b620
* Fixed potential dangling reference in helper class `names` (correctness).
Packit d0b620
Packit d0b620
## 0.18
Packit d0b620
Packit d0b620
* Added parser functions `parse_forward` for forward iterators (completeness).
Packit d0b620
* Renamed parser functions for input iterators to `parse_input` (consistency).
Packit d0b620
* Added parser functions `parse_file` for files, implemented with `mmap(2)` (necessity).
Packit d0b620
* Added initial support for customised logging of error messages (flexibility).
Packit d0b620
Packit d0b620
## 0.17
Packit d0b620
Packit d0b620
* Added support for ranges of input iterators with automatic minimal buffering (flexibility).
Packit d0b620
Packit d0b620
## 0.16
Packit d0b620
Packit d0b620
* Added class `action_nth` (flexibility).
Packit d0b620
* Renamed class `action` to `action_all` (consistency).
Packit d0b620
* Changed class `marker` to a nop when "must" is true (performance).
Packit d0b620
* Changed `dummy_debug` to interpret "must" tracking (consistency).
Packit d0b620
* Fixed typo in name of `PEGTL_IMPURE_OPTIMISATIONS` macro (correctness).
Packit d0b620
* Made the marker class a sub-class of the input class (simplicity).
Packit d0b620
* Renamed some of classes named `white`, `space`, or `blank` (consistency).
Packit d0b620
* Fixed some issues in the R6RS example (CFG to PEG mismatch, only first datum).
Packit d0b620
* Added missing template arguments to `smart_parse`-functions (correctness).
Packit d0b620
Packit d0b620
## 0.15
Packit d0b620
Packit d0b620
* Removed some small superfluous functions (less is more).
Packit d0b620
* Changed the "must" tracking from run-time to compile-time (better?).
Packit d0b620
Packit d0b620
## 0.14
Packit d0b620
Packit d0b620
* Optimised behaviour of `seq<>` and `string<>` (performance).
Packit d0b620
* Added detection of division-by-zero to calculator example.
Packit d0b620
* Removed data source debug tracking from the library (simplicity).
Packit d0b620
* Removed run-time limits on rule applications and nesting (simplicity).
Packit d0b620
* Disentangled a couple of header files (maintainability).
Packit d0b620
* Renamed class `iterator_input` to forward_input (consistency).
Packit d0b620
* Added class `string_input` to initialise forward_input from a string (convenience).
Packit d0b620
* Removed template argument Rule to action functor's `matched()` method (simplicity).
Packit d0b620
Packit d0b620
## 0.13
Packit d0b620
Packit d0b620
* Added more wrapper functions for parsing (convenience).
Packit d0b620
* Renamed existing wrapper functions for parsing (consistency).
Packit d0b620
* Added `rewind()` method to class `iterator_input` (indirect).
Packit d0b620
Packit d0b620
## 0.12
Packit d0b620
Packit d0b620
* Added more directory structure.
Packit d0b620
* Fixed compile-error in `sexpression.cc` (correctness).
Packit d0b620
Packit d0b620
## 0.11
Packit d0b620
Packit d0b620
* Fixed back-tracking in class `string` (correctness).
Packit d0b620
* Fixed order of operands in calculator example (correctness).
Packit d0b620
Packit d0b620
## 0.10
Packit d0b620
Packit d0b620
* Added Scheme R6RS grammar (example).
Packit d0b620
* Fixed behaviour at end-of-input (aesthetics).
Packit d0b620
* Fixed behaviour and use of class `position` (correctness).
Packit d0b620
* Changed to lazy initialisation of pretty-printer (performance).
Packit d0b620
* Changed the design of the input and parser classes (flexibility).
Packit d0b620
* Changed how expression rules provide their printer key (simplicity).
Packit d0b620
Packit d0b620
## 0.9
Packit d0b620
Packit d0b620
Released 2008
Packit d0b620
Packit d0b620
* First public release.
Packit d0b620
Packit d0b620
## History
Packit d0b620
Packit d0b620
Development of the PEGTL started in November 2007 as an experiment in C++0x.
Packit d0b620
It is based on ideas from the YARD library by Christopher Diggins.
Packit d0b620
Packit d0b620
Copyright (c) 2007-2018 Dr. Colin Hirsch and Daniel Frey