static int MainImpl() { // Validate arguments. if (Global.Options.FilePattern == null || Global.Options.RegexPattern == null) { throw new ApplicationException("Please specify at least a pathspec and regex pattern."); } // Echo command line options. ConsoleWriter.Out.Write(@"Searching directory ""{0}"", files ""{1}"", for pattern ""{2}"" (options: ", Global.Options.BaseDirectory, Global.Options.FilePattern, Global.Options.RegexPattern); System.Collections.ArrayList optionstrings = new System.Collections.ArrayList(); if (Global.Options.RegexIgnoreCase) { optionstrings.Add("IgnoreCase"); } if (Global.Options.RegexSingleline) { optionstrings.Add("Singleline"); } if (Global.Options.RegexMimicVS) { optionstrings.Add("RegexMimicVS"); } if (Global.Options.IncludeHidden) { optionstrings.Add("IncludeHidden"); } if (Global.Options.DoRecursion) { optionstrings.Add("DoRecursion"); } optionstrings.Add(String.Format("OutputWidth: {0}", Global.Options.OutputWidth)); if (Global.Options.ReplacementText != null) { optionstrings.Add(String.Format("Replacement pattern: {0}", Global.Options.ReplacementText)); } if (optionstrings.Count == 0) { optionstrings.Add("none"); } ConsoleWriter.Out.Write(String.Join(", ", (string[])optionstrings.ToArray(typeof(string)))); ConsoleWriter.Out.WriteLine(")"); // Reimplement VS's most useful helper patterns: C identifiers, number literals, and quoted strings. if (Global.Options.RegexMimicVS) { Global.Options.RegexPattern = Global.Options.RegexPattern.Replace("::", "\x003A"); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace(":i", @"(\b[_a-zA-Z][_a-zA-Z0-9]*\b)"); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace(":n", @"(\b[0-9]+(\.[0-9]+)?([Ee](\+|-)?[0-9]+)?\b)"); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace(":q", @"((@""(""""|[^""])*"")|(""(\\.|[^""\\])*""))"); } // Create the regex, and populate the visitor callback with it. RegexOptions ro = RegexOptions.Compiled | RegexOptions.Multiline; if (Global.Options.RegexIgnoreCase) { ro |= RegexOptions.IgnoreCase; } if (Global.Options.RegexSingleline) { ro |= RegexOptions.Singleline; } FileVisitor visitor = new FileVisitor(); visitor.UserRegex = new Regex(Global.Options.RegexPattern, ro); visitor.ReplacementText = Global.Options.ReplacementText; visitor.OutputWidth = Global.Options.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 = (Global.Options.DoRecursion) ? "*" : String.Empty; spider.TraverseBreadthFirst(Global.Options.BaseDirectory, Global.Options.FilePattern, directoryPattern); // Report the totals. ConsoleWriter.Out.WriteLine(); ConsoleWriter.Out.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); }
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; }
static int MainImpl() { // Validate arguments. if ( Global.Options.FilePattern == null || Global.Options.RegexPattern == null ) throw new ApplicationException( "Please specify at least a pathspec and regex pattern." ); // Echo command line options. ConsoleWriter.Out.Write( @"Searching directory ""{0}"", files ""{1}"", for pattern ""{2}"" (options: ", Global.Options.BaseDirectory, Global.Options.FilePattern, Global.Options.RegexPattern ); System.Collections.ArrayList optionstrings = new System.Collections.ArrayList(); if ( Global.Options.RegexIgnoreCase ) optionstrings.Add( "IgnoreCase" ); if ( Global.Options.RegexSingleline ) optionstrings.Add( "Singleline" ); if ( Global.Options.RegexMimicVS ) optionstrings.Add( "RegexMimicVS" ); if ( Global.Options.IncludeHidden ) optionstrings.Add( "IncludeHidden" ); if ( Global.Options.DoRecursion ) optionstrings.Add( "DoRecursion" ); optionstrings.Add( String.Format( "OutputWidth: {0}", Global.Options.OutputWidth ) ); if ( Global.Options.ReplacementText != null ) optionstrings.Add( String.Format( "Replacement pattern: {0}", Global.Options.ReplacementText ) ); if ( optionstrings.Count == 0 ) optionstrings.Add( "none" ); ConsoleWriter.Out.Write( String.Join( ", ", (string[])optionstrings.ToArray( typeof( string ) ) ) ); ConsoleWriter.Out.WriteLine( ")" ); // Reimplement VS's most useful helper patterns: C identifiers, number literals, and quoted strings. if ( Global.Options.RegexMimicVS ) { Global.Options.RegexPattern = Global.Options.RegexPattern.Replace( "::", "\x003A" ); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace( ":i", @"(\b[_a-zA-Z][_a-zA-Z0-9]*\b)" ); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace( ":n", @"(\b[0-9]+(\.[0-9]+)?([Ee](\+|-)?[0-9]+)?\b)" ); Global.Options.RegexPattern = Global.Options.RegexPattern.Replace( ":q", @"((@""(""""|[^""])*"")|(""(\\.|[^""\\])*""))" ); } // Create the regex, and populate the visitor callback with it. RegexOptions ro = RegexOptions.Compiled | RegexOptions.Multiline; if ( Global.Options.RegexIgnoreCase ) ro |= RegexOptions.IgnoreCase; if ( Global.Options.RegexSingleline ) ro |= RegexOptions.Singleline; FileVisitor visitor = new FileVisitor(); visitor.UserRegex = new Regex( Global.Options.RegexPattern, ro ); visitor.ReplacementText = Global.Options.ReplacementText; visitor.OutputWidth = Global.Options.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 = ( Global.Options.DoRecursion ) ? "*" : String.Empty; spider.TraverseBreadthFirst( Global.Options.BaseDirectory, Global.Options.FilePattern, directoryPattern ); // Report the totals. ConsoleWriter.Out.WriteLine(); ConsoleWriter.Out.WriteLine( "Total found: {0} Matching files: {1} Total files searched: {2}", visitor.MatchesFound, visitor.FilesFound, visitor.FilesSearched ); // Done. return 0; }