1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:58:12 +00:00
serenity/Userland/Libraries/LibWeb/CSS/Parser/Token.h
Sam Atkins 6c03123b2d LibWeb: Give CSS Token and StyleComponentValueRule matching is() funcs
The end goal here is to make the two classes mostly interchangeable, as
the CSS spec requires that the various parser algorithms can take a
stream of either class, and we want to have that functionality without
needing to duplicate all of the code.
2021-07-11 23:19:56 +02:00

93 lines
1.7 KiB
C++

/*
* Copyright (c) 2020-2021, the SerenityOS developers.
* Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/String.h>
#include <AK/StringBuilder.h>
namespace Web::CSS {
class Token {
friend class Parser;
friend class Tokenizer;
public:
enum class Type {
Invalid,
EndOfFile,
Ident,
Function,
AtKeyword,
Hash,
String,
BadString,
Url,
BadUrl,
Delim,
Number,
Percentage,
Dimension,
Whitespace,
CDO,
CDC,
Colon,
Semicolon,
Comma,
OpenSquare,
CloseSquare,
OpenParen,
CloseParen,
OpenCurly,
CloseCurly
};
enum class HashType {
Id,
Unrestricted,
};
enum class NumberType {
Integer,
Number,
};
bool is(Type type) const { return m_type == type; }
StringView ident() const
{
VERIFY(m_type == Type::Ident);
return m_value.string_view();
}
StringView delim() const
{
VERIFY(m_type == Type::Delim);
return m_value.string_view();
}
StringView string() const
{
VERIFY(m_type == Type::String);
return m_value.string_view();
}
Type mirror_variant() const;
String bracket_string() const;
String bracket_mirror_string() const;
String to_string() const;
private:
Type m_type { Type::Invalid };
StringBuilder m_value;
StringBuilder m_unit;
HashType m_hash_type { HashType::Unrestricted };
NumberType m_number_type { NumberType::Integer };
};
}