92 lines
2.1 KiB
C
92 lines
2.1 KiB
C
/* date = July 11th 2023 0:34 pm */
|
|
|
|
#ifndef VN_WORKSPACE_TEXT_EDITOR_H
|
|
#define VN_WORKSPACE_TEXT_EDITOR_H
|
|
|
|
////////////////////////////////
|
|
//~ sixten: Mutable String Types
|
|
|
|
struct mutable_string
|
|
{
|
|
memory_arena *Arena;
|
|
string String;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ sixten: History & Undo Types
|
|
|
|
struct history_entry
|
|
{
|
|
range1_s64 Range;
|
|
string ReplaceString;
|
|
};
|
|
|
|
struct history_node
|
|
{
|
|
history_node *Next;
|
|
history_node *Prev;
|
|
history_entry Forward;
|
|
history_entry Backward;
|
|
};
|
|
|
|
struct history_list
|
|
{
|
|
history_node *At;
|
|
history_node Sentinel;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ sixten: Workspace Text Editor Types
|
|
|
|
struct workspace_text_data
|
|
{
|
|
token_array Tokens;
|
|
range1_s64_array Lines;
|
|
};
|
|
|
|
struct workspace_view_text_editor
|
|
{
|
|
// sixten: processed text
|
|
memory_arena *ProcessingArena;
|
|
token_array Tokens;
|
|
range1_s64_array Lines;
|
|
|
|
// sixten: text being edited
|
|
mutable_string Text;
|
|
|
|
// sixten: text editing
|
|
text_edit_state EditState;
|
|
text_point LastTextPoint;
|
|
|
|
// sixten: history
|
|
memory_arena *HistoryArena;
|
|
history_list History;
|
|
|
|
// sixten: ui building & rendering
|
|
ui_box *ContainerBox;
|
|
v2 TextDim;
|
|
v2 Offset;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ sixten: Mutable String Functions
|
|
|
|
static mutable_string MutableStringAllocate(u64 Size);
|
|
static void MutableStringRelease(mutable_string *String);
|
|
static void MutableStringReplaceRange(mutable_string *String, string ReplaceString, range1_s64 Range);
|
|
|
|
////////////////////////////////
|
|
//~ sixten: History & Undo Functions
|
|
|
|
static history_entry HistoryEntry(memory_arena *Arena, string ReplaceString, range1_s64 Range);
|
|
static void AppendToHistory(memory_arena *Arena, history_list *List, history_entry Forward, history_entry Backward);
|
|
|
|
////////////////////////////////
|
|
//~ sixten: Workspace Text Editor Functions
|
|
|
|
static workspace_text_data Workspace_TextDataFromStringChunkList(memory_arena *Arena, string Text);
|
|
static UI_CUSTOM_DRAW_CALLBACK(Workspace_TextEditorDrawCallback);
|
|
static void Workspace_BuildTextEditor(workspace_view *View);
|
|
|
|
#endif //VN_WORKSPACE_TEXT_EDITOR_H
|