aboutsummaryrefslogtreecommitdiff
path: root/editor.h
diff options
context:
space:
mode:
Diffstat (limited to 'editor.h')
-rw-r--r--editor.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/editor.h b/editor.h
index 97eaac5..9a109b2 100644
--- a/editor.h
+++ b/editor.h
@@ -4,12 +4,16 @@ typedef struct Editor Editor;
typedef struct Piece Piece;
typedef struct {
+ const char const *start;
+ const char const *end;
const char const *text;
- /* const */ size_t len;
const Piece const *piece;
} Iterator;
-typedef bool (*iterator_callback_t)(void*, size_t pos, const char *data, size_t len);
+#define editor_iterate(ed, it, pos) \
+ for (Iterator it = editor_iterator_get((ed), (pos)); \
+ editor_iterator_valid(&it); \
+ editor_iterator_next(&it))
Editor *editor_load(const char *file);
bool editor_insert(Editor*, size_t pos, const char *data);
@@ -20,11 +24,18 @@ bool editor_replace_raw(Editor*, size_t pos, const char *data, size_t len);
void editor_snapshot(Editor*);
bool editor_undo(Editor*);
bool editor_redo(Editor*);
-Iterator editor_iterator_get(Editor*, size_t pos);
+
+size_t editor_bytes_get(Editor*, size_t pos, size_t len, char *buf);
bool editor_iterator_valid(const Iterator*);
-void editor_iterator_next(Iterator*);
-void editor_iterator_prev(Iterator*);
-void editor_iterate(Editor*, void*, size_t pos, iterator_callback_t);
+Iterator editor_iterator_get(Editor*, size_t pos);
+bool editor_iterator_next(Iterator*);
+bool editor_iterator_prev(Iterator*);
+Iterator editor_iterator_byte_get(Editor*, size_t pos, char *byte);
+bool editor_iterator_byte_next(Iterator*, char *b);
+bool editor_iterator_byte_prev(Iterator*, char *b);
+bool editor_iterator_byte_peek(Iterator *it, char *b);
+
+size_t editor_size(Editor*);
bool editor_modified(Editor*);
int editor_save(Editor*, const char *file);
void editor_free(Editor *ed);