forked from arc/libarc-uri
134 lines
1.7 KiB
C++
134 lines
1.7 KiB
C++
#ifndef arc__uri__grammar_hxx_
|
|
#define arc__uri__grammar_hxx_
|
|
|
|
namespace arc::uri::grammar
|
|
{
|
|
|
|
inline
|
|
bool
|
|
is_alpha(char c)
|
|
{
|
|
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_digit(char c)
|
|
{
|
|
return '0' <= c && c <= '9';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_unreserved(char c)
|
|
{
|
|
if (is_alpha(c) || is_digit(c)) {
|
|
return true;
|
|
}
|
|
|
|
switch (c) {
|
|
case '-':
|
|
case '.':
|
|
case '_':
|
|
case '~':
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_subdelim(char c)
|
|
{
|
|
switch (c) {
|
|
case '!':
|
|
case '$':
|
|
case '&':
|
|
case '(':
|
|
case ')':
|
|
case '*':
|
|
case '+':
|
|
case ',':
|
|
case ';':
|
|
case '=':
|
|
case '\'':
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_scheme_start(char c)
|
|
{
|
|
return is_alpha(c);
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_scheme(char c)
|
|
{
|
|
return is_alpha(c) || is_digit(c) || c == '+' || c == '-' || c == '.';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_userinfo(char c)
|
|
{
|
|
return is_unreserved(c) || is_subdelim(c) || c == ':' || c == '%';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_regname(char c)
|
|
{
|
|
return is_unreserved(c) || is_subdelim(c);
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_host(char c)
|
|
{
|
|
return is_regname(c);
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_port(char c)
|
|
{
|
|
return is_digit(c);
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_pchar(char c)
|
|
{
|
|
return is_unreserved(c) || is_subdelim(c) || c == ':' || c == '@' || c == '%';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_segment_nc(char c)
|
|
{
|
|
return is_pchar(c) && c != ':';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_query(char c)
|
|
{
|
|
return is_pchar(c) || c == '/' || c == '?';
|
|
}
|
|
|
|
inline
|
|
bool
|
|
is_fragment(char c)
|
|
{
|
|
return is_pchar(c) || c == '/' || c == '?';
|
|
}
|
|
} // namespace arc::uri::grammar
|
|
|
|
#endif
|