| Home | Libraries | People | FAQ | More

### Spirit V2.2

##### What's changed in Spirit.Qi and Spirit.Karma from V2.1 (Boost V1.41.0) to V2.2 (Boost V1.42.0)

##### New Features

- Added `auto_` component in Spirit.Qi and Spirit.Karma, added API functions `qi::``create_parser` and `karma::``create_generator`.
- Added `auto_` based overloads for all API functions taking no attributes (see Qi API and Karma API).
- Added `karma::columns` directive.
- Added `karma::symbols<Attr, T>` generator.
- The Spirit.Qi customization point `traits::push_back_container` now returns a `bool` to report whether the item has been added to the container.
- Added an overload for `karma::maxwidth` directive allowing to specify an additional parameter (any compatible output iterator) receiving the 'overspilled' output (output not fitting into the maxwidth limit).
- It is now possible to use Phoenix expressions as Spirit.Karma attributes.
- Added `basic_istream_iterator<Char, Traits>` usable as an equivalent for `std::istream_iterator` except its a `ForwardIterator` allowing to parse directly from any `std::basic_istream`.
- Added `qi::``matches` directive.

##### Bug Fixes

- Fixed karma::alternatives to work with embedded containers of hold_any (i.e. constructs like `*stream | "empty"` (which fixes the Karma example basic_facilities.cpp).
- Fixed numeric Spirit.Karma generators for character types.
- Fixed `qi::repeat[]` for unused attributes.
- Fixed rare compilation problem in `karma::repeat[]`.
- Fixed sequences in Spirit.Qi and Spirit.Karma to compile properly if the attribute is a (STL) container of (STL) containers.
- Fixed a problem in `lex::token_def::what`.
- Fixed Spirit.Qi symbols not to match substrings anymore. Added `qi::symbols::prefix_find` to allow matching of (prefix-) substrings.
- Inherited parameters for rule's usually have to be wrapped in function objects (i.e. `phoenix::val`), for integral values this was not necessary. Now all string types can be passed without being wrapped as well (i.e. `std::string`, `char const*`, etc.).
- Added concept checks to all relevant Spirit.Qi API functions enforcing the iterator to be at least of the type `std::forward_iterator_tag`.
- Fixed the `qi::match` and `qi::phrase_match` set of API functions not to internally utilize a `std::stream_iterator` anymore as this iterator is of the type `std::input_iterator_tag` only, which is not sufficient for Spirit.Qi.