#include "dynstr.h" #include /** * maintains the state of a text editor, including the text buffer, * cursor position, and various editor settings. */ typedef struct { uint32_t lines; uint32_t capacity; uint32_t buffer_line; uint32_t buffer_col; uint32_t y_offset; uint32_t x_offset; bool unsaved_changes; bool editmode; String_t* buffer; String_t* original; String_t filename; } Editor; /** * Creates a new editor instance from a filename * * @param filename The name of the file to open * @return Editor A new editor instance initialized with the file's content */ Editor new_editor(String_t filename); /** * Creates a new editor instance from an input string * * @param input_string initial editor content * @param filename name of the file being edited * @return an instance of the editor */ Editor editor_from(String_t input_string, String_t filename); /** * Moves the cursor in the editor (relative to it's current position) * * @param self Pointer to the editor instance * @param x Horizontal movement (negative for left, positive for right) * @param y Vertical movement (negative for up, positive for down) */ void move_cursor(Editor* self, int x, int y); /** * Deletes the character before the cursor * * @param self Pointer to the editor instance */ void delchar(Editor* self); /** * Adds a character at the cursor position * * @param self Pointer to the editor instance * @param c The character to add */ void addchar(Editor* self, char c); /** * Handles the enter key press, creating a new line * * @param self Pointer to the editor instance */ void pressed_enter(Editor* self); /** * Toggles between edit and command mode * * @param self Pointer to the editor instance */ void switch_mode(Editor* self); /** * Cleans up and frees resources used by the editor * * @param self Pointer to the editor instance */ void shutdown_editor(Editor* self); /** * Saves the current buffer content to the file * * @param self Pointer to the editor instance * @return int Returns 0 on success, non-zero on failure */ int save_file(Editor* self); /** * Converts the editor's buffer content to a String_t type * * @param self Pointer to the editor instance * @return String_t* Pointer to a string containing the buffer content */ String_t* to_string(Editor* self);