[gnome-builder/gnome-builder-3-20] tmpl: add trailing \n fix from template-glib



commit 3528010938667825a30324224109c0916d520eb5
Author: Christian Hergert <chergert redhat com>
Date:   Sat May 14 15:10:21 2016 +0300

    tmpl: add trailing \n fix from template-glib

 contrib/tmpl/tmpl-token-input-stream.c |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/contrib/tmpl/tmpl-token-input-stream.c b/contrib/tmpl/tmpl-token-input-stream.c
index b3a06de..551f5ee 100644
--- a/contrib/tmpl/tmpl-token-input-stream.c
+++ b/contrib/tmpl/tmpl-token-input-stream.c
@@ -21,7 +21,8 @@
 struct _TmplTokenInputStream
 {
   GDataInputStream parent_instance;
-  guint swallow_newline : 1;
+  guint            swallow_newline : 1;
+  guint            last_was_text_with_newline : 1;
 };
 
 G_DEFINE_TYPE (TmplTokenInputStream, tmpl_token_input_stream, G_TYPE_DATA_INPUT_STREAM)
@@ -34,6 +35,7 @@ tmpl_token_input_stream_class_init (TmplTokenInputStreamClass *klass)
 static void
 tmpl_token_input_stream_init (TmplTokenInputStream *self)
 {
+  self->last_was_text_with_newline = TRUE;
 }
 
 static gboolean
@@ -229,7 +231,11 @@ tmpl_token_input_stream_read_token (TmplTokenInputStream  *self,
    * Handle successful read up to \ or {.
    */
   if (*text != '\0')
-    return tmpl_token_new_text (text);
+    {
+      self->last_was_text_with_newline = g_str_has_suffix (text, "\n");
+
+      return tmpl_token_new_text (text);
+    }
 
   g_free (text);
 
@@ -251,6 +257,8 @@ tmpl_token_input_stream_read_token (TmplTokenInputStream  *self,
     {
       gchar str[8] = { 0 };
 
+      self->last_was_text_with_newline = FALSE;
+
       /*
        * Get the next char after \.
        */
@@ -278,7 +286,10 @@ tmpl_token_input_stream_read_token (TmplTokenInputStream  *self,
    * return a token for the final {.
    */
   if (!tmpl_token_input_stream_read_unichar (self, &ch, cancellable, error))
-    return tmpl_token_new_unichar ('{');
+    {
+      self->last_was_text_with_newline = FALSE;
+      return tmpl_token_new_unichar ('{');
+    }
 
   /*
    * If this is not a {{, then just return a string for the pair.
@@ -289,6 +300,8 @@ tmpl_token_input_stream_read_token (TmplTokenInputStream  *self,
 
       g_unichar_to_utf8 (ch, str);
 
+      self->last_was_text_with_newline = FALSE;
+
       return tmpl_token_new_text (g_strdup_printf ("{%s", str));
     }
 
@@ -298,7 +311,8 @@ tmpl_token_input_stream_read_token (TmplTokenInputStream  *self,
   if (!(text = tmpl_token_input_stream_read_tag (self, &len, cancellable, error)))
     return NULL;
 
-  self->swallow_newline = TRUE;
+  self->swallow_newline = self->last_was_text_with_newline;
+  self->last_was_text_with_newline = FALSE;
 
   return tmpl_token_new_generic (text);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]