aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-05-20 13:16:46 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-05-22 00:05:30 +0200
commite29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07 (patch)
tree2c0f9d308a012c016a72192e82e2bf763a2b73af
parent207106ffca7b291b06cbd5366264cc66ee76af6a (diff)
downloadvis-e29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07.tar.gz
vis-e29bbbb8ea4f59d277a6e4f50d7d2501ddd04b07.tar.xz
view: add functions to style a file range
-rw-r--r--view.c35
-rw-r--r--view.h3
2 files changed, 38 insertions, 0 deletions
diff --git a/view.c b/view.c
index 14043ee..50b7c8e 100644
--- 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
index c44726e..1b2ea4e 100644
--- 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