Ejemplo n.º 1
0
        public IAppliedStyle?BuildAppliedStyle(IStyleSheet style,
                                               IVisualElement visual,
                                               IVisualLineage visualLineage,
                                               IVisualBootstrapper visualBootstrapper)
        {
            var appliedStyle = new AppliedStyle(style);

            foreach (var rule in style.Rules)
            {
                var appliedRule = BuildAppliedRule(appliedStyle, rule, visual, visualLineage,
                                                   visualBootstrapper);
                if (appliedRule == null)
                {
                    continue;
                }

                appliedStyle.AddAppliedRule(appliedRule);
            }

            appliedStyle.EnsureInverseForFilteredSelectors();

            TrySetVisualStyle(visual, appliedStyle);

            if (!appliedStyle.HasAppliedRules)
            {
                return(default);
Ejemplo n.º 2
0
        private void Search()
        {
            var txt = overlay.SearchBox?.Buffer?.GetText();

            ClearMatches();

            if (!string.IsNullOrEmpty(txt))
            {
                var regex = TryGetRegex(txt);

                if (regex != null)
                {
                    for (var i = 0; i < editor.Lines.Count; i++)
                    {
                        var line = editor.Lines[i];
                        var ln   = line.Text;

                        foreach (Match match in regex.Matches(ln))
                        {
                            var grp = match.Groups[match.Groups.Count - 1];
                            var aps = new AppliedStyle(StandardStyle.SearchItem, grp.Index, grp.Index + grp.Length - 1);
                            line.AppliedStyles.Add(aps);
                            finds.Add(new SearchResult(i, aps));
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
 internal SearchResult(int line, AppliedStyle style)
 {
     Line  = line;
     Style = style;
 }
Ejemplo n.º 4
0
        private void Match()
        {
            if (!editor.EditorSettings.MatchWords || editor.Buffer == null)
            {
                return;
            }

            var caret = editor.Buffer.Selections.Main.Caret;
            var range = SelectWordCommand.SelectWord(editor, caret, SelectWordCommand.Strategy.Word);
            var txt   = range != null?CopyCommand.GetTextRange(editor, range) : null;

            if (txt == lastWord && finds.Count > 0)
            {
                return;
            }

            var needRedraw = InternalClearMatches();

            if (caret != requestCaret || (DateTime.Now - requestTime).TotalMilliseconds < 500)
            {
                if (needRedraw)
                {
                    editor.Buffer.RequestRedraw();
                }
                return;
            }

            lastWord = txt;

            if (range == null)
            {
                if (needRedraw)
                {
                    editor.Buffer.RequestRedraw();
                }
                return;
            }

            var grmId = editor.AffinityManager.GetAffinityId(caret);
            var grm   = grmId != 0 ? App.Ext.Grammars().GetGrammar(grmId) : null;
            var seps  = (" \t" + (grm?.NonWordSymbols ?? editor.EditorSettings.NonWordSymbols)).ToCharArray();
            var regex = new Regex("\\b" + Regex.Escape(txt) + "\\b");

            for (var i = 0; i < editor.Lines.Count; i++)
            {
                var line = editor.Lines[i];
                var ln   = line.Text;

                foreach (Match m in regex.Matches(ln))
                {
                    if (m.Success && editor.AffinityManager.GetAffinityId(i, m.Index) == grmId)
                    {
                        var aps = new AppliedStyle(StandardStyle.MatchedWord, m.Index, m.Index + m.Length - 1);
                        line.AppliedStyles.Add(aps);
                        finds.Add(new SearchResult(i, aps));
                    }
                }
            }

            if (finds.Count == 1)
            {
                editor.Lines[finds[0].Line].AppliedStyles.Remove(finds[0].Style);
                finds.Clear();
            }

            if (finds.Count > 0 || needRedraw)
            {
                editor.Buffer.RequestRedraw();
            }

            requestCaret = Pos.Empty;
        }