public override void Analyze(TextDocument doc, DocumentLine line, Chunk startChunk, int startOffset, int endOffset) { if (endOffset <= startOffset || startOffset >= doc.TextLength || inUpdate) { return; } if (startChunk.Style != "Comment(Line)" && startChunk.Style != "Comment(Block)") { return; } inUpdate = true; try { string text = doc.GetTextAt(startOffset, System.Math.Min(endOffset, doc.TextLength) - startOffset); int startColumn = startOffset - line.Offset; var markers = new List <UrlMarker> (line.Markers.OfType <UrlMarker> ()); markers.ForEach(m => doc.RemoveMarker(m, false)); foreach (System.Text.RegularExpressions.Match m in UrlRegex.Matches(text)) { doc.AddMarker(line, new UrlMarker(doc, line, m.Value, UrlType.Url, syntax, startColumn + m.Index, startColumn + m.Index + m.Length), false); } foreach (System.Text.RegularExpressions.Match m in MailRegex.Matches(text)) { doc.AddMarker(line, new UrlMarker(doc, line, m.Value, UrlType.Email, syntax, startColumn + m.Index, startColumn + m.Index + m.Length), false); } } finally { inUpdate = false; } }
private void SetMarker(UnderlineTextSegmentMarker newMarker) { var oldMarker = marker; marker = newMarker; if (textDocument == null) { return; } if (oldMarker != null) { textDocument.RemoveMarker(oldMarker); } if (newMarker != null) { textDocument.AddMarker(newMarker); } }
internal void AddTo(TextDocument document, DocumentLine line) { this.document = document; document.AddMarker(line, IconMarker); document.AddMarker(TextMarker); }
public void AddMarker(HighlightSegmentMarker marker) { _markers.Add(marker); _document.AddMarker(marker); }