mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-08 09:09:43 +00:00
LibURL/Pattern: Implement the constructor string parser
This is missing one small bit of functionality where the not-yet impplemented component compilation is required.
This commit is contained in:
parent
f05c0509c3
commit
e369756e9c
Notes:
github-actions[bot]
2025-03-15 11:40:11 +00:00
Author: https://github.com/shannonbooth
Commit: e369756e9c
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3812
Reviewed-by: https://github.com/tcl3
Reviewed-by: https://github.com/trflynn89
5 changed files with 986 additions and 0 deletions
106
Libraries/LibURL/Pattern/ConstructorStringParser.h
Normal file
106
Libraries/LibURL/Pattern/ConstructorStringParser.h
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright (c) 2025, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibURL/Pattern/Init.h>
|
||||
#include <LibURL/Pattern/PatternError.h>
|
||||
#include <LibURL/Pattern/Tokenizer.h>
|
||||
|
||||
namespace URL::Pattern {
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser
|
||||
class ConstructorStringParser {
|
||||
public:
|
||||
static PatternErrorOr<Init> parse(Utf8View const& input);
|
||||
|
||||
private:
|
||||
ConstructorStringParser(Utf8View const& input, Vector<Token> token_list);
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-state
|
||||
enum class State {
|
||||
Initial,
|
||||
Protocol,
|
||||
Authority,
|
||||
Username,
|
||||
Password,
|
||||
Hostname,
|
||||
Port,
|
||||
Pathname,
|
||||
Search,
|
||||
Hash,
|
||||
Done,
|
||||
};
|
||||
StringView state_to_string() const;
|
||||
|
||||
void rewind();
|
||||
void rewind_and_set_state(State);
|
||||
|
||||
bool next_is_authority_slashes() const;
|
||||
|
||||
bool is_an_identity_terminator() const;
|
||||
bool is_a_port_prefix() const;
|
||||
bool is_a_pathname_start() const;
|
||||
bool is_a_password_prefix() const;
|
||||
bool is_a_search_prefix() const;
|
||||
bool is_a_hash_prefix() const;
|
||||
bool is_a_protocol_suffix() const;
|
||||
bool is_an_ipv6_open() const;
|
||||
bool is_an_ipv6_close() const;
|
||||
bool is_a_group_open() const;
|
||||
bool is_a_group_close() const;
|
||||
|
||||
Token const& get_a_safe_token(u32 index) const;
|
||||
bool is_a_non_special_pattern_char(u32 index, char value) const;
|
||||
void change_state(State, u32 skip);
|
||||
String make_a_component_string() const;
|
||||
PatternErrorOr<void> compute_protocol_matches_a_special_scheme_flag();
|
||||
|
||||
Optional<String> const& result_for_active_state() const;
|
||||
void set_result_for_active_state(Optional<String> value);
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-input
|
||||
// A constructor string parser has an associated input, a string, which must be set upon creation.
|
||||
Utf8View m_input;
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-token-list
|
||||
// A constructor string parser has an associated token list, a token list, which must be set upon creation.
|
||||
Vector<Token> m_token_list;
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-result
|
||||
// A constructor string parser has an associated result, a URLPatternInit, initially set to a new URLPatternInit.
|
||||
Init m_result;
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-component-start
|
||||
// A constructor string parser has an associated component start, a number, initially set to 0.
|
||||
u32 m_component_start { 0 };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-token-index
|
||||
// A constructor string parser has an associated token index, a number, initially set to 0.
|
||||
u32 m_token_index { 0 };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-token-increment
|
||||
// A constructor string parser has an associated token increment, a number, initially set to 1.
|
||||
u32 m_token_increment { 1 };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-group-depth
|
||||
// A constructor string parser has an associated group depth, a number, initially set to 0.
|
||||
u32 m_group_depth { 0 };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-hostname-ipv6-bracket-depth
|
||||
// A constructor string parser has an associated hostname IPv6 bracket depth, a number, initially set to 0.
|
||||
u32 m_hostname_ipv6_bracket_depth { 0 };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-protocol-matches-a-special-scheme-flag
|
||||
// A constructor string parser has an associated protocol matches a special scheme flag, a boolean, initially set to false.
|
||||
bool m_protocol_matches_a_special_scheme { false };
|
||||
|
||||
// https://urlpattern.spec.whatwg.org/#constructor-string-parser-state
|
||||
// A constructor string parser has an associated state, a string, initially set to "init".
|
||||
State m_state { State::Initial };
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue