本文整理汇总了C#中Mono.TextEditor.TextEditorData.GetCharAt方法的典型用法代码示例。如果您正苦于以下问题:C# TextEditorData.GetCharAt方法的具体用法?C# TextEditorData.GetCharAt怎么用?C# TextEditorData.GetCharAt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.TextEditor.TextEditorData
的用法示例。
在下文中一共展示了TextEditorData.GetCharAt方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindAttributeName
public static string FindAttributeName (TextEditorData editor, ICompilationUnit unit, string fileName)
{
int caretOffset = editor.Caret.Offset;
int pos = -1;
for (int i = caretOffset - 1; i >= 0; i--) {
if (editor.GetCharAt (i) == '[') {
pos = i;
break;
}
}
if (pos <= 0)
return null;
pos++;
StringBuilder result = new StringBuilder ();
while (pos < caretOffset) {
char ch = editor.GetCharAt (pos);
if (!(Char.IsLetterOrDigit (ch) || ch == '_'))
break;
result.Append (ch);
pos++;
}
return result.ToString ();
}
示例2: ConvertNormalToVerbatimString
static void ConvertNormalToVerbatimString (TextEditorData textEditorData, int offset)
{
var endOffset = offset;
while (endOffset < textEditorData.Length) {
char ch = textEditorData.GetCharAt (endOffset);
if (ch == '\\') {
if (endOffset + 1 < textEditorData.Length && NewLine.IsNewLine (textEditorData.GetCharAt (endOffset + 1)))
return;
endOffset += 2;
continue;
}
if (ch == '"')
break;
if (NewLine.IsNewLine (ch))
return;
endOffset++;
}
if (offset > endOffset || endOffset == textEditorData.Length)
return;
var plainText = TextPasteUtils.StringLiteralPasteStrategy.Instance.Decode (textEditorData.GetTextAt (offset, endOffset - offset));
var newText = TextPasteUtils.VerbatimStringStrategy.Encode (plainText);
textEditorData.Replace (offset, endOffset - offset, newText);
}
示例3: SetCompletionText
public static void SetCompletionText (TextEditorData data, CodeCompletionContext ctx, string partialWord, string completeWord, int wordOffset)
{
if (data == null || data.Document == null)
return;
int triggerOffset = ctx.TriggerOffset;
int length = String.IsNullOrEmpty (partialWord) ? 0 : partialWord.Length;
// for named arguments invoke(arg:<Expr>);
if (completeWord.EndsWith (":", StringComparison.Ordinal)) {
if (data.GetCharAt (triggerOffset + length) == ':')
length++;
}
bool blockMode = false;
if (data.IsSomethingSelected) {
blockMode = data.MainSelection.SelectionMode == Mono.TextEditor.SelectionMode.Block;
if (blockMode) {
data.Caret.PreserveSelection = true;
triggerOffset = data.Caret.Offset - length;
} else {
if (data.SelectionRange.Offset < ctx.TriggerOffset)
triggerOffset = ctx.TriggerOffset - data.SelectionRange.Length;
data.DeleteSelectedText ();
}
length = 0;
}
// | in the completion text now marks the caret position
int idx = completeWord.IndexOf ('|');
if (idx >= 0) {
completeWord = completeWord.Remove (idx, 1);
}
triggerOffset += data.EnsureCaretIsNotVirtual ();
if (blockMode) {
using (var undo = data.OpenUndoGroup ()) {
int minLine = data.MainSelection.MinLine;
int maxLine = data.MainSelection.MaxLine;
int column = triggerOffset - data.Document.GetLineByOffset (triggerOffset).Offset;
for (int lineNumber = minLine; lineNumber <= maxLine; lineNumber++) {
DocumentLine lineSegment = data.Document.GetLine (lineNumber);
if (lineSegment == null)
continue;
int offset = lineSegment.Offset + column;
data.Replace (offset, length, completeWord);
}
int minColumn = Math.Min (data.MainSelection.Anchor.Column, data.MainSelection.Lead.Column);
data.MainSelection = data.MainSelection.WithRange (
new Mono.TextEditor.DocumentLocation (data.Caret.Line == minLine ? maxLine : minLine, minColumn),
data.Caret.Location
);
data.Document.CommitMultipleLineUpdate (data.MainSelection.MinLine, data.MainSelection.MaxLine);
data.Caret.PreserveSelection = false;
}
} else {
data.Replace (triggerOffset, length, completeWord);
}
data.Document.CommitLineUpdate (data.Caret.Line);
if (idx >= 0)
data.Caret.Offset = triggerOffset + idx;
}
示例4: FindPrevWordStart
static int FindPrevWordStart (TextEditorData editor, int offset)
{
while (--offset >= 0 && !Char.IsWhiteSpace (editor.GetCharAt (offset)))
;
return ++offset;
}
示例5: SearchMatchingBracket
static int SearchMatchingBracket (TextEditorData editor, int offset, char openBracket, char closingBracket, int direction)
{
bool isInString = false;
bool isInChar = false;
bool isInBlockComment = false;
int depth = -1;
while (offset >= 0 && offset < editor.Length) {
char ch = editor.GetCharAt (offset);
switch (ch) {
case '/':
if (isInBlockComment)
isInBlockComment = editor.GetCharAt (offset + direction) != '*';
if (!isInString && !isInChar && offset - direction < editor.Length)
isInBlockComment = offset > 0 && editor.GetCharAt (offset - direction) == '*';
break;
case '"':
if (!isInChar && !isInBlockComment)
isInString = !isInString;
break;
case '\'':
if (!isInString && !isInBlockComment)
isInChar = !isInChar;
break;
default :
if (ch == closingBracket) {
if (!(isInString || isInChar || isInBlockComment))
--depth;
} else if (ch == openBracket) {
if (!(isInString || isInChar || isInBlockComment)) {
++depth;
if (depth == 0)
return offset;
}
}
break;
}
offset += direction;
}
return -1;
}
示例6: ConvertVerbatimStringToNormal
void ConvertVerbatimStringToNormal (TextEditorData textEditorData, int offset)
{
var endOffset = offset;
while (endOffset < textEditorData.Length) {
char ch = textEditorData.GetCharAt (endOffset);
if (ch == '"' && (endOffset + 1 < textEditorData.Length && textEditorData.GetCharAt (endOffset + 1) == '"')) {
endOffset += 2;
continue;
}
if (ch == '"')
break;
endOffset++;
}
textEditorData.Replace (offset, endOffset - offset, ConvertToStringLiteral (ConvertFromVerbatimString (textEditorData.GetTextAt (offset, endOffset - offset))));
}
示例7: GuessSemicolonInsertionOffset
public static bool GuessSemicolonInsertionOffset (TextEditorData data, ISegment curLine, int caretOffset, out int outOffset)
{
int lastNonWsOffset = caretOffset;
char lastNonWsChar = '\0';
outOffset = caretOffset;
int max = curLine.EndOffset;
int end = caretOffset;
while (end > 1 && char.IsWhiteSpace (data.GetCharAt (end)))
end--;
int end2 = end;
while (end2 > 1 && char.IsLetter (data.GetCharAt (end2 - 1)))
end2--;
if (end != end2) {
string token = data.GetTextBetween (end2, end + 1);
// guess property context
if (token == "get" || token == "set")
return false;
}
var offset = curLine.Offset;
string lineText = data.GetTextAt (caretOffset, max - caretOffset);
var lexer = new CSharpCompletionEngineBase.MiniLexer (lineText);
lexer.Parse ((ch, i) => {
if (lexer.IsInSingleComment || lexer.IsInMultiLineComment)
return true;
if (ch == '}' && lexer.IsFistNonWs && !IsSemicolonalreadyPlaced (data, caretOffset)) {
lastNonWsChar = ';';
return true;
}
if (!char.IsWhiteSpace (ch)) {
lastNonWsOffset = caretOffset + i;
lastNonWsChar = ch;
}
return false;
});
// if the line ends with ';' the line end is not the correct place for a new semicolon.
if (lastNonWsChar == ';')
return false;
outOffset = lastNonWsOffset;
return true;
}
示例8: GetInsertionPoints
public static List<InsertionPoint> GetInsertionPoints (TextEditorData data, ParsedDocument parsedDocument, IUnresolvedTypeDefinition type)
{
if (data == null)
throw new ArgumentNullException ("data");
if (parsedDocument == null)
throw new ArgumentNullException ("parsedDocument");
if (type == null)
throw new ArgumentNullException ("type");
// update type from parsed document, since this is always newer.
//type = parsedDocument.GetInnermostTypeDefinition (type.GetLocation ()) ?? type;
List<InsertionPoint> result = new List<InsertionPoint> ();
int offset = data.LocationToOffset (type.Region.Begin);
if (offset < 0 || type.BodyRegion.IsEmpty)
return result;
while (offset < data.Length && data.GetCharAt (offset) != '{') {
offset++;
}
var realStartLocation = data.OffsetToLocation (offset);
result.Add (GetInsertionPosition (data.Document, realStartLocation.Line, realStartLocation.Column));
result [0].LineBefore = NewLineInsertion.None;
foreach (var member in type.Members) {
TextLocation domLocation = member.BodyRegion.End;
if (domLocation.Line <= 0) {
DocumentLine lineSegment = data.GetLine (member.Region.BeginLine);
if (lineSegment == null)
continue;
domLocation = new TextLocation (member.Region.BeginLine, lineSegment.Length + 1);
}
result.Add (GetInsertionPosition (data.Document, domLocation.Line, domLocation.Column));
}
foreach (var nestedType in type.NestedTypes) {
TextLocation domLocation = nestedType.BodyRegion.End;
if (domLocation.Line <= 0) {
DocumentLine lineSegment = data.GetLine (nestedType.Region.BeginLine);
if (lineSegment == null)
continue;
domLocation = new TextLocation (nestedType.Region.BeginLine, lineSegment.Length + 1);
}
result.Add (GetInsertionPosition (data.Document, domLocation.Line, domLocation.Column));
}
result [result.Count - 1].LineAfter = NewLineInsertion.None;
CheckStartPoint (data.Document, result [0], result.Count == 1);
if (result.Count > 1) {
result.RemoveAt (result.Count - 1);
NewLineInsertion insertLine;
var lineBefore = data.GetLine (type.BodyRegion.EndLine - 1);
if (lineBefore != null && lineBefore.Length == lineBefore.GetIndentation (data.Document).Length) {
insertLine = NewLineInsertion.None;
} else {
insertLine = NewLineInsertion.Eol;
}
// search for line start
int col = type.BodyRegion.EndColumn - 1;
var line = data.GetLine (type.BodyRegion.EndLine);
if (line != null) {
while (col > 1 && char.IsWhiteSpace (data.GetCharAt (line.Offset + col - 2)))
col--;
}
result.Add (new InsertionPoint (new DocumentLocation (type.BodyRegion.EndLine, col), insertLine, NewLineInsertion.Eol));
CheckEndPoint (data.Document, result [result.Count - 1], result.Count == 1);
}
foreach (var region in parsedDocument.UserRegions.Where (r => type.BodyRegion.IsInside (r.Region.Begin))) {
result.Add (new InsertionPoint (new DocumentLocation (region.Region.BeginLine + 1, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
result.Add (new InsertionPoint (new DocumentLocation (region.Region.EndLine, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
result.Add (new InsertionPoint (new DocumentLocation (region.Region.EndLine + 1, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
}
result.Sort ((left, right) => left.Location.CompareTo (right.Location));
return result;
}
示例9: FindExactContextForAsCompletion
public ExpressionContext FindExactContextForAsCompletion (TextEditorData editor, ICompilationUnit unit, string fileName, IType callingType)
{
// find expression on left hand side of the assignment
int caretOffset = editor.Caret.Offset;
int pos = -1;
for (int i = caretOffset - 1; i >= 0; i--) {
char ch = editor.GetCharAt (i);
if (Char.IsWhiteSpace (ch))
continue;
if (ch == '=') {
pos = i;
break;
}
if (!(Char.IsLetterOrDigit (ch) || ch == '_'))
return null;
}
if (pos <= 0)
return null;
int lastWs = pos - 1;
while (lastWs > 0 && Char.IsWhiteSpace (editor.GetCharAt (lastWs)))
lastWs--;
while (lastWs > 0 && !Char.IsWhiteSpace (editor.GetCharAt (lastWs)))
lastWs--;
ExpressionResult firstExprs = FindExpression (editor, lastWs);
if (firstExprs.Expression != null) {
IReturnType unresolvedReturnType = NRefactoryResolver.ParseReturnType (firstExprs);
if (unresolvedReturnType != null) {
IType resolvedType = projectContent.SearchType (unit, (INode)callingType ?? unit, unresolvedReturnType);
return ExpressionContext.TypeDerivingFrom (resolvedType != null ? new DomReturnType (resolvedType) : null, unresolvedReturnType, true);
}
}
ExpressionResult lhsExpr = FindExpression (editor, pos);
if (lhsExpr.Expression != null) {
NRefactoryResolver resolver = new NRefactoryResolver (projectContent, unit, ICSharpCode.NRefactory.SupportedLanguage.CSharp, editor, fileName);
ResolveResult rr = resolver.Resolve (lhsExpr, new DomLocation (editor.Caret.Line, editor.Caret.Column));
//ResolveResult rr = ParserService.Resolve (lhsExpr, currentLine.LineNumber, pos, editor.FileName, editor.Text);
if (rr != null && rr.ResolvedType != null) {
ExpressionContext context;
IType c;
/* if (rr.ResolvedType.IsArrayReturnType) {
// when creating an array, all classes deriving from the array's element type are allowed
IReturnType elementType = rr.ResolvedType.CastToArrayReturnType().ArrayElementType;
c = elementType != null ? dom.GetType (elementType) : null;
context = ExpressionContext.TypeDerivingFrom(elementType, false);
} else */ {
// when creating a normal instance, all non-abstract classes deriving from the type
// are allowed
c = projectContent.GetType (rr.ResolvedType);
context = ExpressionContext.TypeDerivingFrom (rr.ResolvedType, null, true);
}
if (c != null && !context.FilterEntry (c)) {
// Try to suggest an entry (List<int> a = new => suggest List<int>).
string suggestedClassName = null;
/*LanguageProperties.CSharp.CodeGenerator.GenerateCode(
CodeGenerator.ConvertType(
rr.ResolvedType,
new ClassFinder(ParserService.GetParseInformation(editor.FileName), editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Column)
), "");*/ if (suggestedClassName != c.Name) {
// create an IType instance that includes the type arguments in its name
//context.DefaultItem = new RenamedClass (c, suggestedClassName);
} else {
context.DefaultItem = c;
}
}
return context;
}
}
return null;
}
示例10: GetInsertionPoints
public static List<InsertionPoint> GetInsertionPoints (TextEditorData data, ParsedDocument parsedDocument, IType type)
{
if (data == null)
throw new ArgumentNullException ("data");
if (parsedDocument == null)
throw new ArgumentNullException ("parsedDocument");
if (type == null)
throw new ArgumentNullException ("type");
List<InsertionPoint> result = new List<InsertionPoint> ();
int offset = data.LocationToOffset (type.BodyRegion.Start.Line, type.BodyRegion.Start.Column);
if (offset < 0)
return result;
while (offset < data.Length && data.GetCharAt (offset) != '{') {
offset++;
}
var realStartLocation = data.OffsetToLocation (offset);
result.Add (GetInsertionPosition (data.Document, realStartLocation.Line, realStartLocation.Column));
result[0].LineBefore = NewLineInsertion.None;
foreach (IMember member in type.Members) {
DomLocation domLocation = member.BodyRegion.End;
if (domLocation.Line <= 0) {
LineSegment lineSegment = data.GetLine (member.Location.Line);
if (lineSegment == null)
continue;
domLocation = new DomLocation (member.Location.Line, lineSegment.EditableLength + 1);
}
result.Add (GetInsertionPosition (data.Document, domLocation.Line, domLocation.Column));
}
result[result.Count - 1].LineAfter = NewLineInsertion.None;
CheckStartPoint (data.Document, result[0], result.Count == 1);
if (result.Count > 1) {
result.RemoveAt (result.Count - 1);
NewLineInsertion insertLine;
var lineBefore = data.GetLine (type.BodyRegion.End.Line - 1);
if (lineBefore != null && lineBefore.EditableLength == lineBefore.GetIndentation (data.Document).Length) {
insertLine = NewLineInsertion.None;
} else {
insertLine = NewLineInsertion.Eol;
}
// search for line start
var line = data.GetLine (type.BodyRegion.End.Line);
int col = type.BodyRegion.End.Column - 1;
while (col > 1 && char.IsWhiteSpace (data.GetCharAt (line.Offset + col - 2)))
col--;
result.Add (new InsertionPoint (new DocumentLocation (type.BodyRegion.End.Line, col), insertLine, NewLineInsertion.Eol));
CheckEndPoint (data.Document, result[result.Count - 1], result.Count == 1);
}
foreach (var region in parsedDocument.UserRegions.Where (r => type.BodyRegion.Contains (r.Region))) {
result.Add (new InsertionPoint (new DocumentLocation (region.Region.Start.Line + 1, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
result.Add (new InsertionPoint (new DocumentLocation (region.Region.End.Line, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
result.Add (new InsertionPoint (new DocumentLocation (region.Region.End.Line + 1, 1), NewLineInsertion.Eol, NewLineInsertion.Eol));
}
result.Sort ((left, right) => left.Location.CompareTo (right.Location));
return result;
}
示例11: FindExactContextForNewCompletion
public ExpressionContext FindExactContextForNewCompletion (TextEditorData editor, ICompilationUnit unit, string fileName, IType callingType, int cursorPos)
{
// find expression on left hand side of the assignment
int caretOffset = editor.Caret.Offset;
int pos = -1;
for (int i = caretOffset - 1; i >= 0; i--) {
if (editor.GetCharAt (i) == '=') {
if (i > 0 && (editor.GetCharAt (i - 1) == '+' || editor.GetCharAt (i - 1) == '-'))
i--;
pos = i;
break;
}
}
if (pos <= 0)
return null;
// check if new +=/-=/= is right before "new"
for (int i = pos; i < cursorPos; i++) {
char ch = editor.GetCharAt (i);
if (Char.IsWhiteSpace (ch))
continue;
if (ch != '=' && ch != '+' && ch != '-' && ch != 'n' && ch != 'e' && ch != 'w')
return null;
}
int lastWs = pos - 1;
while (lastWs > 0 && char.IsWhiteSpace (editor.GetCharAt (lastWs)))
lastWs--;
int varTypePos = lastWs;
while (varTypePos > 0 && !char.IsWhiteSpace (editor.GetCharAt (varTypePos)))
varTypePos--;
while (varTypePos > 0 && char.IsWhiteSpace (editor.GetCharAt (varTypePos)))
varTypePos--;
ExpressionResult possibleTypeExpression = FindFullExpression (editor, varTypePos);
if (possibleTypeExpression.Expression != null) {
if (possibleTypeExpression.Expression == "var")
return ExpressionContext.TypeDerivingFrom (DomReturnType.Object, DomReturnType.Object, true);
IReturnType unresolvedReturnType = NRefactoryResolver.ParseReturnType (possibleTypeExpression);
if (unresolvedReturnType != null) {
IType resolvedType = projectContent.SearchType (unit, callingType, new DomLocation (editor.Caret.Line, editor.Caret.Column), unresolvedReturnType);
if (resolvedType != null)
return ExpressionContext.TypeDerivingFrom (new DomReturnType (resolvedType), unresolvedReturnType, true);
}
}
ExpressionResult lhsExpr = FindFullExpression (editor, lastWs);
if (lhsExpr.Expression != null) {
NRefactoryResolver resolver = new NRefactoryResolver (projectContent, unit, ICSharpCode.OldNRefactory.SupportedLanguage.CSharp, editor, fileName);
ResolveResult rr = resolver.Resolve (lhsExpr, new DomLocation (editor.Caret.Line, editor.Caret.Column));
//ResolveResult rr = ParserService.Resolve (lhsExpr, currentLine.LineNumber, pos, editor.FileName, editor.Text);
if (rr != null && rr.ResolvedType != null) {
ExpressionContext context;
IType c;
/* if (rr.ResolvedType.IsArrayReturnType) {
// when creating an array, all classes deriving from the array's element type are allowed
IReturnType elementType = rr.ResolvedType.CastToArrayReturnType().ArrayElementType;
c = elementType != null ? dom.GetType (elementType) : null;
context = ExpressionContext.TypeDerivingFrom(elementType, false);
} else */ {
// when creating a normal instance, all non-abstract classes deriving from the type
// are allowed
c = projectContent.GetType (rr.ResolvedType);
context = ExpressionContext.TypeDerivingFrom (rr.ResolvedType, null, true);
}
if (c != null && !context.FilterEntry (c)) {
// Try to suggest an entry (List<int> a = new => suggest List<int>).
string suggestedClassName = null;
/*LanguageProperties.CSharp.CodeGenerator.GenerateCode(
CodeGenerator.ConvertType(
rr.ResolvedType,
new ClassFinder(ParserService.GetParseInformation(editor.FileName), editor.ActiveTextAreaControl.Caret.Line + 1, editor.ActiveTextAreaControl.Caret.Column + 1)
), "");*/ if (suggestedClassName != c.Name) {
// create an IType instance that includes the type arguments in its name
//context.DefaultItem = new RenamedClass (c, suggestedClassName);
} else {
context.DefaultItem = c;
}
}
return context;
}
}
return null;
}
示例12: TryFindSymbolBlock
static bool TryFindSymbolBlock(TextEditorData data, char command, out SymbolBlock result)
{
char end, begin;
if (!BeginToEndCharMap.TryGetValue (command, out end)) end = command;
if (!EndToBeginCharMap.TryGetValue (command, out begin)) begin = command;
var offset = data.Caret.Offset;
var startTokenOffset = ParseForChar(data, offset, 0, end, begin, false);
var endTokenOffset = ParseForChar(data, offset, data.Length, begin, end, true);
// Use the editor's FindMatchingBrace built-in functionality. It's better at handling erroneous braces
// inside quotes. We still need to do the above paragraph because we needed to find the braces.
var matchingStartBrace = endTokenOffset.HasValue ? data.Document.GetMatchingBracketOffset(
endTokenOffset.GetValueOrDefault ()) : -1;
if (matchingStartBrace >= 0 && (!startTokenOffset.HasValue
|| matchingStartBrace != startTokenOffset.GetValueOrDefault ()))
startTokenOffset = matchingStartBrace;
var matchingEndBrace = startTokenOffset.HasValue && data.GetCharAt (offset) != end ?
data.Document.GetMatchingBracketOffset(startTokenOffset.GetValueOrDefault ()) : -1;
if (matchingEndBrace >= 0 && (!endTokenOffset.HasValue
|| matchingEndBrace != endTokenOffset.GetValueOrDefault ()))
endTokenOffset = matchingEndBrace;
if (!startTokenOffset.HasValue || !endTokenOffset.HasValue) throw new ViModeAbortException();
result = new SymbolBlock
{
StartOffset = startTokenOffset.GetValueOrDefault (),
EndOffset = endTokenOffset.GetValueOrDefault (),
StartLine = data.GetLineByOffset (startTokenOffset.GetValueOrDefault()),
EndLine = data.GetLineByOffset (endTokenOffset.GetValueOrDefault()),
};
return true;
}
示例13: ParseForChar
static int? ParseForChar(TextEditorData data, int fromOffset, int toOffset, char oppositeToken, char findToken, bool forward)
{
int increment = forward ? 1 : -1;
var symbolCount = 0;
for (int i = fromOffset; forward && i < toOffset || !forward && i >= toOffset; i += increment)
{
var c = data.GetCharAt(i);
if (c == oppositeToken)
symbolCount++;
else if (c == findToken)
{
if (symbolCount == 0) return i;
symbolCount--;
}
}
return null;
}
示例14: GetWordAtOffset
string GetWordAtOffset (TextEditorData text, int offset, out int begin)
{
if (offset < 0 || offset >= text.Length)
{
begin = offset;
return String.Empty;
}
StringBuilder sb = new StringBuilder ();
int i = offset;
char c;
// Look forward for break char
for (i = offset; i < text.Length; i++)
{
c = text.GetCharAt (i);
if (Char.IsWhiteSpace (c))
break;
bool needsBreak = false;
switch (c) {
case '(':
case ')':
case '[':
case ']':
case '{':
case '}':
case ':':
case ',':
case '@':
case '.':
needsBreak = true;
break;
default:
sb.Append (c);
break;
}
if (Char.IsWhiteSpace (c) || needsBreak)
break;
}
if (offset > 0)
{
// look backwards for break char
for (i = offset - 1; i > 0; i--)
{
c = text.GetCharAt (i);
if (Char.IsWhiteSpace (c))
break;
bool needsBreak = false;
switch (c) {
case '(':
case ')':
case '[':
case ']':
case '{':
case '}':
case ':':
case ',':
case '@':
case '.':
needsBreak = true;
break;
default:
sb.Insert (0, c);
break;
}
if (needsBreak)
break;
}
}
begin = i;
return sb.ToString ();
}
示例15: ConvertVerbatimStringToNormal
static void ConvertVerbatimStringToNormal (TextEditorData textEditorData, int offset)
{
var endOffset = offset;
while (endOffset < textEditorData.Length) {
char ch = textEditorData.GetCharAt (endOffset);
if (ch == '"' && (endOffset + 1 < textEditorData.Length && textEditorData.GetCharAt (endOffset + 1) == '"')) {
endOffset += 2;
continue;
}
if (ch == '"') {
break;
}
endOffset++;
}
var plainText = TextPasteUtils.VerbatimStringStrategy.Decode (textEditorData.GetTextAt (offset, endOffset - offset));
var newText = TextPasteUtils.StringLiteralPasteStrategy.Instance.Encode (plainText);
textEditorData.Replace (offset, endOffset - offset, newText);
}