changeset 27912:84d6abff1006

Do not indent next line on single line constructs (Bug #57358). * octave-qscintilla.cc (octave_qscintilla::smart_indent_line_or_selected_text): Use QRegExp to check for presence of begin, and absencse of end keyword, in same line before indenting.
author John Donoghue <john.donoghue@ieee.org>
date Sat, 04 Jan 2020 09:51:26 -0500
parents 703156b6d602
children 8df92c17bb5c
files libgui/src/m-editor/octave-qscintilla.cc
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/m-editor/octave-qscintilla.cc	Sun Jan 05 16:16:53 2020 -0800
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Sat Jan 04 09:51:26 2020 -0500
@@ -615,6 +615,11 @@
   {
     QRegExp blank_line_regexp = QRegExp ("^[\t ]*$");
 
+    // end[xxxxx] [# comment] at end of a line
+    QRegExp end_word_regexp
+      = QRegExp ("(?:(?:['\"][^'\"]*['\"])?[^%#]*)*"
+                 "(end\\w*)[\r\n\t ;]*([%#].*)?$");
+
     QRegExp begin_block_regexp
       = QRegExp ("^([\t ]*)(if|elseif|else"
                  "|for|while|do|parfor"
@@ -702,9 +707,14 @@
 
         setIndentation (line, indent_column);
 
-        if (begin_block_regexp.indexIn (line_text) > -1)
+
+        int bpos = begin_block_regexp.indexIn (line_text);
+        if (bpos > -1)
           {
-            indent_column += indent_increment;
+            // Check for existing end statement in the same line
+            int epos = end_word_regexp.indexIn (line_text, bpos);
+            if (epos == -1)
+              indent_column += indent_increment;
             if (line_text.contains ("switch"))
               in_switch = true;
           }