1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-08 05:27:14 +09:00
ladybird/Libraries/LibURL/Pattern/PatternParser.h

70 lines
3 KiB
C++

/*
* Copyright (c) 2025, Shannon Booth <shannon@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <LibURL/Pattern/Options.h>
#include <LibURL/Pattern/Part.h>
#include <LibURL/Pattern/PatternError.h>
#include <LibURL/Pattern/Tokenizer.h>
namespace URL::Pattern {
// https://urlpattern.spec.whatwg.org/#pattern-parser
class PatternParser {
public:
// https://urlpattern.spec.whatwg.org/#encoding-callback
// An encoding callback is an abstract algorithm that takes a given string input. The input will be a simple text
// piece of a pattern string. An implementing algorithm will validate and encode the input. It must return the
// encoded string or throw an exception.
using EncodingCallback = Function<PatternErrorOr<String>(String const&)>;
static PatternErrorOr<Vector<Part>> parse(Utf8View const& input, Options const&, EncodingCallback);
private:
PatternParser(EncodingCallback, String segment_wildcard_regexp);
Optional<Token const&> try_to_consume_a_token(Token::Type);
Optional<Token const&> try_to_consume_a_modifier_token();
Optional<Token const&> try_to_consume_a_regexp_or_wildcard_token(Optional<Token const&> name_token);
PatternErrorOr<void> consume_a_required_token(Token::Type);
String consume_text();
PatternErrorOr<void> maybe_add_a_part_from_the_pending_fixed_value();
PatternErrorOr<void> add_a_part(String const& prefix, Optional<Token const&> name_token,
Optional<Token const&> regexp_or_wildcard_token, String const& suffix, Optional<Token const&> modifier_token);
bool is_a_duplicate_name(String const&) const;
// https://urlpattern.spec.whatwg.org/#pattern-parser-token-list
// A pattern parser has an associated token list, a token list, initially an empty list.
Vector<Token> m_token_list;
// https://urlpattern.spec.whatwg.org/#pattern-parser-encoding-callback
// A pattern parser has an associated encoding callback, a encoding callback, that must be set upon creation.
EncodingCallback m_encoding_callback;
// https://urlpattern.spec.whatwg.org/#pattern-parser-segment-wildcard-regexp
// A pattern parser has an associated segment wildcard regexp, a string, that must be set upon creation.
String m_segment_wildcard_regexp;
// https://urlpattern.spec.whatwg.org/#pattern-parser-part-list
// A pattern parser has an associated part list, a part list, initially an empty list.
Vector<Part> m_part_list;
// https://urlpattern.spec.whatwg.org/#pattern-parser-pending-fixed-value
// A pattern parser has an associated pending fixed value, a string, initially the empty string.
StringBuilder m_pending_fixed_value;
// https://urlpattern.spec.whatwg.org/#pattern-parser-index
// A pattern parser has an associated index, a number, initially 0.
size_t m_index { 0 };
// https://urlpattern.spec.whatwg.org/#pattern-parser-next-numeric-name
// A pattern parser has an associated next numeric name, a number, initially 0.
size_t m_next_numeric_name { 0 };
};
}