Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }