private void AddEntry(RegexEntry entry)
        {
            var newEntry = new RegexEntry {
                Name = "New Entry"
            };

            Entries.Add(newEntry);
            SelectedEntry = newEntry;
        }
예제 #2
0
        /// <summary>
        /// Parses specified NAnt search patterns for search directories and
        /// corresponding regex patterns.
        /// </summary>
        /// <param name="nantPatterns">In. NAnt patterns. Absolute or relative paths.</param>
        /// <param name="regexPatterns">Out. Regex patterns. Absolute canonical paths.</param>
        /// <param name="nonRegexFiles">Out. Non-regex files. Absolute canonical paths.</param>
        /// <param name="addSearchDirectories">In. Whether to allow a pattern to add search directories.</param>
        private void ConvertPatterns(StringCollection nantPatterns, ArrayList regexPatterns, StringCollection nonRegexFiles, bool addSearchDirectories)
        {
            string searchDirectory;
            string regexPattern;
            bool   isRecursive;
            bool   isRegex;

            foreach (string nantPattern in nantPatterns)
            {
                ParseSearchDirectoryAndPattern(addSearchDirectories, nantPattern, out searchDirectory, out isRecursive, out isRegex, out regexPattern);
                if (isRegex)
                {
                    RegexEntry entry = new RegexEntry();
                    entry.IsRecursive   = isRecursive;
                    entry.BaseDirectory = searchDirectory;
                    entry.Pattern       = regexPattern;
                    if (regexPattern.EndsWith(@"**/*") || regexPattern.EndsWith(@"**\*"))
                    {
                        logger.Warn("**/* pattern may not produce desired results");
                    }

                    regexPatterns.Add(entry);
                }
                else
                {
                    string exactName = Path.Combine(searchDirectory, regexPattern);
                    if (!nonRegexFiles.Contains(exactName))
                    {
                        nonRegexFiles.Add(exactName);
                    }
                }

                if (!addSearchDirectories)
                {
                    continue;
                }
                int index = _searchDirectories.IndexOf(searchDirectory);

                // if the directory was found before, but wasn't recursive
                // and is now, mark it as so
                if (index > -1)
                {
                    if (!(bool)_searchDirIsRecursive[index] && isRecursive)
                    {
                        _searchDirIsRecursive[index] = isRecursive;
                    }
                }

                // if the directory has not been added, add it
                if (index == -1)
                {
                    _searchDirectories.Add(searchDirectory);
                    _searchDirIsRecursive.Add(isRecursive);
                }
            }
        }
예제 #3
0
 static DatabaseSchemaAttribute()
 {
     _regexs = new System.Collections.Generic.List <RegexEntry>();
     foreach (DatabaseSchemaTypes item in Enum.GetValues(typeof(DatabaseSchemaTypes)))
     {
         string p = EnumExtensions.GetProperty(item, "Prefix");
         if (p == "*")
         {
             continue;
         }
         RegexEntry entry = new RegexEntry()
         {
             regex = new System.Text.RegularExpressions.Regex(p, System.Text.RegularExpressions.RegexOptions.Singleline | System.Text.RegularExpressions.RegexOptions.IgnoreCase),
             type  = item,
         };
         _regexs.Add(entry);
     }
 }
예제 #4
0
        /// <summary>
        /// Initiate the ACL
        /// </summary>
        /// <param name="cfg">Config</param>
        public void Load(NetworkACLConfig cfg)
        {
            if (cfg == null)
            {
                return;
            }

            Type = cfg.Type;

            if (!string.IsNullOrEmpty(cfg.Path) && File.Exists(cfg.Path))
            {
                string  json = File.ReadAllText(cfg.Path);
                JObject jo   = JObject.Parse(json);

                if (!(jo is JArray array))
                {
                    return;
                }

                Entries = new Entry[array.Count];

                for (int x = 0, m = array.Count; x < m; x++)
                {
                    JObject j = array[x];
                    if (!j.ContainsProperty("value"))
                    {
                        continue;
                    }

                    string value = j.Properties["value"].AsString();

                    if (j.ContainsProperty("regex") && j.Properties["regex"].AsBooleanOrDefault(false))
                    {
                        Entries[x] = new RegexEntry(value);
                    }
                    else
                    {
                        Entries[x] = new Entry(value);
                    }
                }
            }
        }
예제 #5
0
        private bool TestRegex(string path, RegexEntry entry)
        {
            Hashtable regexCache = CaseSensitive ? cachedCaseSensitiveRegexes : cachedCaseInsensitiveRegexes;
            Regex     r          = (Regex)regexCache[entry.Pattern];

            if (r == null)
            {
                RegexOptions regexOptions = RegexOptions.Compiled;

                if (!CaseSensitive)
                {
                    regexOptions |= RegexOptions.IgnoreCase;
                }

                regexCache[entry.Pattern] = r = new Regex(entry.Pattern, regexOptions);
            }

            // Check to see if the empty string matches the pattern
            if (path.Length == entry.BaseDirectory.Length)
            {
#if DEBUG_REGEXES
                Console.WriteLine("{0} (empty string) [basedir={1}]", entry.Pattern, entry.BaseDirectory);
#endif
                return(r.IsMatch(String.Empty));
            }

            //ported: changed next line to following introduced one
            //bool endsWithSlash = StringUtils.EndsWith(entry.BaseDirectory, Path.DirectorySeparatorChar);
            bool endsWithSlash = entry.BaseDirectory.EndsWith("" + Path.DirectorySeparatorChar);
#if DEBUG_REGEXES
            Console.WriteLine("{0} ({1}) [basedir={2}]", entry.Pattern, path.Substring(entry.BaseDirectory.Length + ((endsWithSlash) ? 0 : 1)), entry.BaseDirectory);
#endif
            if (endsWithSlash)
            {
                return(r.IsMatch(path.Substring(entry.BaseDirectory.Length)));
            }
            else
            {
                return(r.IsMatch(path.Substring(entry.BaseDirectory.Length + 1)));
            }
        }
        private bool TestRegex(string path, RegexEntry entry, bool caseSensitive)
        {
            Hashtable regexCache = caseSensitive ? cachedCaseSensitiveRegexes : cachedCaseInsensitiveRegexes;
            Regex r = (Regex)regexCache[entry.Pattern];

            if (r == null) {
                RegexOptions regexOptions = RegexOptions.Compiled;

                if (!caseSensitive)
                    regexOptions |= RegexOptions.IgnoreCase;

                regexCache[entry.Pattern] = r = new Regex(entry.Pattern, regexOptions);
            }

            // Check to see if the empty string matches the pattern
            if (path.Length == entry.BaseDirectory.Length) {
            #if DEBUG_REGEXES
                Console.WriteLine("{0} (empty string) [basedir={1}]", entry.Pattern, entry.BaseDirectory);
            #endif
                return r.IsMatch(String.Empty);
            }

            bool endsWithSlash = StringUtils.EndsWith(entry.BaseDirectory, Path.DirectorySeparatorChar);
            #if DEBUG_REGEXES
            Console.WriteLine("{0} ({1}) [basedir={2}]", entry.Pattern, path.Substring(entry.BaseDirectory.Length + ((endsWithSlash) ? 0 : 1)), entry.BaseDirectory);
            #endif
            if (endsWithSlash) {
                return r.IsMatch(path.Substring(entry.BaseDirectory.Length));
            } else {
                return r.IsMatch(path.Substring(entry.BaseDirectory.Length + 1));
            }
        }
        /// <summary>
        /// Parses specified NAnt search patterns for search directories and 
        /// corresponding regex patterns.
        /// </summary>
        /// <param name="nantPatterns">In. NAnt patterns. Absolute or relative paths.</param>
        /// <param name="regexPatterns">Out. Regex patterns. Absolute canonical paths.</param>
        /// <param name="nonRegexFiles">Out. Non-regex files. Absolute canonical paths.</param>
        /// <param name="addSearchDirectories">In. Whether to allow a pattern to add search directories.</param>
        /// <history>
        ///     <change date="20020221" author="Ari Hännikäinen">Created</change>
        /// </history>
        private void ConvertPatterns(StringCollection nantPatterns, ArrayList regexPatterns, StringCollection nonRegexFiles, bool addSearchDirectories)
        {
            string searchDirectory;
            string regexPattern;
            bool isRecursive;
            bool isRegex;

            foreach (string nantPattern in nantPatterns) {
                ParseSearchDirectoryAndPattern(addSearchDirectories, nantPattern, out searchDirectory, out isRecursive, out isRegex, out regexPattern);
                if (isRegex) {
                    RegexEntry entry = new RegexEntry();
                    entry.IsRecursive = isRecursive;
                    entry.BaseDirectory = searchDirectory;
                    entry.Pattern = regexPattern;
                    if (regexPattern.EndsWith(@"**/*") || regexPattern.EndsWith(@"**\*"))
                        logger.Warn( "**/* pattern may not produce desired results" );

                    regexPatterns.Add(entry);
                } else {
                    // David Alpert ([email protected])
                    // Tuesday, December 21, 2004
                    // string exactName = RPath.Combine(searchDirectory, regexPattern);
                    string exactName = regexPattern;
                    if (!nonRegexFiles.Contains(exactName)) {
                        nonRegexFiles.Add(exactName);
                    }
                }

                if (!addSearchDirectories) {
                    continue;
                }
                int index = _searchDirectories.IndexOf(searchDirectory);

                // if the directory was found before, but wasn't recursive
                // and is now, mark it as so
                if (index > -1) {
                    if (!(bool)_searchDirIsRecursive[index] && isRecursive) {
                        _searchDirIsRecursive[index] = isRecursive;
                    }
                }

                // if the directory has not been added, add it
                if (index == -1) {
                    _searchDirectories.Add(searchDirectory);
                    _searchDirIsRecursive.Add(isRecursive);
                }
            }
        }
 private void RemoveEntry(RegexEntry entry)
 {
     Entries.Remove(SelectedEntry);
     SelectedEntry = null;
 }
 private bool RemoveEntryCmdEnabled(RegexEntry selected)
 {
     return(this.SelectedEntry != null);
 }
 private bool AddEntryCmdEnabled(RegexEntry selected)
 {
     return(true);
 }
 private void AddEntry(RegexEntry entry)
 {
     Entries.Add(new RegexEntry());
 }