public static int MainImpl(string[] args) { // Load defaults from app.config. settings = new Settings(); // Were any command line args specified? if (args.Length > 0) { // Override default settings with command line args. CommandLine.Parse(args,settings); } else { // Obtain arguments from UI. PromptForArgs dlg = new PromptForArgs(settings); if (dlg.ShowDialog() != DialogResult.OK) return 1; } // Validate arguments. if (settings.FilePattern == null || settings.RegexPattern == null) throw new ApplicationException("Please specify at least a pathspec and regex pattern."); // Default basedir to cwd. if (settings.BaseDirectory == null || settings.BaseDirectory == string.Empty) settings.BaseDirectory = System.Environment.CurrentDirectory; // Echo command line options. Console.Write(@"Searching directory ""{0}"", files ""{1}"", for pattern ""{2}"" (options: ", settings.BaseDirectory, settings.FilePattern, settings.RegexPattern ); System.Collections.ArrayList optionstrings = new System.Collections.ArrayList(); if (settings.RegexIgnoreCase) optionstrings.Add("IgnoreCase"); if (settings.RegexSingleline) optionstrings.Add("Singleline"); if (settings.RegexMimicVS) optionstrings.Add("RegexMimicVS"); if (settings.ActiveReplace) optionstrings.Add("ActiveReplace"); if (settings.ReplacementText != null) optionstrings.Add(String.Format("Replacement pattern: {0}",settings.ReplacementText)); if (optionstrings.Count == 0) optionstrings.Add("none"); Console.Write(String.Join(", ", (string[])optionstrings.ToArray(typeof(string)))); Console.WriteLine(")"); // Reimplement VS7's helper patterns for things like C identifiers, numbers, string literals, etc. if (settings.RegexMimicVS) { settings.RegexPattern = settings.RegexPattern.Replace("::", "\xFFFF"); settings.RegexPattern = settings.RegexPattern.Replace(":i", @"([_a-zA-Z][_a-zA-Z0-9]*)"); settings.RegexPattern = settings.RegexPattern.Replace(":n", @"(\b[-]?[0-9]+(\.[0-9]+([Ee](\+|-)?[0-9]+)?)?\b)"); settings.RegexPattern = settings.RegexPattern.Replace(":q", @"((@""(""""|[^""])*"")|(""(\\.|[^""\\])*""))"); settings.RegexPattern = settings.RegexPattern.Replace("\xFFFF", ":"); } // Create the regex, and populate the visitor callback with it. RegexOptions ro = RegexOptions.Compiled|RegexOptions.Multiline; if (settings.RegexIgnoreCase) ro |= RegexOptions.IgnoreCase; if (settings.RegexSingleline) ro |= RegexOptions.Singleline; FileVisitor visitor = new FileVisitor(); visitor.UserRegex = new Regex(settings.RegexPattern, ro); visitor.ActiveReplace = settings.ActiveReplace; visitor.ReplacementText = settings.ReplacementText; visitor.BackupDirectory = settings.BackupDirectory; visitor.OutputWidth = settings.OutputWidth; // Do the dew! Jitsu.IO.DirectoryTraverser.FileVisitor onFile = new Jitsu.IO.DirectoryTraverser.FileVisitor(visitor.VisitFile); Jitsu.IO.DirectoryTraverser spider = new Jitsu.IO.DirectoryTraverser(null,onFile); string directoryPattern = (settings.DontRecurse) ? "" : "*"; spider.TraverseBreadthFirst(settings.BaseDirectory,settings.FilePattern,directoryPattern); // Report the results, in standard VS7 format. //Win32.TrySetConsoleColor(Win32.ConsoleColorFlags.ForegroundGray); Win32.TrySetConsoleColor( COLOUR.DEFAULT ); Console.WriteLine(); Console.WriteLine("Total found: {0} Matching files: {1} Total files searched: {2}", visitor.MatchesFound, visitor.FilesFound, visitor.FilesSearched); // Done. return 0; }
public static int MainImpl(string[] args) { // Load defaults from app.config. settings = new Settings(); // Were any command line args specified? if (args.Length > 0) { // Override default settings with command line args. CommandLine.Parse(args, settings); } else { // Obtain arguments from UI. PromptForArgs dlg = new PromptForArgs(settings); if (dlg.ShowDialog() != DialogResult.OK) { return(1); } } // Validate arguments. if (settings.FilePattern == null || settings.RegexPattern == null) { throw new ApplicationException("Please specify at least a pathspec and regex pattern."); } // Default basedir to cwd. if (settings.BaseDirectory == null || settings.BaseDirectory == string.Empty) { settings.BaseDirectory = System.Environment.CurrentDirectory; } // Echo command line options. Console.Write(@"Searching directory ""{0}"", files ""{1}"", for pattern ""{2}"" (options: ", settings.BaseDirectory, settings.FilePattern, settings.RegexPattern); System.Collections.ArrayList optionstrings = new System.Collections.ArrayList(); if (settings.RegexIgnoreCase) { optionstrings.Add("IgnoreCase"); } if (settings.RegexSingleline) { optionstrings.Add("Singleline"); } if (settings.RegexMimicVS) { optionstrings.Add("RegexMimicVS"); } if (settings.ActiveReplace) { optionstrings.Add("ActiveReplace"); } if (settings.ReplacementText != null) { optionstrings.Add(String.Format("Replacement pattern: {0}", settings.ReplacementText)); } if (optionstrings.Count == 0) { optionstrings.Add("none"); } Console.Write(String.Join(", ", (string[])optionstrings.ToArray(typeof(string)))); Console.WriteLine(")"); // Reimplement VS7's helper patterns for things like C identifiers, numbers, string literals, etc. if (settings.RegexMimicVS) { settings.RegexPattern = settings.RegexPattern.Replace("::", "\xFFFF"); settings.RegexPattern = settings.RegexPattern.Replace(":i", @"([_a-zA-Z][_a-zA-Z0-9]*)"); settings.RegexPattern = settings.RegexPattern.Replace(":n", @"(\b[-]?[0-9]+(\.[0-9]+([Ee](\+|-)?[0-9]+)?)?\b)"); settings.RegexPattern = settings.RegexPattern.Replace(":q", @"((@""(""""|[^""])*"")|(""(\\.|[^""\\])*""))"); settings.RegexPattern = settings.RegexPattern.Replace("\xFFFF", ":"); } // Create the regex, and populate the visitor callback with it. RegexOptions ro = RegexOptions.Compiled | RegexOptions.Multiline; if (settings.RegexIgnoreCase) { ro |= RegexOptions.IgnoreCase; } if (settings.RegexSingleline) { ro |= RegexOptions.Singleline; } FileVisitor visitor = new FileVisitor(); visitor.UserRegex = new Regex(settings.RegexPattern, ro); visitor.ActiveReplace = settings.ActiveReplace; visitor.ReplacementText = settings.ReplacementText; visitor.BackupDirectory = settings.BackupDirectory; visitor.OutputWidth = settings.OutputWidth; // Do the dew! Jitsu.IO.DirectoryTraverser.FileVisitor onFile = new Jitsu.IO.DirectoryTraverser.FileVisitor(visitor.VisitFile); Jitsu.IO.DirectoryTraverser spider = new Jitsu.IO.DirectoryTraverser(null, onFile); string directoryPattern = (settings.DontRecurse) ? "" : "*"; spider.TraverseBreadthFirst(settings.BaseDirectory, settings.FilePattern, directoryPattern); // Report the results, in standard VS7 format. //Win32.TrySetConsoleColor(Win32.ConsoleColorFlags.ForegroundGray); Win32.TrySetConsoleColor(COLOUR.DEFAULT); Console.WriteLine(); Console.WriteLine("Total found: {0} Matching files: {1} Total files searched: {2}", visitor.MatchesFound, visitor.FilesFound, visitor.FilesSearched); // Done. return(0); }