public void Replace(int offset, int length, string text)
        {
            int lineNumberForOffset             = this.GetLineNumberForOffset(offset);
            int totalNumberOfLines              = this.TotalNumberOfLines;
            DeferredEventList deferredEventList = new DeferredEventList();

            this.RemoveInternal(ref deferredEventList, offset, length);
            int num = this.TotalNumberOfLines;

            if (!string.IsNullOrEmpty(text))
            {
                this.InsertInternal(offset, text);
            }
            this.RunHighlighter(lineNumberForOffset, 1 + Math.Max(0, this.TotalNumberOfLines - num));
            if (deferredEventList.removedLines != null)
            {
                foreach (LineSegment removedLine in deferredEventList.removedLines)
                {
                    this.OnLineDeleted(new LineEventArgs(this.document, removedLine));
                }
            }
            deferredEventList.RaiseEvents();
            if (this.TotalNumberOfLines != totalNumberOfLines)
            {
                this.OnLineCountChanged(new LineCountChangeEventArgs(this.document, lineNumberForOffset, this.TotalNumberOfLines - totalNumberOfLines));
            }
        }
예제 #2
0
        public void Replace(int offset, int length, string text)
        {
            //Debug.WriteLine("Replace offset="+offset+" length="+length+" text.Length="+text.Length);
            int lineStart        = GetLineNumberForOffset(offset);
            int oldNumberOfLines = TotalNumberOfLines;
            DeferredEventList deferredEventList = new DeferredEventList();

            //Logger.Info("LineManager.Replace 10");

            RemoveInternal(ref deferredEventList, offset, length);
            int numberOfLinesAfterRemoving = TotalNumberOfLines;

            InsertInternal(offset, text ?? "");
            //TODO2*** 50 Mb takes 1.5 sec

#if DEBUG_EX
            Console.WriteLine("New line collection:");
            Console.WriteLine(lineCollection.GetTreeAsString());
            Console.WriteLine("New text:");
            Console.WriteLine("'" + document.TextContent + "'");
#endif
            // Only fire events after RemoveInternal+InsertInternal finished completely:
            // Otherwise we would expose inconsistent state to the event handlers.
            RunHighlighter(lineStart, 1 + Math.Max(0, TotalNumberOfLines - numberOfLinesAfterRemoving));

            //TODO2*** 50 Mb takes 5 sec

            if (deferredEventList.removedLines != null)
            {
                foreach (LineSegment ls in deferredEventList.removedLines)
                {
                    OnLineDeleted(new LineEventArgs(_document, ls));
                }
            }

            deferredEventList.RaiseEvents();
            if (TotalNumberOfLines != oldNumberOfLines)
            {
                OnLineCountChanged(new LineCountChangeEventArgs(_document, lineStart, TotalNumberOfLines - oldNumberOfLines));
            }
        }
        public void Replace(int offset, int length, string text)
        {
            Debug.WriteLine("Replace offset=" + offset + " length=" + length + " text.Length=" + text.Length);
            int lineStart        = GetLineNumberForOffset(offset);
            int oldNumberOfLines = this.TotalNumberOfLines;
            DeferredEventList deferredEventList = new DeferredEventList();

            RemoveInternal(ref deferredEventList, offset, length);
            int numberOfLinesAfterRemoving = this.TotalNumberOfLines;

            if (!string.IsNullOrEmpty(text))
            {
                InsertInternal(offset, text);
            }
//			#if DEBUG
//			Console.WriteLine("New line collection:");
//			Console.WriteLine(lineCollection.GetTreeAsString());
//			Console.WriteLine("New text:");
//			Console.WriteLine("'" + document.TextContent + "'");
//			#endif
            // Only fire events after RemoveInternal+InsertInternal finished completely:
            // Otherwise we would expose inconsistent state to the event handlers.
            RunHighlighter(lineStart, 1 + Math.Max(0, this.TotalNumberOfLines - numberOfLinesAfterRemoving));

            if (deferredEventList.removedLines != null)
            {
                foreach (LineSegment ls in deferredEventList.removedLines)
                {
                    OnLineDeleted(new LineEventArgs(document, ls));
                }
            }
            deferredEventList.RaiseEvents();
            if (this.TotalNumberOfLines != oldNumberOfLines)
            {
                OnLineCountChanged(new LineCountChangeEventArgs(document, lineStart, this.TotalNumberOfLines - oldNumberOfLines));
            }
        }
예제 #4
0
        public void Replace(int offset, int length, string text)
        {
            Debug.WriteLine("Replace offset="+offset+" length="+length+" text.Length="+text.Length);
            int lineStart = GetLineNumberForOffset(offset);
            int oldNumberOfLines = this.TotalNumberOfLines;
            DeferredEventList deferredEventList = new DeferredEventList();
            RemoveInternal(ref deferredEventList, offset, length);
            int numberOfLinesAfterRemoving = this.TotalNumberOfLines;
            if (!string.IsNullOrEmpty(text)) {
                InsertInternal(offset, text);
            }
            //			#if DEBUG
            //			Console.WriteLine("New line collection:");
            //			Console.WriteLine(lineCollection.GetTreeAsString());
            //			Console.WriteLine("New text:");
            //			Console.WriteLine("'" + document.TextContent + "'");
            //			#endif
            // Only fire events after RemoveInternal+InsertInternal finished completely:
            // Otherwise we would expose inconsistent state to the event handlers.
            RunHighlighter(lineStart, 1 + Math.Max(0, this.TotalNumberOfLines - numberOfLinesAfterRemoving));

            if (deferredEventList.removedLines != null) {
                foreach (LineSegment ls in deferredEventList.removedLines)
                    OnLineDeleted(new LineEventArgs(document, ls));
            }
            deferredEventList.RaiseEvents();
            if (this.TotalNumberOfLines != oldNumberOfLines) {
                OnLineCountChanged(new LineCountChangeEventArgs(document, lineStart, this.TotalNumberOfLines - oldNumberOfLines));
            }
        }