From ada3e0f4277028621d10d01fd6460b0dcc215f60 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Sat, 20 Apr 2019 16:52:04 -0700 Subject: [PATCH] contextengine: clear invalid ranges if BOM is found If we came across a BOM at the beginning of a buffer, then we will have an invalid range before we check for BOM. In that case, we need to to clear it before we proceed or some assertions (such as invalid range == 1) will not be met. Fixes #30 --- gtksourceview/gtksourcecontextengine.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gtksourceview/gtksourcecontextengine.c b/gtksourceview/gtksourcecontextengine.c index f74ec78e..062cca65 100644 --- a/gtksourceview/gtksourcecontextengine.c +++ b/gtksourceview/gtksourcecontextengine.c @@ -5354,60 +5354,62 @@ update_syntax (GtkSourceContextEngine *ce, } gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start_offset); gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, end_offset); if (!gtk_text_iter_starts_line (&start_iter)) { gtk_text_iter_set_line_offset (&start_iter, 0); start_offset = gtk_text_iter_get_offset (&start_iter); } if (!gtk_text_iter_starts_line (&end_iter)) { gtk_text_iter_forward_line (&end_iter); end_offset = gtk_text_iter_get_offset (&end_iter); } if (0 == start_offset) { gunichar c; first_line = TRUE; /* If it is the first line and it starts with BOM, skip it * since regexes in lang files do not take it into account */ c = gtk_text_iter_get_char (&start_iter); if (IS_BOM (c)) { gtk_text_iter_forward_char (&start_iter); start_offset = gtk_text_iter_get_offset (&start_iter); + segment_remove (ce, invalid); + CHECK_TREE (ce); } } /* This happens after deleting all text on last line. */ if (start_offset == end_offset) { g_assert (end_offset == gtk_text_buffer_get_char_count (buffer)); g_assert (g_slist_length (ce->priv->invalid) == 1); segment_remove (ce, invalid); CHECK_TREE (ce); goto out; } /* Main loop */ line_start = start_iter; line_start_offset = start_offset; line_end = line_start; gtk_text_iter_forward_line (&line_end); line_end_offset = gtk_text_iter_get_offset (&line_end); analyzed_end = line_end_offset; timer = g_timer_new (); while (TRUE) { LineInfo line; gboolean next_line_invalid = FALSE; gboolean need_invalidate_next = FALSE; -- 2.25.1