Exemplo n.º 1
0
        /// <summary>
        /// Processes the insert change for Type II backtracking detection.
        /// </summary>
        /// <param name="anEvent">An event.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="insertedText">The inserted text.</param>
        /// <param name="logProvider">The log provider.</param>
        private void ProcessInsertType2(Event anEvent, int offset, string insertedText, ILogProvider logProvider)
        {
            // Do nothing if the insertion happened with a paste command.
            if (logProvider.CausedByPaste(anEvent))
            {
                return;
            }

            if (logProvider.CausedByAutoFormatting(anEvent))
            {
                return;
            }

            // See if there is are any previous deletions that contains this insertedText.
            foreach (var delete in this.DeleteSegments)
            {
                if (delete.Text.Contains(insertedText.Trim()))
                {
                    if (this.FilterType2Backtracking(delete, insertedText))
                    {
                        var desc = string.Format(
                            "Type2 [{2} -> {3}]: \"{0}\" - \"{1}\"",
                            delete.Text,
                            insertedText,
                            delete.Event.ID,
                            anEvent.ID);

                        var instance = new Type2BacktrackingPatternInstance(
                            delete.Event,
                            anEvent,
                            desc);

                        this.Patterns.Add(instance);
                    }
                }

                // TODO Maybe consider very similar piece of code?
            }
        }