2
0
mirror of https://github.com/boostorg/parser.git synced 2026-01-21 05:02:14 +00:00
Commit Graph

249 Commits

Author SHA1 Message Date
Zach Laine
6ab2a9b6a4 Fix the parsing of attributes into nested aggregate types.
Fixes #50.
2024-01-07 00:44:21 -06:00
Zach Laine
6f06bc4189 Add no_case[] docs. 2024-01-06 02:36:26 -06:00
Zach Laine
2b0053bf83 Add no_case[] directive, and associated changes to char, string, and boolean
parsers to make it work; uses the recently-added Unicode case-folding
operation.  Needs docs.

Fixes #44.
2024-01-06 01:01:48 -06:00
Zach Laine
f34f096c66 Add logic to repeat_parser analogous to the logic in seq_parser, to enable
implicit tuple <-> struct conversions.

Fixes #47.
2024-01-04 18:38:44 -06:00
Zach Laine
c37274c9a5 Fix broken build. 2024-01-04 02:40:33 -06:00
Zach Laine
d0fe18b61d Add single-code point Unicode case folding function; data and tests are
generated from CaseFolding.txt.

Partially addressed #44.
2024-01-04 02:26:36 -06:00
Zach Laine
d60d33e40b Finish implementing support for parsing into structs as if they were tuples.
This makes it possible to map from sequence parsers onto structs with no
semantic actions.  Also, add a doc section describing how parsing structs
works (including a couple of short example programs).

Fixes #45.
Partially addresses #28.
2024-01-03 23:24:37 -06:00
Zach Laine
7921f15ef8 Cruft removal. 2024-01-03 16:55:13 -06:00
Zach Laine
8bad1f2963 detail::aggregate_to_tuple() -> detail::tie_aggregate(), and change
detail::tie_aggregate() to return a tuple of references.

Partially addresses #28.
2024-01-03 02:28:10 -06:00
Zach Laine
0e78ea2d26 Remove the T >> T -> std::vector<T> attribute combining rule from seq_parser. 2024-01-03 02:04:04 -06:00
Zach Laine
7883b8ed1e Update docs to reflect the new detail::sequence_of<T> semantics (std::string
for sequence of char, std::vector<T> for everything else).  Also, update one
of the examples to match the associated test code.

Partially addresses #36.
2024-01-03 01:37:07 -06:00
Zach Laine
f08255cf94 Use a tuple instead of a pair in seq_parser::{make_temp_result,combine}. Add a
third tuple to the output of make_temp_result; this tuple is true/false values
indicating whether this parser's attribute was merged with an adjacent
parser's container of attributes of the same type.

Fixes #36.
2024-01-02 17:58:03 -06:00
Zach Laine
2020e44fda Radically change the way that repeat_parser generates a sequence of
attributes.  It now produces std::string when Attribute is char, and
std::vector<Attribute> otherwise (except for nope special-casing of course).

Partial fix for #36.
2024-01-02 17:57:46 -06:00
Zach Laine
24d18b4eaf Remove the documentation section "An Odd Case", which was obviated by the
previous commit.  Also remove the test cases that exercised that case.
2024-01-01 15:30:45 -06:00
Zach Laine
d34d4b7e6a Remove the seq_parser C<T> >> C<T> -> C<T> collapsing rule. Add special logic
for recursive rules to make accumulating recursive parsers like
recursive_string_rule in the parser_rule test easier to write.
2024-01-01 15:29:45 -06:00
Zach Laine
f8fb63766e Fix aggr_tuple_assignment test for MSVC. 2023-12-30 15:24:04 -06:00
Zach Laine
fcb435df99 Add test for the struct <-> tuple assignment machinery; fix errors.
Partially addresses #28.
2023-12-30 04:12:05 -06:00
Zach Laine
88a965d9c5 Rename the {callback_,}parse() overloads that take an iterator/sentinel pair
to {callback,}prefix_parse().

Fixes #21.
2023-12-23 04:05:54 -06:00
Zach Laine
1bbad0a871 Address TODOs about the need to document an unexpected aspect of how out-param
attributes are assigned.
2023-12-16 16:37:06 -06:00
Zach Laine
449a964b23 Publicize the as_utfN and utfN_view templates/aliases in boost::parser, so
users can use them to drive Unicode-aware parsing.

Fixes #23.
2023-12-15 22:35:28 -06:00
Zach Laine
efaa7c8c08 Replace the half-assed subrange implementation in boost::parser with the more
robust one from boost::text.

Fixes #26.
2023-12-15 21:23:31 -06:00
Zach Laine
ef3c90b552 view -> subrange
Fixes #20.
2023-12-03 16:54:44 -06:00
Zach Laine
a33883d59b symbols::add -> symbols::insert_for_next_parse
Fixes #19.
2023-12-03 16:33:42 -06:00
Zach Laine
8f560956c4 Change the assumption in parser.hpp that a code point is a uint32_t; use
char32_t instead.

Fixes #18.
Fixes #22.
2023-12-03 16:10:25 -06:00
Zach Laine
72e5573505 Replace use of is_integral with parsable_code_unit, which is all the character
types.  Also slightly simplify the logic for parsable_code_unit.

Fixes #22.
2023-12-03 15:20:40 -06:00
Zach Laine
876056aa28 uint32_t -> char32_t in transcode_iterator. 2023-12-03 14:19:08 -06:00
Zach Laine
362542d688 Remove the char8_t-specific public concepts, and simplify code that was
previously the downstream use of those public concepts.
2023-12-03 13:40:50 -06:00
Zach Laine
ffe3c522b5 Change the concepts for utf{8,32}_code_unit to be char/char8_t and
wchar_t/char32_t, respectively.  Obvs, the wchar_t bit only applies to
non-MSVC.
2023-12-02 14:19:57 -06:00
Zach Laine
fb47fdc0f1 Make the configury simpler:
- Remove BOOST_PARSER_STANDALONE, and make that the default.  The bits of
Boost that we might use are used automatically when they're available (as
discovered via __has_include).

- Remove the non-essential uses of Boost from the examples.
2023-12-02 02:05:53 -06:00
Zach Laine
e9893e7979 C++17 Clang warning mitigation. 2023-11-25 17:25:18 -06:00
Zach Laine
2de63708cc Update Boost.Text to 1ff99f926f. 2022-08-21 18:32:05 -05:00
Zach Laine
c437e98985 Fix int literal/long long literal confusion in parser_api.cpp tst. 2022-04-10 22:12:04 -05:00
Zach Laine
65b9020ed4 Add missing include. 2022-04-08 17:47:40 -05:00
Zach Laine
095aa362d7 Fix Clang builds. 2020-09-21 17:11:25 -05:00
Zach Laine
25b99b53cd Change the CMake build mode when BUILD_WITHOUT_BOOST is defined not to find
nor include Boost at all.  Fix several problems that this brought out.
2020-09-20 17:32:23 -05:00
Zach Laine
895224b214 Convert from Boost.Hana to Hana lite, part 5: Make some small adjustments to
the tests to get them building when Hana is not used; disable building the
examples when Boost.Hana is not in use, so that they can keep using the much
nicer hana::tuple::operator[] instead of parser::get().

This completes the changes to make Hana optional.
2020-09-20 17:05:57 -05:00
Zach Laine
71c697d23d Convert from Boost.Hana to Hana lite, part 2: introduce a template aliases for
constants like llong; provide a tuple accessor get(); use these throughout the
code.

Also, adapt the code in detail/hl.hpp to work with hana::tuple and std::tuple.
2020-09-20 16:05:52 -05:00
Zach Laine
c1205a419d Convert from Boost.Hana to Hana lite, part 1: introduce a template alias for
tuple, and use it throughout the code.
2020-09-20 14:07:49 -05:00
Zach Laine
df8d20838e Create Boost.Hana lite. 2020-09-20 12:46:01 -05:00
Zach Laine
969de5c23d Move all the text and stl_interface internal header code into
boost::parser::detail namespace.
2020-09-20 03:23:23 -05:00
Zach Laine
5bed6f9776 Make dependency on Boost.Preprocessor optional. 2020-09-19 21:37:45 -05:00
Zach Laine
113270d6f6 Remove dependency on Boost.Any. 2020-09-19 20:43:12 -05:00
Zach Laine
1ed37641e9 Remove dependency on the Spirit headers, via extensive copy/pasta. 2020-09-19 19:55:52 -05:00
Zach Laine
b88e33cc88 Fix narrowing conversion error. 2020-09-10 00:15:42 -05:00
Zach Laine
d8a323a5fb Fix VC2019 test failures. 2020-09-09 23:42:04 -05:00
Zach Laine
3ac30663b4 Add support for C++17. 2020-09-09 02:45:19 -05:00
Zach Laine
93f4ab246a Add an empty-input test that covers every parser.
Fixes #1.
2020-09-09 02:45:17 -05:00
Zach Laine
32ebd38270 Exercise the sentinel code path for every parser; fix errors.
Fixes #3.
2020-09-09 02:45:17 -05:00
Zach Laine
19d441743a Fix the constraints on {callback_,}parse() when called with a pointer to a
null-terminated string.
2020-09-09 02:45:15 -05:00
Zach Laine
322bb32b2b Warning mitigation. 2020-09-06 14:44:49 -05:00