Ejemplo n.º 1
0
		public void Add(HexBufferLineProvider bufferLines, HexClassifier classifier, NormalizedHexBufferSpanCollection spans, CancellationToken cancellationToken) {
			if (bufferLines == null)
				throw new ArgumentNullException(nameof(bufferLines));
			if (classifier == null)
				throw new ArgumentNullException(nameof(classifier));
			if (spans == null)
				throw new ArgumentNullException(nameof(spans));
			if (spans.Count != 0 && spans[0].Buffer != bufferLines.Buffer)
				throw new ArgumentException();

			var classificationSpans = new List<HexClassificationSpan>();
			foreach (var span in spans) {
				if (spansCount > 0)
					htmlWriter.WriteRaw(delimiter);
				spansCount++;

				var pos = span.Start;
				for (;;) {
					classificationSpans.Clear();
					var line = bufferLines.GetLineFromPosition(pos);
					var text = line.GetText(span);
					var context = new HexClassificationContext(line, line.TextSpan);
					classifier.GetClassificationSpans(classificationSpans, context, cancellationToken);

					int textPos = 0;
					foreach (var tagSpan in classificationSpans) {
						if (textPos < tagSpan.Span.Start) {
							WriteCss(classificationFormatMap.DefaultTextProperties);
							htmlWriter.WriteSpan(cssWriter.ToString(), text, textPos, tagSpan.Span.Start - textPos);
						}
						WriteCss(classificationFormatMap.GetTextProperties(tagSpan.ClassificationType));
						htmlWriter.WriteSpan(cssWriter.ToString(), text, tagSpan.Span.Start, tagSpan.Span.Length);
						textPos = tagSpan.Span.End;
					}
					if (textPos < text.Length) {
						WriteCss(classificationFormatMap.DefaultTextProperties);
						htmlWriter.WriteSpan(cssWriter.ToString(), text, textPos, text.Length - textPos);
					}
					htmlWriter.WriteRaw("<br/>");

					pos = line.BufferEnd;
					if (pos >= span.End)
						break;
				}
			}
		}
Ejemplo n.º 2
0
 /// <summary>
 /// Classifies text synchronously
 /// </summary>
 /// <param name="result">Updated with classifications</param>
 /// <param name="context">Context</param>
 /// <param name="cancellationToken">Cancellation token</param>
 public virtual void GetClassificationSpans(List <HexClassificationSpan> result, HexClassificationContext context, CancellationToken cancellationToken) =>
 GetClassificationSpans(result, context);
Ejemplo n.º 3
0
			public override void GetClassificationSpans(List<HexClassificationSpan> result, HexClassificationContext context) { }
Ejemplo n.º 4
0
 /// <summary>
 /// Classifies text
 /// </summary>
 /// <param name="result">Updated with classifications</param>
 /// <param name="context">Context</param>
 public abstract void GetClassificationSpans(List <HexClassificationSpan> result, HexClassificationContext context);