Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
0
 public bool Equals(TextTag other)
 {
     return string.Equals(Text, other.Text);
 }
Example #5
0
 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("&lt;", "<").Replace("&gt;", ">");

                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));
        }