public IEnumerable<TextTag> Highlight(TextTag text) { _targetTag = text; var pattern = BuildPattern(); if(string.IsNullOrWhiteSpace(pattern)) return new [] { text }; var splits = Regex.Split(text.Text, pattern); return CreateTags(splits, Matches, Modify); }
public IEnumerable<TextTag> Highlight(TextTag text) { var tags = new List<TextTag>(); var start = 0; var matches = Regex.Matches(text.Text, Pattern, RegexOptions.Singleline); foreach(Match match in matches) { TextTag.For(text.Text.Substring(start, match.Index - start), text).IfNotNull(tags.Add); start = match.Index + match.Length; var matchedTag = TextTag.For(match.Groups[1].Value, text); Modify(matchedTag, match); matchedTag.IfNotNull(tags.Add); } if(start < text.Text.Length) { TextTag.For(text.Text.Substring(start, text.Text.Length - start), text).IfNotNull(tags.Add); } return tags; }
public IEnumerable<TextTag> For(TextTag text) { var results = new List<TextTag>(); results.Add(text); _highlighters.Apply(h => { for (int i = 0; i < results.Count; i++) { var tag = results[i]; results.RemoveAt(i); var tags = h.Highlight(tag); results.InsertRange(i, tags); i+= tags.Count() - 1; } }); results.Apply(t => { t.Text = Regex.Replace(t.Text, "<[^>]*>", string.Empty); }); return results; }
public bool Equals(TextTag other) { return string.Equals(Text, other.Text); }
public static TextTag For(string text, TextTag tag) { return For(text, tag.Color, tag.Mono); }
public void Append(TextTag tag) { _textView.BeginInvokeOnMainThread(() => { var text = tag.Text.Replace("<", "<").Replace(">", ">"); var defaultSettings = new DefaultSettings(); var defaultColor = _highlightSettings.Get(HighlightKeys.Default).Color; var color = !string.IsNullOrWhiteSpace(tag.Color) ? tag.Color : defaultColor; var font = tag.Mono ? defaultSettings.MonoFont : defaultSettings.Font; var scroll = _textView.EnclosingScrollView.VerticalScroller.FloatValue == 1.0f; //textView.TextStorage.BeginEditing(); _textView.TextStorage.Append(text.CreateString(color.ToNSColor(), font)); //textView.TextStorage.EndEditing(); if(scroll) _textView.ScrollRangeToVisible(new NSRange(_textView.Value.Length, 0)); }); }
private void Log(TextTag text) { var prompt = _gameServer.GameState.Get(ComponentKeys.Prompt); if (string.Equals(text.Text.Trim(), prompt) && _mainTextViewWrapper.EndsWith(prompt, true)) return; var highlights = _services.Get<Highlights>(); highlights.For(text).Apply(t => _mainTextViewWrapper.Append(t)); }