[gedit-code-assistance/wip/indent] [indent] Improve handling of 'case'
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-code-assistance/wip/indent] [indent] Improve handling of 'case'
- Date: Fri, 11 Apr 2014 15:40:14 +0000 (UTC)
commit a30979e95763aa001f7df43959577cc45a5f7fef
Author: Jesse van den Kieboom <jessevdk gmail com>
Date: Fri Apr 11 17:37:35 2014 +0200
[indent] Improve handling of 'case'
indentbackends/c/gca-c-backend.vala | 83 +++++++++++++++++++++++++++++++----
1 files changed, 74 insertions(+), 9 deletions(-)
---
diff --git a/indentbackends/c/gca-c-backend.vala b/indentbackends/c/gca-c-backend.vala
index acc2364..e833a82 100644
--- a/indentbackends/c/gca-c-backend.vala
+++ b/indentbackends/c/gca-c-backend.vala
@@ -108,6 +108,40 @@ class Backend : Object, Gca.IndentBackend
return c;
}
+ unichar get_last_char_in_line(Gtk.TextIter place)
+ {
+ if (!place.ends_line())
+ {
+ place.forward_to_line_end();
+ }
+
+ unichar c = place.get_char();
+
+ while (c.isspace() && !place.starts_line())
+ {
+ if (!place.backward_char())
+ {
+ break;
+ }
+
+ c = place.get_char();
+ }
+
+ return c;
+ }
+
+ bool iter_is_at_break(Gtk.TextIter iter)
+ {
+ var copy = iter;
+
+ if (!copy.backward_word_start())
+ {
+ return false;
+ }
+
+ return copy.get_text(iter) == "break";
+ }
+
IndentLevel get_indent(Gedit.Document document, Gtk.TextIter place)
{
var amount = IndentLevel() {
@@ -157,7 +191,9 @@ class Backend : Object, Gca.IndentBackend
var c = iter.get_char();
- if (c == ';')
+ switch (c)
+ {
+ case ';':
{
// hello(param1,
// param2);
@@ -174,13 +210,29 @@ class Backend : Object, Gca.IndentBackend
amount = get_line_indents(iter);
}
}
+ else if (iter_is_at_break(iter) && get_last_char_in_line(place) == ':')
+ {
+ amount = get_line_indents(iter);
+ var iw = get_indent_width();
+
+ if (amount.indent > iw)
+ {
+ amount.indent -= iw;
+ }
+ else
+ {
+ amount.indent = 0;
+ }
+ }
else
{
// hello;
amount = get_line_indents(iter);
}
+
+ break;
}
- else if (c == ')')
+ case ')':
{
var copy = iter;
if (find_open_char(ref copy, '(', ')', false))
@@ -192,17 +244,17 @@ class Backend : Object, Gca.IndentBackend
amount.indent += get_indent_width();
}
}
+
+ break;
}
- else if (c == '{')
- {
+ case '{':
amount = get_line_indents(iter);
amount.indent += get_indent_width();
- }
- else if (c == '}')
- {
+ break;
+ case '}':
amount = get_line_indents(iter);
- }
- else if (c == ',')
+ break;
+ case ',':
{
// hello(param1,|
var copy = iter;
@@ -218,6 +270,19 @@ class Backend : Object, Gca.IndentBackend
{
amount = get_line_indents(iter);
}
+
+ break;
+ }
+ case ':':
+ amount = get_line_indents(iter);
+
+ if (get_first_char_in_line(place) != '{' &&
+ get_last_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]