From: Michael D. Lowis Date: Sun, 25 Mar 2018 19:32:55 +0000 (-0400) Subject: removed old highlight engine. will be replaced by binary search array of ranges X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=b0cd6221652d4014bc3251b8c44bf80192d540ba;p=projs%2Ftide.git removed old highlight engine. will be replaced by binary search array of ranges --- diff --git a/Makefile b/Makefile index 347207d..8841a2c 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,6 @@ LIBEDIT_OBJS = \ lib/job.o \ lib/view.o \ lib/x11.o \ - lib/colors.o \ lib/config.o TEST_BINS = \ diff --git a/lib/colors.c b/lib/colors.c deleted file mode 100644 index 601c16e..0000000 --- a/lib/colors.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include -#include -#include - -static int ChildIn = -1, ChildOut = -1; -static char Buffer[32768]; -static char* DataBeg = Buffer; -static char* DataEnd = Buffer; - -static SyntaxSpan* mkspan(size_t beg, size_t end, size_t clr, SyntaxSpan* span); -static void write_chunk(Buf* buf, size_t beg, size_t end); -static int read_byte(void); -static int read_num(void); - -static void writefn(Job* job) { - job->writefn = NULL; -} - -static void readfn(Job* job) { - job->readfn = NULL; -} - -void colors_init(char* path) { -// if (Syntax) -// job_create((char*[]){ "tide-hl.rb", path, NULL }, readfn, writefn, 0); -} - -SyntaxSpan* colors_scan(SyntaxSpan* spans, Buf* buf, size_t beg, size_t end) { -#if 0 - SyntaxSpan* firstspan = spans; - SyntaxSpan* currspan = spans; - /* if the engine died, clear all highlights and quit */ - if (ChildIn < 0 || !buf->path) - return colors_rewind(spans, 0); - /* commence the highlighting */ - if (beg < end) { - write_chunk(buf, beg, end); - size_t b = 0, e = 0, c = 0; - do { - b = read_num(); - e = read_num(); - c = read_num(); - if (e > 0 && c > 0) { - c = (c > 15 ? Colors[SynNormal + (c >> 4) - 1].fg : c); - currspan = mkspan(beg+b, beg+e-1, c, currspan); - } - if (!firstspan) - firstspan = currspan; - } while (e > 0); - fflush(stdout); - DataBeg = DataEnd = Buffer; - } - return firstspan; -#else - return spans; -#endif -} - -SyntaxSpan* colors_rewind(SyntaxSpan* spans, size_t first) { -#if 0 - SyntaxSpan *curr = spans, *next = (spans ? spans->next : NULL); - while (curr && curr->end > first) - next = curr, curr = curr->prev; - - if (curr) curr->next = NULL; - - for (SyntaxSpan* span = next; span;) { - SyntaxSpan* dead = span; - span = dead->next; - if (span) span->prev = NULL; - free(dead); - } - return curr; -#else - return spans; -#endif -} - -#if 0 -static SyntaxSpan* mkspan(size_t beg, size_t end, size_t clr, SyntaxSpan* span) { - SyntaxSpan* newspan = malloc(sizeof(SyntaxSpan)); - newspan->beg = beg; - newspan->end = end; - newspan->color = clr; - newspan->prev = span; - newspan->next = NULL; - if (span) - span->next = newspan; - return newspan; -} - -static void write_chunk(Buf* buf, size_t beg, size_t end) { - size_t len = end - beg, wlen = 0; - char* wbuf = malloc(64 + len * 6u); - if (len && wbuf) { - wlen += sprintf(wbuf, "%lu\n", len); - for (size_t i = beg; i < end; i++) { - Rune r = buf_get(buf, i); - if (r == RUNE_CRLF) { - wbuf[wlen++] = '\n'; - } else if (buf->charset == BINARY) { - wbuf[wlen++] = (char)r; - } else { - wlen += utf8encode((char*)&(wbuf[wlen]), r); - } - } - long nwrite = write(ChildIn, wbuf, wlen); - if (nwrite < 0) { - /* child process probably died. shut everything down */ - close(ChildIn), ChildIn = -1; - close(ChildOut), ChildOut = -1; - } - } - free(wbuf); -} - -static int read_byte(void) { - if (DataBeg >= DataEnd) { - DataBeg = DataEnd = Buffer; - long nread = read(ChildOut, Buffer, sizeof(Buffer)); - if (nread <= 0) return EOF; - DataEnd += nread; - } - return *(DataBeg++); -} - -static int read_num(void) { - int c, num = 0; - while (isdigit(c = read_byte())) - num = (num * 10) + (c - '0'); - return num; -} -#endif diff --git a/lib/view.c b/lib/view.c index 40437e0..d109468 100644 --- a/lib/view.c +++ b/lib/view.c @@ -21,8 +21,6 @@ static unsigned scroll_up(View* view); static unsigned scroll_dn(View* view); static void sync_center(View* view, size_t csr); static size_t getoffset(View* view, size_t row, size_t col); -static void sync_line_numbers(View* view, size_t pos); -static void apply_colors(View* view); void view_init(View* view, char* file, void (*errfn)(char*)) { if (view->nrows) { @@ -45,7 +43,6 @@ void view_init(View* view, char* file, void (*errfn)(char*)) { view_eol(view, false); view_selctx(view); } - colors_init(view->buffer.path); } } @@ -102,16 +99,6 @@ void view_update(View* view, int clrnor, int clrsel, size_t* csrx, size_t* csry) view_scrollto(view, csr); /* locate the cursor if visible */ find_cursor(view, csrx, csry); - /* synchronize, scan for, and apply highlighted regions */ - size_t first = view->rows[0]->off, - last = view->rows[view->nrows-1]->off + view->rows[view->nrows-1]->rlen; - view->spans = colors_rewind(view->spans, first); - size_t start = (view->spans ? view->spans->end : 0); - size_t scandist = MaxScanDist; - if (scandist && first-start > scandist) - start = first - scandist; - view->spans = colors_scan(view->spans, &(view->buffer), start, last+1); - apply_colors(view); } Row* view_getrow(View* view, size_t row) { @@ -217,7 +204,6 @@ void view_insert(View* view, bool indent, Rune rune) { view->selection = sel; } unsigned newpos = buf_insert(&(view->buffer), indent, view->selection.end, rune); - sync_line_numbers(view, newpos); move_to(view, false, newpos); } @@ -227,7 +213,6 @@ void view_delete(View* view, int dir, bool byword) { (byword ? view_byword : view_byrune)(view, dir, true); selswap(sel); unsigned newpos = buf_delete(&(view->buffer), sel->beg, sel->end); - sync_line_numbers(view, newpos); move_to(view, false, newpos); } @@ -658,39 +643,3 @@ static size_t getoffset(View* view, size_t row, size_t col) { return buf_end(&(view->buffer)); return pos; } - -static void sync_line_numbers(View* view, size_t newpos) { - if (!view->nrows || newpos <= view->rows[0]->off) { - if (view->nrows) - view->rows[0]->off = buf_bol(&(view->buffer), newpos); - } -} - -static void apply_colors(View* view) { - /* fast forward the span list to the first span that ends on screen if there - is one. We take care to not go past the last item because we need to - ensure newly scanned items are poperly appended next time around */ - size_t first = (view->nrows ? view->rows[0]->off : 0); - SyntaxSpan* curr = view->spans; - for (; curr && curr->next && curr->end < first; curr = curr->next); - view->spans = curr; - - /* ok, now for each row, scan the columns and apply the colors for the span - that each rune is a member of. */ - for (size_t r = 0; curr && r < view->nrows; r++) { - Row* row = view->rows[r]; - size_t off = row->off, col = 0; - while (col < row->len) { - /* skip irrelevant highlight regions */ - for (; curr && curr->end < off; curr = curr->next); - if (!curr) { r = -1; break; } // Break both loops if we're done - - /* check if we're in the current region */ - if (curr->beg <= off && off <= curr->end) - row->cols[col].attr = (row->cols[col].attr & 0xFF00) | curr->color; - off++, col++; - while (col < row->len && row->cols[col].rune == '\0') - col++; - } - } -}