private void setInputMode(InputModes value)
        {
            visualScopes.Clear();
            lastVisualScopeMarker = null;

            switch (value)
            {
            case InputModes.RegexManipulation:
                if (lastTextBeforeInputModeChange != Text)
                {
                    ResetRootScope();
                    lastTextBeforeInputModeChange = Text;
                }
                CanDrawScopes     = true;
                ReadOnly          = true;
                BackColor         = regexModeBackColor;
                CacheSpecialMarks = true;
                raiseInputModeChangedEvent();
                break;

            case InputModes.StandardEdit:
                ShowSPaces        = false;
                ShowTabs          = false;
                ShowNewLines      = false;
                CacheSpecialMarks = false;
                CanDrawScopes     = false;
                ReadOnly          = false;
                BackColor         = editModeBackColor;
                raiseInputModeChangedEvent();
                break;

            default:
                break;
            }
        }
        private VisualScopeMarker GetVisualScopeMarker(Scope scopeToDraw)
        {
            try
            {
                if (scopeToDraw == null)
                {
                    return(null);
                }
                if (needsRefreshingAfterScrollOrResize)
                {
                    visualScopes.Clear();
                    needsRefreshingAfterScrollOrResize = false;
                }
                VisualScopeMarker visualScopeMarker = visualScopes[scopeToDraw] as VisualScopeMarker;
                if (visualScopeMarker == null)
                {
                    visualScopeMarker         = makeRelevantVisualScope(scopeToDraw);
                    visualScopes[scopeToDraw] = visualScopeMarker;
                }
                visualScopeMarker = visualScopes[scopeToDraw] as VisualScopeMarker;

                return(visualScopeMarker);
            }
            catch (Exception)
            {
                return(null);
            }
        }
        private void DrawScope(Scope scopeToDraw)
        {
            if (!CanDrawScopes || scopeToDraw == null)
            {
                return;
            }

            VisualScopeMarker visualScopeMarker = GetVisualScopeMarker(scopeToDraw);

            if (visualScopeMarker != null)
            {
                visualScopeMarker.Redraw(currentGraphics);
            }
            // makeDebuggerMarker(scopeToDraw).DrawCustomForSingleSurroundingRect(Rectangle.Empty, scopeToDraw);

            foreach (Scope innerScope in scopeToDraw.GetInnerScopes())
            {
                if (innerScope == null)
                {
                    continue;
                }

                if (!innerScope.IsFlat)
                {
                    DrawScope(innerScope);
                }
                VisualScopeMarker innerVisual = GetVisualScopeMarker(innerScope);
                if (innerVisual != null)
                {
                    innerVisual.Redraw(currentGraphics);
                }
            }
        }
        private void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (!CanDrawScopes || DesignMode || Text == string.Empty)
            {
                return;
            }
            //            LockWindowUpdate(Handle);
            Point cursorPos = new Point(e.X, e.Y);

            int cursorCharPos = GetCharIndexFromPosition(cursorPos);
            int cursorLine    = GetLineFromCharIndex(cursorCharPos);


            Scope             innerScope        = RootScope.FindInnerScope(cursorCharPos, 1);
            VisualScopeMarker visualScopeMarker = GetVisualScopeMarker(innerScope);

            if (visualScopeMarker == null)
            {
                return;
            }
            bool intersectsWithCursor = visualScopeMarker.IntersectsWithCursor(cursorPos);

            if (!intersectsWithCursor)
            {
                if (lastVisualScopeMarker != null)
                {
                    lastVisualScopeMarker.OnDeactivate();
                }

                if (ActiveScope == null)
                {
                    return;
                }

                lastScope   = null;
                ActiveScope = null;
                return;
            }

            if (lastVisualScopeMarker != null &&
                lastVisualScopeMarker != visualScopeMarker)
            {
                lastVisualScopeMarker.OnDeactivate();
            }

            lastVisualScopeMarker = visualScopeMarker;
            if (visualScopeMarker.IsActive)
            {
                visualScopeMarker.OnMouseMove(e);
            }
            else
            {
                visualScopeMarker.OnActivate();
            }

            if (lastScope == null && innerScope != null)
            {
                lastScope   = innerScope;
                ActiveScope = innerScope;
            }
            else
            {
                if (lastScope == innerScope)
                {
                    return;
                }
                else
                {
                    lastScope   = innerScope;
                    ActiveScope = innerScope;
                }
            }
        }