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);
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)); } } } } }
internal SearchResult(int line, AppliedStyle style) { Line = line; Style = style; }
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; }