本文整理汇总了C#中Mono.TextEditor.TextEditorData.GetLine方法的典型用法代码示例。如果您正苦于以下问题:C# TextEditorData.GetLine方法的具体用法?C# TextEditorData.GetLine怎么用?C# TextEditorData.GetLine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.TextEditor.TextEditorData
的用法示例。
在下文中一共展示了TextEditorData.GetLine方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InnerBlock
public static CommandRange InnerBlock(TextEditorData editor, char openingChar, char closingChar)
{
var range = Block(editor, openingChar, closingChar);
if (range.Length == 0)
return CommandRange.Empty;
int start = range.Start + 1;
int end = range.End - 2;
var line = editor.GetLine(editor.OffsetToLineNumber(range.Start));
// exclude newline if it comes just after opening char
if (line.EndOffsetIncludingDelimiter - start <= line.DelimiterLength)
start += line.DelimiterLength;
// exclude whitespace that comes just before the closing char...
line = editor.GetLine(editor.OffsetToLineNumber(range.End));
while (Char.IsWhiteSpace(editor.Text[end]) && end >= line.Offset)
end--;
//.. but only if newline comes after it
if (end >= line.Offset)
end = range.End - 2;
else
end -= line.PreviousLine.DelimiterLength;
if (start > end + 1)
return new CommandRange(start, start);
return new CommandRange(start, end+1);
}
示例2: QuotedString
public static CommandRange QuotedString(TextEditorData editor, char quotationChar)
{
var start = editor.Caret.Offset;
var end = editor.Caret.Offset;
var lineOffset = editor.GetLine(editor.Caret.Line).Offset;
var lineEndOffset = editor.GetLine(editor.Caret.Line).EndOffset - 1; // Line includes \n
if (editor.Text[start] == quotationChar)
{
// Check if we're on closing char
start = lineOffset;
var openingCandidate = -1;
while (start < end)
{
if (editor.Text[start] == quotationChar & openingCandidate != -1)
openingCandidate = -1;
else if (editor.Text[start] == quotationChar)
openingCandidate = start;
start = start + 1;
}
if (openingCandidate != -1)
{
start = openingCandidate;
}
else
{
// not on closing char, let's find closing one
start = editor.Caret.Offset;
end = start + 1;
while (end < lineEndOffset & editor.Text[end] != quotationChar)
end++;
}
}
else
{
while (start >= lineOffset & editor.Text[start] != quotationChar)
start--;
while (end < lineEndOffset & editor.Text[end] != quotationChar)
end++;
}
if (start < 0 || end > lineEndOffset || start == end)
return CommandRange.Empty;
var endIncludingTrailingWhiteSpace = end;
var startIncludingTrailingWhiteSpace = start;
// expand to include all trailing white space
while (endIncludingTrailingWhiteSpace < lineEndOffset && Char.IsWhiteSpace(editor.Text[endIncludingTrailingWhiteSpace + 1]))
endIncludingTrailingWhiteSpace++;
// if there's no trailing white space then include leading
if (endIncludingTrailingWhiteSpace == end)
{
while (startIncludingTrailingWhiteSpace > lineOffset && Char.IsWhiteSpace(editor.Text[startIncludingTrailingWhiteSpace - 1]))
startIncludingTrailingWhiteSpace--;
}
return new CommandRange(Math.Min(start, startIncludingTrailingWhiteSpace), Math.Max(end, endIncludingTrailingWhiteSpace) + 1);
}
示例3: RemoveCharBeforCaret
static void RemoveCharBeforCaret (TextEditorData data)
{
if (!data.IsSomethingSelected && MonoDevelop.Ide.Editor.DefaultSourceEditorOptions.Instance.AutoInsertMatchingBracket) {
if (data.Caret.Offset > 0) {
var line = data.GetLine (data.Caret.Line);
var stack = line.StartSpan.Clone();
if (stack.Any (s => s.Color == "string.other")) {
DeleteActions.Backspace (data);
return;
}
stack = line.StartSpan.Clone();
if (stack.Any (s => s.Color == "string.other")) {
DeleteActions.Backspace (data);
return;
}
char ch = data.Document.GetCharAt (data.Caret.Offset - 1);
int idx = open.IndexOf (ch);
if (idx >= 0) {
int nextCharOffset = GetNextNonWsCharOffset (data, data.Caret.Offset);
if (nextCharOffset >= 0 && closing[idx] == data.Document.GetCharAt (nextCharOffset)) {
data.Remove (data.Caret.Offset, nextCharOffset - data.Caret.Offset + 1);
}
}
}
}
DeleteActions.Backspace (data);
}
示例4: RemoveCharBeforCaret
static void RemoveCharBeforCaret (TextEditorData data)
{
if (((ISourceEditorOptions)data.Options).AutoInsertMatchingBracket) {
if (data.Caret.Offset > 0) {
var line = data.GetLine (data.Caret.Line);
var stack = line.StartSpan.Clone();
if (stack.Any (s => s.Color == "string.other")) {
DeleteActions.Backspace (data);
return;
}
stack = line.StartSpan.Clone();
if (stack.Any (s => s.Color == "string.other")) {
DeleteActions.Backspace (data);
return;
}
char ch = data.Document.GetCharAt (data.Caret.Offset - 1);
int idx = open.IndexOf (ch);
if (idx >= 0) {
int nextCharOffset = GetNextNonWsCharOffset (data, data.Caret.Offset);
if (nextCharOffset >= 0 && closing[idx] == data.Document.GetCharAt (nextCharOffset)) {
bool updateToEnd = data.Document.OffsetToLineNumber (nextCharOffset) != data.Caret.Line;
data.Remove (data.Caret.Offset, nextCharOffset - data.Caret.Offset + 1);
}
}
}
}
DeleteActions.Backspace (data);
}
示例5: SetSelectLines
// TODO: move this somewhere else? extend TextEditor?
public static void SetSelectLines(TextEditorData editor, int start, int end)
{
start = Math.Min(start, editor.LineCount);
end = Math.Min(end, editor.LineCount);
var startLine = start > end ? editor.GetLine(end) : editor.GetLine(start);
var endLine = start > end ? editor.GetLine(start) : editor.GetLine(end);
editor.SetSelection(startLine.Offset, endLine.EndOffsetIncludingDelimiter);
}
示例6: LineStart
public static void LineStart(TextEditorData editor)
{
CaretMoveActions.LineStart(editor);
var line = editor.GetLine(editor.Caret.Line);
while (editor.Caret.Offset < line.EndOffset && Char.IsWhiteSpace(editor.Text[editor.Caret.Offset]))
editor.Caret.Offset++;
}
示例7: QuotedString
public static CommandRange QuotedString(TextEditorData editor, char quotationChar)
{
CommandRange range = FindQuotes(editor, quotationChar);
var lineOffset = editor.GetLine(editor.Caret.Line).Offset;
var lineEndOffset = editor.GetLine(editor.Caret.Line).EndOffset - 1; // Line includes \n
var endIncludingTrailingWhiteSpace = range.End;
var startIncludingTrailingWhiteSpace = range.Start;
// expand to include all trailing white space
while (endIncludingTrailingWhiteSpace < lineEndOffset && Char.IsWhiteSpace(editor.Text[endIncludingTrailingWhiteSpace + 1]))
endIncludingTrailingWhiteSpace++;
// if there's no trailing white space then include leading
if (endIncludingTrailingWhiteSpace == range.End)
{
while (startIncludingTrailingWhiteSpace > lineOffset && Char.IsWhiteSpace(editor.Text[startIncludingTrailingWhiteSpace - 1]))
startIncludingTrailingWhiteSpace--;
}
return new CommandRange(Math.Min(range.Start, startIncludingTrailingWhiteSpace), Math.Max(range.End, endIncludingTrailingWhiteSpace) + 1);
}
示例8: Right
public static void Right(TextEditorData editor)
{
if (!Platform.IsMac)
{
if (editor.Caret.Offset < editor.GetLine(editor.Caret.Line).EndOffset)
CaretMoveActions.Right(editor);
}
else
{
using (var undo = editor.OpenUndoGroup())
{
DocumentLine line = editor.GetLine(editor.Caret.Line);
if (editor.Caret.Column < line.Length)
editor.Caret.Column = editor.Caret.Column + 1;
}
}
}
示例9: 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);
}
}
}
示例10: GetEndOfLineOffset
internal static int GetEndOfLineOffset (TextEditorData data, DocumentLocation loc, bool includeDelimiter = true)
{
var line = data.Document.GetLine (loc.Line);
loc = new DocumentLocation (loc.Line, line.Length + 1);
// handle folding
var foldings = data.Document.GetStartFoldings (loc.Line);
FoldSegment segment = null;
foreach (FoldSegment folding in foldings) {
if (folding.IsFolded && folding.Contains (data.Document.LocationToOffset (loc))) {
segment = folding;
break;
}
}
if (segment != null)
loc = data.Document.OffsetToLocation (segment.EndLine.Offset + segment.EndColumn - 1);
line = data.GetLine (loc.Line);
return includeDelimiter ? line.EndOffsetIncludingDelimiter : line.EndOffset;
}
示例11: Backspace
public static void Backspace (TextEditorData data, Action<TextEditorData> removeCharBeforeCaret)
{
if (!data.CanEditSelection)
return;
using (var undo = data.OpenUndoGroup ()) {
if (data.IsSomethingSelected) {
var visualAnchorLocation = data.LogicalToVisualLocation (data.MainSelection.Anchor);
var visualLeadLocation = data.LogicalToVisualLocation (data.MainSelection.Lead);
// case: zero width block selection
if (data.MainSelection.SelectionMode == SelectionMode.Block && visualAnchorLocation.Column == visualLeadLocation.Column) {
var col = data.MainSelection.Lead.Column;
if (col <= DocumentLocation.MinColumn) {
data.ClearSelection ();
return;
}
bool preserve = data.Caret.PreserveSelection;
data.Caret.PreserveSelection = true;
for (int lineNumber = data.MainSelection.MinLine; lineNumber <= data.MainSelection.MaxLine; lineNumber++) {
var lineSegment = data.Document.GetLine (lineNumber);
int insertOffset = lineSegment.GetLogicalColumn (data, visualAnchorLocation.Column - 1) - 1;
data.Remove (lineSegment.Offset + insertOffset, 1);
}
var visualColumn = data.GetLine (data.Caret.Location.Line).GetVisualColumn (data, col - 1);
data.MainSelection = new Selection (
new DocumentLocation (data.MainSelection.Anchor.Line, data.GetLine (data.MainSelection.Anchor.Line).GetLogicalColumn (data, visualColumn)),
new DocumentLocation (data.MainSelection.Lead.Line, data.GetLine (data.MainSelection.Lead.Line).GetLogicalColumn (data, visualColumn)),
SelectionMode.Block
);
data.Caret.PreserveSelection = preserve;
data.Document.CommitMultipleLineUpdate (data.MainSelection.MinLine, data.MainSelection.MaxLine);
return;
}
data.DeleteSelectedText (data.MainSelection.SelectionMode != SelectionMode.Block);
return;
}
if (data.Caret.Line == DocumentLocation.MinLine && data.Caret.Column == DocumentLocation.MinColumn)
return;
// Virtual indentation needs to be fixed before to have the same behavior
// if it's there or not (otherwise user has to press multiple backspaces in some cases)
data.EnsureCaretIsNotVirtual ();
DocumentLine line = data.Document.GetLine (data.Caret.Line);
if (data.Caret.Column > line.Length + 1) {
data.Caret.Column = line.Length + 1;
} else if (data.Caret.Offset == line.Offset) {
DocumentLine lineAbove = data.Document.GetLine (data.Caret.Line - 1);
if (lineAbove.Length == 0 && data.HasIndentationTracker && data.Options.IndentStyle == IndentStyle.Virtual) {
data.Caret.Location = new DocumentLocation (data.Caret.Line - 1, data.IndentationTracker.GetVirtualIndentationColumn (data.Caret.Line - 1, 1));
data.Replace (lineAbove.EndOffsetIncludingDelimiter - lineAbove.DelimiterLength, lineAbove.DelimiterLength, data.IndentationTracker.GetIndentationString (data.Caret.Line - 1, 1));
} else {
data.Remove (lineAbove.EndOffsetIncludingDelimiter - lineAbove.DelimiterLength, lineAbove.DelimiterLength);
}
} else {
removeCharBeforeCaret (data);
}
// Needs to be fixed after, the line may just contain the indentation
data.FixVirtualIndentation ();
}
}
示例12: CaretLine
public static void CaretLine (TextEditorData data)
{
if (data.Document.LineCount <= 1 || !data.CanEdit (data.Caret.Line))
return;
using (var undo = data.OpenUndoGroup ()) {
if (data.IsSomethingSelected) {
var startLine = data.GetLine (data.MainSelection.Start.Line);
var endLine = data.GetLine (data.MainSelection.End.Line);
data.Remove (startLine.Offset, endLine.EndOffsetIncludingDelimiter - startLine.Offset);
return;
}
var start = GetStartOfLineOffset (data, data.Caret.Location);
var end = GetEndOfLineOffset (data, data.Caret.Location);
data.Remove (start, end - start);
data.Caret.Column = DocumentLocation.MinColumn;
}
}
示例13: GetStartOfLineOffset
internal static int GetStartOfLineOffset (TextEditorData data, DocumentLocation loc)
{
var line = data.Document.GetLine (loc.Line);
loc = new DocumentLocation (loc.Line, line.Length + 1);
// handle folding
var foldings = data.Document.GetFoldingsFromOffset (line.Offset);
FoldSegment segment = null;
foreach (FoldSegment folding in foldings) {
if (folding.IsFolded) {
if (segment != null && segment.Offset < folding.Offset)
continue;
segment = folding;
}
}
if (segment != null)
loc = data.Document.OffsetToLocation (segment.StartLine.Offset);
line = data.GetLine (loc.Line);
return line.Offset;
}
示例14: InsertNewLine
public static void InsertNewLine (TextEditorData data)
{
if (!data.CanEditSelection)
return;
using (var undo = data.OpenUndoGroup ()) {
if (data.IsSomethingSelected) {
var end = data.MainSelection.End;
data.DeleteSelectedText ();
if (end.Column == 1) {
CaretMoveActions.InternalCaretMoveHome (data, true, false);
return;
}
}
switch (data.Options.IndentStyle) {
case IndentStyle.None:
data.InsertAtCaret (data.EolMarker);
break;
case IndentStyle.Auto:
data.EnsureCaretIsNotVirtual ();
var indent = data.Document.GetLineIndent (data.Caret.Line);
data.InsertAtCaret (data.EolMarker);
data.EnsureCaretIsNotVirtual ();
if (data.GetLine (data.Caret.Line).Length == 0)
data.InsertAtCaret (indent);
break;
case IndentStyle.Smart:
if (!data.HasIndentationTracker)
goto case IndentStyle.Auto;
NewLineSmartIndent (data);
break;
case IndentStyle.Virtual:
if (!data.HasIndentationTracker)
goto case IndentStyle.Auto;
var oldLine = data.Caret.Line;
var curLine = data.GetLine (oldLine);
var indentCol = data.GetVirtualIndentationColumn (data.Caret.Location);
if (curLine.Length >= data.Caret.Column) {
NewLineSmartIndent (data);
data.FixVirtualIndentation ();
data.FixVirtualIndentation (oldLine);
break;
}
data.Insert (data.Caret.Offset, data.EolMarker);
data.FixVirtualIndentation (oldLine);
data.Caret.Column = indentCol;
break;
default:
throw new ArgumentOutOfRangeException ();
}
}
}
示例15: InsertNewLine
public static void InsertNewLine (TextEditorData data)
{
if (!data.CanEditSelection)
return;
using (var undo = data.OpenUndoGroup ()) {
if (data.IsSomethingSelected)
data.DeleteSelectedText ();
switch (data.Options.IndentStyle) {
case IndentStyle.None:
data.InsertAtCaret (data.EolMarker);
break;
case IndentStyle.Auto:
data.EnsureCaretIsNotVirtual ();
var sb = new StringBuilder (data.EolMarker);
sb.Append (data.Document.GetLineIndent (data.Caret.Line));
data.InsertAtCaret (sb.ToString ());
break;
case IndentStyle.Smart:
if (!data.HasIndentationTracker)
goto case IndentStyle.Auto;
NewLineSmartIndent (data);
break;
case IndentStyle.Virtual:
if (!data.HasIndentationTracker)
goto case IndentStyle.Auto;
var oldLine = data.Caret.Line;
var curLine = data.GetLine (oldLine);
var indentCol = data.GetVirtualIndentationColumn (data.Caret.Location);
if (curLine.Length >= data.Caret.Column) {
NewLineSmartIndent (data);
data.FixVirtualIndentation ();
data.FixVirtualIndentation (oldLine);
break;
}
data.Insert (data.Caret.Offset, data.EolMarker);
data.FixVirtualIndentation (oldLine);
data.Caret.Column = indentCol;
break;
default:
throw new ArgumentOutOfRangeException ();
}
}
}