Beispiel #1
0
        public string[] ExportOptions( )
        {
            WebView2RegexOptions options = OptionsControl.GetSelectedOptions( );
            var json = JsonSerializer.Serialize(options);

            return(new[] { $"json:{json}" });
        }
Beispiel #2
0
        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( ));
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        public IMatcher ParsePattern(string pattern)
        {
            WebView2RegexOptions options = OptionsControl.GetSelectedOptions( );

            return(new WebView2Matcher(pattern, options));
        }
Beispiel #8
0
 public WebView2Matcher(string pattern, WebView2RegexOptions options)
 {
     Pattern = pattern;
     Options = options;
 }