public string[] ExportOptions( ) { WebView2RegexOptions options = OptionsControl.GetSelectedOptions( ); var json = JsonSerializer.Serialize(options); return(new[] { $"json:{json}" }); }
Regex CreateColouringRegex(WebView2RegexOptions options) { var pb_escape = new PatternBuilder( ); pb_escape.BeginGroup("escape"); pb_escape.Add(@"\\c[A-Za-z]"); // \cx control char pb_escape.Add(@"\\x[0-9a-fA-F]{1,2}"); // hexadecimal char pb_escape.Add(@"\\u[0-9a-fA-F]{1,4}"); // hexadecimal char if (options.u) { // language=regex pb_escape.Add(@"\\u\{[0-9a-fA-F]+(\}|$)"); // hexadecimal char // language=regex pb_escape.Add(@"\\(p|P)\{.*?(\}|$)"); // unicode property } pb_escape.Add(@"\\."); // \. pb_escape.EndGroup( ); var pb = new PatternBuilder( ); pb.AddGroup(null, $@"\[\]?({pb_escape.ToPattern( )} |.)*?(\]|$)"); // language=regex pb.Add(@"\(\?(?'name'<(?![=!]).*?(>|$))"); // language=regex pb.Add(@"(?'name'\\k<.*?(>|$))"); pb.Add(pb_escape.ToPattern( )); return(pb.ToRegex( )); }
Regex CreateHighlightingRegex(WebView2RegexOptions options) { var pb = new PatternBuilder( ); pb.Add(@"(?'left_par'\()"); // '(' pb.Add(@"(?'right_par'\))"); // ')' pb.Add(@"\\[pPu]\{.*?(\}|$)"); // (skip) pb.Add(@"(?'left_brace'\{).*?((?'right_brace'\})|$)"); // '{...}' pb.Add(@"(?'left_bracket'\[) \]? (\\.|.)*? ((?'right_bracket'\])|$)"); // '[...]' pb.Add(@"\\."); // (skip) return(pb.ToRegex( )); }
internal void SetSelectedOptions(WebView2RegexOptions options) { try { ++ChangeCounter; Options = options.Clone( ); DataContext = Options; } finally { --ChangeCounter; } }
public void ImportOptions(string[] options) { var json = options.FirstOrDefault(o => o.StartsWith("json:"))?.Substring("json:".Length); WebView2RegexOptions options_obj; if (string.IsNullOrWhiteSpace(json)) { options_obj = new WebView2RegexOptions( ); } else { options_obj = JsonSerializer.Deserialize <WebView2RegexOptions>(json); } OptionsControl.SetSelectedOptions(options_obj); }
Regex GetCachedHighlightingRegex( ) { WebView2RegexOptions options = OptionsControl.GetSelectedOptions( ); object key = options.u; lock ( CachedHighlightingRegexes ) { if (CachedHighlightingRegexes.TryGetValue(key, out Regex regex)) { return(regex); } regex = CreateHighlightingRegex(options); CachedHighlightingRegexes.Add(key, regex); return(regex); } }
public IMatcher ParsePattern(string pattern) { WebView2RegexOptions options = OptionsControl.GetSelectedOptions( ); return(new WebView2Matcher(pattern, options)); }
public WebView2Matcher(string pattern, WebView2RegexOptions options) { Pattern = pattern; Options = options; }