diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-05-20 13:16:46 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-05-22 00:05:30 +0200 |
| commit | e29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07 (patch) | |
| tree | 2c0f9d308a012c016a72192e82e2bf763a2b73af | |
| parent | 207106ffca7b291b06cbd5366264cc66ee76af6a (diff) | |
| download | vis-e29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07.tar.gz vis-e29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07.tar.xz | |
view: add functions to style a file range
| -rw-r--r-- | view.c | 35 | ||||
| -rw-r--r-- | view.h | 3 |
2 files changed, 38 insertions, 0 deletions
@@ -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)); +} @@ -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 |
