/* * Copyright (c) 2023, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Syntax { struct TextDocumentSpan { TextRange range; Gfx::TextAttributes attributes; u64 data { 0 }; bool is_skippable { false }; }; class TextDocumentLine { public: explicit TextDocumentLine(Document&); explicit TextDocumentLine(Document&, StringView); Utf8View view() const LIFETIME_BOUND { return m_text.code_points(); } size_t length() const { return m_length; } bool set_text(Document&, StringView); void clear(Document&); private: String m_text; size_t m_length { 0 }; }; class Document : public RefCounted { public: Document() = default; virtual ~Document() = default; void set_spans(Vector spans); Vector& spans() { return m_spans; } virtual TextDocumentLine const& line(size_t line_index) const = 0; virtual TextDocumentLine& line(size_t line_index) = 0; virtual void update_views(Badge) = 0; protected: Vector m_spans; }; }