Пример #1
0
        internal override ActionResults Execute(Selection sel, params object[] args)
        {
            insertChar = new Character(Ed.InputChar);

            var line = Document.Lines[sel.Caret.Line];

            undoPos = sel.Start;
            redoSel = sel.Clone();
            var res = Change;

            if (!sel.IsEmpty)
            {
                insertString = DeleteRangeCommand.DeleteRange(Ed, sel);
            }
            else if (Buffer.Overtype && sel.Caret.Col < line.Length)
            {
                res       |= AtomicChange;
                deleteChar = line[sel.Caret.Col];
                line.RemoveAt(sel.Caret.Col);
            }
            else
            {
                var app = !Buffer.Overtype && CanShowAutocomplete(sel, insertChar.Char) ? AutocompleteShow : AutocompleteKeep;
                res |= AtomicChange | app;
            }

            Document.Lines[sel.Caret.Line].Insert(sel.Caret.Col, insertChar);
            sel.Clear(new Pos(sel.Caret.Line, sel.Caret.Col + 1));
            return(res);
        }
Пример #2
0
        public override ActionResults Undo(out Pos pos)
        {
            pos = undoPos;

            if (deleteString != null)
            {
                pos = InsertRangeCommand.InsertRange(Document, undoPos, deleteString);
            }
            else if (deleteChar == Character.NewLine)
            {
                pos = new Pos(undoPos.Line, undoPos.Col);
                var txt = DeleteRangeCommand.DeleteRange(Ed, new Selection(pos,
                                                                           new Pos(pos.Line, Document.Lines[pos.Line].Length)));
                var ipos = InsertNewLineCommand.InsertNewLine(Document, pos);

                if (txt != null)
                {
                    Document.Lines[ipos.Line].Append(txt);
                }

                pos = ipos;
            }
            else
            {
                var ln = Document.Lines[undoPos.Line];
                ln.Insert(undoPos.Col, deleteChar);
                pos = new Pos(undoPos.Line, undoPos.Col + 1);
            }

            return(Change);
        }
Пример #3
0
        internal override ActionResults Execute(Selection sel, params object[] args)
        {
            redoSel = sel.Clone();
            var res = Clean;

            if (!sel.IsEmpty)
            {
                res          = Change;
                deleteString = DeleteRangeCommand.DeleteRange(Ed, sel);
            }
            else
            {
                var lines = Document.Lines;
                var caret = sel.Caret;
                var ln    = lines[caret.Line];

                if (caret.Col < ln.Length)
                {
                    deleteChar = ln.CharacterAt(caret.Col);
                    ln.RemoveAt(caret.Col);
                    res = Change;
                }
                else if (caret.Line < lines.Count - 1)
                {
                    var nl = lines[caret.Line + 1];
                    deleteChar = Character.NewLine;
                    lines.Remove(nl);
                    ln.Append(nl);
                    res = Change;
                }
            }

            undoPos = sel.Caret;
            return(res);
        }
Пример #4
0
        public override ActionResults Undo(out Pos pos)
        {
            DeleteRangeCommand.DeleteRange(Ed, undo);
            pos = undo.Caret;

            if (deleteString != null)
            {
                pos = InsertRange(Document, undo.End, deleteString);
            }

            return(Change);
        }
Пример #5
0
        internal override ActionResults Execute(Selection sel, params object[] args)
        {
            redoSel = sel.Clone();
            var res        = Clean;
            var lines      = Document.Lines;
            var caret      = sel.Caret;
            var ln         = lines[caret.Line];
            var indentSize = Line.GetIndentationSize(ln.GetTetras(caret.Col, Ed.IndentSize), Ed.IndentSize);

            unindent = indentSize == Ed.IndentSize ? indentSize : Ed.IndentSize - indentSize;

            if (!sel.IsEmpty)
            {
                unindent     = 0;
                res          = Change;
                deleteString = DeleteRangeCommand.DeleteRange(Ed, sel);
            }
            else if (!Ed.UseTabs && (unindent = GetMaximum(ln, caret.Col, unindent)) > 1 && caret.Col >= unindent)
            {
                res = Change;
                var np = new Pos(caret.Line, caret.Col - unindent);
                deleteString = DeleteRangeCommand.DeleteRange(Ed, new Selection(caret, np));
                sel.Clear(np);
            }
            else
            {
                unindent = 0;

                if (caret.Col > 0)
                {
                    deleteChar = ln.CharacterAt(caret.Col - 1);
                    ln.RemoveAt(caret.Col - 1);
                    sel.Clear(new Pos(caret.Line, caret.Col - 1));
                    res = Change | AutocompleteKeep;
                }
                else if (caret.Line > 0)
                {
                    ln = lines[caret.Line - 1];
                    var col = ln.Length;
                    deleteChar = Character.NewLine;
                    var txt = lines[caret.Line];
                    lines.RemoveAt(caret.Line);
                    ln.Append(txt);
                    sel.Clear(new Pos(caret.Line - 1, col));
                    res = Change;
                }
            }

            undoPos = sel.Caret;
            return(res);
        }
Пример #6
0
        public override ActionResults Redo(out Pos pos)
        {
            deleteChar   = Character.Empty;
            deleteString = null;

            if (unindent != 0)
            {
                var caret = redoSel.Caret;
                var np    = new Pos(caret.Line, caret.Col - unindent);
                DeleteRangeCommand.DeleteRange(Ed, new Selection(caret, np));
            }
            else
            {
                Execute(redoSel);
            }

            pos = undoPos;
            return(Change);
        }
Пример #7
0
        internal override ActionResults Execute(Selection selection, params object[] args)
        {
            undoPos = selection.Start;
            redoSel = selection.Clone();

            if (!selection.IsEmpty)
            {
                @string = DeleteRangeCommand.DeleteRange(Ed, selection);
            }

            var indentKey = Ed.AffinityManager.GetAffinity(new Pos(undoPos.Line, 0)).GetIndentComponentKey(Ed);
            var pos       = InsertNewLine(Document, undoPos);

            selection.Clear(pos);

            var comp = indentKey != null?App.Catalog <IDentComponent>().GetComponent(indentKey) : null;

            indent = comp != null?comp.CalculateIndentation((IView)Ed.FindForm(), pos.Line) : 0;

            if (indent > 0)
            {
                if (pos.Line > 0)
                {
                    var ln = Document.Lines[pos.Line - 1];

                    if (ln.IsEmpty() && ln.Length > 0)
                    {
                        unindent = ln.ToList();
                        ln.RemoveRange(0, ln.Length);
                    }
                }

                var str = Ed.UseTabs ? new string('\t', indent / Ed.IndentSize)
                    : new string(' ', indent);
                Document.Lines[pos.Line].Insert(0, str.MakeCharacters());
                selection.Clear(new Pos(pos.Line, pos.Col + str.Length));
            }

            return(Change);
        }
Пример #8
0
        internal override ActionResults Execute(Selection sel, params object[] args)
        {
            insertString = insertString ??
                           (args != null && args.Length > 0 ? args[0] as IEnumerable <Character> : null);

            if (insertString == null)
            {
                return(Pure);
            }

            redoSel = sel.Clone();

            if (!sel.IsEmpty)
            {
                deleteString = DeleteRangeCommand.DeleteRange(Ed, sel);
            }

            var pos = InsertRange(Document, sel.Start, insertString);

            undo = new Selection(sel.Start, pos);
            sel.Clear(pos);
            return(Change);
        }