namespace EE::UI::Doc

namespace Doc {

// typedefs

typedef String::HashType SyntaxStyleType;
typedef Uint32 SyntaxTokenLen;
typedef std::deque<TextUndoCommand*> UndoStackContainer;

// enums

enum TextUndoCommandType;

// structs

struct DocumentContentChange;
struct SyntaxPattern;
struct SyntaxState;
struct SyntaxStateRestored;
struct SyntaxToken;
struct SyntaxTokenComplete;
struct SyntaxTokenPosition;
struct TextSearchParams;
struct TokenizedLine;

// classes

class SyntaxColorScheme;
class SyntaxDefinition;
class SyntaxDefinitionManager;
class SyntaxHighlighter;
class SyntaxStyleTypes;
class SyntaxTokenizer;
class TextDocument;
class TextDocumentLine;
class TextFormat;
class TextPosition;
class TextRange;
class TextRanges;
class TextUndoCommand;
class TextUndoCommandInsert;
class TextUndoCommandRemove;
class TextUndoCommandSelection;
class TextUndoStack;

// global functions

constexpr auto operator""_sst(const char* s, std::size_t);

template <typename Type>
constexpr auto SyntaxStyleTypeHash(const Type& type);

template <typename T>
static auto toSyntaxStyleType(const T& s);

constexpr auto SyntaxStyleEmpty();

template <typename T>
static auto toSyntaxStyleTypeV(const std::vector<T>& s);

} // namespace Doc