static MonoDevelop.Ide.FindInFiles.SearchResult GetJumpTypePartSearchResult (IType part) { var provider = new MonoDevelop.Ide.FindInFiles.FileProvider (part.CompilationUnit.FileName); var doc = new Mono.TextEditor.Document (); doc.Text = provider.ReadString (); int position = doc.LocationToOffset (part.Location.Line, part.Location.Column); while (position + part.Name.Length < doc.Length) { if (doc.GetTextAt (position, part.Name.Length) == part.Name) break; position++; } return new MonoDevelop.Ide.FindInFiles.SearchResult (provider, position, part.Name.Length); }
static InsertionPoint GetInsertionPosition (Document doc, int line, int column) { int bodyEndOffset = doc.LocationToOffset (line, column) + 1; LineSegment curLine = doc.GetLine (line); if (curLine != null) { if (bodyEndOffset < curLine.Offset + curLine.EditableLength) { System.Console.WriteLine (1); // case1: positition is somewhere inside the start line return new InsertionPoint (new DocumentLocation (line, column + 1), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); } } // -> if position is at line end check next line LineSegment nextLine = doc.GetLine (line + 1); if (nextLine == null) // check for 1 line case. return new InsertionPoint (new DocumentLocation (line, column + 1), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); for (int i = nextLine.Offset; i < nextLine.EndOffset; i++) { char ch = doc.GetCharAt (i); if (!char.IsWhiteSpace (ch)) { // case2: next line contains non ws chars. System.Console.WriteLine (2); return new InsertionPoint (new DocumentLocation (line + 1, 1), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); } } // case3: whitespace line return new InsertionPoint (new DocumentLocation (line + 1, 1), NewLineInsertion.BlankLine, NewLineInsertion.None); }
public int GetPositionFromLineColumn(int line, int column) { return(document.LocationToOffset(line, column)); }
public static List<InsertionPoint> GetInsertionPoints (Document doc, IType type) { if (doc == null) throw new ArgumentNullException ("doc"); if (type == null) throw new ArgumentNullException ("type"); List<InsertionPoint> result = new List<InsertionPoint> (); int offset = doc.LocationToOffset (type.BodyRegion.Start.Line, type.BodyRegion.Start.Column); if (offset < 0) return result; while (offset < doc.Length && doc.GetCharAt (offset) != '{' && char.IsWhiteSpace (doc.GetCharAt (offset))) offset++; var realStartLocation = doc.OffsetToLocation (offset); result.Add (GetInsertionPosition (doc, 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 = doc.GetLine (member.Location.Line); if (lineSegment == null) continue; domLocation = new DomLocation (member.Location.Line, lineSegment.EditableLength + 1); } result.Add (GetInsertionPosition (doc, domLocation.Line, domLocation.Column)); } result[result.Count - 1].LineAfter = NewLineInsertion.None; CheckStartPoint (doc, result[0], result.Count == 1); if (result.Count > 1) CheckEndPoint (doc, result[result.Count - 1], result.Count == 1); return result; }
static InsertionPoint GetInsertionPosition (Document doc, int line, int column) { int bodyEndOffset = doc.LocationToOffset (line, column) + 1; LineSegment curLine = doc.GetLine (line); if (curLine != null) { if (bodyEndOffset < curLine.Offset + curLine.EditableLength) return new InsertionPoint (new DocumentLocation (line, column + 1), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); } LineSegment nextLine = doc.GetLine (line + 1); int endOffset = nextLine != null ? nextLine.Offset : doc.Length; for (int i = bodyEndOffset; i < endOffset; i++) { char ch = doc.GetCharAt (i); if (!char.IsWhiteSpace (ch)) return new InsertionPoint (doc.OffsetToLocation (i), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); } if (nextLine == null) return new InsertionPoint (doc.OffsetToLocation (bodyEndOffset - 1), NewLineInsertion.BlankLine, NewLineInsertion.BlankLine); int oldLine = line; while (line < doc.LineCount && doc.GetLineIndent (line + 1).Length == doc.GetLine (line + 1).EditableLength) line++; NewLineInsertion insertBefore = NewLineInsertion.None; NewLineInsertion insertAfter = NewLineInsertion.None; int delta = line - oldLine; int lineNumber = line + 1; if (delta == 0) { insertBefore = NewLineInsertion.Eol; insertAfter = NewLineInsertion.BlankLine; } else if (delta == 1) { insertAfter = NewLineInsertion.BlankLine; } else if (delta == 2) { lineNumber--; insertAfter = NewLineInsertion.BlankLine; } else if (delta >= 3) { lineNumber -= 2; insertAfter = NewLineInsertion.None; } return new InsertionPoint (new DocumentLocation (lineNumber, doc.GetLineIndent (lineNumber).Length + 1), insertBefore, insertAfter); }
static InsertionPoint GetInsertionPosition (Document doc, int line, int column) { LineSegment nextLine = doc.GetLine (line + 1); int bodyEndOffset = doc.LocationToOffset (line, column) + 1; int endOffset = nextLine != null ? nextLine.Offset : doc.Length; for (int i = bodyEndOffset; i < endOffset; i++) { char ch = doc.GetCharAt (i); if (!char.IsWhiteSpace (ch)) return new InsertionPoint (doc.OffsetToLocation (i), true, true); } if (nextLine == null) return new InsertionPoint (doc.OffsetToLocation (bodyEndOffset - 1), true, true); int oldLine = line; bool curLineEmpty = false; if (doc.GetLineIndent (nextLine).Length == nextLine.EditableLength) { curLineEmpty = true; while (line + 2 < doc.LineCount && doc.GetLineIndent (line + 2).Length == doc.GetLine (line + 2).EditableLength) line++; } bool insertBefore = !curLineEmpty && line - oldLine <= 1; bool insertAfter = line - oldLine == 0; // if (curLineEmpty) // line++; int lineNumber = line + 1; return new InsertionPoint (new DocumentLocation (lineNumber, doc.GetLineIndent (lineNumber).Length), insertBefore, insertAfter); }