Ada
3.4.3
Fast spec-compliant URL parser
Toggle main menu visibility
Loading...
Searching...
No Matches
implementation.cpp
Go to the documentation of this file.
1
#include "
ada/implementation-inl.h
"
2
3
#include <string_view>
4
5
#include "
ada/common_defs.h
"
6
#include "
ada/parser.h
"
7
#include "
ada/url.h
"
8
#include "
ada/url_aggregator.h
"
9
10
namespace
ada
{
11
12
template
<
class
result_type>
13
ada_warn_unused
tl::expected<result_type, errors>
parse
(
14
std::string_view input,
const
result_type* base_url) {
15
result_type u =
16
ada::parser::parse_url_impl<result_type, true>
(input, base_url);
17
if
(!u.is_valid) {
18
return
tl::unexpected(
errors::type_error
);
19
}
20
return
u;
21
}
22
23
template
ada::result<url>
parse<url>
(std::string_view input,
24
const
url* base_url =
nullptr
);
25
template
ada::result<url_aggregator>
parse<url_aggregator>
(
26
std::string_view input,
const
url_aggregator* base_url =
nullptr
);
27
28
std::string
href_from_file
(std::string_view input) {
29
// This is going to be much faster than constructing a URL.
30
std::string tmp_buffer;
31
std::string_view internal_input;
32
if
(unicode::has_tabs_or_newline(input)) {
33
tmp_buffer = input;
34
helpers::remove_ascii_tab_or_newline(tmp_buffer);
35
internal_input = tmp_buffer;
36
}
else
{
37
internal_input = input;
38
}
39
std::string path;
40
if
(internal_input.empty()) {
41
path =
"/"
;
42
}
else
if
((internal_input[0] ==
'/'
) || (internal_input[0] ==
'\\'
)) {
43
helpers::parse_prepared_path(internal_input.substr(1),
44
ada::scheme::type::FILE
, path);
45
}
else
{
46
helpers::parse_prepared_path(internal_input,
ada::scheme::type::FILE
, path);
47
}
48
return
"file://"
+ path;
49
}
50
51
bool
can_parse
(std::string_view input,
const
std::string_view* base_input) {
52
ada::url_aggregator
base_aggregator;
53
ada::url_aggregator
* base_pointer =
nullptr
;
54
55
if
(base_input !=
nullptr
) {
56
base_aggregator =
ada::parser::parse_url_impl<ada::url_aggregator, false>
(
57
*base_input,
nullptr
);
58
if
(!base_aggregator.
is_valid
) {
59
return
false
;
60
}
61
base_pointer = &base_aggregator;
62
}
63
64
ada::url_aggregator
result
=
65
ada::parser::parse_url_impl<ada::url_aggregator, false>
(input,
66
base_pointer);
67
return
result
.is_valid;
68
}
69
70
ada_warn_unused
std::string_view
to_string
(
ada::encoding_type
type) {
71
switch
(type) {
72
case
ada::encoding_type::UTF8
:
73
return
"UTF-8"
;
74
case
ada::encoding_type::UTF_16LE
:
75
return
"UTF-16LE"
;
76
case
ada::encoding_type::UTF_16BE
:
77
return
"UTF-16BE"
;
78
default
:
79
unreachable
();
80
}
81
}
82
83
}
// namespace ada
common_defs.h
Cross-platform compiler macros and common definitions.
ada_warn_unused
#define ada_warn_unused
Definition
common_defs.h:89
implementation-inl.h
ada::parser::parse_url_impl
result_type parse_url_impl(std::string_view user_input, const result_type *base_url=nullptr)
Definition
parser.cpp:14
ada::scheme::FILE
@ FILE
Definition
scheme.h:48
ada
Definition
ada_idna.h:13
ada::can_parse
bool can_parse(std::string_view input, const std::string_view *base_input=nullptr)
Definition
implementation.cpp:51
ada::parse< url >
template ada::result< url > parse< url >(std::string_view input, const url *base_url)
ada::href_from_file
std::string href_from_file(std::string_view path)
Definition
implementation.cpp:28
ada::errors::type_error
@ type_error
Definition
errors.h:18
ada::parse< url_aggregator >
template ada::result< url_aggregator > parse< url_aggregator >(std::string_view input, const url_aggregator *base_url)
ada::encoding_type
encoding_type
Character encoding types for URL processing.
Definition
encoding_type.h:25
ada::encoding_type::UTF_16LE
@ UTF_16LE
Definition
encoding_type.h:27
ada::encoding_type::UTF8
@ UTF8
Definition
encoding_type.h:26
ada::encoding_type::UTF_16BE
@ UTF_16BE
Definition
encoding_type.h:28
ada::to_string
ada_warn_unused std::string_view to_string(encoding_type type)
Definition
implementation.cpp:70
ada::unreachable
void unreachable()
Definition
common_defs.h:161
ada::result
tl::expected< result_type, ada::errors > result
Definition
implementation.h:44
ada::parse
ada_warn_unused ada::result< result_type > parse(std::string_view input, const result_type *base_url=nullptr)
Definition
implementation.cpp:13
parser.h
Low-level URL parsing functions.
ada::url_aggregator
Memory-efficient URL representation using a single buffer.
Definition
url_aggregator.h:46
ada::url_base::is_valid
bool is_valid
Definition
url_base.h:56
url.h
Declaration for the ada::url class.
url_aggregator.h
Declaration for the ada::url_aggregator class.