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 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;
                }
            }

        }