@@ -25,6 +25,9 @@ namespace boost { namespace spirit { namespace traits {
25
25
struct transform_attribute <
26
26
boost::network::uri::detail::uri_parts<Tag>,
27
27
typename boost::network::uri::detail::uri_parts_tuple<Tag>::type
28
+ #if SPIRIT_VERSION >= 0x2030
29
+ , boost::spirit::qi::domain
30
+ #endif
28
31
>
29
32
{
30
33
typedef typename boost::network::uri::detail::uri_parts_tuple<Tag>::type type;
@@ -96,76 +99,76 @@ namespace boost { namespace network { namespace uri {
96
99
struct uri_grammar : qi::grammar<Iterator, uri_parts<Tag>()> {
97
100
uri_grammar () : uri_grammar::base_type(start, " uri" ) {
98
101
// gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
99
- gen_delims = qi::char_ (" :/?#[]@" );
102
+ gen_delims % = qi::char_ (" :/?#[]@" );
100
103
// sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
101
- sub_delims = qi::char_ (" !$&'()*+,;=" );
104
+ sub_delims % = qi::char_ (" !$&'()*+,;=" );
102
105
// reserved = gen-delims / sub-delims
103
- reserved = gen_delims | sub_delims;
106
+ reserved % = gen_delims | sub_delims;
104
107
// unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
105
- unreserved = qi::alnum | qi::char_ (" -._~" );
108
+ unreserved % = qi::alnum | qi::char_ (" -._~" );
106
109
// pct-encoded = "%" HEXDIG HEXDIG
107
- pct_encoded = qi::char_ (" %" ) >> qi::repeat (2 )[qi::xdigit];
110
+ pct_encoded % = qi::char_ (" %" ) >> qi::repeat (2 )[qi::xdigit];
108
111
109
112
// pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
110
- pchar = qi::raw[
113
+ pchar % = qi::raw[
111
114
unreserved | pct_encoded | sub_delims | qi::char_ (" :@" )
112
115
];
113
116
114
117
// segment = *pchar
115
- segment = qi::raw[*pchar];
118
+ segment % = qi::raw[*pchar];
116
119
// segment-nz = 1*pchar
117
- segment_nz = qi::raw[+pchar];
120
+ segment_nz % = qi::raw[+pchar];
118
121
// segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
119
- segment_nz_nc = qi::raw[
122
+ segment_nz_nc % = qi::raw[
120
123
+(unreserved | pct_encoded | sub_delims | qi::char_ (" @" ))
121
124
];
122
125
// path-abempty = *( "/" segment )
123
- path_abempty = qi::raw[*(qi::char_ (" /" ) >> segment)];
126
+ path_abempty % = qi::raw[*(qi::char_ (" /" ) >> segment)];
124
127
// path-absolute = "/" [ segment-nz *( "/" segment ) ]
125
- path_absolute = qi::raw[
128
+ path_absolute % = qi::raw[
126
129
qi::char_ (" /" )
127
130
>> -(segment_nz >> *(qi::char_ (" /" ) >> segment))
128
131
];
129
132
// path-rootless = segment-nz *( "/" segment )
130
- path_rootless = qi::raw[
133
+ path_rootless % = qi::raw[
131
134
segment_nz >> *(qi::char_ (" /" ) >> segment)
132
135
];
133
136
// path-empty = 0<pchar>
134
- path_empty = qi::eps;
137
+ path_empty % = qi::eps;
135
138
136
139
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
137
- scheme = qi::alpha >> *(qi::alnum | qi::char_ (" +.-" ));
140
+ scheme % = qi::alpha >> *(qi::alnum | qi::char_ (" +.-" ));
138
141
139
142
// user_info = *( unreserved / pct-encoded / sub-delims / ":" )
140
- user_info = qi::raw[
143
+ user_info % = qi::raw[
141
144
*(unreserved | pct_encoded | sub_delims | qi::char_ (" :" ))
142
145
];
143
146
144
147
// dec-octet = DIGIT / %x31-39 DIGIT / "1" 2DIGIT / "2" %x30-34 DIGIT / "25" %x30-35
145
- dec_octet =
148
+ dec_octet % =
146
149
!(qi::lit (' 0' ) >> qi::digit)
147
150
>> qi::raw[
148
151
qi::uint_parser<boost::uint8_t , 10 , 1 , 3 >()
149
152
];
150
153
// IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
151
- ipv4address = qi::raw[
154
+ ipv4address % = qi::raw[
152
155
dec_octet >> qi::repeat (3 )[qi::lit (' .' ) >> dec_octet]
153
156
];
154
157
// reg-name = *( unreserved / pct-encoded / sub-delims )
155
- reg_name = qi::raw[
158
+ reg_name % = qi::raw[
156
159
*(unreserved | pct_encoded | sub_delims)
157
160
];
158
161
// TODO, host = IP-literal / IPv4address / reg-name
159
- host = ipv4address | reg_name;
162
+ host % = ipv4address | reg_name;
160
163
161
164
// query = *( pchar / "/" / "?" )
162
- query = qi::raw[*(pchar | qi::char_ (" /?" ))];
165
+ query % = qi::raw[*(pchar | qi::char_ (" /?" ))];
163
166
// fragment = *( pchar / "/" / "?" )
164
- fragment = qi::raw[*(pchar | qi::char_ (" /?" ))];
167
+ fragment % = qi::raw[*(pchar | qi::char_ (" /?" ))];
165
168
166
169
// hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
167
170
// authority = [ userinfo "@" ] host [ ":" port ]
168
- hier_part =
171
+ hier_part % =
169
172
(
170
173
" //"
171
174
>> -(user_info >> ' @' )
@@ -185,8 +188,8 @@ namespace boost { namespace network { namespace uri {
185
188
)
186
189
);
187
190
188
- start = uri;
189
- uri =
191
+ start % = uri;
192
+ uri % =
190
193
scheme >> ' :'
191
194
>> hier_part
192
195
>> -(' ?' >> query)
@@ -234,8 +237,10 @@ namespace boost { namespace network { namespace uri {
234
237
inline bool parse_uri (Range & range, uri_parts<Tag> & parts) {
235
238
typedef typename range_iterator<Range>::type iterator;
236
239
237
- iterator start_ = begin (range);
238
- iterator end_ = end (range);
240
+ // Qualified boost::begin and boost::end because MSVC complains
241
+ // of ambiguity on call to begin(range) and end(rand).
242
+ iterator start_ = boost::begin (range);
243
+ iterator end_ = boost::end (range);
239
244
240
245
uri_grammar<iterator, Tag> grammar;
241
246
0 commit comments