tAdd ColorNormal, hl array, and add structural comments - ve - a minimal text e… | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit c3288feb03125b18f98b46cd0d82f9ff5ced5182 | |
parent 97418d42195f0f408fd2dfd02531fb50120482fc | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 8 Aug 2019 09:44:18 +0200 | |
Add ColorNormal, hl array, and add structural comments | |
Diffstat: | |
M config.def.h | 1 + | |
M ve.c | 97 ++++++++++++++++++-----------… | |
2 files changed, 59 insertions(+), 39 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -18,6 +18,7 @@ static int status_message_timeout = 3; | |
*/ | |
static const int colors[][3] = { | |
/* fg bg style */ | |
+ [ColorNormal] = { 0, 0, 0 }, | |
[ColorDigits] = { 1, 0, 0 }, | |
[ColorComments] = { 2, 0, 0 }, | |
[ColorKeywords] = { 3, 0, 0 }, | |
diff --git a/ve.c b/ve.c | |
t@@ -16,15 +16,12 @@ | |
#include <unistd.h> | |
- | |
-/* macros */ | |
- | |
+/* MACROS */ | |
#define ABUF_INIT {NULL, 0} | |
#define CTRL_KEY(k) ((k) & 0x1f) | |
-/* types */ | |
- | |
+/* TYPES */ | |
struct abuf { | |
char *b; | |
int len; | |
t@@ -32,10 +29,11 @@ struct abuf { | |
/* editor row: stores a row of text */ | |
typedef struct eRow { | |
- char *chars; /* text read from file */ | |
- char *rchars; /* text to render */ | |
- int size; /* length of chars */ | |
- int rsize; /* length of rchars */ | |
+ char *chars; /* text read from file */ | |
+ char *rchars; /* text to render */ | |
+ int size; /* length of chars */ | |
+ int rsize; /* length of rchars */ | |
+ unsigned char *hl; /* array of rsize storing highlight type per rch… | |
} eRow; | |
struct editor_config { | |
t@@ -56,25 +54,25 @@ struct editor_config { | |
}; | |
/* color scheme types */ | |
-enum { ColorDigits, ColorComments, ColorKeywords }; | |
+enum { ColorNormal, ColorDigits, ColorComments, ColorKeywords }; | |
enum { FG, BG, STYLE }; | |
/* configuration, allows nested code to access above variables */ | |
#include "config.h" | |
-/* function declarations */ | |
+/* FUNCTION DECLARATIONS */ | |
char* editor_prompt(char *prompt); | |
void editor_set_status_message(const char *fmt, ...); | |
-/* global variables */ | |
- | |
+/* GLOBAL VARIABLES */ | |
struct editor_config E; | |
-/* function definitions */ | |
+/* FUNCTION DEFINITIONS */ | |
+/** TERMINAL **/ | |
void | |
die(const char *s) | |
{ | |
t@@ -173,6 +171,8 @@ get_window_size(int *rows, int *cols) | |
} | |
+/** SYNTAX HIGHLIGHTING **/ | |
+ | |
/* navigate over tab-representative string as one character */ | |
int | |
editor_row_cursor_x_to_rx(eRow *row, int cursor_x) | |
t@@ -187,6 +187,9 @@ editor_row_cursor_x_to_rx(eRow *row, int cursor_x) | |
return rx; | |
} | |
+ | |
+/** ROW OPERATIONS **/ | |
+ | |
/* translate on-screen position to data position */ | |
int | |
editor_row_cursor_rx_to_x(eRow *row, int cursor_rx) | |
t@@ -252,6 +255,7 @@ editor_row_insert(int i, char *s, size_t len) | |
E.row[i].rsize = 0; | |
E.row[i].rchars = NULL; | |
+ E.row[i].hl = NULL; | |
editor_row_update(&E.row[i]); | |
++E.num_rows; | |
t@@ -298,8 +302,9 @@ editor_row_delete_char(eRow *row, int i) | |
void | |
editor_row_free(eRow *row) | |
{ | |
- free(row->rchars); | |
free(row->chars); | |
+ free(row->rchars); | |
+ free(row->hl); | |
} | |
void | |
t@@ -371,6 +376,32 @@ editor_delete_char_right() | |
editor_row_delete_char(row, E.cursor_x); | |
} | |
+/* convert rows to one long char array of length buflen */ | |
+char* | |
+editor_concatenate_rows(int *buflen) | |
+{ | |
+ int totlen, j; | |
+ char *buf, *p; | |
+ | |
+ totlen = 0; | |
+ for (j=0; j<E.num_rows; ++j) | |
+ totlen += E.row[j].size + 1; /* add space for newline char */ | |
+ *buflen = totlen; | |
+ | |
+ buf = malloc(totlen); | |
+ p = buf; | |
+ for (j=0; j<E.num_rows; ++j) { | |
+ memcpy(p, E.row[j].chars, E.row[j].size); | |
+ p += E.row[j].size; | |
+ *p = '\n'; | |
+ p++; | |
+ } | |
+ return buf; | |
+} | |
+ | |
+ | |
+/** FILE IO **/ | |
+ | |
void | |
file_open(char *filename) | |
{ | |
t@@ -399,29 +430,6 @@ file_open(char *filename) | |
E.file_changed = 0; | |
} | |
-/* convert rows to one long char array of length buflen */ | |
-char* | |
-editor_concatenate_rows(int *buflen) | |
-{ | |
- int totlen, j; | |
- char *buf, *p; | |
- | |
- totlen = 0; | |
- for (j=0; j<E.num_rows; ++j) | |
- totlen += E.row[j].size + 1; /* add space for newline char */ | |
- *buflen = totlen; | |
- | |
- buf = malloc(totlen); | |
- p = buf; | |
- for (j=0; j<E.num_rows; ++j) { | |
- memcpy(p, E.row[j].chars, E.row[j].size); | |
- p += E.row[j].size; | |
- *p = '\n'; | |
- p++; | |
- } | |
- return buf; | |
-} | |
- | |
void | |
file_save(char *filename) | |
{ | |
t@@ -457,6 +465,9 @@ file_save(char *filename) | |
strerror(errno)); | |
} | |
+ | |
+/** FIND **/ | |
+ | |
/* reverse of strstr (3) */ | |
char* | |
strrstr(char *haystack, char *needle, | |
t@@ -560,6 +571,8 @@ editor_find(int direction) | |
} | |
+/** OUTPUT **/ | |
+ | |
/* reallocate append buffer to hold string s */ | |
void | |
ab_append(struct abuf *ab, const char *s, int len) | |
t@@ -780,6 +793,9 @@ editor_set_status_message(const char *fmt, ...) | |
} | |
} | |
+ | |
+/** INPUT **/ | |
+ | |
/* prompt is expected to be a format string containing a %s */ | |
char* | |
editor_prompt(char *prompt) | |
t@@ -1027,6 +1043,9 @@ editor_process_keypress() | |
} | |
} | |
+ | |
+/** INIT **/ | |
+ | |
void | |
deinit_editor() { | |
int i; | |
t@@ -1061,7 +1080,7 @@ init_editor() { | |
} | |
-/* main */ | |
+/** MAIN **/ | |
int | |
main(int argc, char* argv[]) | |
{ |