@@ -84,42 +84,92 @@ struct uri_grammar
84
84
ipvfuture %=
85
85
qi::lit (' v' ) >> +qi::xdigit >> ' .' >> +(unreserved | sub_delims | ' :' );
86
86
87
+ ipv6addresses[0 ] %= qi::repeat (6 )[h16 >> ' :' ] >> ls32;
88
+ ipv6addresses[1 ] %= " ::" >> qi::repeat (5 )[h16 >> ' :' ] >> ls32;
89
+ ipv6addresses[2 ] %= -qi::raw[h16] >> " ::" >> qi::repeat (4 )[h16 >> ' :' ]
90
+ >> ls32;
91
+ ipv6addresses[3 ] %= -qi::raw[h16] >> " ::" >> qi::repeat (3 )[h16 >> ' :' ]
92
+ >> ls32;
93
+ ipv6addresses[4 ] %= -qi::raw[h16] >> " ::" >> qi::repeat (2 )[h16 >> ' :' ]
94
+ >> ls32;
95
+ ipv6addresses[5 ] %= -qi::raw[h16] >> " ::" >> h16 >> ' :' >> ls32;
96
+ ipv6addresses[6 ] %= -qi::raw[h16] >> " ::" >> ls32;
97
+ ipv6addresses[7 ] %= -qi::raw[h16] >> " ::" >> h16;
98
+ ipv6addresses[8 ] %= -qi::raw[h16] >> " ::" ;
99
+ ipv6addresses[9 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
100
+ " ::" >> qi::repeat (3 )[h16 >> ' :' ] >> ls32;
101
+ ipv6addresses[10 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
102
+ " ::" >> qi::repeat (2 )[h16 >> ' :' ] >> ls32;
103
+ ipv6addresses[11 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
104
+ " ::" >> h16 >> ' :' >> ls32;
105
+ ipv6addresses[12 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
106
+ " ::" >> ls32;
107
+ ipv6addresses[13 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
108
+ " ::" >> h16;
109
+ ipv6addresses[14 ] %= -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >>
110
+ " ::" ;
111
+ ipv6addresses[15 ] %= -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >>
112
+ " ::" >> qi::repeat (2 )[h16 >> ' :' ] >> ls32;
113
+ ipv6addresses[16 ] %= -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >>
114
+ " ::" >> h16 >> ' :' >> ls32;
115
+ ipv6addresses[17 ] %= -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >>
116
+ " ::" >> ls32;
117
+ ipv6addresses[18 ] %= -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >>
118
+ " ::" >> h16;
119
+ ipv6addresses[19 ] %= -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >>
120
+ " ::" ;
121
+ ipv6addresses[20 ] %= -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >>
122
+ " ::" >> h16 >> ' :' >> ls32;
123
+ ipv6addresses[21 ] %= -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >>
124
+ " ::" >> ls32;
125
+ ipv6addresses[22 ] %= -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >>
126
+ " ::" >> h16;
127
+ ipv6addresses[23 ] %= -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >>
128
+ " ::" ;
129
+ ipv6addresses[24 ] %= -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >>
130
+ " ::" >> ls32;
131
+ ipv6addresses[25 ] %= -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >>
132
+ " ::" >> h16;
133
+ ipv6addresses[26 ] %= -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >>
134
+ " ::" ;
135
+ ipv6addresses[27 ] %= -qi::raw[qi::repeat (5 )[(h16 >> ' :' )] >> h16] >>
136
+ " ::" >> h16;
137
+ ipv6addresses[28 ] %= -qi::raw[qi::repeat (5 )[(h16 >> ' :' )] >> h16] >>
138
+ " ::" ;
139
+ ipv6addresses[29 ] %= -qi::raw[qi::repeat (6 )[(h16 >> ' :' )] >> h16] >>
140
+ " ::" ;
141
+
87
142
ipv6address %= qi::raw
88
- [qi::repeat (6 )[h16 >> ' :' ] >> ls32 |
89
- " ::" >> qi::repeat (5 )[h16 >> ' :' ] >> ls32 |
90
- -qi::raw[h16] >> " ::" >> qi::repeat (4 )[h16 >> ' :' ] >> ls32 |
91
- -qi::raw[h16] >> " ::" >> qi::repeat (3 )[h16 >> ' :' ] >> ls32 |
92
- -qi::raw[h16] >> " ::" >> qi::repeat (2 )[h16 >> ' :' ] >> ls32 |
93
- -qi::raw[h16] >> " ::" >> h16 >> ' :' >> ls32 |
94
- -qi::raw[h16] >> " ::" >> ls32 | -qi::raw[h16] >> " ::" >> h16 |
95
- -qi::raw[h16] >> " ::" |
96
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" >>
97
- qi::repeat (3 )[h16 >> ' :' ] >> ls32 |
98
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" >>
99
- qi::repeat (2 )[h16 >> ' :' ] >> ls32 |
100
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 >>
101
- ' :' >> ls32 |
102
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" >> ls32 |
103
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 |
104
- -qi::raw[qi::repeat (1 )[(h16 >> ' :' )] >> h16] >> " ::" |
105
- -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >> " ::" >>
106
- qi::repeat (2 )[h16 >> ' :' ] >> ls32 |
107
- -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 >>
108
- ' :' >> ls32 |
109
- -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >> " ::" >> ls32 |
110
- -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 |
111
- -qi::raw[qi::repeat (2 )[(h16 >> ' :' )] >> h16] >> " ::" |
112
- -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 >>
113
- ' :' >> ls32 |
114
- -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >> " ::" >> ls32 |
115
- -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 |
116
- -qi::raw[qi::repeat (3 )[(h16 >> ' :' )] >> h16] >> " ::" |
117
- -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >> " ::" >> ls32 |
118
- -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 |
119
- -qi::raw[qi::repeat (4 )[(h16 >> ' :' )] >> h16] >> " ::" |
120
- -qi::raw[qi::repeat (5 )[(h16 >> ' :' )] >> h16] >> " ::" >> h16 |
121
- -qi::raw[qi::repeat (5 )[(h16 >> ' :' )] >> h16] >> " ::" |
122
- -qi::raw[qi::repeat (6 )[(h16 >> ' :' )] >> h16] >> " ::" ];
143
+ [ipv6addresses[0 ] |
144
+ ipv6addresses[1 ] |
145
+ ipv6addresses[2 ] |
146
+ ipv6addresses[3 ] |
147
+ ipv6addresses[4 ] |
148
+ ipv6addresses[5 ] |
149
+ ipv6addresses[6 ] |
150
+ ipv6addresses[7 ] |
151
+ ipv6addresses[8 ] |
152
+ ipv6addresses[9 ] |
153
+ ipv6addresses[10 ] |
154
+ ipv6addresses[11 ] |
155
+ ipv6addresses[12 ] |
156
+ ipv6addresses[13 ] |
157
+ ipv6addresses[14 ] |
158
+ ipv6addresses[15 ] |
159
+ ipv6addresses[16 ] |
160
+ ipv6addresses[17 ] |
161
+ ipv6addresses[18 ] |
162
+ ipv6addresses[19 ] |
163
+ ipv6addresses[20 ] |
164
+ ipv6addresses[21 ] |
165
+ ipv6addresses[22 ] |
166
+ ipv6addresses[23 ] |
167
+ ipv6addresses[24 ] |
168
+ ipv6addresses[25 ] |
169
+ ipv6addresses[26 ] |
170
+ ipv6addresses[27 ] |
171
+ ipv6addresses[28 ] |
172
+ ipv6addresses[29 ]];
123
173
124
174
// ls32 = ( h16 ":" h16 ) / IPv4address
125
175
ls32 %= (h16 >> ' :' >> h16) | ipv4address;
@@ -178,6 +228,8 @@ struct uri_grammar
178
228
ipv6address, ipvfuture, ip_literal;
179
229
180
230
qi::rule<const_iterator, string_type()> h16, ls32;
231
+ qi::rule<const_iterator, string_type()> ipv6addresses[30 ];
232
+
181
233
182
234
qi::rule<const_iterator, iterator_range<const_iterator>()> host, port;
183
235
0 commit comments