static List <HexClassificationSpan> Merge(List <HexClassificationSpan> list) { if (list.Count <= 1) { return(list); } var prev = list[0]; int read = 1, write = 0; for (; read < list.Count; read++) { var a = list[read]; if (prev.ClassificationType == a.ClassificationType && prev.Span.End == a.Span.Start) { list[write] = prev = new HexClassificationSpan(VST.Span.FromBounds(prev.Span.Start, a.Span.End), prev.ClassificationType); } else { prev = a; list[++write] = a; } } write++; if (list.Count != write) { list.RemoveRange(write, list.Count - write); } return(list); }
void Add(List <HexLinePart> list, int column, HexClassificationSpan cspan, VST.Span lineExtent) { if (cspan.Span.Length == 0) { return; } int startOffs = lineExtent.Start; var props = classificationFormatMap.GetTextProperties(cspan.ClassificationType); if (list.Count > 0) { var last = list[list.Count - 1]; if (last.AdornmentElement == null && last.TextRunProperties == props && last.Span.End == cspan.Span.Start) { list[list.Count - 1] = new HexLinePart(list.Count - 1, last.Column, VST.Span.FromBounds(last.Span.Start - startOffs, cspan.Span.End - startOffs), last.TextRunProperties); return; } } list.Add(new HexLinePart(list.Count, column, new VST.Span(cspan.Span.Start - startOffs, cspan.Span.Length), props)); }