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());
        }