/// <inheritdoc /> public virtual int IndentLine(TextDocument document, DocumentLine line, int caretOffset) { if (document == null) throw new ArgumentNullException("document"); if (line == null) throw new ArgumentNullException("line"); var previousLine = line.PreviousLine; if (previousLine != null) { var indentationSegment = TextUtilities.GetWhitespaceAfter(document, previousLine.Offset); var indentation = document.GetText(indentationSegment); // copy indentation to line indentationSegment = TextUtilities.GetWhitespaceAfter(document, line.Offset); document.Replace(indentationSegment, indentation); } return caretOffset; }
public static int ApplyReplacements(TextDocument document, int cursor, XDocument replacements, bool replaceCursor = true) { var elements = replacements.Elements().First().Elements(); document.BeginUpdate(); var offsetChange = 0; foreach (var element in elements) { switch (element.Name.LocalName) { case "cursor": cursor = Convert.ToInt32(element.Value); break; case "replacement": var offset = -1; var replacementLength = -1; var attributes = element.Attributes(); foreach (var attribute in attributes) { switch (attribute.Name.LocalName) { case "offset": offset = Convert.ToInt32(attribute.Value); break; case "length": replacementLength = Convert.ToInt32(attribute.Value); break; } } document.Replace(offsetChange + offset, replacementLength, element.Value); offsetChange += element.Value.Length - replacementLength; break; } } document.EndUpdate(); return replaceCursor ? cursor : -1; }
private void CloseBracket(TextEditor.TextEditor editor, TextDocument document, string text) { if (text[0].IsCloseBracketChar() && editor.CaretIndex < document.TextLength && editor.CaretIndex > 0) { if (document.GetCharAt(editor.CaretIndex) == text[0]) { document.Replace(editor.CaretIndex - 1, 1, string.Empty); } } }
public int UnComment(TextDocument textDocument, ISegment segment, int caret = -1, bool format = true) { var result = caret; var lines = VisualLineGeometryBuilder.GetLinesForSegmentInDocument(textDocument, segment); textDocument.BeginUpdate(); foreach (var line in lines) { var index = textDocument.GetText(line).IndexOf("//"); if (index >= 0) { textDocument.Replace(line.Offset + index, 2, string.Empty); } } if (format) { result = Format(textDocument, (uint)segment.Offset, (uint)segment.Length, caret); } textDocument.EndUpdate(); return result; }
public void Undo() { var map = change.OffsetChangeMapOrNull; document.Replace(change.Offset, change.InsertionLength, change.RemovedText, map != null ? map.Invert() : null); }