diff libgui/src/m-editor/octave-qscintilla.cc @ 24716:2b3e0b570e77

move GUI file editor classes inside octave namespace * file-editor-interface.h, file-editor-tab.cc, file-editor-tab.h, file-editor.cc, file-editor.h, find-dialog.cc, find-dialog.h, marker.cc, marker.h, octave-qscintilla.cc, octave-qscintilla.h, octave-txt-lexer.cc, octave-txt-lexer.h: Move classes inside octave namespace. * main-window.cc, settings-dialog.cc: Update to namespace changes.
author John W. Eaton <jwe@octave.org>
date Fri, 09 Feb 2018 13:56:34 -0500
parents 7a0cf02ed6d5
children 6652d3823428
line wrap: on
line diff
--- a/libgui/src/m-editor/octave-qscintilla.cc	Fri Feb 09 13:13:39 2018 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Fri Feb 09 13:56:34 2018 -0500
@@ -59,11 +59,11 @@
 #include "resource-manager.h"
 #include "octave-settings.h"
 
-
 // Return true if CANDIDATE is a "closing" that matches OPENING,
 // such as "end" or "endif" for "if", or "catch" for "try".
 // Used for testing the last word of an "if" etc. line,
 // or the first word of the following line.
+
 static bool
 is_end (const QString& candidate, const QString& opening)
 {
@@ -101,290 +101,283 @@
   return retval;
 }
 
-octave_qscintilla::octave_qscintilla (QWidget *p)
-  : QsciScintilla (p), m_word_at_cursor (), m_selection (),
-    m_selection_replacement (), m_selection_line (-1),
-    m_selection_col (-1), m_indicator_id (1)
+namespace octave
 {
-  connect (this, SIGNAL (textChanged (void)), this, SLOT (text_changed (void)));
+  octave_qscintilla::octave_qscintilla (QWidget *p)
+    : QsciScintilla (p), m_word_at_cursor (), m_selection (),
+      m_selection_replacement (), m_selection_line (-1),
+      m_selection_col (-1), m_indicator_id (1)
+  {
+    connect (this, SIGNAL (textChanged (void)),
+             this, SLOT (text_changed (void)));
 
-  connect (this, SIGNAL (cursorPositionChanged (int, int)),
-           this, SLOT (cursor_position_changed (int, int)));
+    connect (this, SIGNAL (cursorPositionChanged (int, int)),
+             this, SLOT (cursor_position_changed (int, int)));
 
-  // clear scintilla edit shortcuts that are handled by the editor
-  QsciCommandSet *cmd_set = standardCommands ();
+    // clear scintilla edit shortcuts that are handled by the editor
+    QsciCommandSet *cmd_set = standardCommands ();
 
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  // find () was added in QScintilla 2.6
-  cmd_set->find (QsciCommand::SelectionCopy)->setKey (0);
-  cmd_set->find (QsciCommand::SelectionCut)->setKey (0);
-  cmd_set->find (QsciCommand::Paste)->setKey (0);
-  cmd_set->find (QsciCommand::SelectAll)->setKey (0);
-  cmd_set->find (QsciCommand::SelectionDuplicate)->setKey (0);
-  cmd_set->find (QsciCommand::LineTranspose)->setKey (0);
-  cmd_set->find (QsciCommand::Undo)->setKey (0);
-  cmd_set->find (QsciCommand::Redo)->setKey (0);
-  cmd_set->find (QsciCommand::SelectionUpperCase)->setKey (0);
-  cmd_set->find (QsciCommand::SelectionLowerCase)->setKey (0);
-  cmd_set->find (QsciCommand::ZoomIn)->setKey (0);
-  cmd_set->find (QsciCommand::ZoomOut)->setKey (0);
-  cmd_set->find (QsciCommand::DeleteWordLeft)->setKey (0);
-  cmd_set->find (QsciCommand::DeleteWordRight)->setKey (0);
-  cmd_set->find (QsciCommand::DeleteLineLeft)->setKey (0);
-  cmd_set->find (QsciCommand::DeleteLineRight)->setKey (0);
-  cmd_set->find (QsciCommand::LineDelete)->setKey (0);
-  cmd_set->find (QsciCommand::LineCut)->setKey (0);
-  cmd_set->find (QsciCommand::LineCopy)->setKey (0);
+    // find () was added in QScintilla 2.6
+    cmd_set->find (QsciCommand::SelectionCopy)->setKey (0);
+    cmd_set->find (QsciCommand::SelectionCut)->setKey (0);
+    cmd_set->find (QsciCommand::Paste)->setKey (0);
+    cmd_set->find (QsciCommand::SelectAll)->setKey (0);
+    cmd_set->find (QsciCommand::SelectionDuplicate)->setKey (0);
+    cmd_set->find (QsciCommand::LineTranspose)->setKey (0);
+    cmd_set->find (QsciCommand::Undo)->setKey (0);
+    cmd_set->find (QsciCommand::Redo)->setKey (0);
+    cmd_set->find (QsciCommand::SelectionUpperCase)->setKey (0);
+    cmd_set->find (QsciCommand::SelectionLowerCase)->setKey (0);
+    cmd_set->find (QsciCommand::ZoomIn)->setKey (0);
+    cmd_set->find (QsciCommand::ZoomOut)->setKey (0);
+    cmd_set->find (QsciCommand::DeleteWordLeft)->setKey (0);
+    cmd_set->find (QsciCommand::DeleteWordRight)->setKey (0);
+    cmd_set->find (QsciCommand::DeleteLineLeft)->setKey (0);
+    cmd_set->find (QsciCommand::DeleteLineRight)->setKey (0);
+    cmd_set->find (QsciCommand::LineDelete)->setKey (0);
+    cmd_set->find (QsciCommand::LineCut)->setKey (0);
+    cmd_set->find (QsciCommand::LineCopy)->setKey (0);
 #else
-  // find commands via its default key (tricky way without find ())
-  QList< QsciCommand * > cmd_list = cmd_set->commands ();
-  for (int i = 0; i < cmd_list.length (); i++)
-    {
-      int cmd_key = cmd_list.at (i)->key ();
-      switch (cmd_key)
-        {
-        case Qt::Key_C | Qt::CTRL :               // SelectionCopy
-        case Qt::Key_X | Qt::CTRL :               // SelectionCut
-        case Qt::Key_V | Qt::CTRL :               // Paste
-        case Qt::Key_A | Qt::CTRL :               // SelectAll
-        case Qt::Key_D | Qt::CTRL :               // SelectionDuplicate
-        case Qt::Key_T | Qt::CTRL :               // LineTranspose
-        case Qt::Key_Z | Qt::CTRL :               // Undo
-        case Qt::Key_Y | Qt::CTRL :               // Redo
-        case Qt::Key_Z | Qt::CTRL | Qt::SHIFT :   // Redo
-        case Qt::Key_U | Qt::CTRL :               // SelectionLowerCase
-        case Qt::Key_U | Qt::CTRL | Qt::SHIFT :   // SelectionUpperCase
-        case Qt::Key_Plus | Qt::CTRL :            // ZoomIn
-        case Qt::Key_Minus | Qt::CTRL :           // ZoomOut
-        case Qt::Key_Backspace | Qt::CTRL | Qt::SHIFT :   // DeleteLineLeft
-        case Qt::Key_Delete | Qt::CTRL | Qt::SHIFT :      // DeleteLineRight
-        case Qt::Key_K | Qt::META :                       // DeleteLineRight
-        case Qt::Key_Backspace | Qt::CTRL :       // DeleteWordLeft
-        case Qt::Key_Delete | Qt::CTRL :          // DeleteWordRight
-        case Qt::Key_L | Qt::CTRL | Qt::SHIFT :   // LineDelete
-        case Qt::Key_L | Qt::CTRL :               // LineCut
-        case Qt::Key_T | Qt::CTRL | Qt::SHIFT :   // LineCopy
-          cmd_list.at (i)->setKey (0);
-        }
-    }
+    // find commands via its default key (tricky way without find ())
+    QList< QsciCommand * > cmd_list = cmd_set->commands ();
+    for (int i = 0; i < cmd_list.length (); i++)
+      {
+        int cmd_key = cmd_list.at (i)->key ();
+        switch (cmd_key)
+          {
+          case Qt::Key_C | Qt::CTRL :               // SelectionCopy
+          case Qt::Key_X | Qt::CTRL :               // SelectionCut
+          case Qt::Key_V | Qt::CTRL :               // Paste
+          case Qt::Key_A | Qt::CTRL :               // SelectAll
+          case Qt::Key_D | Qt::CTRL :               // SelectionDuplicate
+          case Qt::Key_T | Qt::CTRL :               // LineTranspose
+          case Qt::Key_Z | Qt::CTRL :               // Undo
+          case Qt::Key_Y | Qt::CTRL :               // Redo
+          case Qt::Key_Z | Qt::CTRL | Qt::SHIFT :   // Redo
+          case Qt::Key_U | Qt::CTRL :               // SelectionLowerCase
+          case Qt::Key_U | Qt::CTRL | Qt::SHIFT :   // SelectionUpperCase
+          case Qt::Key_Plus | Qt::CTRL :            // ZoomIn
+          case Qt::Key_Minus | Qt::CTRL :           // ZoomOut
+          case Qt::Key_Backspace | Qt::CTRL | Qt::SHIFT :   // DeleteLineLeft
+          case Qt::Key_Delete | Qt::CTRL | Qt::SHIFT :      // DeleteLineRight
+          case Qt::Key_K | Qt::META :                       // DeleteLineRight
+          case Qt::Key_Backspace | Qt::CTRL :       // DeleteWordLeft
+          case Qt::Key_Delete | Qt::CTRL :          // DeleteWordRight
+          case Qt::Key_L | Qt::CTRL | Qt::SHIFT :   // LineDelete
+          case Qt::Key_L | Qt::CTRL :               // LineCut
+          case Qt::Key_T | Qt::CTRL | Qt::SHIFT :   // LineCopy
+            cmd_list.at (i)->setKey (0);
+          }
+      }
 #endif
 
 #if defined (Q_OS_MAC)
-  // Octave interprets Cmd key as Meta whereas Qscintilla interprets it
-  // as Ctrl. We thus invert Meta/Ctrl in Qscintilla's shortcuts list.
-  QList< QsciCommand * > cmd_list_mac = cmd_set->commands ();
-  for (int i = 0; i < cmd_list_mac.length (); i++)
-    {
-      // Primary key
-      int key = cmd_list_mac.at (i)->key ();
+    // Octave interprets Cmd key as Meta whereas Qscintilla interprets it
+    // as Ctrl. We thus invert Meta/Ctrl in Qscintilla's shortcuts list.
+    QList< QsciCommand * > cmd_list_mac = cmd_set->commands ();
+    for (int i = 0; i < cmd_list_mac.length (); i++)
+      {
+        // Primary key
+        int key = cmd_list_mac.at (i)->key ();
 
-      if (static_cast<int> (key | Qt::META) == key &&
-          static_cast<int> (key | Qt::CTRL) != key)
-        key = (key ^ Qt::META) | Qt::CTRL;
-      else if (static_cast<int> (key | Qt::CTRL) == key)
-        key = (key ^ Qt::CTRL) | Qt::META;
+        if (static_cast<int> (key | Qt::META) == key &&
+            static_cast<int> (key | Qt::CTRL) != key)
+          key = (key ^ Qt::META) | Qt::CTRL;
+        else if (static_cast<int> (key | Qt::CTRL) == key)
+          key = (key ^ Qt::CTRL) | Qt::META;
 
-      cmd_list_mac.at (i)->setKey (key);
+        cmd_list_mac.at (i)->setKey (key);
 
-      // Alternate key
-      key = cmd_list_mac.at (i)->alternateKey ();
+        // Alternate key
+        key = cmd_list_mac.at (i)->alternateKey ();
 
-      if (static_cast<int> (key | Qt::META) == key &&
-          static_cast<int> (key | Qt::CTRL) != key)
-        key = (key ^ Qt::META) | Qt::CTRL;
-      else if (static_cast<int> (key | Qt::CTRL) == key)
-        key = (key ^ Qt::CTRL) | Qt::META;
+        if (static_cast<int> (key | Qt::META) == key &&
+            static_cast<int> (key | Qt::CTRL) != key)
+          key = (key ^ Qt::META) | Qt::CTRL;
+        else if (static_cast<int> (key | Qt::CTRL) == key)
+          key = (key ^ Qt::CTRL) | Qt::META;
 
-      cmd_list_mac.at (i)->setAlternateKey (key);
-    }
+        cmd_list_mac.at (i)->setAlternateKey (key);
+      }
 #endif
 
-  // selection markers
+    // selection markers
 
-  m_indicator_id = indicatorDefine (QsciScintilla::StraightBoxIndicator);
-  if (m_indicator_id == -1)
-    m_indicator_id = 1;
+    m_indicator_id = indicatorDefine (QsciScintilla::StraightBoxIndicator);
+    if (m_indicator_id == -1)
+      m_indicator_id = 1;
 
-  setIndicatorDrawUnder (true, m_indicator_id);
+    setIndicatorDrawUnder (true, m_indicator_id);
 
-  markerDefine (QsciScintilla::Minus, marker::selection);
+    markerDefine (QsciScintilla::Minus, marker::selection);
 
-  // init state of undo/redo action for this tab
-  emit status_update (isUndoAvailable (), isRedoAvailable ());
-}
+    // init state of undo/redo action for this tab
+    emit status_update (isUndoAvailable (), isRedoAvailable ());
+  }
 
-void
-octave_qscintilla::set_selection_marker_color (const QColor& c)
-{
-  QColor ic = c;
-  ic.setAlphaF (0.25);
-  setIndicatorForegroundColor (ic, m_indicator_id);
-  setIndicatorOutlineColor (ic, m_indicator_id);
+  void octave_qscintilla::set_selection_marker_color (const QColor& c)
+  {
+    QColor ic = c;
+    ic.setAlphaF (0.25);
+    setIndicatorForegroundColor (ic, m_indicator_id);
+    setIndicatorOutlineColor (ic, m_indicator_id);
 
-  setMarkerForegroundColor (c, marker::selection);
-  setMarkerBackgroundColor (c, marker::selection);
-}
+    setMarkerForegroundColor (c, marker::selection);
+    setMarkerBackgroundColor (c, marker::selection);
+  }
 
-// context menu requested
-void
-octave_qscintilla::contextMenuEvent (QContextMenuEvent *e)
-{
+  // context menu requested
+  void octave_qscintilla::contextMenuEvent (QContextMenuEvent *e)
+  {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  QPoint global_pos, local_pos;                         // the menu's position
-  QMenu *context_menu = createStandardContextMenu ();  // standard menu
+    QPoint global_pos, local_pos;                         // the menu's position
+    QMenu *context_menu = createStandardContextMenu ();  // standard menu
 
-  bool in_left_margin = false;
+    bool in_left_margin = false;
 
-  // determine position depending on mouse or keyboard event
-  if (e->reason () == QContextMenuEvent::Mouse)
-    {
-      // context menu by mouse
-      global_pos = e->globalPos ();            // global mouse position
-      local_pos  = e->pos ();                  // local mouse position
-      if (e->x () < marginWidth (1) + marginWidth (2))
-        in_left_margin = true;
-    }
-  else
-    {
-      // context menu by keyboard or other: get point of text cursor
-      get_global_textcursor_pos (&global_pos, &local_pos);
-      QRect editor_rect = geometry ();      // editor rect mapped to global
-      editor_rect.moveTopLeft
-      (parentWidget ()->mapToGlobal (editor_rect.topLeft ()));
-      if (! editor_rect.contains (global_pos))  // is cursor outside editor?
-        global_pos = editor_rect.topLeft ();   // yes, take top left corner
-    }
+    // determine position depending on mouse or keyboard event
+    if (e->reason () == QContextMenuEvent::Mouse)
+      {
+        // context menu by mouse
+        global_pos = e->globalPos ();            // global mouse position
+        local_pos  = e->pos ();                  // local mouse position
+        if (e->x () < marginWidth (1) + marginWidth (2))
+          in_left_margin = true;
+      }
+    else
+      {
+        // context menu by keyboard or other: get point of text cursor
+        get_global_textcursor_pos (&global_pos, &local_pos);
+        QRect editor_rect = geometry ();      // editor rect mapped to global
+        editor_rect.moveTopLeft
+          (parentWidget ()->mapToGlobal (editor_rect.topLeft ()));
+        if (! editor_rect.contains (global_pos))  // is cursor outside editor?
+          global_pos = editor_rect.topLeft ();   // yes, take top left corner
+      }
 
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  if (! in_left_margin)
+    if (! in_left_margin)
 #endif
-    {
-      // fill context menu with editor's standard actions
-      emit create_context_menu_signal (context_menu);
+      {
+        // fill context menu with editor's standard actions
+        emit create_context_menu_signal (context_menu);
 
-      // additional custom entries of the context menu
-      context_menu->addSeparator ();   // separator before custom entries
+        // additional custom entries of the context menu
+        context_menu->addSeparator ();   // separator before custom entries
 
-      // help menu: get the position of the mouse or the text cursor
-      // (only for octave files)
-      QString lexer_name = lexer ()->lexer ();
-      if (lexer_name == "octave" || lexer_name == "matlab")
-        {
-          m_word_at_cursor = wordAtPoint (local_pos);
-          if (! m_word_at_cursor.isEmpty ())
-            {
-              context_menu->addAction (tr ("Help on") + ' ' + m_word_at_cursor,
-                                       this, SLOT (contextmenu_help (bool)));
-              context_menu->addAction (tr ("Documentation on")
-                                       + ' ' + m_word_at_cursor,
-                                       this, SLOT (contextmenu_doc (bool)));
-              context_menu->addAction (tr ("Edit") + ' ' + m_word_at_cursor,
-                                       this, SLOT (contextmenu_edit (bool)));
-            }
-        }
-    }
+        // help menu: get the position of the mouse or the text cursor
+        // (only for octave files)
+        QString lexer_name = lexer ()->lexer ();
+        if (lexer_name == "octave" || lexer_name == "matlab")
+          {
+            m_word_at_cursor = wordAtPoint (local_pos);
+            if (! m_word_at_cursor.isEmpty ())
+              {
+                context_menu->addAction (tr ("Help on") + ' ' + m_word_at_cursor,
+                                         this, SLOT (contextmenu_help (bool)));
+                context_menu->addAction (tr ("Documentation on")
+                                         + ' ' + m_word_at_cursor,
+                                         this, SLOT (contextmenu_doc (bool)));
+                context_menu->addAction (tr ("Edit") + ' ' + m_word_at_cursor,
+                                         this, SLOT (contextmenu_edit (bool)));
+              }
+          }
+      }
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  else
-    {
-      // remove all standard actions from scintilla
-      QList<QAction *> all_actions = context_menu->actions ();
-      QAction *a;
+    else
+      {
+        // remove all standard actions from scintilla
+        QList<QAction *> all_actions = context_menu->actions ();
+        QAction *a;
 
-      foreach (a, all_actions)
-        context_menu->removeAction (a);
+        foreach (a, all_actions)
+          context_menu->removeAction (a);
 
-      a = context_menu->addAction (tr ("dbstop if ..."), this,
-                                   SLOT (contextmenu_break_condition (bool)));
-      a->setData (local_pos);
-    }
+        a = context_menu->addAction (tr ("dbstop if ..."), this,
+                                     SLOT (contextmenu_break_condition (bool)));
+        a->setData (local_pos);
+      }
 #endif
 
-  // finaly show the menu
-  context_menu->exec (global_pos);
+    // finaly show the menu
+    context_menu->exec (global_pos);
 #endif
-}
+  }
 
-// common function with flag for documentation
-void
-octave_qscintilla::contextmenu_help_doc (bool documentation)
-{
-  if (documentation)
-    emit show_doc_signal (m_word_at_cursor);
-  else
-    emit execute_command_in_terminal_signal ("help " + m_word_at_cursor);
-}
+  // common function with flag for documentation
+  void octave_qscintilla::contextmenu_help_doc (bool documentation)
+  {
+    if (documentation)
+      emit show_doc_signal (m_word_at_cursor);
+    else
+      emit execute_command_in_terminal_signal ("help " + m_word_at_cursor);
+  }
 
-// call edit the function related to the current word
-void
-octave_qscintilla::context_edit (void)
-{
-  if (get_actual_word ())
-    contextmenu_edit (true);
-}
+  // call edit the function related to the current word
+  void octave_qscintilla::context_edit (void)
+  {
+    if (get_actual_word ())
+      contextmenu_edit (true);
+  }
 
-// call edit the function related to the current word
-void
-octave_qscintilla::context_run (void)
-{
-  if (hasSelectedText ())
-    contextmenu_run (true);
-}
+  // call edit the function related to the current word
+  void octave_qscintilla::context_run (void)
+  {
+    if (hasSelectedText ())
+      contextmenu_run (true);
+  }
 
-void
-octave_qscintilla::get_global_textcursor_pos (QPoint *global_pos,
-                                              QPoint *local_pos)
-{
-  long position = SendScintilla (SCI_GETCURRENTPOS);
-  long point_x  = SendScintilla
-                    (SCI_POINTXFROMPOSITION,0,position);
-  long point_y  = SendScintilla
-                    (SCI_POINTYFROMPOSITION,0,position);
-  *local_pos = QPoint (point_x,point_y);  // local cursor position
-  *global_pos = mapToGlobal (*local_pos); // global position of cursor
-}
+  void octave_qscintilla::get_global_textcursor_pos (QPoint *global_pos,
+                                                     QPoint *local_pos)
+  {
+    long position = SendScintilla (SCI_GETCURRENTPOS);
+    long point_x  = SendScintilla
+      (SCI_POINTXFROMPOSITION,0,position);
+    long point_y  = SendScintilla
+      (SCI_POINTYFROMPOSITION,0,position);
+    *local_pos = QPoint (point_x,point_y);  // local cursor position
+    *global_pos = mapToGlobal (*local_pos); // global position of cursor
+  }
 
-// determine the actual word and whether we are in an octave or matlab script
-bool
-octave_qscintilla::get_actual_word (void)
-{
-  QPoint global_pos, local_pos;
-  get_global_textcursor_pos (&global_pos, &local_pos);
-  m_word_at_cursor = wordAtPoint (local_pos);
-  QString lexer_name = lexer ()->lexer ();
-  return ((lexer_name == "octave" || lexer_name == "matlab")
-          && ! m_word_at_cursor.isEmpty ());
-}
+  // determine the actual word and whether we are in an octave or matlab script
+  bool octave_qscintilla::get_actual_word (void)
+  {
+    QPoint global_pos, local_pos;
+    get_global_textcursor_pos (&global_pos, &local_pos);
+    m_word_at_cursor = wordAtPoint (local_pos);
+    QString lexer_name = lexer ()->lexer ();
+    return ((lexer_name == "octave" || lexer_name == "matlab")
+            && ! m_word_at_cursor.isEmpty ());
+  }
 
-// helper function for clearing all indicators of a specific style
-void
-octave_qscintilla::clear_selection_markers (void)
-{
-  int end_pos = text ().length ();
-  int end_line, end_col;
-  lineIndexFromPosition (end_pos, &end_line, &end_col);
-  clearIndicatorRange (0, 0, end_line, end_col, m_indicator_id);
+  // helper function for clearing all indicators of a specific style
+  void octave_qscintilla::clear_selection_markers (void)
+  {
+    int end_pos = text ().length ();
+    int end_line, end_col;
+    lineIndexFromPosition (end_pos, &end_line, &end_col);
+    clearIndicatorRange (0, 0, end_line, end_col, m_indicator_id);
 
-  markerDeleteAll (marker::selection);
-}
+    markerDeleteAll (marker::selection);
+  }
 
-// Function returning the true cursor position where the tab length
-// is taken into account.
-void
-octave_qscintilla::get_current_position (int *pos, int *line, int *col)
-{
-  *pos = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS);
-  *line = SendScintilla (QsciScintillaBase::SCI_LINEFROMPOSITION, *pos);
-  *col = SendScintilla (QsciScintillaBase::SCI_GETCOLUMN, *pos);
-}
+  // Function returning the true cursor position where the tab length
+  // is taken into account.
+  void octave_qscintilla::get_current_position (int *pos, int *line, int *col)
+  {
+    *pos = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS);
+    *line = SendScintilla (QsciScintillaBase::SCI_LINEFROMPOSITION, *pos);
+    *col = SendScintilla (QsciScintillaBase::SCI_GETCOLUMN, *pos);
+  }
 
-// Function returning the comment string of the current lexer
-QStringList
-octave_qscintilla::comment_string (bool comment)
-{
-  int lexer = SendScintilla (SCI_GETLEXER);
+  // Function returning the comment string of the current lexer
+  QStringList octave_qscintilla::comment_string (bool comment)
+  {
+    int lexer = SendScintilla (SCI_GETLEXER);
 
-  switch (lexer)
-    {
+    switch (lexer)
+      {
 #if defined (HAVE_LEXER_OCTAVE) || defined (HAVE_LEXER_MATLAB)
 #if defined (HAVE_LEXER_OCTAVE)
       case SCLEX_OCTAVE:
@@ -437,44 +430,42 @@
 
       case SCLEX_BATCH:
         return QStringList ("REM ");
-    }
+      }
 
     return QStringList ("%");  // should never happen
-}
+  }
 
 
-// provide the style at a specific position
-int
-octave_qscintilla::get_style (int pos)
-{
-  int position;
-  if (pos < 0)
-    // The positition has to be reduced by 2 for getting the real style (?)
-    position = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS) - 2;
-  else
-    position = pos;
+  // provide the style at a specific position
+  int octave_qscintilla::get_style (int pos)
+  {
+    int position;
+    if (pos < 0)
+      // The positition has to be reduced by 2 for getting the real style (?)
+      position = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS) - 2;
+    else
+      position = pos;
 
-  return SendScintilla (QsciScintillaBase::SCI_GETSTYLEAT, position);
-}
+    return SendScintilla (QsciScintillaBase::SCI_GETSTYLEAT, position);
+  }
 
-// Is a specific cursor position in a line or block comment?
-int
-octave_qscintilla::is_style_comment (int pos)
-{
-  int lexer = SendScintilla (QsciScintillaBase::SCI_GETLEXER);
-  int style = get_style (pos);
+  // Is a specific cursor position in a line or block comment?
+  int octave_qscintilla::is_style_comment (int pos)
+  {
+    int lexer = SendScintilla (QsciScintillaBase::SCI_GETLEXER);
+    int style = get_style (pos);
 
-  switch (lexer)
-    {
+    switch (lexer)
+      {
       case SCLEX_CPP:
         return (ST_LINE_COMMENT * (
-                          style == QsciLexerCPP::CommentLine
-                       || style == QsciLexerCPP::CommentLineDoc)
-              + ST_BLOCK_COMMENT * (
-                           style == QsciLexerCPP::Comment
-                        || style == QsciLexerCPP::CommentDoc
-                        || style == QsciLexerCPP::CommentDocKeyword
-                        || style == QsciLexerCPP::CommentDocKeywordError)
+                                   style == QsciLexerCPP::CommentLine
+                                   || style == QsciLexerCPP::CommentLineDoc)
+                + ST_BLOCK_COMMENT * (
+                                      style == QsciLexerCPP::Comment
+                                      || style == QsciLexerCPP::CommentDoc
+                                      || style == QsciLexerCPP::CommentDocKeyword
+                                      || style == QsciLexerCPP::CommentDocKeywordError)
                 );
 
 #if defined (HAVE_LEXER_MATLAB)
@@ -498,454 +489,439 @@
       case SCLEX_BASH:
         return (ST_LINE_COMMENT * (style == QsciLexerBash::Comment));
 
-    }
-
-  return ST_NONE;
-}
+      }
 
-// Do smart indendation after if, for, ...
-void
-octave_qscintilla::smart_indent (bool do_smart_indent,
-                                 int do_auto_close, int line)
-{
-  QString prevline = text (line);
+    return ST_NONE;
+  }
 
-  QRegExp bkey = QRegExp ("^[\t ]*(if|for|while|switch|case|otherwise"
-                          "|do|function|properties|events|classdef"
-                          "|unwind_protect|unwind_protect_cleanup|try"
-                          "|parfor|methods)"
-                          "[\r]?[\n\t #%]");
-  // last word except for comments, assuming no ' or " in comment.
-  // rx_end = QRegExp ("(\\w+)[ \t;\r\n]*([%#][^\"']*)?$");
+  // Do smart indendation after if, for, ...
+  void octave_qscintilla::smart_indent (bool do_smart_indent,
+                                        int do_auto_close, int line)
+  {
+    QString prevline = text (line);
 
-  // last word except for comments,
-  // allowing % and # in single or double quoted strings
-  // FIXME This will get confused by transpose.
-  QRegExp ekey = QRegExp ("(?:(?:['\"][^'\"]*['\"])?[^%#]*)*"
-                          "(\\w+)[ \t;\r\n]*([%#].*)?$");
+    QRegExp bkey = QRegExp ("^[\t ]*(if|for|while|switch|case|otherwise"
+                            "|do|function|properties|events|classdef"
+                            "|unwind_protect|unwind_protect_cleanup|try"
+                            "|parfor|methods)"
+                            "[\r]?[\n\t #%]");
+    // last word except for comments, assuming no ' or " in comment.
+    // rx_end = QRegExp ("(\\w+)[ \t;\r\n]*([%#][^\"']*)?$");
 
-  int bpos = bkey.indexIn (prevline, 0);
-  int epos;
+    // last word except for comments,
+    // allowing % and # in single or double quoted strings
+    // FIXME This will get confused by transpose.
+    QRegExp ekey = QRegExp ("(?:(?:['\"][^'\"]*['\"])?[^%#]*)*"
+                            "(\\w+)[ \t;\r\n]*([%#].*)?$");
 
-  if (bpos > -1)
-    {
-      // Found keyword after that indentation should be added
-
-      // Check for existing end statement in the same line
-      epos = ekey.indexIn (prevline, bpos);
-      QString first_word = bkey.cap(1);
-      bool inline_end = (epos > -1) && is_end (ekey.cap(1), first_word);
+    int bpos = bkey.indexIn (prevline, 0);
+    int epos;
 
-      if (do_smart_indent && ! inline_end)
-        {
-          // Do smart indent in the current line (line+1)
-          indent (line+1);
-          setCursorPosition (line+1, indentation (line) + indentationWidth ());
-        }
+    if (bpos > -1)
+      {
+        // Found keyword after that indentation should be added
 
-      if (do_auto_close
-              && ! inline_end
-              && ! first_word.contains (
-                      QRegExp ("(case|otherwise|unwind_protect_cleanup)")))
-        {
-          // Do auto close
-          auto_close (do_auto_close, line, prevline, first_word);
-        }
+        // Check for existing end statement in the same line
+        epos = ekey.indexIn (prevline, bpos);
+        QString first_word = bkey.cap(1);
+        bool inline_end = (epos > -1) && is_end (ekey.cap(1), first_word);
+
+        if (do_smart_indent && ! inline_end)
+          {
+            // Do smart indent in the current line (line+1)
+            indent (line+1);
+            setCursorPosition (line+1, indentation (line) + indentationWidth ());
+          }
 
-      return;
-    }
-
-  QRegExp mkey = QRegExp ("^[\t ]*(else|elseif|catch)[\r]?[\t #%\n]");
-  if (prevline.contains (mkey))
-    {
-      int prev_ind = indentation (line-1);
-      int act_ind = indentation (line);
+        if (do_auto_close
+            && ! inline_end
+            && ! first_word.contains (
+                                      QRegExp ("(case|otherwise|unwind_protect_cleanup)")))
+          {
+            // Do auto close
+            auto_close (do_auto_close, line, prevline, first_word);
+          }
 
-      if (prev_ind == act_ind)
-        unindent (line);
-      else if (prev_ind > act_ind)
-        {
-          setIndentation (line+1, prev_ind);
-          setCursorPosition (line+1, prev_ind);
-        }
-      return;
-    }
+        return;
+      }
 
-  ekey = QRegExp ("^[\t ]*(end|endif|endfor|endwhile|until|endfunction"
-                  "|end_try_catch|end_unwind_protext)[\r]?[\t #%\n(;]");
-  if (prevline.contains (ekey))
-    {
-      if (indentation (line-1) <= indentation (line))
-        {
-          unindent (line+1);
+    QRegExp mkey = QRegExp ("^[\t ]*(else|elseif|catch)[\r]?[\t #%\n]");
+    if (prevline.contains (mkey))
+      {
+        int prev_ind = indentation (line-1);
+        int act_ind = indentation (line);
+
+        if (prev_ind == act_ind)
           unindent (line);
-          setCursorPosition (line+1,
-                                         indentation (line));
-        }
-      return;
-    }
-}
-
-// Do smart indendation of current selection or line.
-void
-octave_qscintilla::smart_indent_line_or_selected_text (int lineFrom, int lineTo)
-{
-  QRegExp blank_line_regexp = QRegExp ("^[\t ]*$");
+        else if (prev_ind > act_ind)
+          {
+            setIndentation (line+1, prev_ind);
+            setCursorPosition (line+1, prev_ind);
+          }
+        return;
+      }
 
-  QRegExp begin_block_regexp
-    = QRegExp ("^([\t ]*)(if|elseif|else"
-               "|for|while|do|parfor"
-               "|switch|case|otherwise"
-               "|function"
-               "|classdef|properties|events|enumeration|methods"
-               "|unwind_protect|unwind_protect_cleanup|try|catch)"
-               "[\r\n\t #%]");
+    ekey = QRegExp ("^[\t ]*(end|endif|endfor|endwhile|until|endfunction"
+                    "|end_try_catch|end_unwind_protext)[\r]?[\t #%\n(;]");
+    if (prevline.contains (ekey))
+      {
+        if (indentation (line-1) <= indentation (line))
+          {
+            unindent (line+1);
+            unindent (line);
+            setCursorPosition (line+1,
+                               indentation (line));
+          }
+        return;
+      }
+  }
 
-  QRegExp end_block_regexp
-    = QRegExp ("^([\t ]*)(end"
-               "|end(for|function|if|parfor|switch|while"
-               "|classdef|enumeration|events|methods|properties)"
-               "|end_(try_catch|unwind_protect)"
-               "|until)"
-               "[\r\n\t #%]");
+  // Do smart indendation of current selection or line.
+  void octave_qscintilla::smart_indent_line_or_selected_text (int lineFrom,
+                                                              int lineTo)
+  {
+    QRegExp blank_line_regexp = QRegExp ("^[\t ]*$");
+
+    QRegExp begin_block_regexp
+      = QRegExp ("^([\t ]*)(if|elseif|else"
+                 "|for|while|do|parfor"
+                 "|switch|case|otherwise"
+                 "|function"
+                 "|classdef|properties|events|enumeration|methods"
+                 "|unwind_protect|unwind_protect_cleanup|try|catch)"
+                 "[\r\n\t #%]");
 
-  int indent_column = -1;
-  int indent_increment = indentationWidth ();
+    QRegExp end_block_regexp
+      = QRegExp ("^([\t ]*)(end"
+                 "|end(for|function|if|parfor|switch|while"
+                 "|classdef|enumeration|events|methods|properties)"
+                 "|end_(try_catch|unwind_protect)"
+                 "|until)"
+                 "[\r\n\t #%]");
 
-  for (int line = lineFrom-1; line >= 0; line--)
-    {
-      QString line_text = text (line);
+    int indent_column = -1;
+    int indent_increment = indentationWidth ();
 
-      if (blank_line_regexp.indexIn (line_text) < 0)
-        {
-          // Found first non-blank line above beginning of region or
-          // current line.  Base indentation from this line, increasing
-          // indentation by indentationWidth if it looks like the
-          // beginning of a code block.
-
-          indent_column = indentation (line);
+    for (int line = lineFrom-1; line >= 0; line--)
+      {
+        QString line_text = text (line);
 
-          if (begin_block_regexp.indexIn (line_text) > -1)
-            indent_column += indent_increment;
+        if (blank_line_regexp.indexIn (line_text) < 0)
+          {
+            // Found first non-blank line above beginning of region or
+            // current line.  Base indentation from this line, increasing
+            // indentation by indentationWidth if it looks like the
+            // beginning of a code block.
 
-          break;
-        }
-    }
-
-  if (indent_column < 0)
-    indent_column = indentation (lineFrom);
+            indent_column = indentation (line);
 
-  for (int line = lineFrom; line <= lineTo; line++)
-    {
-      QString line_text = text (line);
+            if (begin_block_regexp.indexIn (line_text) > -1)
+              indent_column += indent_increment;
 
-      if (end_block_regexp.indexIn (line_text) > -1)
-        indent_column -= indent_increment;
+            break;
+          }
+      }
 
-      setIndentation (line, indent_column);
+    if (indent_column < 0)
+      indent_column = indentation (lineFrom);
 
-      if (begin_block_regexp.indexIn (line_text) > -1)
-        indent_column += indent_increment;
-    }
-}
+    for (int line = lineFrom; line <= lineTo; line++)
+      {
+        QString line_text = text (line);
 
-void
-octave_qscintilla::set_word_selection (const QString& word)
-{
-  m_selection = word;
+        if (end_block_regexp.indexIn (line_text) > -1)
+          indent_column -= indent_increment;
+
+        setIndentation (line, indent_column);
 
-  if (word.isEmpty ())
-    {
-      m_selection_line = -1;
-      m_selection_col = -1;
+        if (begin_block_regexp.indexIn (line_text) > -1)
+          indent_column += indent_increment;
+      }
+  }
 
-      m_selection_replacement = "";
-
-      clear_selection_markers ();
+  void octave_qscintilla::set_word_selection (const QString& word)
+  {
+    m_selection = word;
 
-      QToolTip::hideText ();
-    }
-  else
-    {
-      int pos;
-      get_current_position (&pos, &m_selection_line, &m_selection_col);
-    }
-}
+    if (word.isEmpty ())
+      {
+        m_selection_line = -1;
+        m_selection_col = -1;
 
-void
-octave_qscintilla::show_selection_markers (int line, int col, int len)
-{
-  fillIndicatorRange (line, col - len, line, col, m_indicator_id);
+        m_selection_replacement = "";
+
+        clear_selection_markers ();
 
-  markerAdd (line, marker::selection);
-}
+        QToolTip::hideText ();
+      }
+    else
+      {
+        int pos;
+        get_current_position (&pos, &m_selection_line, &m_selection_col);
+      }
+  }
 
-void
-octave_qscintilla::contextmenu_help (bool)
-{
-  contextmenu_help_doc (false);
-}
+  void octave_qscintilla::show_selection_markers (int line, int col, int len)
+  {
+    fillIndicatorRange (line, col - len, line, col, m_indicator_id);
 
-void
-octave_qscintilla::contextmenu_doc (bool)
-{
-  contextmenu_help_doc (true);
-}
+    markerAdd (line, marker::selection);
+  }
+
+  void octave_qscintilla::contextmenu_help (bool)
+  {
+    contextmenu_help_doc (false);
+  }
 
-void
-octave_qscintilla::context_help_doc (bool documentation)
-{
-  if (get_actual_word ())
-    contextmenu_help_doc (documentation);
-}
+  void octave_qscintilla::contextmenu_doc (bool)
+  {
+    contextmenu_help_doc (true);
+  }
 
-void
-octave_qscintilla::contextmenu_edit (bool)
-{
-  emit context_menu_edit_signal (m_word_at_cursor);
-}
+  void octave_qscintilla::context_help_doc (bool documentation)
+  {
+    if (get_actual_word ())
+      contextmenu_help_doc (documentation);
+  }
 
-void
-octave_qscintilla::contextmenu_run (bool)
-{
-  QStringList commands = selectedText ().split (QRegExp ("[\r\n]"),
-                                                QString::SkipEmptyParts);
-  for (int i = 0; i < commands.size (); i++)
-    emit execute_command_in_terminal_signal (commands.at (i));
-}
+  void octave_qscintilla::contextmenu_edit (bool)
+  {
+    emit context_menu_edit_signal (m_word_at_cursor);
+  }
 
-// wrappers for dbstop related context menu items
+  void octave_qscintilla::contextmenu_run (bool)
+  {
+    QStringList commands = selectedText ().split (QRegExp ("[\r\n]"),
+                                                  QString::SkipEmptyParts);
+    for (int i = 0; i < commands.size (); i++)
+      emit execute_command_in_terminal_signal (commands.at (i));
+  }
 
-// FIXME: Why can't the data be sent as the argument to the function???
-void
-octave_qscintilla::contextmenu_break_condition (bool)
-{
+  // wrappers for dbstop related context menu items
+
+  // FIXME: Why can't the data be sent as the argument to the function???
+  void octave_qscintilla::contextmenu_break_condition (bool)
+  {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  QAction *action = qobject_cast<QAction *>(sender ());
-  QPoint local_pos = action->data ().value<QPoint> ();
+    QAction *action = qobject_cast<QAction *>(sender ());
+    QPoint local_pos = action->data ().value<QPoint> ();
 
-  // pick point just right of margins, so lineAt doesn't give -1
-  int margins = marginWidth (1) + marginWidth (2) + marginWidth (3);
-  local_pos = QPoint (margins + 1, local_pos.y ());
+    // pick point just right of margins, so lineAt doesn't give -1
+    int margins = marginWidth (1) + marginWidth (2) + marginWidth (3);
+    local_pos = QPoint (margins + 1, local_pos.y ());
 
-  emit context_menu_break_condition_signal (lineAt (local_pos));
+    emit context_menu_break_condition_signal (lineAt (local_pos));
 #endif
-}
+  }
 
-void
-octave_qscintilla::contextmenu_break_once (const QPoint& local_pos)
-{
+  void octave_qscintilla::contextmenu_break_once (const QPoint& local_pos)
+  {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-  emit context_menu_break_once (lineAt (local_pos));
+    emit context_menu_break_once (lineAt (local_pos));
 #endif
-}
+  }
 
-void
-octave_qscintilla::text_changed (void)
-{
-  emit status_update (isUndoAvailable (), isRedoAvailable ());
-}
+  void octave_qscintilla::text_changed (void)
+  {
+    emit status_update (isUndoAvailable (), isRedoAvailable ());
+  }
 
-void
-octave_qscintilla::cursor_position_changed (int line, int col)
-{
-  // Clear the selection if we move away from it.  We have to check the
-  // position, because we allow entering text at the point of the
-  // selection to trigger a search and replace that does not clear the
-  // selection until it is complete.
+  void octave_qscintilla::cursor_position_changed (int line, int col)
+  {
+    // Clear the selection if we move away from it.  We have to check the
+    // position, because we allow entering text at the point of the
+    // selection to trigger a search and replace that does not clear the
+    // selection until it is complete.
 
-  if (! m_selection.isEmpty ()
-      && (line != m_selection_line || col != m_selection_col))
-    set_word_selection ();
-}
+    if (! m_selection.isEmpty ()
+        && (line != m_selection_line || col != m_selection_col))
+      set_word_selection ();
+  }
 
-// when edit area gets focus update information on undo/redo actions
-void octave_qscintilla::focusInEvent (QFocusEvent *focusEvent)
-{
-  emit status_update (isUndoAvailable (), isRedoAvailable ());
+  // when edit area gets focus update information on undo/redo actions
+  void octave_qscintilla::focusInEvent (QFocusEvent *focusEvent)
+  {
+    emit status_update (isUndoAvailable (), isRedoAvailable ());
 
-  QsciScintilla::focusInEvent (focusEvent);
-}
+    QsciScintilla::focusInEvent (focusEvent);
+  }
 
-void
-octave_qscintilla::show_replace_action_tooltip (void)
-{
-  int pos;
-  get_current_position (&pos, &m_selection_line, &m_selection_col);
+  void octave_qscintilla::show_replace_action_tooltip (void)
+  {
+    int pos;
+    get_current_position (&pos, &m_selection_line, &m_selection_col);
 
-  // Offer to replace other instances.
+    // Offer to replace other instances.
+
+    QKeySequence keyseq = Qt::SHIFT + Qt::Key_Return;
 
-  QKeySequence keyseq = Qt::SHIFT + Qt::Key_Return;
+    QString msg = (tr ("Press '%1' to replace all occurrences of '%2' with '%3'.")
+                   . arg (keyseq.toString ())
+                   . arg (m_selection)
+                   . arg (m_selection_replacement));
 
-  QString msg = (tr ("Press '%1' to replace all occurrences of '%2' with '%3'.")
-                 . arg (keyseq.toString ())
-                 . arg (m_selection)
-                 . arg (m_selection_replacement));
+    QPoint global_pos;
+    QPoint local_pos;
 
-  QPoint global_pos;
-  QPoint local_pos;
+    get_global_textcursor_pos (&global_pos, &local_pos);
+
+    QFontMetrics ttfm (QToolTip::font ());
 
-  get_global_textcursor_pos (&global_pos, &local_pos);
+    // Try to avoid overlapping with the text completion dialog
+    // and the text that is currently being edited.
 
-  QFontMetrics ttfm (QToolTip::font ());
+    global_pos += QPoint (2*ttfm.maxWidth (), -3*ttfm.height ());
+
+    QToolTip::showText (global_pos, msg);
+  }
 
-  // Try to avoid overlapping with the text completion dialog
-  // and the text that is currently being edited.
-
-  global_pos += QPoint (2*ttfm.maxWidth (), -3*ttfm.height ());
-
-  QToolTip::showText (global_pos, msg);
-}
+  void octave_qscintilla::keyPressEvent (QKeyEvent *key_event)
+  {
+    if (m_selection.isEmpty ())
+      QsciScintilla::keyPressEvent (key_event);
+    else
+      {
+        int key = key_event->key ();
+        Qt::KeyboardModifiers modifiers = key_event->modifiers ();
 
-void
-octave_qscintilla::keyPressEvent (QKeyEvent *key_event)
-{
-  if (m_selection.isEmpty ())
-    QsciScintilla::keyPressEvent (key_event);
-  else
-    {
-      int key = key_event->key ();
-      Qt::KeyboardModifiers modifiers = key_event->modifiers ();
+        if (key == Qt::Key_Return && modifiers == Qt::ShiftModifier)
+          {
+            // get the resulting cursor position
+            // (required if click was beyond a line ending)
+            int pos, line, col;
+            get_current_position (&pos, &line, &col);
 
-      if (key == Qt::Key_Return && modifiers == Qt::ShiftModifier)
-        {
-          // get the resulting cursor position
-          // (required if click was beyond a line ending)
-          int pos, line, col;
-          get_current_position (&pos, &line, &col);
+            // remember first visible line for restoring the view afterwards
+            int first_line = firstVisibleLine ();
 
-          // remember first visible line for restoring the view afterwards
-          int first_line = firstVisibleLine ();
+            // search for first occurrence of the detected word
+            bool find_result_available
+              = findFirst (m_selection,
+                           false,   // no regexp
+                           true,    // case sensitive
+                           true,    // whole words only
+                           false,   // do not wrap
+                           true,    // forward
+                           0, 0,    // from the beginning
+                           false
+#if defined (HAVE_QSCI_VERSION_2_6_0)
+                           , true
+#endif
+                           );
 
-          // search for first occurrence of the detected word
-          bool find_result_available
-            = findFirst (m_selection,
-                         false,   // no regexp
-                         true,    // case sensitive
-                         true,    // whole words only
-                         false,   // do not wrap
-                         true,    // forward
-                         0, 0,    // from the beginning
-                         false
-#if defined (HAVE_QSCI_VERSION_2_6_0)
-                         , true
-#endif
-                         );
+            while (find_result_available)
+              {
+                replace (m_selection_replacement);
 
-          while (find_result_available)
-            {
-              replace (m_selection_replacement);
+                // FIXME: is this the right thing to do?  findNext doesn't
+                // work properly if the length of the replacement text is
+                // different from the original.
 
-              // FIXME: is this the right thing to do?  findNext doesn't
-              // work properly if the length of the replacement text is
-              // different from the original.
-
-              int new_line, new_col;
-              get_current_position (&pos, &new_line, &new_col);
+                int new_line, new_col;
+                get_current_position (&pos, &new_line, &new_col);
 
-              find_result_available
-                = findFirst (m_selection,
-                             false,   // no regexp
-                             true,    // case sensitive
-                             true,    // whole words only
-                             false,   // do not wrap
-                             true,    // forward
-                             new_line, new_col,    // from new pos
-                             false
+                find_result_available
+                  = findFirst (m_selection,
+                               false,   // no regexp
+                               true,    // case sensitive
+                               true,    // whole words only
+                               false,   // do not wrap
+                               true,    // forward
+                               new_line, new_col,    // from new pos
+                               false
 #if defined (HAVE_QSCI_VERSION_2_6_0)
-                             , true
+                               , true
 #endif
-                             );
-            }
+                               );
+              }
 
-          // restore the visible area of the file, the cursor position,
-          // and the selection
-          setFirstVisibleLine (first_line);
-          setCursorPosition (line, col);
+            // restore the visible area of the file, the cursor position,
+            // and the selection
+            setFirstVisibleLine (first_line);
+            setCursorPosition (line, col);
 
-          // Clear the selection.
-          set_word_selection ();
-        }
-      else
-        {
-          // The idea here is to allow backspace to remove the last
-          // character of the replacement text to allow minimal editing
-          // and to also end the selection replacement action if text is
-          // not valid as a word constituent (control characters,
-          // etc.).  Is there a better way than having special cases for
-          // DEL and ESC here?
+            // Clear the selection.
+            set_word_selection ();
+          }
+        else
+          {
+            // The idea here is to allow backspace to remove the last
+            // character of the replacement text to allow minimal editing
+            // and to also end the selection replacement action if text is
+            // not valid as a word constituent (control characters,
+            // etc.).  Is there a better way than having special cases for
+            // DEL and ESC here?
 
-          QString text = key_event->text ();
+            QString text = key_event->text ();
 
-          bool cancel_replacement = false;
+            bool cancel_replacement = false;
 
-          if (key == Qt::Key_Backspace)
-            {
-              if (m_selection_replacement.isEmpty ())
-                cancel_replacement = true;
-              else
-                m_selection_replacement.chop (1);
-            }
-          else if (key == Qt::Key_Delete || key == Qt::Key_Escape)
-            cancel_replacement = true;
-          else if (! text.isEmpty ())
-            m_selection_replacement += text;
-          else if (modifiers != Qt::ShiftModifier)
-            cancel_replacement = true;
+            if (key == Qt::Key_Backspace)
+              {
+                if (m_selection_replacement.isEmpty ())
+                  cancel_replacement = true;
+                else
+                  m_selection_replacement.chop (1);
+              }
+            else if (key == Qt::Key_Delete || key == Qt::Key_Escape)
+              cancel_replacement = true;
+            else if (! text.isEmpty ())
+              m_selection_replacement += text;
+            else if (modifiers != Qt::ShiftModifier)
+              cancel_replacement = true;
 
-          // Perform default action.
+            // Perform default action.
 
-          QsciScintilla::keyPressEvent (key_event);
+            QsciScintilla::keyPressEvent (key_event);
 
-          if (cancel_replacement)
-            set_word_selection ();
+            if (cancel_replacement)
+              set_word_selection ();
 
-          if (! m_selection_replacement.isEmpty ())
-            show_replace_action_tooltip ();
-        }
-    }
-}
+            if (! m_selection_replacement.isEmpty ())
+              show_replace_action_tooltip ();
+          }
+      }
+  }
 
-void
-octave_qscintilla::auto_close (int auto_endif, int linenr,
-                               const QString& line, QString& first_word)
-{
-  // Insert and "end" for an "if" etc., if needed.
-  // (Use of "while" allows "return" to skip the rest.
-  // It may be clearer to use "if" and "goto",
-  // but that violates the coding standards.)
+  void octave_qscintilla::auto_close (int auto_endif, int linenr,
+                                      const QString& line, QString& first_word)
+  {
+    // Insert and "end" for an "if" etc., if needed.
+    // (Use of "while" allows "return" to skip the rest.
+    // It may be clearer to use "if" and "goto",
+    // but that violates the coding standards.)
 
-  bool autofill_simple_end = (auto_endif == 2);
+    bool autofill_simple_end = (auto_endif == 2);
 
-  size_t start = line.toStdString ().find_first_not_of (" \t");
+    size_t start = line.toStdString ().find_first_not_of (" \t");
 
-  // Check if following line has the same or less indentation
-  // Check if the following line does not start with
-  //       end* (until) (catch)
-  if (linenr < lines () - 1)
-    {
-      int offset = 1;
-      size_t next_start;
-      QString next_line;
-      do                            // find next non-blank line
-        {
-          next_line = text (linenr + offset++);
-          next_start = next_line.toStdString ().find_first_not_of (" \t\n");
-        }
-      while (linenr + offset < lines ()
-             && next_start == std::string::npos);
-      if (next_start == std::string::npos)
-        next_start = 0;
-      if (next_start > start)       // more indented => don't add "end"
-        return;
-      if (next_start == start)      // same => check if already is "end"
-        {
-          QRegExp rx_start = QRegExp (R"((\w+))");
-          int tmp = rx_start.indexIn (next_line, start);
-           if (tmp != -1 && is_end (rx_start.cap(1), first_word))
-             return;
-        }
-    }
+    // Check if following line has the same or less indentation
+    // Check if the following line does not start with
+    //       end* (until) (catch)
+    if (linenr < lines () - 1)
+      {
+        int offset = 1;
+        size_t next_start;
+        QString next_line;
+        do                            // find next non-blank line
+          {
+            next_line = text (linenr + offset++);
+            next_start = next_line.toStdString ().find_first_not_of (" \t\n");
+          }
+        while (linenr + offset < lines ()
+               && next_start == std::string::npos);
+        if (next_start == std::string::npos)
+          next_start = 0;
+        if (next_start > start)       // more indented => don't add "end"
+          return;
+        if (next_start == start)      // same => check if already is "end"
+          {
+            QRegExp rx_start = QRegExp (R"((\w+))");
+            int tmp = rx_start.indexIn (next_line, start);
+            if (tmp != -1 && is_end (rx_start.cap(1), first_word))
+              return;
+          }
+      }
 
     // If all of the above, insert a new line, with matching indent
     // and either 'end' or 'end...', depending on a flag.
@@ -982,6 +958,7 @@
       }
 
     insertAt (QString (start, ' ') + next_line, linenr + 2, 0);
+  }
 }
 
 #endif