diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2014-09-15 15:06:59 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2014-09-15 15:07:50 +0200 |
| commit | bab44ff37c248a593199d9b3e69700800a49fbd7 (patch) | |
| tree | fbe8bb43d0148f7c7b96ff37f7af783cd879134f /editor.c | |
| parent | 9ba333a6ae38820844668328e015aa3c9e6da895 (diff) | |
| download | vis-bab44ff37c248a593199d9b3e69700800a49fbd7.tar.gz vis-bab44ff37c248a593199d9b3e69700800a49fbd7.tar.xz | |
More efficient syntax highlighting, first match wins
Diffstat (limited to 'editor.c')
| -rw-r--r-- | editor.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -200,20 +200,20 @@ static void editor_windows_invalidate(Editor *ed, size_t start, size_t end) { bool editor_syntax_load(Editor *ed, Syntax *syntaxes, Color *colors) { bool success = true; ed->syntaxes = syntaxes; + + for (Color *color = colors; color && color->fg; color++) { + if (color->attr == 0) + color->attr = A_NORMAL; + color->attr |= COLOR_PAIR(editor_color_get(color->fg, color->bg)); + } + for (Syntax *syn = syntaxes; syn && syn->name; syn++) { if (regcomp(&syn->file_regex, syn->file, REG_EXTENDED|REG_NOSUB|REG_ICASE|REG_NEWLINE)) success = false; - Color *color = colors; for (int j = 0; j < LENGTH(syn->rules); j++) { SyntaxRule *rule = &syn->rules[j]; if (!rule->rule) break; - if (rule->color.fg == 0 && color && color->fg != 0) - rule->color = *color++; - if (rule->color.attr == 0) - rule->color.attr = A_NORMAL; - if (rule->color.fg != 0) - rule->color.attr |= COLOR_PAIR(editor_color_get(rule->color.fg, rule->color.bg)); if (regcomp(&rule->regex, rule->rule, REG_EXTENDED|rule->cflags)) success = false; } |
