internal static string CreateWrapperClassForMember(IMember member, string fileName, TextEditor editor) { if (member == null) return ""; StringBuilder result = new StringBuilder (); int startLine = member.Location.Line; int endLine = member.Location.Line; if (!member.BodyRegion.IsEmpty) endLine = member.BodyRegion.End.Line + 1; string text; result.Append ("class " + member.DeclaringType.Name + " {"); if (editor != null) { int col, maxLine; editor.GetLineColumnFromPosition (editor.TextLength - 1, out col, out maxLine); endLine = System.Math.Max (endLine, maxLine); int endPos = editor.GetPositionFromLineColumn (endLine, editor.GetLineLength (endLine)); if (endPos < 0) endPos = editor.TextLength; text = editor.GetText (editor.GetPositionFromLineColumn (startLine, 0), endPos); } else { Mono.TextEditor.Document doc = new Mono.TextEditor.Document (); doc.Text = File.ReadAllText (fileName) ?? ""; startLine = Math.Min (doc.LineCount, Math.Max (1, startLine)); endLine = Math.Min (doc.LineCount, Math.Max (1, endLine)); int startOffset = doc.LocationToOffset (startLine - 1, 0); text = doc.GetTextAt (startOffset, doc.LocationToOffset (endLine - 1, doc.GetLine (endLine - 1).EditableLength) - startOffset); } if (!string.IsNullOrEmpty (text)) result.Append (text); result.Append ("}"); return result.ToString (); }
public void AddRegisterDirective (RegisterDirective directive, TextEditor editor, bool preserveCaretPosition) { var node = GetRegisterInsertionPointNode (); if (node == null) return; Doc.Info.RegisteredTags.Add (directive); var line = Math.Max (node.Location.EndLine, node.Location.BeginLine); var pos = editor.GetPositionFromLineColumn (line, editor.GetLineLength (line) + 1); if (pos < 0) return; editor.BeginAtomicUndo (); var oldCaret = editor.CursorPosition; var inserted = editor.InsertText (pos, editor.NewLine + directive.ToString ()); if (preserveCaretPosition) { editor.CursorPosition = (pos < oldCaret)? oldCaret + inserted : oldCaret; } editor.EndAtomicUndo (); }