Skip to content

Commit ae16e6e

Browse files
committed
Merge branch 'master' into refactor_atom_characters
2 parents e2bba72 + f361124 commit ae16e6e

File tree

6 files changed

+93
-49
lines changed

6 files changed

+93
-49
lines changed

include/ctre/actions/capture.inc.hpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
#ifndef CTRE__ACTIONS__CAPTURE__HPP
22
#define CTRE__ACTIONS__CAPTURE__HPP
33

4+
// prepare_capture
5+
template <auto V, typename... Ts, size_t Counter> static constexpr auto apply(pcre::prepare_capture, ctll::term<V>, pcre_context<ctll::list<Ts...>, pcre_parameters<Counter>>) {
6+
return pcre_context{ctll::push_front(capture_id<Counter+1>(), ctll::list<Ts...>()), pcre_parameters<Counter+1>()};
7+
}
8+
9+
// reset_capture
10+
template <auto V, typename... Ts, size_t Id, size_t Counter> static constexpr auto apply(pcre::reset_capture, ctll::term<V>, pcre_context<ctll::list<capture_id<Id>, Ts...>, pcre_parameters<Counter>>) {
11+
return pcre_context{ctll::list<Ts...>(), pcre_parameters<Counter-1>()};
12+
}
13+
414
// capture
5-
template <auto V, typename A, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture, ctll::term<V>, pcre_context<ctll::list<A, Ts...>, pcre_parameters<Counter>>) {
6-
return pcre_context{ctll::push_front(capture<Counter+1, A>(), ctll::list<Ts...>()), pcre_parameters<Counter+1>()};
15+
template <auto V, typename A, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture, ctll::term<V>, pcre_context<ctll::list<A, capture_id<Id>, Ts...>, pcre_parameters<Counter>>) {
16+
return pcre_context{ctll::push_front(capture<Id, A>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
717
}
818
// capture (sequence)
9-
template <auto V, typename... Content, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture, ctll::term<V>, pcre_context<ctll::list<sequence<Content...>, Ts...>, pcre_parameters<Counter>>) {
10-
return pcre_context{ctll::push_front(capture<Counter+1, Content...>(), ctll::list<Ts...>()), pcre_parameters<Counter+1>()};
19+
template <auto V, typename... Content, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture, ctll::term<V>, pcre_context<ctll::list<sequence<Content...>, capture_id<Id>, Ts...>, pcre_parameters<Counter>>) {
20+
return pcre_context{ctll::push_front(capture<Id, Content...>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
1121
}
1222
// push_name
1323
template <auto V, typename... Ts, typename Parameters> static constexpr auto apply(pcre::push_name, ctll::term<V>, pcre_context<ctll::list<Ts...>, Parameters> subject) {
@@ -18,12 +28,12 @@ template <auto... Str, auto V, typename... Ts, typename Parameters> static const
1828
return pcre_context{ctll::push_front(id<Str..., V>(), ctll::list<Ts...>()), subject.parameters};
1929
}
2030
// capture with name
21-
template <auto... Str, auto V, typename A, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture_with_name, ctll::term<V>, pcre_context<ctll::list<A, id<Str...>, Ts...>, pcre_parameters<Counter>>) {
22-
return pcre_context{ctll::push_front(capture_with_name<Counter+1, id<Str...>, A>(), ctll::list<Ts...>()), pcre_parameters<Counter+1>()};
31+
template <auto... Str, auto V, typename A, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture_with_name, ctll::term<V>, pcre_context<ctll::list<A, id<Str...>, capture_id<Id>, Ts...>, pcre_parameters<Counter>>) {
32+
return pcre_context{ctll::push_front(capture_with_name<Id, id<Str...>, A>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
2333
}
2434
// capture with name (sequence)
25-
template <auto... Str, auto V, typename... Content, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture_with_name, ctll::term<V>, pcre_context<ctll::list<sequence<Content...>, id<Str...>, Ts...>, pcre_parameters<Counter>>) {
26-
return pcre_context{ctll::push_front(capture_with_name<Counter+1, id<Str...>, Content...>(), ctll::list<Ts...>()), pcre_parameters<Counter+1>()};
35+
template <auto... Str, auto V, typename... Content, size_t Id, typename... Ts, size_t Counter> static constexpr auto apply(pcre::make_capture_with_name, ctll::term<V>, pcre_context<ctll::list<sequence<Content...>, id<Str...>, capture_id<Id>, Ts...>, pcre_parameters<Counter>>) {
36+
return pcre_context{ctll::push_front(capture_with_name<Id, id<Str...>, Content...>(), ctll::list<Ts...>()), pcre_parameters<Counter>()};
2737
}
2838

2939

include/ctre/pcre.gram

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ atom_repeat-><atom>,<repeat>
4444

4545
atom_repeat_in_capture-><atom_in_capture>,<repeat>
4646

47-
atom-><character>|<asserts>|<block>|<character_class>
48-
atom_in_capture-><character_in_capture>|<asserts>|<block>|<character_class>
47+
atom-><character>|<asserts>|<preblock>|<character_class>
48+
atom_in_capture-><character_in_capture>|<asserts>|<preblock>|<character_class>
4949

5050
repeat->epsilon | plus,[repeat_plus],<mod>|star,[repeat_star],<mod>|questionmark,[make_optional],<mod_opt>
5151
repeat->copen,<number>,[repeat_exactly],cclose
@@ -57,13 +57,18 @@ mod_opt->epsilon | questionmark,[make_lazy]
5757
number->num,[create_number],<number2>
5858
number2->epsilon | num,[push_number],<number2>
5959

60-
block->open,<content_in_capture>,[make_capture],close | open,questionmark,colon,<content_in_capture>,close
61-
block->open,questionmark,angle_open,<block_name>,angle_close,<content_in_capture>,[make_capture_with_name],close
60+
preblock->open,[prepare_capture],<block>
61+
62+
block-><content_in_capture>,[make_capture],close
63+
block->questionmark,[reset_capture],colon,<content_in_capture>,close
64+
block->questionmark,angle_open,<block_name>,angle_close,<content_in_capture>,[make_capture_with_name],close
65+
6266
block_name->alpha_characters,[push_name],<block_name2>
6367
block_name2->alphanum_characters,[push_name],<block_name2>|epsilon
6468

6569

6670
character_class->sopen,<set>,[set_make],sclose|sopen,caret,<set>,[set_make_negative],sclose
71+
set->minus,[push_character],[set_start],<set2>
6772
set-><setitem>,[set_start],<set2>
6873
set2-><setitem>,[set_combine],<set2>|epsilon
6974

@@ -121,7 +126,7 @@ backslash->g,copen,<block_name>,cclose,[make_back_reference]
121126

122127
character->other,[push_character] | nonspecial_characters,[push_character] | set_control_chars,[push_character] | dot,[push_character_anything] | backslash,<backslash>|capture_control_chars,[push_character] | \>,[push_character]
123128

124-
character_in_capture->other,[push_character] | nonspecial_characters,[push_character] | set_control_chars,[push_character] | \>,[push_character] | dot,[push_character_anything] | backslash,<backslash>
129+
character_in_capture-><character>
125130

126131
asserts->caret,[push_assert_begin] | dolar,[push_assert_end]
127132

0 commit comments

Comments
 (0)