@@ -15,6 +15,9 @@ namespace cpp2 {
15
15
16
16
namespace regex {
17
17
18
+ template <typename CharT> using bstring = std::basic_string<CharT>;
19
+ template <typename CharT> using bview = std::basic_string_view<CharT>;
20
+
18
21
#line 38 "cpp2regex.h2"
19
22
template <typename Iter> class match_group ;
20
23
@@ -54,12 +57,59 @@ template<typename CharT, typename Inner> class negated_class_entry;
54
57
#line 211 "cpp2regex.h2"
55
58
template <typename CharT, string_util::fixed_string Name, typename Inner> class shorthand_class_entry ;
56
59
60
+ #line 220 "cpp2regex.h2"
61
+ template <typename CharT> using digits_class = named_class_entry<CharT," digits" ,range_class_entry<CharT,' 0' ,' 9' >>;
62
+ template <typename CharT> using lower_class = named_class_entry<CharT," lower" ,range_class_entry<CharT,' a' ,' z' >>;
63
+ template <typename CharT> using upper_class = named_class_entry<CharT," upper" ,range_class_entry<CharT,' A' ,' Z' >>;
64
+
65
+ #line 226 "cpp2regex.h2"
66
+ template <typename CharT> using alnum_class = named_class_entry<CharT," alnum" ,combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>,digits_class<CharT>>>;
67
+ template <typename CharT> using alpha_class = named_class_entry<CharT," alpha" ,combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>>>;
68
+ template <typename CharT> using ascii_class = named_class_entry<CharT," ascii" ,range_class_entry<CharT,' \x00 ' ,' \x7F ' >>;
69
+ template <typename CharT> using blank_class = named_class_entry<CharT," blank" ,list_class_entry<CharT,' ' ,' \t ' >>;
70
+ template <typename CharT> using cntrl_class = named_class_entry<CharT," cntrl" ,combined_class_entry<CharT,range_class_entry<CharT,' \x00 ' ,' \x1F ' >,single_class_entry<CharT,' \x7F ' >>>;
71
+ template <typename CharT> using graph_class = named_class_entry<CharT," graph" ,range_class_entry<CharT,' \x21 ' ,' \x7E ' >>;
72
+ template <typename CharT> using hor_space_class = named_class_entry<CharT," hspace" ,list_class_entry<CharT,' \t ' ,' ' >>;
73
+ template <typename CharT> using print_class = named_class_entry<CharT," print" ,range_class_entry<CharT,' \x20 ' ,' \x7E ' >>;
74
+ template <typename CharT> using punct_class = named_class_entry<CharT," punct" ,list_class_entry<CharT,' [' ,' !' ,' "' ,' #' ,' $' ,' %' ,' &' ,' \' ' ,' (' ,' )' ,' *' ,' +' ,' ,' ,' -' ,' .' ,' /' ,' :' ,' ;' ,' <' ,' =' ,' >' ,' ?' ,' @' ,' [' ,' \\ ' ,' ]' ,' ^' ,' _' ,' `' ,' {' ,' |' ,' }' ,' ~' ,' ]' >>;
75
+ template <typename CharT> using space_class = named_class_entry<CharT," space" ,list_class_entry<CharT,' ' ,' \t ' ,' \r ' ,' \n ' ,' \v ' ,' \f ' >>;
76
+ template <typename CharT> using ver_space_class = named_class_entry<CharT," vspace" ,list_class_entry<CharT,' \n ' ,' \v ' ,' \f ' ,' \r ' >>;
77
+ template <typename CharT> using word_class = named_class_entry<CharT," word" ,combined_class_entry<CharT,alnum_class<CharT>,single_class_entry<CharT,' _' >>>;
78
+ template <typename CharT> using xdigit_class = named_class_entry<CharT," xdigit" ,combined_class_entry<CharT,range_class_entry<CharT,' A' ,' F' >,range_class_entry<CharT,' a' ,' f' >,digits_class<CharT>>>;
79
+
80
+ #line 242 "cpp2regex.h2"
81
+ template <typename CharT> using short_digits_class = shorthand_class_entry<CharT," \\ d" ,digits_class<CharT>>;
82
+ template <typename CharT> using short_hor_space_class = shorthand_class_entry<CharT," \\ h" ,hor_space_class<CharT>>;
83
+ template <typename CharT> using short_space_class = shorthand_class_entry<CharT," \\ s" ,space_class<CharT>>;
84
+ template <typename CharT> using short_vert_space_class = shorthand_class_entry<CharT," \\ v" ,ver_space_class<CharT>>;
85
+ template <typename CharT> using short_word_class = shorthand_class_entry<CharT," \\ w" ,word_class<CharT>>;
86
+
87
+ template <typename CharT> using short_not_digits_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ D" ,digits_class<CharT>>>;
88
+ template <typename CharT> using short_not_hor_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ H" ,hor_space_class<CharT>>>;
89
+ template <typename CharT> using short_not_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ S" ,space_class<CharT>>>;
90
+ template <typename CharT> using short_not_vert_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ V" ,ver_space_class<CharT>>>;
91
+ template <typename CharT> using short_not_word_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ W" ,word_class<CharT>>>;
92
+
57
93
#line 259 "cpp2regex.h2"
58
94
template <typename CharT> class alternative_token_matcher ;
59
95
60
96
#line 337 "cpp2regex.h2"
61
97
template <typename CharT, bool negate, bool case_insensitive, typename ...List> class class_token_matcher ;
62
98
99
+ #line 397 "cpp2regex.h2"
100
+ template <typename CharT, bool case_insensitive> using named_class_no_new_line = class_token_matcher<CharT,true ,case_insensitive,single_class_entry<CharT,' \n ' >>;
101
+ template <typename CharT, bool case_insensitive> using named_class_digits = class_token_matcher<CharT,false ,case_insensitive,digits_class<CharT>>;
102
+ template <typename CharT, bool case_insensitive> using named_class_hor_space = class_token_matcher<CharT,false ,case_insensitive,hor_space_class<CharT>>;
103
+ template <typename CharT, bool case_insensitive> using named_class_space = class_token_matcher<CharT,false ,case_insensitive,space_class<CharT>>;
104
+ template <typename CharT, bool case_insensitive> using named_class_ver_space = class_token_matcher<CharT,false ,case_insensitive,ver_space_class<CharT>>;
105
+ template <typename CharT, bool case_insensitive> using named_class_word = class_token_matcher<CharT,false ,case_insensitive,word_class<CharT>>;
106
+
107
+ template <typename CharT, bool case_insensitive> using named_class_not_digits = class_token_matcher<CharT,true ,case_insensitive,digits_class<CharT>>;
108
+ template <typename CharT, bool case_insensitive> using named_class_not_hor_space = class_token_matcher<CharT,true ,case_insensitive,hor_space_class<CharT>>;
109
+ template <typename CharT, bool case_insensitive> using named_class_not_space = class_token_matcher<CharT,true ,case_insensitive,space_class<CharT>>;
110
+ template <typename CharT, bool case_insensitive> using named_class_not_ver_space = class_token_matcher<CharT,true ,case_insensitive,ver_space_class<CharT>>;
111
+ template <typename CharT, bool case_insensitive> using named_class_not_word = class_token_matcher<CharT,true ,case_insensitive,word_class<CharT>>;
112
+
63
113
#line 492 "cpp2regex.h2"
64
114
class range_flags ;
65
115
@@ -104,9 +154,7 @@ namespace cpp2 {
104
154
105
155
namespace regex {
106
156
107
- template <typename CharT> using bstring = std::basic_string<CharT>;
108
- template <typename CharT> using bview = std::basic_string_view<CharT>;
109
-
157
+ #line 29 "cpp2regex.h2"
110
158
// -----------------------------------------------------------------------
111
159
//
112
160
// Helper structures for the expression matching.
@@ -335,39 +383,14 @@ template<typename CharT, string_util::fixed_string Name, typename Inner> class s
335
383
#line 218 "cpp2regex.h2"
336
384
// Named basic character classes
337
385
//
338
- template <typename CharT> using digits_class = named_class_entry<CharT," digits" ,range_class_entry<CharT,' 0' ,' 9' >>;
339
- template <typename CharT> using lower_class = named_class_entry<CharT," lower" ,range_class_entry<CharT,' a' ,' z' >>;
340
- template <typename CharT> using upper_class = named_class_entry<CharT," upper" ,range_class_entry<CharT,' A' ,' Z' >>;
341
386
387
+ #line 224 "cpp2regex.h2"
342
388
// Named other classes
343
389
//
344
- template <typename CharT> using alnum_class = named_class_entry<CharT," alnum" ,combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>,digits_class<CharT>>>;
345
- template <typename CharT> using alpha_class = named_class_entry<CharT," alpha" ,combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>>>;
346
- template <typename CharT> using ascii_class = named_class_entry<CharT," ascii" ,range_class_entry<CharT,' \x00 ' ,' \x7F ' >>;
347
- template <typename CharT> using blank_class = named_class_entry<CharT," blank" ,list_class_entry<CharT,' ' ,' \t ' >>;
348
- template <typename CharT> using cntrl_class = named_class_entry<CharT," cntrl" ,combined_class_entry<CharT,range_class_entry<CharT,' \x00 ' ,' \x1F ' >,single_class_entry<CharT,' \x7F ' >>>;
349
- template <typename CharT> using graph_class = named_class_entry<CharT," graph" ,range_class_entry<CharT,' \x21 ' ,' \x7E ' >>;
350
- template <typename CharT> using hor_space_class = named_class_entry<CharT," hspace" ,list_class_entry<CharT,' \t ' ,' ' >>;
351
- template <typename CharT> using print_class = named_class_entry<CharT," print" ,range_class_entry<CharT,' \x20 ' ,' \x7E ' >>;
352
- template <typename CharT> using punct_class = named_class_entry<CharT," punct" ,list_class_entry<CharT,' [' ,' !' ,' "' ,' #' ,' $' ,' %' ,' &' ,' \' ' ,' (' ,' )' ,' *' ,' +' ,' ,' ,' -' ,' .' ,' /' ,' :' ,' ;' ,' <' ,' =' ,' >' ,' ?' ,' @' ,' [' ,' \\ ' ,' ]' ,' ^' ,' _' ,' `' ,' {' ,' |' ,' }' ,' ~' ,' ]' >>;
353
- template <typename CharT> using space_class = named_class_entry<CharT," space" ,list_class_entry<CharT,' ' ,' \t ' ,' \r ' ,' \n ' ,' \v ' ,' \f ' >>;
354
- template <typename CharT> using ver_space_class = named_class_entry<CharT," vspace" ,list_class_entry<CharT,' \n ' ,' \v ' ,' \f ' ,' \r ' >>;
355
- template <typename CharT> using word_class = named_class_entry<CharT," word" ,combined_class_entry<CharT,alnum_class<CharT>,single_class_entry<CharT,' _' >>>;
356
- template <typename CharT> using xdigit_class = named_class_entry<CharT," xdigit" ,combined_class_entry<CharT,range_class_entry<CharT,' A' ,' F' >,range_class_entry<CharT,' a' ,' f' >,digits_class<CharT>>>;
357
390
391
+ #line 240 "cpp2regex.h2"
358
392
// Shorthand class entries
359
393
//
360
- template <typename CharT> using short_digits_class = shorthand_class_entry<CharT," \\ d" ,digits_class<CharT>>;
361
- template <typename CharT> using short_hor_space_class = shorthand_class_entry<CharT," \\ h" ,hor_space_class<CharT>>;
362
- template <typename CharT> using short_space_class = shorthand_class_entry<CharT," \\ s" ,space_class<CharT>>;
363
- template <typename CharT> using short_vert_space_class = shorthand_class_entry<CharT," \\ v" ,ver_space_class<CharT>>;
364
- template <typename CharT> using short_word_class = shorthand_class_entry<CharT," \\ w" ,word_class<CharT>>;
365
-
366
- template <typename CharT> using short_not_digits_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ D" ,digits_class<CharT>>>;
367
- template <typename CharT> using short_not_hor_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ H" ,hor_space_class<CharT>>>;
368
- template <typename CharT> using short_not_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ S" ,space_class<CharT>>>;
369
- template <typename CharT> using short_not_vert_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ V" ,ver_space_class<CharT>>>;
370
- template <typename CharT> using short_not_word_class = negated_class_entry<CharT,shorthand_class_entry<CharT," \\ W" ,word_class<CharT>>>;
371
394
372
395
#line 255 "cpp2regex.h2"
373
396
// Regex syntax: | Example: ab|ba
@@ -459,18 +482,6 @@ template<typename CharT, bool negate, bool case_insensitive, typename ...List> c
459
482
#line 395 "cpp2regex.h2"
460
483
// Named short classes
461
484
//
462
- template <typename CharT, bool case_insensitive> using named_class_no_new_line = class_token_matcher<CharT,true ,case_insensitive,single_class_entry<CharT,' \n ' >>;
463
- template <typename CharT, bool case_insensitive> using named_class_digits = class_token_matcher<CharT,false ,case_insensitive,digits_class<CharT>>;
464
- template <typename CharT, bool case_insensitive> using named_class_hor_space = class_token_matcher<CharT,false ,case_insensitive,hor_space_class<CharT>>;
465
- template <typename CharT, bool case_insensitive> using named_class_space = class_token_matcher<CharT,false ,case_insensitive,space_class<CharT>>;
466
- template <typename CharT, bool case_insensitive> using named_class_ver_space = class_token_matcher<CharT,false ,case_insensitive,ver_space_class<CharT>>;
467
- template <typename CharT, bool case_insensitive> using named_class_word = class_token_matcher<CharT,false ,case_insensitive,word_class<CharT>>;
468
-
469
- template <typename CharT, bool case_insensitive> using named_class_not_digits = class_token_matcher<CharT,true ,case_insensitive,digits_class<CharT>>;
470
- template <typename CharT, bool case_insensitive> using named_class_not_hor_space = class_token_matcher<CharT,true ,case_insensitive,hor_space_class<CharT>>;
471
- template <typename CharT, bool case_insensitive> using named_class_not_space = class_token_matcher<CharT,true ,case_insensitive,space_class<CharT>>;
472
- template <typename CharT, bool case_insensitive> using named_class_not_ver_space = class_token_matcher<CharT,true ,case_insensitive,ver_space_class<CharT>>;
473
- template <typename CharT, bool case_insensitive> using named_class_not_word = class_token_matcher<CharT,true ,case_insensitive,word_class<CharT>>;
474
485
475
486
#line 411 "cpp2regex.h2"
476
487
// Regex syntax: \<number> Example: \1
@@ -504,9 +515,9 @@ template<typename CharT, bool positive> [[nodiscard]] auto lookahead_token_match
504
515
#line 491 "cpp2regex.h2"
505
516
// Options for range matching.
506
517
class range_flags {
507
- public: static const int not_greedy; // Try to take as few as possible.
508
- public: static const int greedy; // Try to take as many as possible.
509
- public: static const int possessive; // Do not give back after a greedy match. No backtracking.
518
+ public: // Try to take as few as possible.
519
+ public: // Try to take as many as possible.
520
+ public: // Do not give back after a greedy match. No backtracking.
510
521
511
522
public: range_flags() = default ;
512
523
public: range_flags(range_flags const &) = delete ; /* No 'that' constructor, suppress copy */
@@ -568,8 +579,8 @@ template<typename CharT, bool negate> [[nodiscard]] auto word_boundary_token_mat
568
579
// Regular expression implementation
569
580
template <typename CharT, typename matcher_wrapper> class regular_expression
570
581
{
571
- public: template < typename Iter> using matcher = matcher_wrapper_type<matcher_wrapper,Iter,CharT>; // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
572
- public: template < typename Iter> using context = matcher_context_type<matcher<Iter>>; // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
582
+ public: // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
583
+ public: // TODO: Remove when nested types are allowed: https://github.com/hsutter/cppfront/issues/727
573
584
574
585
public: template <typename Iter> class search_return
575
586
{
0 commit comments