Пример #1
0
        /// <summary>
        /// 新输入
        /// </summary>
        /// <param name="insertion"></param>
        /// <returns></returns>
        public override bool Insert(string insertion)
        {
            RegExpMaskManagerState state;

            MaskManagerStated.StateChangeType changeType = ((insertion.Length == 0) && base.IsSelection) ? MaskManagerStated.StateChangeType.Delete : MaskManagerStated.StateChangeType.Insert;
            string          head     = GetCurrentEditText().Substring(0, base.DisplaySelectionStart);
            string          replaced = GetCurrentEditText().Substring(base.DisplaySelectionStart, base.DisplaySelectionLength);
            string          tail     = GetCurrentEditText().Substring(base.DisplaySelectionEnd);
            MaskLogicResult result   = _logic.GetReplaceResult(head, replaced, tail, insertion);

            if (result == null)
            {
                return(false);
            }
            if (_reverseDfa)
            {
                state = new RegExpMaskManagerState(result.EditText, base.DisplaySelectionStart, base.DisplaySelectionStart);
            }
            else if ((_isOptimistic && (changeType == MaskManagerStated.StateChangeType.Insert)) && (tail.Length == 0))
            {
                string editText = _logic.OptimisticallyExpand(result.EditText);
                state = new RegExpMaskManagerState(editText, result.CursorPosition, editText.Length);
            }
            else
            {
                state = new RegExpMaskManagerState(result.EditText, result.CursorPosition, result.CursorPosition);
            }
            return(base.Apply(state, changeType));
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="comparedState"></param>
        /// <returns></returns>
        public override bool IsSame(MaskManagerState comparedState)
        {
            if (comparedState == null)
            {
                return(false);
            }
            if (base.GetType() != comparedState.GetType())
            {
                throw new NotImplementedException("Internal error");
            }
            RegExpMaskManagerState state = (RegExpMaskManagerState)comparedState;

            if (EditText != state.EditText)
            {
                return(false);
            }
            if (CursorPosition != state.CursorPosition)
            {
                return(false);
            }
            if (SelectionAnchor != state.SelectionAnchor)
            {
                return(false);
            }
            return(true);
        }