Ejemplo n.º 1
0
        LinePartsCollection CreateLinePartsCollection(ITextAndAdornmentCollection coll, SnapshotSpan lineExtent)
        {
            if (coll.Count == 0)
            {
                return(new LinePartsCollection(emptyLineParts, lineExtent));
            }

            var list = new List <LinePart>();

            int column    = 0;
            int startOffs = lineExtent.Start.Position;

            foreach (var seqElem in coll)
            {
                var seqSpans = seqElem.Span.GetSpans(SourceTextSnapshot);
                if (seqElem.ShouldRenderText)
                {
                    foreach (var span in seqSpans)
                    {
                        var cspans   = aggregateClassifier.GetClassificationSpans(span);
                        int lastOffs = span.Start.Position;
                        for (int i = 0; i < cspans.Count; i++)
                        {
                            var cspan     = cspans[i];
                            int otherSize = cspan.Span.Start.Position - lastOffs;
                            if (otherSize != 0)
                            {
                                Debug.Assert(otherSize > 0);
                                list.Add(new LinePart(list.Count, column, new Span(lastOffs - startOffs, otherSize), DefaultTextProperties));
                                column += otherSize;
                            }
                            Add(list, column, cspan, lineExtent);
                            column  += cspan.Span.Length;
                            lastOffs = cspan.Span.End.Position;
                        }
                        int lastSize = span.End.Position - lastOffs;
                        if (lastSize != 0)
                        {
                            list.Add(new LinePart(list.Count, column, new Span(lastOffs - startOffs, lastSize), DefaultTextProperties));
                            column += lastSize;
                        }
                    }
                }
                else
                {
                    if (seqElem is IAdornmentElement adornmentElement && seqSpans.Count == 1)
                    {
                        var span = seqSpans[0].Span;
                        list.Add(new LinePart(list.Count, column, new Span(span.Start - startOffs, span.Length), adornmentElement, DefaultTextProperties));
                        column += list[list.Count - 1].ColumnLength;
                    }
                }
            }
            Debug.Assert(list.Sum(a => a.ColumnLength) == column);

            return(new LinePartsCollection(list, lineExtent));
        }
Ejemplo n.º 2
0
		ITextSnapshotLine GetBufferLine(ITextAndAdornmentCollection coll) =>
			coll[0].Span.GetSpans(SourceTextSnapshot)[0].Start.GetContainingLine();
Ejemplo n.º 3
0
		LinePartsCollection CreateLinePartsCollection(ITextAndAdornmentCollection coll, SnapshotSpan lineExtent) {
			if (coll.Count == 0)
				return new LinePartsCollection(emptyLineParts, lineExtent);

			var list = new List<LinePart>();

			int column = 0;
			int startOffs = lineExtent.Start.Position;
			foreach (var seqElem in coll) {
				var seqSpans = seqElem.Span.GetSpans(SourceTextSnapshot);
				if (seqElem.ShouldRenderText) {
					foreach (var span in seqSpans) {
						var cspans = aggregateClassifier.GetClassificationSpans(span);
						int lastOffs = span.Start.Position;
						for (int i = 0; i < cspans.Count; i++) {
							var cspan = cspans[i];
							int otherSize = cspan.Span.Start.Position - lastOffs;
							if (otherSize != 0) {
								Debug.Assert(otherSize > 0);
								list.Add(new LinePart(list.Count, column, new Span(lastOffs - startOffs, otherSize), DefaultTextProperties));
								column += otherSize;
							}
							Add(list, column, cspan, lineExtent);
							column += cspan.Span.Length;
							lastOffs = cspan.Span.End.Position;
						}
						int lastSize = span.End.Position - lastOffs;
						if (lastSize != 0) {
							list.Add(new LinePart(list.Count, column, new Span(lastOffs - startOffs, lastSize), DefaultTextProperties));
							column += lastSize;
						}
					}
				}
				else {
					var adornmentElement = seqElem as IAdornmentElement;
					if (adornmentElement != null && seqSpans.Count == 1) {
						var span = seqSpans[0].Span;
						list.Add(new LinePart(list.Count, column, new Span(span.Start - startOffs, span.Length), adornmentElement, DefaultTextProperties));
						column += list[list.Count - 1].ColumnLength;
					}
				}
			}
			Debug.Assert(list.Sum(a => a.ColumnLength) == column);

			return new LinePartsCollection(list, lineExtent);
		}
Ejemplo n.º 4
0
 ITextSnapshotLine GetBufferLine(ITextAndAdornmentCollection coll) =>
 coll[0].Span.GetSpans(SourceTextSnapshot)[0].Start.GetContainingLine();