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; } } }
/// <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);
public override void GetClassificationSpans(List<HexClassificationSpan> result, HexClassificationContext context) { }
/// <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);