LineSeparatorElement TryCreateLineSeparatorElement(SnapshotSpan span, ILineSeparatorTag tag)
        {
            if (tag == null)
            {
                return(null);
            }
            var line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(span.Start.TranslateTo(wpfTextView.TextSnapshot, PointTrackingMode.Negative));

            if (line == null)
            {
                return(null);
            }
            if (tag.IsPhysicalLine)
            {
                while (!line.IsLastTextViewLineForSnapshotLine)
                {
                    line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(line.GetPointAfterLineBreak());
                    if (line == null)
                    {
                        return(null);
                    }
                }
            }

            // Only one line separator per line
            var lineIdentityTag = line.IdentityTag;

            if (usedLines.Contains(lineIdentityTag))
            {
                return(null);
            }

            double yBottom = line.TextBottom + 1;
            var    elem    = new LineSeparatorElement(new SnapshotSpan(line.Extent.Start, 0), yBottom, wpfTextView.ViewportWidth, lineSeparatorBrush, lineIdentityTag);

            Canvas.SetTop(elem, elem.Y);
            return(elem);
        }
		LineSeparatorElement TryCreateLineSeparatorElement(SnapshotSpan span, ILineSeparatorTag tag) {
			if (tag == null)
				return null;
			var line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(span.Start.TranslateTo(wpfTextView.TextSnapshot, PointTrackingMode.Negative));
			if (line == null)
				return null;
			if (tag.IsPhysicalLine) {
				while (!line.IsLastTextViewLineForSnapshotLine) {
					line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(line.GetPointAfterLineBreak());
					if (line == null)
						return null;
				}
			}

			// Only one line separator per line
			var lineIdentityTag = line.IdentityTag;
			if (usedLines.Contains(lineIdentityTag))
				return null;

			double yBottom = line.TextBottom + 1;
			var elem = new LineSeparatorElement(new SnapshotSpan(line.Extent.Start, 0), yBottom, wpfTextView.ViewportWidth, lineSeparatorBrush, lineIdentityTag);
			Canvas.SetTop(elem, elem.Y);
			return elem;
		}