diff options
author | Jamie McCracken <jamiemcc gnome org> | 2010-01-05 18:25:03 -0500 |
---|---|---|
committer | Jamie McCracken <jamiemcc gnome org> | 2010-01-05 19:47:02 -0500 |
commit | c2cb6ff6a3be10be012a3ed7baaf5bab8601e679 (patch) | |
tree | f8fecbff5b4aa58f2e8e56b9fbb620dedae85352 /vala/valageniescanner.vala | |
parent | e4dd9179d58a83e88fe7d719fbe42790db6e2d0e (diff) | |
download | vala-c2cb6ff6a3be10be012a3ed7baaf5bab8601e679.tar.gz |
Genie: support automatic line continuations
Diffstat (limited to 'vala/valageniescanner.vala')
-rw-r--r-- | vala/valageniescanner.vala | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/vala/valageniescanner.vala b/vala/valageniescanner.vala index b9b023824..4bcdb5bf0 100644 --- a/vala/valageniescanner.vala +++ b/vala/valageniescanner.vala @@ -41,6 +41,10 @@ public class Vala.Genie.Scanner { int current_indent_level; int indent_level; int pending_dedents; + + /* track open parens and braces for automatic line continuations */ + int open_parens_count; + int open_brace_count; TokenType last_token; bool parse_started; @@ -69,6 +73,9 @@ public class Vala.Genie.Scanner { current_indent_level = 0; indent_level = 0; pending_dedents = 0; + + open_parens_count = 0; + open_brace_count = 0; parse_started = false; last_token = TokenType.NONE; @@ -482,12 +489,21 @@ public class Vala.Genie.Scanner { space (); } - /* handle line continuation (lines ending with \) */ + + /* handle explicit line continuation (lines ending with "\") */ while (current < end && current[0] == '\\' && current[1] == '\n') { current += 2; line++; skip_space_tabs (); } + + /* handle automatic line continuations (when inside parens or braces) */ + while (current < end && current[0] == '\n' && (open_parens_count > 0 || open_brace_count > 0)) { + current++; + line++; + skip_space_tabs (); + } + /* handle non-consecutive new line once parsing is underway - EOL */ if (newline () && parse_started && last_token != TokenType.EOL && last_token != TokenType.SEMICOLON) { @@ -638,18 +654,22 @@ public class Vala.Genie.Scanner { switch (current[0]) { case '{': type = TokenType.OPEN_BRACE; + open_brace_count++; current++; break; case '}': type = TokenType.CLOSE_BRACE; + open_brace_count--; current++; break; case '(': type = TokenType.OPEN_PARENS; + open_parens_count++; current++; break; case ')': type = TokenType.CLOSE_PARENS; + open_parens_count--; current++; break; case '[': |