public static List <Pair <FilterType, Regex> > ParseFdf(string fdfPath) { List <string> fdfPathList = new List <string>(); if (fdfPath == null) { return((List <Pair <FilterType, Regex> >)null); } return(FilterDescription.ParseFdfRecursively(fdfPath, ref fdfPathList)); }
private static List <Pair <FilterType, Regex> > ParseFdfRecursively(string fdfPath, ref List <string> fdfPathList) { fdfPath = FilterDescription.FormatFilePathDelimiterForFilter(fdfPath); if (!Path.IsPathRooted(fdfPath) && fdfPathList.Count > 0) { fdfPath = Path.Combine(Path.GetDirectoryName(fdfPathList[fdfPathList.Count - 1]), fdfPath); } fdfPath = Path.GetFullPath(fdfPath).TrimEnd('\\'); if (0 <= fdfPathList.FindIndex((Predicate <string>)(path => string.Compare(path, fdfPath, StringComparison.InvariantCultureIgnoreCase) == 0))) { return(new List <Pair <FilterType, Regex> >()); } fdfPathList.Add(fdfPath); List <Pair <FilterType, Regex> > pairList = new List <Pair <FilterType, Regex> >(); using (StreamReader streamReader = new StreamReader(fdfPath)) { while (!streamReader.EndOfStream) { string path = streamReader.ReadLine(); if (!string.IsNullOrEmpty(path) && !path.StartsWith(";")) { string input = FilterDescription.ReplaceEnvironmentVariableKeyword(path); Match match = FilterDescription.RegexKeywordInclude.Match(input); if (match.Success) { string fdfPath1 = match.Groups["path"].Value; pairList.AddRange((IEnumerable <Pair <FilterType, Regex> >)FilterDescription.ParseFdfRecursively(fdfPath1, ref fdfPathList)); } FilterType a; switch (input[0]) { case '+': a = FilterType.Exception; break; case '-': a = FilterType.Remove; break; default: continue; } Regex b = new Regex(FilterDescription.FormatFilePathDelimiterForFilterRegex(input.Substring(1).Trim().Trim('"')), RegexOptions.Compiled); pairList.Add(new Pair <FilterType, Regex>(a, b)); } } return(pairList); } }