public static async Task <FormattedText> GetFormattedCodeAsync(string code, ScriptingOptions ScriptingOptions, FormatColorScheme ColorScheme) { var script = new Script <TGlobals>(x => null, ScriptingOptions); script.Code = code; script.m_ScriptingOptions = ScriptingOptions; var hostedScriptRunner = script.GetOrCreateScriptRunner(Array.Empty <IParameter>(), script.Code, script.m_ScriptingOptions); var task = RemoteTask.ClientComplete <FormattedText>(hostedScriptRunner.GetFormattedCodeAsync(code, ScriptingOptions, ColorScheme), CancellationToken.None); var result = await task; return(result); }
internal async Task <string> InternalGetRtfFormattedCodeAsync(string scriptCode, ScriptingOptions Options, FormatColorScheme ColorScheme) { var document = GetOrCreateDocument(Array.Empty <IParameter>(), scriptCode, Options); document = Formatter.FormatAsync(document).Result; SourceText documentText = await document.GetTextAsync(); IEnumerable <ClassifiedSpan> classifiedSpans = await Classifier.GetClassifiedSpansAsync(document, Microsoft.CodeAnalysis.Text.TextSpan.FromBounds(0, documentText.Length)); var ranges = classifiedSpans.Select(classifiedSpan => new Range(classifiedSpan, documentText.GetSubText(classifiedSpan.TextSpan).ToString())); var LineSpans = documentText.Lines.Select(x => x.SpanIncludingLineBreak); var result = new StringBuilder(); // RTF Header result.AppendLine(@"{\rtf1\ansi\deff0"); // RTF Color table var colorDefinitions = ColorScheme.GetColorsInRtfOrder().Select(x => $"\\red{x.R}\\green{x.G}\\blue{x.B};"); result.AppendLine(@"{\colortbl;" + String.Join(String.Empty, colorDefinitions) + "}"); var originalText = documentText.ToString(); var codeBuilder = new StringBuilder(); var segmentedSpans = DivideSpans(LineSpans, ranges.Select(x => x.TextSpan)).ToArray(); foreach (var span in segmentedSpans) { var info = ranges.SingleOrDefault(x => x.TextSpan.CompareTo(span) == 0); if (info != null) { var colorIndex = ColorScheme.GetColorIndexForKeyword(info.ClassificationType); codeBuilder.AppendLine(Environment.NewLine + @"\cf" + colorIndex); } var text = originalText.Substring(span.Start, span.Length); text = GetRtfUnicodeEscapedString(text); text = text.Replace(Environment.NewLine, @"\line" + Environment.NewLine); codeBuilder.Append(text); } result.Append(codeBuilder.ToString()); result.AppendLine("}"); return(result.ToString()); }
public RemoteTask <FormattedText> GetFormattedCodeAsync(string scriptCode, ScriptingOptions Options, FormatColorScheme ColorScheme) { var result = RemoteTask.ServerStart <FormattedText>(cts => InternalGetFormattedCodeAsync(scriptCode, Options, ColorScheme)); return(result); }
internal async Task <FormattedText> InternalGetFormattedCodeAsync(string scriptCode, ScriptingOptions Options, FormatColorScheme ColorScheme) { var document = GetOrCreateDocument(Array.Empty <IParameter>(), scriptCode, Options); document = Formatter.FormatAsync(document).Result; SourceText documentText = await document.GetTextAsync(); IEnumerable <ClassifiedSpan> classifiedSpans = await Classifier.GetClassifiedSpansAsync(document, Microsoft.CodeAnalysis.Text.TextSpan.FromBounds(0, documentText.Length)); var ranges = classifiedSpans.Select(classifiedSpan => new Range(classifiedSpan, documentText.GetSubText(classifiedSpan.TextSpan).ToString())); var LineSpans = documentText.Lines.Select(x => x.SpanIncludingLineBreak); var result = new FormattedText(); var originalText = documentText.ToString(); var codeBuilder = new StringBuilder(); var segmentedSpans = DivideSpans(LineSpans, ranges.Select(x => x.TextSpan)).ToArray(); FormattedTextLine line = result.AppendLine(); foreach (var span in segmentedSpans) { var info = ranges.SingleOrDefault(x => x.TextSpan.CompareTo(span) == 0); TextFormat format; if (info != null) { var color = ColorScheme.GetColorForKeyword(info.ClassificationType); format = new TextFormat(color); } else { var color = ColorScheme.Unknown; format = new TextFormat(color); } var text = originalText.Substring(span.Start, span.Length); if (text.EndsWith(Environment.NewLine)) { text = text.Substring(0, text.Length - Environment.NewLine.Length); line.AppendText(text, format); line = result.AppendLine(); } else { line.AppendText(text, format); } //{ //text = text.Substring(0, text.Length - Environment.NewLine.Length); // line = result.AppendLine(); /* } else * { * line.AppendText(text, format); * }*/ } return(result); }
public RemoteTask <string> GetRtfFormattedCodeAsync(string originalScriptCode, ScriptingOptions Options, FormatColorScheme ColorScheme) { var result = RemoteTask.ServerStart <string>(cts => InternalGetRtfFormattedCodeAsync(originalScriptCode, Options, ColorScheme)); return(result); }