private string GetPreprocessedTextCore()

in src/StructuredLogViewer.Core/PreprocessedFileManager.cs [193:256]


        private string GetPreprocessedTextCore(string projectEvaluationContext, SourceText sourceText, Bucket imports)
        {
            string result;
            var sb = new StringBuilder();
            int line = 0;

            if (sourceText.GetLineText(line).Contains("<?xml"))
            {
                line++;
            }

            var importsList = imports.OrderBy(i => i.Line).ToList();

            var sdkProps = importsList.FirstOrDefault(i => i.ProjectPath.EndsWith("Sdk.props", StringComparison.OrdinalIgnoreCase) && i.Line == 0 && i.Column == 0);
            if (sdkProps != default)
            {
                while (sourceText.GetLineText(line) is string firstLine && !firstLine.Contains("<Project"))
                {
                    sb.AppendLine(firstLine);
                    line++;
                }

                line = SkipTag(sourceText, sb, line, line, "<Project", ">");

                InjectImportedProject(projectEvaluationContext, sb, sdkProps);
                importsList.Remove(sdkProps);
            }

            var sdkTargets = importsList.FirstOrDefault(i => i.ProjectPath.EndsWith("Sdk.targets", StringComparison.OrdinalIgnoreCase) && i.Line == 0 && i.Column == 0);
            if (sdkTargets != default)
            {
                importsList.Remove(sdkTargets);
            }

            foreach (var import in importsList)
            {
                line = SkipTag(sourceText, sb, line, import.Line);

                InjectImportedProject(projectEvaluationContext, sb, import);
            }

            int count = sourceText.Lines.Count;
            for (; line < count; line++)
            {
                var lastLineText = sourceText.GetLineText(line);
                if (lastLineText.Contains("</Project>"))
                {
                    if (sdkTargets != default)
                    {
                        InjectImportedProject(projectEvaluationContext, sb, sdkTargets);
                        sdkTargets = default;
                    }
                }

                if (line < count - 1 || lastLineText.Length > 0)
                {
                    sb.AppendLine(lastLineText);
                }
            }

            result = sb.ToString();
            
            return result;
        }