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