2
0
mirror of https://github.com/boostorg/parser.git synced 2026-01-27 19:12:13 +00:00
Commit Graph

336 Commits

Author SHA1 Message Date
Zach Laine
cced72dbcd std::{begin,end} -> detail::text::detail::{begin,end} 2024-01-15 23:09:00 -06:00
Zach Laine
92c16cbfae Add section about writing your own parsers.
Fixes #58.
2024-01-15 16:19:39 -06:00
Zach Laine
53e0f7c769 Fix misplaced #endif that broke most of our builds. 2024-01-14 20:15:31 -06:00
Zach Laine
d17db09303 Use the warning-provocation technique from boost/mpl/print.hpp to cause the
types to be printed in some places after a static_assert failure.

Partially addresses #56.
2024-01-14 18:32:35 -06:00
Zach Laine
b055b21f1f Address TODO about string_view_parser needing tests. 2024-01-14 17:41:38 -06:00
Zach Laine
bf06cfc57a Fix string_view_parser, broken by the most recent boost::text import. 2024-01-14 16:47:50 -06:00
Zach Laine
a956cd962e Comments on static_asserts to text in the static_asserts instead. 2024-01-14 16:43:58 -06:00
Zach Laine
92be502e79 Copy editing. 2024-01-14 16:18:19 -06:00
Zach Laine
02447e92a2 Remove template head from lambda, and just use auto param instead, to mollify
MSVC.
2024-01-14 04:54:32 -06:00
Zach Laine
93d3708010 Disable optional check on older GCCs. 2024-01-13 21:30:35 -06:00
Zach Laine
16cd1894e2 Work around GCC12 bug involving the use of declval. 2024-01-13 21:26:49 -06:00
Zach Laine
6a2a1229a4 GCC9 warning mitigation. 2024-01-13 21:16:24 -06:00
Zach Laine
1566dffe1f Fix GCC and Clang builds. 2024-01-13 21:11:43 -06:00
Zach Laine
251dcc9436 Implement the merge[] and separate[] directives that control attribute
generation.  Needs docs.

Fixes #55.
2024-01-13 20:57:01 -06:00
Zach Laine
cf9545fa7c Remove mooted TODOs. 2024-01-12 22:35:04 -06:00
Zach Laine
3e7812ebe5 Simplify detail::is_variant and remove enable_variant. Turns out
detail::is_variant_v is not actually used, except in one place in the printing
code, and it's not even essential there.
2024-01-12 21:45:39 -06:00
Zach Laine
69e4f47bff Work around the busted-ass static_asserting op<< in boost::optional by
recognizing all enabled optionals, and printing them the same as we do
std::optional.  Applied the same logic to variants too, for consistency.
2024-01-12 21:45:39 -06:00
Zach Laine
c8ce2cace5 Add a special seq_parser combining rule that makes a std::string ot of two
adjacent char/char32_t values.

Partially addresses #55.
2024-01-11 19:24:43 -06:00
Zach Laine
b6ffe5fbe3 Change detail::sequence_of and detail::container_and_value_type so that they
generate std::strings from repeated char32_ts and combine char32_ts with
adjacent strings.  Update docs accordingly.

Partially addresses #55.
2024-01-10 22:17:53 -06:00
Zach Laine
257dcd36aa Add a static_assert in seq_parser that indicates the most likely source of
compilation failure there -- attribute incompatibility.

Partially addresses #56.
2024-01-08 18:31:54 -06:00
Zach Laine
cd284572c9 Add support for parsing into attributes whose types are optionals or variants
other than the ones from std:: (e.g. boost::optional, boost::variant, and
boost::variant2::variant).

Fixes #53.
2024-01-07 20:44:34 -06:00
Zach Laine
4becbe34ad Fix infinite loop when handling an optional of sequence attribute type in
repeat_parser.
2024-01-07 19:46:43 -06:00
Zach Laine
745b1b151d Add a small example to the parser test that shows that you do not need Sprit
2's hold[] directve.  Fix an error exercised by the example.
2024-01-07 15:11:47 -06:00
Zach Laine
3ebbd9e08c Correct an error in repeat_parser's choice of attribute. Sometimes it is
necessary to use the value_type of the container out-param, rather than the
attribute generated by the subparser.

Fixes #52.
2024-01-07 12:29:23 -06:00
Zach Laine
9e374f8cc3 Flesh out support for parsing into non-sequence containers. 2024-01-07 00:44:21 -06:00
Zach Laine
6ab2a9b6a4 Fix the parsing of attributes into nested aggregate types.
Fixes #50.
2024-01-07 00:44:21 -06:00
Zach Laine
c7b9eb6eb5 Reimplement get() overloads as one publicly-facing function. 2024-01-06 14:21:07 -06:00
Zach Laine
e6cb3e4159 Add BOOST_PARSER_MAX_AGGREGATE_SIZE, to replace the hardcoded 50 in tuple.hpp.
Fixes #51.
2024-01-06 13:22:58 -06:00
Zach Laine
2e4154dcba Cruft removal. 2024-01-06 02:36:26 -06:00
Zach Laine
1e373378bd Assert when an rvalue reference is detected in the char_parser::operator()
overlaod that takes a range, to prevent dangling references.
2024-01-06 01:17:32 -06:00
Zach Laine
7a98202845 Address TODO about not using sizeof() to detect char32_t/single-byte input
value type.
2024-01-06 01:01:48 -06:00
Zach Laine
f1190f6f59 Grooming. 2024-01-06 01:01:48 -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
3b5ea8717c Lower the max number of supported struct elements from 100 to 50 so as not to
choke MSVC.
2024-01-04 19:26:47 -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
e10cc0619c Refactor detail::move_back() overloads to eliminate code duplication. 2024-01-04 17:58:57 -06:00
Zach Laine
e81035615b Fix MSVC builds -- std::array::begin() is not necessarily a pointer! 2024-01-04 08:53:06 -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
fcd3a9fc7d Gross hack to fix GCC < 12 builds.
Fixes #28.
2024-01-03 23:44:51 -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
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
0454d4dad0 Fix MSVC build. 2024-01-03 00:55:42 -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
e7daff5b26 Use std::move consistently when assigning/appending values. 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
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
dced620290 Remove mooted TODO. 2024-01-01 15:29:45 -06:00
Zach Laine
b02e9e32a6 Add preprocessor code from Boost.Describe instead of conditionally using
Boost.Preprocessor.  Thanks, Peter!

Fixes #32.
2023-12-30 17:00:23 -06:00