本文整理汇总了C#中Mono.TextEditor.TextEditorData.Insert方法的典型用法代码示例。如果您正苦于以下问题:C# TextEditorData.Insert方法的具体用法?C# TextEditorData.Insert怎么用?C# TextEditorData.Insert使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.TextEditor.TextEditorData
的用法示例。
在下文中一共展示了TextEditorData.Insert方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TestInsertionPoints
static void TestInsertionPoints (string text)
{
TextEditorData data = new TextEditorData ();
List<InsertionPoint> loc = new List<InsertionPoint> ();
for (int i = 0; i < text.Length; i++) {
char ch = text[i];
if (ch == '@') {
i++;
ch = text[i];
loc.Add (new InsertionPoint (data.Document.OffsetToLocation (data.Document.Length), ch == '3' || ch == '2', ch == '3' || ch == '1'));
} else {
data.Insert (data.Document.Length, ch.ToString ());
}
}
var parseResult = new NRefactoryParser ().Parse (null, "a.cs", data.Document.Text);
var foundPoints = HelperMethods.GetInsertionPoints (data.Document, parseResult.CompilationUnit.Types[0]);
Assert.AreEqual (loc.Count, foundPoints.Count, "point count doesn't match");
for (int i = 0; i < loc.Count; i++) {
Console.WriteLine (loc[i] + "/" + foundPoints[i]);
Assert.AreEqual (loc[i].Location, foundPoints[i].Location, "point " + i + " doesn't match");
Assert.AreEqual (loc[i].ShouldInsertNewLineAfter, foundPoints[i].ShouldInsertNewLineAfter, "point " + i + " ShouldInsertNewLineAfter doesn't match");
Assert.AreEqual (loc[i].ShouldInsertNewLineBefore, foundPoints[i].ShouldInsertNewLineBefore, "point " + i + " ShouldInsertNewLineBefore doesn't match");
}
}
示例2: HandleSpecialSelectionKey
public override void HandleSpecialSelectionKey (TextEditorData textEditorData,uint unicodeKey)
{
string start, end;
GetSelectionSurroundings (textEditorData, unicodeKey, out start, out end);
var selection = textEditorData.MainSelection;
if (textEditorData.MainSelection.SelectionMode == SelectionMode.Block) {
int startCol = System.Math.Min (selection.Anchor.Column, selection.Lead.Column) - 1;
int endCol = System.Math.Max (selection.Anchor.Column, selection.Lead.Column);
for (int lineNumber = selection.MinLine; lineNumber <= selection.MaxLine; lineNumber++) {
DocumentLine lineSegment = textEditorData.GetLine (lineNumber);
if (lineSegment.Offset + startCol < lineSegment.EndOffset)
textEditorData.Insert (lineSegment.Offset + startCol, start);
if (lineSegment.Offset + endCol < lineSegment.EndOffset)
textEditorData.Insert (lineSegment.Offset + endCol, end);
}
textEditorData.MainSelection = new Selection (
new DocumentLocation (selection.Anchor.Line, endCol == selection.Anchor.Column ? endCol + start.Length : startCol + 1 + start.Length),
new DocumentLocation (selection.Lead.Line, endCol == selection.Anchor.Column ? startCol + 1 + start.Length : endCol + start.Length),
Mono.TextEditor.SelectionMode.Block);
textEditorData.Document.CommitMultipleLineUpdate (textEditorData.MainSelection.MinLine, textEditorData.MainSelection.MaxLine);
} else {
int anchorOffset = selection.GetAnchorOffset (textEditorData);
int leadOffset = selection.GetLeadOffset (textEditorData);
if (leadOffset < anchorOffset) {
int tmp = anchorOffset;
anchorOffset = leadOffset;
leadOffset = tmp;
}
textEditorData.Insert (anchorOffset, start);
textEditorData.Insert (leadOffset >= anchorOffset ? leadOffset + start.Length : leadOffset, end);
// textEditorData.SetSelection (anchorOffset + start.Length, leadOffset + start.Length);
if (CSharpTextEditorIndentation.OnTheFlyFormatting) {
var l1 = textEditorData.GetLineByOffset (anchorOffset);
var l2 = textEditorData.GetLineByOffset (leadOffset);
OnTheFlyFormatter.Format (document, l1.Offset, l2.EndOffsetIncludingDelimiter);
}
}
}
示例3: InsertNewLine
public void InsertNewLine (TextEditorData editor, NewLineInsertion insertion, ref int offset)
{
string str = null;
switch (insertion) {
case NewLineInsertion.Eol:
str = editor.EolMarker;
break;
case NewLineInsertion.BlankLine:
str = editor.EolMarker + editor.EolMarker;
break;
default:
return;
}
offset += editor.Insert (offset, str);
}
示例4: TestInsertionPoints
static void TestInsertionPoints (string text)
{
TextEditorData data = new TextEditorData ();
List<InsertionPoint> loc = new List<InsertionPoint> ();
for (int i = 0; i < text.Length; i++) {
char ch = text[i];
if (ch == '@') {
i++;
ch = text[i];
NewLineInsertion insertBefore = NewLineInsertion.None;
NewLineInsertion insertAfter = NewLineInsertion.None;
switch (ch) {
case 'n':
break;
case 'd':
insertAfter = NewLineInsertion.Eol;
break;
case 'D':
insertAfter = NewLineInsertion.BlankLine;
break;
case 'u':
insertBefore = NewLineInsertion.Eol;
break;
case 'U':
insertBefore = NewLineInsertion.BlankLine;
break;
case 's':
insertBefore = insertAfter = NewLineInsertion.Eol;
break;
case 'S':
insertBefore = insertAfter = NewLineInsertion.BlankLine;
break;
case 't':
insertBefore = NewLineInsertion.Eol;
insertAfter = NewLineInsertion.BlankLine;
break;
case 'v':
insertBefore = NewLineInsertion.BlankLine;
insertAfter = NewLineInsertion.Eol;
break;
default:
Assert.Fail ("unknown insertion point:" + ch);
break;
}
loc.Add (new InsertionPoint (data.Document.OffsetToLocation (data.Document.Length), insertBefore, insertAfter));
} else {
data.Insert (data.Document.Length, ch.ToString ());
}
}
var parseResult = new NRefactoryParser ().Parse (null, "a.cs", data.Document.Text);
var foundPoints = HelperMethods.GetInsertionPoints (data.Document, parseResult.CompilationUnit.Types[0]);
Assert.AreEqual (loc.Count, foundPoints.Count, "point count doesn't match");
for (int i = 0; i < loc.Count; i++) {
Console.WriteLine (loc[i] + "/" + foundPoints[i]);
Assert.AreEqual (loc[i].Location, foundPoints[i].Location, "point " + i + " doesn't match");
Assert.AreEqual (loc[i].LineAfter, foundPoints[i].LineAfter, "point " + i + " ShouldInsertNewLineAfter doesn't match");
Assert.AreEqual (loc[i].LineBefore, foundPoints[i].LineBefore, "point " + i + " ShouldInsertNewLineBefore doesn't match");
}
}
示例5: PasteFrom
static int PasteFrom (Clipboard clipboard, TextEditorData data, bool preserveSelection, int insertionOffset, bool preserveState)
{
int result = -1;
if (!data.CanEdit (data.Document.OffsetToLineNumber (insertionOffset)))
return result;
if (clipboard.WaitIsTargetAvailable (CopyOperation.MD_ATOM)) {
clipboard.RequestContents (CopyOperation.MD_ATOM, delegate(Clipboard clp, SelectionData selectionData) {
if (selectionData.Length > 0) {
byte[] selBytes = selectionData.Data;
string text = System.Text.Encoding.UTF8.GetString (selBytes, 1, selBytes.Length - 1);
bool pasteBlock = (selBytes [0] & 1) == 1;
bool pasteLine = (selBytes [0] & 2) == 2;
// var clearSelection = data.IsSomethingSelected ? data.MainSelection.SelectionMode != SelectionMode.Block : true;
if (pasteBlock) {
using (var undo = data.OpenUndoGroup ()) {
var version = data.Document.Version;
data.DeleteSelectedText (!data.IsSomethingSelected || data.MainSelection.SelectionMode != SelectionMode.Block);
data.EnsureCaretIsNotVirtual ();
insertionOffset = version.MoveOffsetTo (data.Document.Version, insertionOffset);
data.Caret.PreserveSelection = true;
string[] lines = text.Split ('\r');
int lineNr = data.Document.OffsetToLineNumber (insertionOffset);
int col = insertionOffset - data.Document.GetLine (lineNr).Offset;
int visCol = data.Document.GetLine (lineNr).GetVisualColumn (data, col);
DocumentLine curLine;
int lineCol = col;
result = 0;
for (int i = 0; i < lines.Length; i++) {
while (data.Document.LineCount <= lineNr + i) {
data.Insert (data.Document.TextLength, Environment.NewLine);
result += Environment.NewLine.Length;
}
curLine = data.Document.GetLine (lineNr + i);
if (lines [i].Length > 0) {
lineCol = curLine.GetLogicalColumn (data, visCol);
if (curLine.Length + 1 < lineCol) {
result += lineCol - curLine.Length;
data.Insert (curLine.Offset + curLine.Length, new string (' ', lineCol - curLine.Length));
}
data.Insert (curLine.Offset + lineCol, lines [i]);
result += lines [i].Length;
}
if (!preserveState)
data.Caret.Offset = curLine.Offset + lineCol + lines [i].Length;
}
if (!preserveState)
data.ClearSelection ();
data.Caret.PreserveSelection = false;
}
} else if (pasteLine) {
using (var undo = data.OpenUndoGroup ()) {
data.DeleteSelectedText (!data.IsSomethingSelected || data.MainSelection.SelectionMode != SelectionMode.Block);
data.EnsureCaretIsNotVirtual ();
data.Caret.PreserveSelection = true;
result = text.Length;
DocumentLine curLine = data.Document.GetLine (data.Caret.Line);
data.Insert (curLine.Offset, text + data.EolMarker);
if (!preserveState)
data.ClearSelection ();
data.Caret.PreserveSelection = false;
}
} else {
result = PastePlainText (data, insertionOffset, text);
}
}
});
// we got MD_ATOM text - no need to request text. (otherwise buffer may get copied twice).
return result;
}
if (result < 0 && clipboard.WaitIsTextAvailable ()) {
clipboard.RequestText (delegate(Clipboard clp, string text) {
if (string.IsNullOrEmpty (text))
return;
using (var undo = data.OpenUndoGroup ()) {
result = PastePlainText (data, insertionOffset, text);
}
});
}
return result;
}
示例6: InsertFormattedText
static void InsertFormattedText (TextEditorData data, int offset, string formattedText)
{
data.Document.BeginAtomicUndo ();
// DocumentLocation caretLocation = data.Caret.Location;
int selAnchor = data.IsSomethingSelected ? data.Document.LocationToOffset (data.MainSelection.Anchor) : -1;
int selLead = data.IsSomethingSelected ? data.Document.LocationToOffset (data.MainSelection.Lead) : -1;
int textOffset = 0;
int caretOffset = data.Caret.Offset;
// Console.WriteLine ("formattedText3:" + formattedText.Replace ("\t", "->").Replace (" ", "°").Replace ("\n", "\\n").Replace ("\r", "\\r"));
while (textOffset < formattedText.Length /*&& offset < caretOffset*/) {
if (offset < 0) {
offset++;
textOffset++;
continue;
}
char ch1 = data.Document.GetCharAt (offset);
char ch2 = formattedText[textOffset];
bool isCh1Eol = ch1 == '\n'|| ch1 == '\r';
if (ch1 == '\r' && offset + 1 < data.Document.Length && data.Document.GetCharAt (offset + 1) == '\n') {
offset++;
ch1 = '\n';
}
if (ch1 == ch2 || (ch2 == '\n' && isCh1Eol)) {
textOffset++;
offset++;
continue;
} else if (isCh1Eol) {
// int firstWhitespace = 0;
// skip all white spaces in formatted text - we had a line break
int firstWhitespace = -1;
while (textOffset < formattedText.Length && IsPlainWhitespace (formattedText[textOffset])) {
if (firstWhitespace < 0)
firstWhitespace = textOffset;
textOffset++;
}
if (firstWhitespace >= 0 && firstWhitespace != textOffset && formattedText[textOffset] == '\n') {
int length = textOffset - firstWhitespace - 1;
data.Insert (offset, formattedText.Substring (firstWhitespace, length) + data.EolMarker);
data.Document.CommitLineUpdate (data.Document.OffsetToLineNumber (offset));
length += data.EolMarker.Length;
if (offset < caretOffset)
caretOffset += length;
if (offset < selAnchor)
selAnchor += length;
if (offset < selLead)
selLead += length;
offset += length - 1;
textOffset++;
}
offset++;
while (offset < data.Caret.Offset && IsPlainWhitespace (data.Document.GetCharAt (offset))) {
offset++;
}
continue;
}
bool ch1Ws = Char.IsWhiteSpace (ch1);
bool ch2Ws = Char.IsWhiteSpace (ch2);
if (ch2Ws && !ch1Ws) {
if (ch2 == '\n') {
data.Insert (offset, data.EolMarker);
data.Document.CommitLineUpdate (data.Document.OffsetToLineNumber (offset));
if (offset < caretOffset)
caretOffset += data.EolMarker.Length;
if (offset < selAnchor)
selAnchor += data.EolMarker.Length;
if (offset < selLead)
selLead += data.EolMarker.Length;
textOffset++;
offset += data.EolMarker.Length;
} else {
data.Insert (offset, ch2.ToString ());
data.Document.CommitLineUpdate (data.Document.OffsetToLineNumber (offset));
if (offset < caretOffset)
caretOffset++;
if (offset < selAnchor)
selAnchor++;
if (offset < selLead)
selLead++;
textOffset++;
offset++;
}
continue;
}
if ((!ch2Ws || ch2 == '\n') && ch1Ws) {
if (offset < caretOffset)
caretOffset--;
if (offset < selAnchor)
selAnchor--;
if (offset < selLead)
selLead--;
//.........这里部分代码省略.........
示例7: PastePlainText
static int PastePlainText (TextEditorData data, int offset, string text, bool preserveSelection = false)
{
int inserted = 0;
using (var undo = data.OpenUndoGroup ()) {
var version = data.Document.Version;
if (!preserveSelection)
data.DeleteSelectedText (!data.IsSomethingSelected || data.MainSelection.SelectionMode != SelectionMode.Block);
data.EnsureCaretIsNotVirtual ();
if (data.IsSomethingSelected && data.MainSelection.SelectionMode == SelectionMode.Block) {
var selection = data.MainSelection;
var visualInsertLocation = data.LogicalToVisualLocation (selection.Anchor);
for (int lineNumber = selection.MinLine; lineNumber <= selection.MaxLine; lineNumber++) {
var lineSegment = data.GetLine (lineNumber);
int insertOffset = lineSegment.GetLogicalColumn (data, visualInsertLocation.Column) - 1;
string textToInsert;
if (lineSegment.Length < insertOffset) {
int visualLastColumn = lineSegment.GetVisualColumn (data, lineSegment.Length + 1);
int charsToInsert = visualInsertLocation.Column - visualLastColumn;
int spaceCount = charsToInsert % data.Options.TabSize;
textToInsert = new string ('\t', (charsToInsert - spaceCount) / data.Options.TabSize) + new string (' ', spaceCount) + text;
insertOffset = lineSegment.Length;
} else {
textToInsert = text;
}
inserted = data.Insert (lineSegment.Offset + insertOffset, textToInsert);
}
} else {
offset = version.MoveOffsetTo (data.Document.Version, offset);
inserted = data.PasteText (offset, text);
}
}
return inserted;
}
示例8: TransposeCharacters
/// <summary>
/// Transpose characters (Emacs C-t)
/// </summary>
public static void TransposeCharacters (TextEditorData data)
{
if (data.Caret.Offset == 0)
return;
DocumentLine line = data.Document.GetLine (data.Caret.Line);
if (line == null)
return;
int transposeOffset = data.Caret.Offset - 1;
char ch;
if (data.Caret.Column == 0) {
DocumentLine lineAbove = data.Document.GetLine (data.Caret.Line - 1);
if (lineAbove.Length == 0 && line.Length == 0)
return;
if (line.Length != 0) {
ch = data.Document.GetCharAt (data.Caret.Offset);
data.Remove (data.Caret.Offset, 1);
data.Insert (lineAbove.Offset + lineAbove.Length, ch.ToString ());
data.Document.CommitLineUpdate (data.Caret.Line - 1);
return;
}
int lastCharOffset = lineAbove.Offset + lineAbove.Length - 1;
ch = data.Document.GetCharAt (lastCharOffset);
data.Remove (lastCharOffset, 1);
data.InsertAtCaret (ch.ToString ());
return;
}
int offset = data.Caret.Offset;
if (data.Caret.Column >= line.Length + 1) {
offset = line.Offset + line.Length - 1;
transposeOffset = offset - 1;
// case one char in line:
if (transposeOffset < line.Offset) {
DocumentLine lineAbove = data.Document.GetLine (data.Caret.Line - 1);
transposeOffset = lineAbove.Offset + lineAbove.Length;
ch = data.Document.GetCharAt (offset);
data.Remove (offset, 1);
data.Insert (transposeOffset, ch.ToString ());
data.Caret.Offset = line.Offset;
data.Document.CommitLineUpdate (data.Caret.Line - 1);
return;
}
}
ch = data.Document.GetCharAt (offset);
data.Replace (offset, 1, data.Document.GetCharAt (transposeOffset).ToString ());
data.Replace (transposeOffset, 1, ch.ToString ());
if (data.Caret.Column < line.Length + 1)
data.Caret.Offset = offset + 1;
}
示例9: IndentSelection
public static void IndentSelection (TextEditorData data)
{
if (!data.IsSomethingSelected)
return;
int startLineNr, endLineNr;
GetSelectedLines (data, out startLineNr, out endLineNr);
var anchor = data.MainSelection.Anchor;
var lead = data.MainSelection.Lead;
var indentationString = data.Options.IndentationString;
using (var undo = data.OpenUndoGroup (OperationType.Format)) {
foreach (DocumentLine line in data.SelectedLines) {
if (data.Options.IndentStyle == IndentStyle.Virtual && line.Length == 0)
continue;
data.Insert (line.Offset, indentationString);
}
}
int chars = indentationString.Length;
var leadCol = lead.Column > 1 || lead < anchor ? lead.Column + chars : 1;
var anchorCol = anchor.Column > 1 || anchor < lead ? anchor.Column + chars : 1;
data.SetSelection (anchor.Line, anchorCol, lead.Line, leadCol);
data.Document.RequestUpdate (new MultipleLineUpdate (startLineNr, endLineNr));
data.Document.CommitDocumentUpdate ();
}
示例10: AddRegisterDirective
public void AddRegisterDirective (RegisterDirective directive, TextEditorData editor, bool preserveCaretPosition)
{
var node = GetRegisterInsertionPointNode ();
if (node == null)
return;
Doc.Info.RegisteredTags.Add (directive);
var line = Math.Max (node.Region.EndLine, node.Region.BeginLine);
var pos = editor.Document.LocationToOffset (line, editor.Document.GetLine (line - 1).Length);
if (pos < 0)
return;
using (var undo = editor.OpenUndoGroup ()) {
var oldCaret = editor.Caret.Offset;
var inserted = editor.Insert (pos, editor.EolMarker + directive.ToString ());
if (preserveCaretPosition) {
editor.Caret.Offset = (pos < oldCaret)? oldCaret + inserted : oldCaret;
}
}
}
示例11: IndentSelection
public static void IndentSelection (TextEditorData data)
{
if (!data.IsSomethingSelected)
return;
int startLineNr, endLineNr;
GetSelectedLines (data, out startLineNr, out endLineNr);
var anchor = data.MainSelection.Anchor;
var lead = data.MainSelection.Lead;
using (var undo = data.OpenUndoGroup ()) {
foreach (DocumentLine line in data.SelectedLines) {
data.Insert (line.Offset, data.Options.IndentationString);
}
}
var leadCol = lead.Column > 1 || lead < anchor ? lead.Column + 1 : 1;
var anchorCol = anchor.Column > 1 || anchor < lead ? anchor.Column + 1 : 1;
data.SetSelection (anchor.Line, anchorCol, lead.Line, leadCol);
data.Document.RequestUpdate (new MultipleLineUpdate (startLineNr, endLineNr));
data.Document.CommitDocumentUpdate ();
}
示例12: InsertNewLine
public static void InsertNewLine (TextEditorData data)
{
if (!data.CanEditSelection)
return;
data.Document.BeginAtomicUndo ();
if (data.IsSomethingSelected)
data.DeleteSelectedText ();
data.EnsureCaretIsNotVirtual ();
StringBuilder sb = new StringBuilder (data.EolMarker);
if (data.Options.AutoIndent)
sb.Append (data.Document.GetLineIndent (data.Caret.Line));
int offset = data.Caret.Offset;
data.Insert (offset, sb.ToString ());
data.Caret.Offset = offset + sb.Length;
data.Document.EndAtomicUndo ();
}
示例13: InsertTab
public static void InsertTab (TextEditorData data)
{
if (!data.CanEditSelection)
return;
if (data.IsMultiLineSelection) {
IndentSelection (data);
return;
}
data.Document.BeginAtomicUndo ();
if (data.IsSomethingSelected) {
data.DeleteSelectedText ();
}
string indentationString = "\t";
bool convertTabToSpaces = data.Options.TabsToSpaces;
if (!convertTabToSpaces && !data.Options.AllowTabsAfterNonTabs) {
for (int i = 1; i < data.Caret.Column; i++) {
if (data.Document.GetCharAt (data.Caret.Offset - i) != '\t') {
convertTabToSpaces = true;
break;
}
}
}
if (convertTabToSpaces) {
DocumentLocation visualLocation = data.Document.LogicalToVisualLocation (data, data.Caret.Location);
int tabWidth = TextViewMargin.GetNextTabstop (data, visualLocation.Column) - visualLocation.Column;
indentationString = new string (' ', tabWidth);
}
int length = data.Insert (data.Caret.Offset, indentationString);
data.Caret.Column += length;
data.Document.EndAtomicUndo ();
}
示例14: IndentSelection
public static void IndentSelection (TextEditorData data)
{
int startLineNr, endLineNr;
GetSelectedLines (data, out startLineNr, out endLineNr);
data.Document.BeginAtomicUndo ();
foreach (LineSegment line in data.SelectedLines) {
data.Insert (line.Offset, data.Options.IndentationString);
}
if (data.IsSomethingSelected)
SelectLineBlock (data, endLineNr, startLineNr);
if (data.Caret.Column != 0) {
data.Caret.PreserveSelection = true;
data.Caret.Column++;
data.Caret.PreserveSelection = false;
}
data.Document.EndAtomicUndo ();
data.Document.RequestUpdate (new MultipleLineUpdate (startLineNr, endLineNr));
data.Document.CommitDocumentUpdate ();
}
示例15: InsertTab
public static void InsertTab (TextEditorData data)
{
if (!data.CanEditSelection)
return;
if (data.IsMultiLineSelection && data.MainSelection.SelectionMode != SelectionMode.Block) {
IndentSelection (data);
return;
}
using (var undo = data.OpenUndoGroup ()) {
string indentationString = "\t";
bool convertTabToSpaces = data.Options.TabsToSpaces;
if (!convertTabToSpaces && !data.Options.AllowTabsAfterNonTabs) {
for (int i = 1; i < data.Caret.Column; i++) {
if (data.Document.GetCharAt (data.Caret.Offset - i) != '\t') {
convertTabToSpaces = true;
break;
}
}
}
if (convertTabToSpaces) {
DocumentLocation visualLocation = data.LogicalToVisualLocation (data.Caret.Location);
int tabWidth = TextViewMargin.GetNextTabstop (data, visualLocation.Column) - visualLocation.Column;
indentationString = new string (' ', tabWidth);
}
if (data.IsMultiLineSelection && data.MainSelection.SelectionMode == SelectionMode.Block) {
data.InsertAtCaret (indentationString);
} else {
if (data.IsSomethingSelected)
data.DeleteSelectedText ();
data.Insert (data.Caret.Offset, indentationString);
}
}
}