Exemplo n.º 1
0
        //=========================================================================================
        internal void PasteText(string text)
        {
            this.InitFields();
            if (this.HasSelection())
            {
                this.DeleteSelection();
                this.InitFields();
            }

            var lines = TextSplitter.SplitTextToLines(text);

            if (lines.Count == 1)
            {
                string sLine = this.CurLine.Insert(this.CurPos.Char, text);
                this.Doc[this.CurPos.Line].Text = sLine;
                int iChar = this.CurPos.Char + text.Length;
                int iCol  = this.Viewer.Caret.GetColumn(sLine, iChar);
                this.Viewer.Caret.MoveToPos(this.CurPos.Line, iCol, true);
            }
            else
            {
                string sLine = this.CurLine;
                if (sLine.Length > 0 && this.CurPos.Char < sLine.Length)
                {
                    sLine = sLine.Remove(this.CurPos.Char);
                }
                this.Doc[this.CurPos.Line].Text = sLine + lines[0];
                lines.RemoveAt(0);

                int iChar = lines[lines.Count - 1].Length;
                lines[lines.Count - 1] += this.CurLine.Substring(this.CurPos.Char);
                this.Doc.InsertRange(this.CurPos.Line + 1, lines);

                int    iLine           = this.CurPos.Line + lines.Count;
                string sLastPastedLine = this.Doc[iLine].Text;
                int    iCol            = this.Viewer.Caret.GetColumn(sLastPastedLine, iChar);
                this.Viewer.Caret.MoveToPos(iLine, iCol, true);
            }
        }
Exemplo n.º 2
0
        //=========================================================================================
        /// <summary>Если токен многострочный, разбиваем его на строки и добавляем в очередь.</summary>
        private void EnqueueMultilineToken(string text, TextPoint startPoint, TextPoint endPoint)
        {
            TextStyle oStyle = null;

            ///Если текст однострочный
            if (text.IndexOf('\n') < 0)
            {
                var oToken = new Token(
                    this.CurrentToken.TokenTypeName,
                    text, startPoint, endPoint, this.CurrentToken.Style);
                oToken.Style = this.Settings.GetStyleFor(oToken, this.CurrentState.StyleName);
                this.TokenPool.Enqueue(oToken);
            }
            else
            {
                ///Разбиваем текст на строки
                List <string> lines = TextSplitter.SplitTextToLines(text);

                ///Первая строка
                {
                    string sLine = lines[0];
                    ///Начало токена
                    var startTokenPoint = startPoint;
                    ///Конец токена
                    int iChar         = startPoint.Char + sLine.Length;
                    int iCol          = iChar;                  //TODO: если перед нашим токеном были табы, то iCol мы вычисляем неверно.
                    var endTokenPoint = new TextPoint(startTokenPoint.Line, iCol, iChar);
                    ///Создаем токен
                    var oToken = new Token(
                        this.CurrentToken.TokenTypeName,
                        sLine, startPoint, endTokenPoint, this.CurrentToken.Style);
                    ///Выясняем стиль
                    oStyle       = this.Settings.GetStyleFor(oToken, this.CurrentState.StyleName);
                    oToken.Style = oStyle;
                    ///Добавляем в очередь
                    this.TokenPool.Enqueue(oToken);
                }

                ///Проходим по остальным строкам
                for (int iLine = 1; iLine < lines.Count; iLine++)
                {
                    string sLine = lines[iLine];
                    if (sLine.Length == 0)
                    {
                        continue;
                    }
                    ///Начало токена
                    var startTokenPoint = new TextPoint(startPoint.Line + iLine, 0, 0);
                    ///Конец токена
                    int iChar         = startTokenPoint.Char + sLine.Length;
                    int iCol          = TextCaret.GetCol(sLine, iChar, this.Scanner.TabSize);
                    var endTokenPoint = new TextPoint(startTokenPoint.Line, iCol, iChar);
                    ///Создаем токен
                    var oToken = new Token(
                        this.CurrentToken.TokenTypeName,
                        sLine, startTokenPoint, endTokenPoint, this.CurrentToken.Style);
                    ///Выясняем стиль
                    oToken.Style = oStyle;
                    ///Добавляем в очередь
                    this.TokenPool.Enqueue(oToken);
                }
            }
        }