public static string Format(this string source) { var builder = new StringBuilder(); var formatter = XamlFormatterFactory.Create(new XamlFormatterOptions { IndentSize = 4 }); formatter.Format(source, builder); var target = builder.ToString(); return(target); }
/// <summary> /// Executes the format document command. /// </summary> /// <param name="document"> /// The document to format. /// </param> public virtual void Execute(Document document) { Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread(); if (document == null) { throw new ArgumentNullException(nameof(document)); } var textDocument = (TextDocument)document.Object("TextDocument"); var startPoint = textDocument.StartPoint.CreateEditPoint(); var endPoint = textDocument.EndPoint.CreateEditPoint(); var currentPoint = textDocument.Selection.ActivePoint; var originalLine = currentPoint.Line; var originalOffset = currentPoint.LineCharOffset; var unformatted = startPoint.GetText(endPoint); var options = this.CreateOptions(); var builder = new StringBuilder(); XamlFormatterFactory.Create(options).Format(unformatted, builder); startPoint.ReplaceText(endPoint, builder.ToString(), 0); if (originalLine <= textDocument.EndPoint.Line) { var linePoint = startPoint.CreateEditPoint(); if (originalLine > 0) { linePoint.LineDown(originalLine - 1); } originalOffset = Math.Min(originalOffset, linePoint.LineLength + 1); if (originalOffset > 0) { textDocument.Selection.MoveToLineAndOffset(originalLine, originalOffset); } else { textDocument.Selection.GotoLine(originalLine); } } else { var linePoint = startPoint.CreateEditPoint(); linePoint.EndOfDocument(); textDocument.Selection.MoveToPoint(linePoint); } }