[gedit-code-assistance/wip/indent] [indent] Better handling of 'else'



commit 7f4eb5f65e94b78413446d788623ca7f54d78931
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Fri Apr 11 17:51:06 2014 +0200

    [indent] Better handling of 'else'

 indentbackends/c/gca-c-backend.vala |   41 ++++++++++++++++++++++++++++++----
 1 files changed, 36 insertions(+), 5 deletions(-)
---
diff --git a/indentbackends/c/gca-c-backend.vala b/indentbackends/c/gca-c-backend.vala
index e833a82..567638f 100644
--- a/indentbackends/c/gca-c-backend.vala
+++ b/indentbackends/c/gca-c-backend.vala
@@ -130,16 +130,33 @@ class Backend : Object, Gca.IndentBackend
                return c;
        }
 
-       bool iter_is_at_break(Gtk.TextIter iter)
+       string get_word_at_iter(Gtk.TextIter iter)
        {
-               var copy = iter;
+               if (!iter.ends_word())
+               {
+                       return "";
+               }
 
-               if (!copy.backward_word_start())
+               var start = iter;
+
+               if (!start.starts_word())
                {
-                       return false;
+                       if (!start.backward_word_start())
+                       {
+                               return "";
+                       }
                }
+               return start.get_text(iter);
+       }
+
+       bool iter_is_at_else(Gtk.TextIter iter)
+       {
+               return get_word_at_iter(iter) == "else";
+       }
 
-               return copy.get_text(iter) == "break";
+       bool iter_is_at_break(Gtk.TextIter iter)
+       {
+               return get_word_at_iter(iter) == "break";
        }
 
        IndentLevel get_indent(Gedit.Document document, Gtk.TextIter place)
@@ -283,6 +300,20 @@ class Backend : Object, Gca.IndentBackend
                        }
 
                        break;
+               case 'e':
+               {
+                       var cp = iter;
+                       if (cp.forward_char() && iter_is_at_else(cp))
+                       {
+                               amount = get_line_indents(iter);
+
+                               if (get_first_char_in_line(place) != '{')
+                               {
+                                       amount.indent += get_indent_width();
+                               }
+                       }
+                       break;
+               }
                }
 
                if (get_first_char_in_line(place) == '}')


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