private List <object> CreateSecondarySpans(string secondaryText, IReadOnlyList <ProjectionMapping> mappings) { var spans = new List <object>(mappings.Count); int secondaryIndex = 0; Span span; for (int i = 0; i < mappings.Count; i++) { ProjectionMapping mapping = mappings[i]; if (mapping.Length > 0) { span = Span.FromBounds(secondaryIndex, mapping.ProjectionRange.Start); if (!span.IsEmpty) { spans.Add(secondaryText.Substring(span.Start, span.Length)); // inert } span = new Span(mapping.SourceStart, mapping.Length); // Active span comes from the disk buffer spans.Add(new CustomTrackingSpan(DiskBuffer.CurrentSnapshot, span, PointTrackingMode.Positive, PointTrackingMode.Positive)); // active secondaryIndex = mapping.ProjectionRange.End; } } // Add the final inert text after the last span span = Span.FromBounds(secondaryIndex, secondaryText.Length); if (!span.IsEmpty) { spans.Add(secondaryText.Substring(span.Start, span.Length)); // inert } return(spans); }
private List <object> CreateViewSpans(IReadOnlyList <ProjectionMapping> mappings) { var spans = new List <object>(mappings.Count); var diskSnapshot = DiskBuffer.CurrentSnapshot; int primaryIndex = 0; Span span; for (int i = 0; i < mappings.Count; i++) { ProjectionMapping mapping = mappings[i]; if (mapping.Length > 0) { span = Span.FromBounds(primaryIndex, mapping.SourceStart); spans.Add(new CustomTrackingSpan(diskSnapshot, span, i == 0 ? PointTrackingMode.Negative : PointTrackingMode.Positive, PointTrackingMode.Positive)); // Markdown primaryIndex = mapping.SourceRange.End; span = new Span(mapping.ProjectionStart, mapping.Length); spans.Add(new CustomTrackingSpan(ContainedLanguageBuffer.CurrentSnapshot, span, PointTrackingMode.Positive, PointTrackingMode.Positive)); // R } } // Add the final section after the last span span = Span.FromBounds(primaryIndex, diskSnapshot.Length); if (!span.IsEmpty) { spans.Add(new CustomTrackingSpan(diskSnapshot, span, PointTrackingMode.Positive, PointTrackingMode.Positive)); // Markdown } return(spans); }
public virtual string GenerateContent(ITextSnapshot snapshot, IEnumerable<ITextRange> languageBlocks, out ProjectionMapping[] mappings) { var mappingsList = new List<ProjectionMapping>(); var secondaryIndex = 0; var sb = new StringBuilder(); foreach (var b in languageBlocks) { var text = snapshot.GetText(b.Start, b.Length); secondaryIndex = sb.Length; sb.AppendLine(text); var m = new ProjectionMapping(b.Start, secondaryIndex, b.Length); mappingsList.Add(m); } mappings = mappingsList.ToArray(); return sb.ToString(); }