Fix the URL parser for special chars in profile

This commit is contained in:
Patrick Niklaus
2021-07-27 15:55:38 +02:00
committed by Patrick Niklaus
parent dca35dcc86
commit 38df7d5e05
2 changed files with 17 additions and 7 deletions
+6 -6
View File
@@ -26,15 +26,15 @@ struct URLParser final : qi::grammar<Iterator, Into>
{
using boost::spirit::repository::qi::iter_pos;
alpha_numeral = qi::char_("a-zA-Z0-9");
identifier = qi::char_("a-zA-Z0-9_..--~:");
percent_encoding =
qi::char_('%') > qi::uint_parser<unsigned char, 16, 2, 2>()[qi::_val = qi::_1];
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\~`^") | percent_encoding;
all_chars = polyline_chars | qi::char_("=,;:&().");
polyline_chars = qi::char_("a-zA-Z0-9_..--[]{}@?|\\~`^") | percent_encoding;
all_chars = polyline_chars | qi::char_("=,;:&()..");
service = +alpha_numeral;
service = +identifier;
version = qi::uint_;
profile = +alpha_numeral;
profile = +identifier;
query = +all_chars;
// Example input: /route/v1/driving/7.416351,43.731205;7.420363,43.736189
@@ -54,7 +54,7 @@ struct URLParser final : qi::grammar<Iterator, Into>
qi::rule<Iterator, std::string()> profile;
qi::rule<Iterator, std::string()> query;
qi::rule<Iterator, char()> alpha_numeral;
qi::rule<Iterator, char()> identifier;
qi::rule<Iterator, char()> all_chars;
qi::rule<Iterator, char()> polyline_chars;
qi::rule<Iterator, char()> percent_encoding;