示例#1
0
 /// <summary>
 /// Gets all tags. This method is synchronous.
 /// </summary>
 /// <param name="context">Context</param>
 /// <param name="cancellationToken">Cancellation token</param>
 /// <returns></returns>
 public virtual IEnumerable <IHexTextTagSpan <T> > GetTags(HexTaggerContext context, CancellationToken cancellationToken) => GetTags(context);
示例#2
0
 /// <summary>
 /// Gets all tags
 /// </summary>
 /// <param name="context">Context</param>
 /// <returns></returns>
 public abstract IEnumerable <IHexTextTagSpan <T> > GetTags(HexTaggerContext context);
示例#3
0
		IEnumerable<HexGlyphTag> GetGlyphTags(WpfHexViewLine line) {
			foreach (var tagSpan in tagAggregator.GetTags(line.BufferSpan)) {
				if (line.IntersectsBufferSpan(tagSpan.Span))
					yield return tagSpan.Tag;
			}
			var taggerContext = new HexTaggerContext(line.BufferLine, line.BufferLine.TextSpan);
			foreach (var tagSpan in tagAggregator.GetLineTags(taggerContext))
				yield return tagSpan.Tag;
		}
 /// <summary>
 /// Gets all tags intersecting with the line. This method is synchronous.
 /// </summary>
 /// <param name="context">Context</param>
 /// <param name="cancellationToken">Cancellation token</param>
 /// <returns></returns>
 public abstract IEnumerable <IHexTextTagSpan <T> > GetLineTags(HexTaggerContext context, CancellationToken cancellationToken);
示例#5
0
		void AddMarkerElements(NormalizedHexBufferSpanCollection spans) {
			foreach (var tag in tagAggregator.GetTags(spans)) {
				if (tag.Tag?.Type == null)
					continue;
				if (!tag.Span.IntersectsWith(wpfHexView.HexViewLines.FormattedSpan))
					continue;
				var markerElement = TryCreateMarkerElement(tag.Span, tag.Flags, tag.Tag);
				if (markerElement == null)
					continue;
				var layer = markerElement.ZIndex < 0 ? negativeTextMarkerAdornmentLayer : textMarkerAdornmentLayer;
				bool added = layer.AddAdornment(VSTE.AdornmentPositioningBehavior.TextRelative, markerElement.Span, null, markerElement, onRemovedDelegate);
				if (added)
					markerElements.Add(markerElement);
			}
			var formattedEnd = wpfHexView.HexViewLines.FormattedSpan.End;
			foreach (var span in spans) {
				var overlap = wpfHexView.HexViewLines.FormattedSpan.Overlap(span);
				if (overlap == null)
					continue;
				var pos = overlap.Value.Start;
				for (;;) {
					var line = wpfHexView.WpfHexViewLines.GetWpfHexViewLineContainingBufferPosition(pos);
					Debug.Assert(line != null);
					if (line != null) {
						var taggerContext = new HexTaggerContext(line.BufferLine, line.BufferLine.TextSpan);
						foreach (var tag in tagAggregator.GetLineTags(taggerContext)) {
							if (tag.Tag?.Type == null)
								continue;
							var markerElement = TryCreateMarkerElement(line, tag.Span, tag.Tag);
							if (markerElement == null)
								continue;
							var layer = markerElement.ZIndex < 0 ? negativeTextMarkerAdornmentLayer : textMarkerAdornmentLayer;
							bool added = layer.AddAdornment(VSTE.AdornmentPositioningBehavior.TextRelative, markerElement.Span, null, markerElement, onRemovedDelegate);
							if (added)
								markerElements.Add(markerElement);
						}
					}

					pos = line.BufferEnd;
					if (pos > overlap.Value.End || pos >= formattedEnd)
						break;
				}
			}
		}