예제 #1
0
        void SetColumn()
        {
            LineSegment curLine = this.document.GetLine(this.Line);

            if (curLine == null)
            {
                return;
            }
            this.location.Column = curLine.GetLogicalColumn(editor, this.DesiredColumn);
            if (curLine.GetVisualColumn(editor, this.location.Column) < this.DesiredColumn)
            {
                this.location.Column = editor.GetNextVirtualColumn(Line, this.location.Column);
            }
            else
            {
                if (this.Column > curLine.EditableLength)
                {
                    this.location.Column = System.Math.Min(curLine.EditableLength, System.Math.Max(0, this.Column));
                    if (AllowCaretBehindLineEnd)
                    {
                        this.location.Column = editor.GetNextVirtualColumn(Line, this.location.Column);
                    }
                }
            }
        }
예제 #2
0
        public static void Right(TextEditorData data)
        {
            if (Platform.IsMac && data.IsSomethingSelected && !data.Caret.PreserveSelection)
            {
                data.Caret.Offset = System.Math.Max(data.SelectionAnchor, data.Caret.Offset);
                data.ClearSelection();
                return;
            }

            LineSegment line = data.Document.GetLine(data.Caret.Line);
            IEnumerable <FoldSegment> foldings = data.Document.GetStartFoldings(line);
            FoldSegment segment = null;

            foreach (FoldSegment folding in foldings)
            {
                if (folding.IsFolded && folding.Column == data.Caret.Column)
                {
                    segment = folding;
                    break;
                }
            }
            if (segment != null)
            {
                data.Caret.Location = data.Document.OffsetToLocation(segment.EndLine.Offset + segment.EndColumn);
                return;
            }
            if (data.Caret.Column < line.EditableLength + 1 || data.Caret.AllowCaretBehindLineEnd)
            {
                if (data.Caret.Column >= line.EditableLength + 1)
                {
                    int nextColumn = data.GetNextVirtualColumn(data.Caret.Line, data.Caret.Column);
                    if (data.Caret.Column != nextColumn)
                    {
                        data.Caret.Column = nextColumn;
                    }
                    else
                    {
                        data.Caret.Location = new DocumentLocation(data.Caret.Line + 1, DocumentLocation.MinColumn);
                        data.Caret.CheckCaretPosition();
                    }
                }
                else
                {
                    data.Caret.Column++;
                }
            }
            else if (data.Caret.Line + 1 <= data.Document.LineCount)
            {
                data.Caret.Location = new DocumentLocation(data.Caret.Line + 1, DocumentLocation.MinColumn);
            }
        }
예제 #3
0
        public static void LineEnd(TextEditorData data)
        {
            if (!data.Caret.PreserveSelection)
            {
                data.ClearSelection();
            }
            DocumentLocation newLocation = data.Caret.Location;
            LineSegment      line        = data.Document.GetLine(data.Caret.Line);

            newLocation.Column = line.EditableLength + 1;

            // handle folding
            IEnumerable <FoldSegment> foldings = data.Document.GetStartFoldings(line);
            FoldSegment segment = null;

            foreach (FoldSegment folding in foldings)
            {
                if (folding.IsFolded && folding.Contains(data.Document.LocationToOffset(newLocation)))
                {
                    segment = folding;
                    break;
                }
            }
            if (segment != null)
            {
                newLocation = data.Document.OffsetToLocation(segment.EndLine.Offset + segment.EndColumn);
            }
            if (newLocation != data.Caret.Location)
            {
                data.Caret.Location = newLocation;
            }

            if (data.Caret.AllowCaretBehindLineEnd)
            {
                int nextColumn = data.GetNextVirtualColumn(data.Caret.Line, data.Caret.Column);
                if (nextColumn != data.Caret.Column)
                {
                    data.Caret.Column = nextColumn;
                }
            }
        }
예제 #4
0
		public static void Right (TextEditorData data)
		{
			if (Platform.IsMac && data.IsSomethingSelected && !data.Caret.PreserveSelection) {
				data.Caret.Offset = System.Math.Max (data.SelectionAnchor, data.Caret.Offset);
				data.ClearSelection ();
				return;
			}
			
			LineSegment line = data.Document.GetLine (data.Caret.Line);
			IEnumerable<FoldSegment> foldings = data.Document.GetStartFoldings (line);
			FoldSegment segment = null;
			foreach (FoldSegment folding in foldings) {
				if (folding.IsFolded && folding.Column == data.Caret.Column) {
					segment = folding;
					break;
				}
			}
			if (segment != null) {
				data.Caret.Location = data.Document.OffsetToLocation (segment.EndLine.Offset + segment.EndColumn); 
				return;
			}
			if (data.Caret.Column < line.EditableLength || data.Caret.AllowCaretBehindLineEnd) {
				if (data.Caret.Column >= line.EditableLength) {
					int nextColumn = data.GetNextVirtualColumn (data.Caret.Line, data.Caret.Column);
					if (data.Caret.Column != nextColumn) {
						data.Caret.Column = nextColumn;
					} else {
						data.Caret.Location = new DocumentLocation (data.Caret.Line + 1, 0);
						data.Caret.CheckCaretPosition ();
					}
				} else {
					data.Caret.Column++;
				}
			} else if (data.Caret.Line + 1 < data.Document.LineCount) {
				data.Caret.Location = new DocumentLocation (data.Caret.Line + 1, 0);
			}
		}
예제 #5
0
		public static void LineEnd (TextEditorData data)
		{
			if (!data.Caret.PreserveSelection)
				data.ClearSelection ();
			DocumentLocation newLocation = data.Caret.Location;
			LineSegment line = data.Document.GetLine (data.Caret.Line);
			newLocation.Column = line.EditableLength;
			
			// handle folding
			IEnumerable<FoldSegment> foldings = data.Document.GetStartFoldings (line);
			FoldSegment segment = null;
			foreach (FoldSegment folding in foldings) {
				if (folding.IsFolded && folding.Contains (data.Document.LocationToOffset (newLocation))) {
					segment = folding;
					break;
				}
			}
			if (segment != null) 
				newLocation = data.Document.OffsetToLocation (segment.EndLine.Offset + segment.EndColumn); 
			if (newLocation != data.Caret.Location) {
				data.Caret.Location = newLocation;
			}
			
			if (data.Caret.AllowCaretBehindLineEnd) {
				int nextColumn = data.GetNextVirtualColumn (data.Caret.Line, data.Caret.Column);
				if (nextColumn != data.Caret.Column)
					data.Caret.Column = nextColumn;
			}
			
		}