serenity/Userland/Libraries/LibGUI/INILexer.h
kleines Filmröllchen 8b39074078 Userland: Undefine FOR_EACH_TOKEN_TYPE everywhere
This was causing some macro redefinition errors after the headers ended
up in the same file through some includes. The simple fix is to undefine
the macro after use.
2022-02-07 18:39:50 +01:00

70 lines
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2020, Hüseyin Aslıtürk <asliturk@hotmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/StringView.h>
namespace GUI {
#define FOR_EACH_TOKEN_TYPE \
__TOKEN(Unknown) \
__TOKEN(Comment) \
__TOKEN(Whitespace) \
__TOKEN(Section) \
__TOKEN(LeftBracket) \
__TOKEN(RightBracket) \
__TOKEN(Name) \
__TOKEN(Value) \
__TOKEN(Equal)
struct IniPosition {
size_t line;
size_t column;
};
struct IniToken {
enum class Type {
#define __TOKEN(x) x,
FOR_EACH_TOKEN_TYPE
#undef __TOKEN
};
char const* to_string() const
{
switch (m_type) {
#define __TOKEN(x) \
case Type::x: \
return #x;
FOR_EACH_TOKEN_TYPE
#undef __TOKEN
}
VERIFY_NOT_REACHED();
}
Type m_type { Type::Unknown };
IniPosition m_start;
IniPosition m_end;
};
class IniLexer {
public:
IniLexer(StringView);
Vector<IniToken> lex();
private:
char peek(size_t offset = 0) const;
char consume();
StringView m_input;
size_t m_index { 0 };
IniPosition m_position { 0, 0 };
};
}
#undef FOR_EACH_TOKEN_TYPE