Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minor fixes for add-url-pattern #800

Merged
merged 2 commits into from
Dec 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions include/ada/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,15 @@
#include <variant>

#include "ada/expected.h"
#include "ada/url_pattern.h"

/**
* @private
*/
namespace ada {
struct url_aggregator;
struct url;
class URLPattern {
public:
struct Init;
struct Options;
};

namespace url_pattern {
enum class errors : uint8_t;
}
Expand Down
15 changes: 0 additions & 15 deletions include/ada/url_pattern-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,6 @@

namespace ada {

// The default options is an options struct with delimiter code point set to
// the empty string and prefix code point set to the empty string.
const URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::DEFAULT(std::nullopt, std::nullopt);

// The hostname options is an options struct with delimiter code point set
// "." and prefix code point set to the empty string.
const URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::HOSTNAME('.', std::nullopt);

// The pathname options is an options struct with delimiter code point set
// "/" and prefix code point set to "/".
const URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::PATHNAME('/', '/');

inline std::string_view URLPattern::Component::get_pattern() const noexcept
ada_lifetime_bound {
return pattern;
Expand Down
33 changes: 19 additions & 14 deletions include/ada/url_pattern.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,20 @@
#include <variant>
#include <vector>

namespace ada::parser {
tl::expected<URLPattern, url_pattern::errors> parse_url_pattern(
std::variant<std::string_view, URLPattern::Init> input,
const std::string_view* base_url, const URLPattern::Options* options);
}

namespace ada {

namespace url_pattern {
enum class errors : uint8_t { type_error };
} // namespace url_pattern

namespace parser {
template <typename result_type, typename URLPattern_Init,
typename URLPattern_Options>
tl::expected<result_type, url_pattern::errors> parse_url_pattern(
std::variant<std::string_view, URLPattern_Init> input,
const std::string_view* base_url, const URLPattern_Options* options);
}

// URLPattern is a Web Platform standard API for matching URLs against a
// pattern syntax (think of it as a regular expression for URLs). It is
// defined in https://wicg.github.io/urlpattern.
Expand Down Expand Up @@ -126,9 +128,9 @@ class URLPattern {
// @see https://urlpattern.spec.whatwg.org/#options-ignore-case
bool ignore_case = false;

static const CompileComponentOptions DEFAULT;
static const CompileComponentOptions HOSTNAME;
static const CompileComponentOptions PATHNAME;
static CompileComponentOptions DEFAULT;
static CompileComponentOptions HOSTNAME;
static CompileComponentOptions PATHNAME;
};

using EncodingCallback =
Expand Down Expand Up @@ -245,10 +247,12 @@ class URLPattern {
Component hash{};
bool ignore_case_ = false;

friend tl::expected<URLPattern, url_pattern::errors>
parser::parse_url_pattern(std::variant<std::string_view, Init> input,
const std::string_view* base_url,
const Options* options);
template <typename result_type, typename URLPattern_Init,
typename URLPattern_Options>
friend tl::expected<result_type, url_pattern::errors>
parser::parse_url_pattern(
std::variant<std::string_view, URLPattern_Init> input,
const std::string_view* base_url, const URLPattern_Options* options);
};

namespace url_pattern {
Expand Down Expand Up @@ -392,7 +396,8 @@ constexpr bool is_absolute_pathname(std::string_view input,

// @see https://urlpattern.spec.whatwg.org/#parse-a-pattern-string
std::vector<URLPattern::Part> parse_pattern_string(
std::string_view pattern, URLPattern::CompileComponentOptions& options,
std::string_view pattern,
const URLPattern::CompileComponentOptions& options,
URLPattern::EncodingCallback encoding_callback);

// @see https://urlpattern.spec.whatwg.org/#generate-a-pattern-string
Expand Down
6 changes: 0 additions & 6 deletions src/implementation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ ada_warn_unused tl::expected<result_type, ada::errors> parse(
return u;
}

ada_warn_unused tl::expected<ada::URLPattern, ada::url_pattern::errors>
parse_url_pattern(std::variant<std::string_view, URLPattern::Init> input,
const std::string_view* base_url,
const ada::URLPattern::Options* options) {
return ada::parser::parse_url_pattern(input, base_url, options);
}
template ada::result<url> parse<url>(std::string_view input,
const url* base_url = nullptr);
template ada::result<url_aggregator> parse<url_aggregator>(
Expand Down
2 changes: 2 additions & 0 deletions src/parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -904,9 +904,11 @@ result_type parse_url_impl(std::string_view user_input,
return url;
}

template <>
tl::expected<ada::URLPattern, ada::url_pattern::errors> parse_url_pattern(
std::variant<std::string_view, URLPattern::Init> input,
const std::string_view* base_url, const ada::URLPattern::Options* options) {
(void)options;
// Let init be null.
URLPattern::Init init;

Expand Down
28 changes: 28 additions & 0 deletions src/url_pattern.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@
#include <string>

namespace ada {
// The default options is an options struct with delimiter code point set to
// the empty string and prefix code point set to the empty string.
URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::DEFAULT(std::nullopt, std::nullopt);

// The hostname options is an options struct with delimiter code point set
// "." and prefix code point set to the empty string.
URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::HOSTNAME('.', std::nullopt);

// The pathname options is an options struct with delimiter code point set
// "/" and prefix code point set to "/".
URLPattern::CompileComponentOptions
URLPattern::CompileComponentOptions::PATHNAME('/', '/');

tl::expected<URLPattern::Init, url_pattern::errors> URLPattern::Init::process(
Init init, std::string type, std::optional<std::string_view> protocol,
Expand Down Expand Up @@ -583,6 +597,7 @@ tl::expected<std::string, errors> canonicalize_hash(std::string_view input) {
}

URLPattern::Init parse_constructor_string(std::string_view input) {
(void)input;
// Let parser be a new constructor string parser whose input is input and
// token list is the result of running tokenize given input and "lenient".
// TODO: Implement this
Expand Down Expand Up @@ -673,13 +688,18 @@ constexpr bool is_absolute_pathname(std::string_view input,
std::vector<URLPattern::Part> parse_pattern_string(
std::string_view pattern, URLPattern::CompileComponentOptions& options,
URLPattern::EncodingCallback encoding_callback) {
(void)pattern;
(void)options;
(void)encoding_callback;
// TODO: Implement this
return {};
}

std::string generate_pattern_string(
std::vector<URLPattern::Part>& part_list,
URLPattern::CompileComponentOptions& options) {
(void)part_list;
(void)options;
// TODO: Implement this
return {};
}
Expand Down Expand Up @@ -725,23 +745,31 @@ URLPattern::Component URLPattern::Component::compile(
std::move(name_list), has_regexp_groups);
}

namespace url_pattern {
std::tuple<std::string, std::vector<std::string>>
generate_regular_expression_and_name_list(
std::vector<URLPattern::Part>& part_list,
URLPattern::CompileComponentOptions options) {
// TODO: Implement this
(void)part_list;
(void)options;
return {"", {}};
}
} // namespace url_pattern

std::optional<URLPattern::Result> URLPattern::exec(
std::optional<Input> input, std::optional<std::string> base_url) {
(void)input;
(void)base_url;
// TODO: Implement this
return std::nullopt;
}

bool URLPattern::test(std::optional<Input> input,
std::optional<std::string_view> base_url) {
// TODO: Implement this
(void)input;
(void)base_url;
return false;
}

Expand Down
Loading