public override void OnTheFlyFormat (PolicyContainer policyParent, IEnumerable<string> mimeTypeChain, TextEditorData data, int startOffset, int endOffset) { var compilationUnit = new MonoDevelop.CSharp.Parser.CSharpParser ().Parse (data); var policy = policyParent.Get<CSharpFormattingPolicy> (mimeTypeChain); var domSpacingVisitor = new AstSpacingVisitor (policy, data) { AutoAcceptChanges = false, }; compilationUnit.AcceptVisitor (domSpacingVisitor, null); var domIndentationVisitor = new AstIndentationVisitor (policy, data) { AutoAcceptChanges = false, }; compilationUnit.AcceptVisitor (domIndentationVisitor, null); var changes = new List<Change> (); changes.AddRange (domSpacingVisitor.Changes. Concat (domIndentationVisitor.Changes). Where (c => c is TextReplaceChange && (startOffset <= ((TextReplaceChange)c).Offset && ((TextReplaceChange)c).Offset < endOffset))); RefactoringService.AcceptChanges (null, null, changes); CorrectFormatting (data, startOffset, endOffset); }
public override void OnTheFlyFormat (PolicyContainer policyParent, object textEditorData, int startOffset, int endOffset) { TextEditorData data = (TextEditorData)textEditorData; CSharp.Dom.CompilationUnit compilationUnit = new MonoDevelop.CSharp.Parser.CSharpParser ().Parse (data); IEnumerable<string> types = DesktopService.GetMimeTypeInheritanceChain (CSharpFormatter.MimeType); CSharpFormattingPolicy policy = policyParent != null ? policyParent.Get<CSharpFormattingPolicy> (types) : MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<CSharpFormattingPolicy> (types); DomSpacingVisitor domSpacingVisitor = new DomSpacingVisitor (policy, data); domSpacingVisitor.AutoAcceptChanges = false; compilationUnit.AcceptVisitor (domSpacingVisitor, null); DomIndentationVisitor domIndentationVisitor = new DomIndentationVisitor (policy, data); domIndentationVisitor.AutoAcceptChanges = false; compilationUnit.AcceptVisitor (domIndentationVisitor, null); List<Change> changes = new List<Change> (); changes.AddRange (domSpacingVisitor.Changes. Concat (domIndentationVisitor.Changes). Where (c => c is TextReplaceChange && (startOffset <= ((TextReplaceChange)c).Offset && ((TextReplaceChange)c).Offset < endOffset))); RefactoringService.AcceptChanges (null, null, changes); CorrectFormatting (data, startOffset, endOffset); }
public override string FormatText (PolicyContainer policyParent, IEnumerable<string> mimeTypeChain, string input, int startOffset, int endOffset) { var data = new TextEditorData (); data.Document.SuppressHighlightUpdate = true; data.Document.MimeType = mimeTypeChain.First (); data.Document.FileName = "toformat.cs"; var textPolicy = policyParent.Get<TextStylePolicy> (mimeTypeChain); data.Options.TabsToSpaces = textPolicy.TabsToSpaces; data.Options.TabSize = textPolicy.TabWidth; data.Options.OverrideDocumentEolMarker = true; data.Options.DefaultEolMarker = textPolicy.GetEolMarker (); data.Text = input; // System.Console.WriteLine ("TABS:" + textPolicy.TabsToSpaces); endOffset += CorrectFormatting (data, startOffset, endOffset); /* System.Console.WriteLine ("-----"); System.Console.WriteLine (data.Text.Replace (" ", ".").Replace ("\t", "->")); System.Console.WriteLine ("-----");*/ var compilationUnit = new MonoDevelop.CSharp.Parser.CSharpParser ().Parse (data); var policy = policyParent.Get<CSharpFormattingPolicy> (mimeTypeChain); var domSpacingVisitor = new AstSpacingVisitor (policy, data) { AutoAcceptChanges = false, }; compilationUnit.AcceptVisitor (domSpacingVisitor, null); var domIndentationVisitor = new AstIndentationVisitor (policy, data) { AutoAcceptChanges = false, }; compilationUnit.AcceptVisitor (domIndentationVisitor, null); var changes = new List<Change> (); changes.AddRange (domSpacingVisitor.Changes. Concat (domIndentationVisitor.Changes). Where (c => c is TextReplaceChange && (startOffset <= ((TextReplaceChange)c).Offset && ((TextReplaceChange)c).Offset < endOffset))); RefactoringService.AcceptChanges (null, null, changes); int end = endOffset; foreach (TextReplaceChange c in changes) { end -= c.RemovedChars; if (c.InsertedText != null) end += c.InsertedText.Length; } /* System.Console.WriteLine ("-----"); System.Console.WriteLine (data.Text.Replace (" ", "^").Replace ("\t", "->")); System.Console.WriteLine ("-----");*/ string result = data.GetTextBetween (startOffset, Math.Min (data.Length, end)); data.Dispose (); return result; }
protected override string InternalFormat (PolicyContainer policyParent, string mimeType, string input, int startOffset, int endOffset) { IEnumerable<string> types = DesktopService.GetMimeTypeInheritanceChain (CSharpFormatter.MimeType); TextEditorData data = new TextEditorData (); data.Text = input; data.Document.MimeType = mimeType; data.Document.SuppressHighlightUpdate = true; data.Document.FileName = "toformat.cs"; var textPolicy = policyParent != null ? policyParent.Get<TextStylePolicy> (types) : MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TextStylePolicy> (types); data.Options.TabsToSpaces = textPolicy.TabsToSpaces; data.Options.TabSize = textPolicy.TabWidth; data.Options.OverrideDocumentEolMarker = true; data.Options.DefaultEolMarker = textPolicy.GetEolMarker (); endOffset += CorrectFormatting (data, startOffset, endOffset); CSharp.Dom.CompilationUnit compilationUnit = new MonoDevelop.CSharp.Parser.CSharpParser ().Parse (data); CSharpFormattingPolicy policy = policyParent != null ? policyParent.Get<CSharpFormattingPolicy> (types) : MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<CSharpFormattingPolicy> (types); DomSpacingVisitor domSpacingVisitor = new DomSpacingVisitor (policy, data); domSpacingVisitor.AutoAcceptChanges = false; compilationUnit.AcceptVisitor (domSpacingVisitor, null); DomIndentationVisitor domIndentationVisitor = new DomIndentationVisitor (policy, data); domIndentationVisitor.AutoAcceptChanges = false; compilationUnit.AcceptVisitor (domIndentationVisitor, null); List<Change> changes = new List<Change> (); changes.AddRange (domSpacingVisitor.Changes. Concat (domIndentationVisitor.Changes). Where (c => c is TextReplaceChange && (startOffset <= ((TextReplaceChange)c).Offset && ((TextReplaceChange)c).Offset < endOffset))); RefactoringService.AcceptChanges (null, null, changes); int end = endOffset; foreach (TextReplaceChange c in changes) { end -= c.RemovedChars; if (c.InsertedText != null) end += c.InsertedText.Length; } string result = data.GetTextBetween (startOffset, end); return result; }