vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 4afba4e187d493992e61d014fbb454af9478c606
parent bd18445b5627e65cfd36dba239e6422618f754b0
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Fri, 20 May 2016 13:16:46 +0200

view: add functions to style a file range

Diffstat:
Mview.c | 35+++++++++++++++++++++++++++++++++++
Mview.h | 3+++
2 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/view.c b/view.c @@ -1510,3 +1510,38 @@ void view_selections_set(Selection *s, const Filerange *r) { Text *view_text(View *view) { return view->text; } + +bool view_style_define(View *view, enum UiStyle id, const char *style) { + return view->ui->syntax_style(view->ui, id, style); +} + +void view_style(View *view, enum UiStyle style, size_t start, size_t end) { + if (end < view->start || start > view->end) + return; + + size_t pos = view->start; + Line *line = view->topline; + + /* skip lines before range to be styled */ + while (line && pos + line->len <= start) { + pos += line->len; + line = line->next; + } + + if (!line) + return; + + int col = 0, width = view->width; + + /* skip columns before range to be styled */ + while (pos < start && col < width) + pos += line->cells[col++].len; + + do { + while (pos <= end && col < width) { + pos += line->cells[col].len; + line->cells[col++].style = style; + } + col = 0; + } while (pos <= end && (line = line->next)); +} diff --git a/view.h b/view.h @@ -196,4 +196,7 @@ Cursor *view_cursors_column(View*, int column); /* get next cursor (i.e. on another line) in zero based column */ Cursor *view_cursors_column_next(Cursor*, int column); +bool view_style_define(View*, enum UiStyle, const char *style); +void view_style(View*, enum UiStyle, size_t start, size_t end); + #endif