示例#1
0
        public override void visitChildren(FileVisitor fileVisitor, DirectoryVisitor directoryVisitor, VisitFailed visitFailed)
        {
            try
            {
                IReadOnlyList <IStorageItem> storageItems = getStorageFolder().GetItemsAsync().DoSynchronously();

                foreach (IStorageItem storageItem in storageItems)
                {
                    StorageItemPathAttributes pathAttributes = new StorageItemPathAttributes(storageItem);

                    if (storageItem is IStorageFolder)
                    {
                        if (directoryVisitor != null)
                        {
                            directoryVisitor(new StorageFolderDirectory(this, (StorageFolder)storageItem));
                        }
                    }
                    else if (storageItem is IStorageFile)
                    {
                        if (fileVisitor != null)
                        {
                            fileVisitor(new StorageFileFile(this, (StorageFile)storageItem));
                        }
                    }
                    else
                    {
                        throw new Exception("Unknown type of StorageItem: " + storageItem);
                    }
                }
            }
            catch (System.IO.IOException e)
            {
                throw DotNetIOUtils.jSimpleExceptionFromDotNetIOException(e);
            }
        }
示例#2
0
        public void Run()
        {
            // Determine the output file.
            // TODO - make options.InputPath non-required, and set things up to be able to read from stdin
            // TODO - base the output extension on the file type
            string outputPath = Path.ChangeExtension(options.InputPath, ".svg");

            // TODO - figure out how to lex a stream!
            string content;

            using (var reader = new StreamReader(options.InputPath))
            {
                content = reader.ReadToEnd();
            }

            var lexer = new PicishLexer(new AntlrInputStream(content));

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(new ThrowingErrorListener <int>());

            var parser = new PicishParser(new CommonTokenStream(lexer));

            parser.RemoveErrorListeners();
            parser.AddErrorListener(new ThrowingErrorListener <IToken>());

            // TODO - clean this up!

            // var result = new PicishVisitor().Visit(parser.file());
            var result = new FileVisitor().Visit(parser.file());

            // TODO - dump/render the diagram

            // Console.WriteLine("Run is not yet implemented: {0} -> {1}.", options.InputPath, outputPath);
            // Console.WriteLine("Result: {0}", result);
        }
        //
        // Initialization
        public DirectoryTraverser(
            DirectoryVisitor onDirectory, FileVisitor onFile,
            string[] excludeFiles, string[] excludeDirectories)
        {
            this.excludeDirectories = excludeDirectories;
            this.excludeFiles = excludeFiles;

            this.onDirectory = onDirectory;
            this.onFile = onFile;
        }
示例#4
0
        //
        // Initialization

        public DirectoryTraverser(
            DirectoryVisitor onDirectory, FileVisitor onFile,
            string[] excludeFiles, string[] excludeDirectories)
        {
            this.excludeDirectories = excludeDirectories;
            this.excludeFiles       = excludeFiles;

            this.onDirectory = onDirectory;
            this.onFile      = onFile;
        }
示例#5
0
        public void CanParseSimpleShape(string content, Type expectedShape)
        {
            // Arrange
            var parser = CreateParser(content);

            // Act
            var diagram = new FileVisitor().Visit(parser.file());

            // Assert
            diagram.Should().NotBeNull();
            diagram.Objects.Should().HaveCount(1);

            var shape = diagram.Objects[0];

            shape.Should().BeOfType(expectedShape);

            shape.Center.X.Should().Be(0.0);
            shape.Center.Y.Should().Be(0.0);

            // TODO - verify width and height
        }
示例#6
0
        private bool    RecurseVisit(DirectoryInfo _Directory, FileVisitor _Visitor)
        {
            // Visit files
            FileInfo[] Files = _Directory.GetFiles();
            foreach (FileInfo File in Files)
            {
                if (!_Visitor(File))
                {
                    return(false);
                }
            }

            // Recurse through directories
            DirectoryInfo[] Directories = _Directory.GetDirectories();
            foreach (DirectoryInfo Dir in Directories)
            {
                if (!RecurseVisit(Dir, _Visitor))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#7
0
        public override void visitChildren(FileVisitor fileVisitor, DirectoryVisitor directoryVisitor,
                                           VisitFailed visitFailed)
        {
            var directoryInfo = new DirectoryInfo(directoryPath);

            try
            {
                foreach (var fileSystemInfo in directoryInfo.EnumerateFileSystemInfos())
                {
                    if ((fileSystemInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        directoryVisitor(new FileSystemDirectory(fileSystemInfo.FullName));
                    }
                    else
                    {
                        fileVisitor(new FileSystemFile(this, fileSystemInfo.FullName));
                    }
                }
            }
            catch (System.IO.IOException e)
            {
                throw DotNetIOUtils.jSimpleExceptionFromDotNetIOException(e);
            }
        }
示例#8
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);
    }
示例#9
0
 public static void WalkFilesystemTree(FileVisitor fileVisitor, DirectoryInfo directoryInfo)
 {
     Walk(fileVisitor, directoryInfo);
 }
 public override void Accept(FileVisitor visitor)
 {
     visitor.PreVisit(this);
     Files.ForEach(f => f.Accept(visitor));
     visitor.PostVisit(this);
 }
示例#11
0
        public override void visitChildren(FileVisitor fileVisitor, DirectoryVisitor directoryVisitor,
            VisitFailed visitFailed)
        {
            var directoryInfo = new DirectoryInfo(directoryPath);

            try
            {
                foreach (var fileSystemInfo in directoryInfo.EnumerateFileSystemInfos())
                {
                    if ((fileSystemInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                        directoryVisitor(new FileSystemDirectory(fileSystemInfo.FullName));
                    else fileVisitor(new FileSystemFile(this, fileSystemInfo.FullName));
                }
            }
            catch (System.IO.IOException e)
            {
                throw DotNetIOUtils.jSimpleExceptionFromDotNetIOException(e);
            }
        }
示例#12
0
 protected void BuildTree(string root, Predicate <FileSystemNode> predicate)
 {
     FileVisitor.Start(root, predicate);
 }
        public override void visitChildren(FileVisitor fileVisitor, DirectoryVisitor directoryVisitor, VisitFailed visitFailed)
        {
            try
            {
                IReadOnlyList<IStorageItem> storageItems = getStorageFolder().GetItemsAsync().DoSynchronously();

                foreach (IStorageItem storageItem in storageItems)
                {
                    StorageItemPathAttributes pathAttributes = new StorageItemPathAttributes(storageItem);

                    if (storageItem is IStorageFolder)
                    {
                        if (directoryVisitor != null)
                            directoryVisitor(new StorageFolderDirectory(this, (StorageFolder) storageItem));
                    }
                    else if (storageItem is IStorageFile)
                    {
                        if (fileVisitor != null)
                            fileVisitor(new StorageFileFile(this, (StorageFile) storageItem));
                    }
                    else throw new Exception("Unknown type of StorageItem: " + storageItem);
                }
            }
            catch (System.IO.IOException e)
            {
                throw DotNetIOUtils.jSimpleExceptionFromDotNetIOException(e);
            }
        }
 public void Accept(FileVisitor visitor)
 {
     visitor.PreVisit(this);
     visitor.PostVisit(this);
 }
示例#15
0
 public DecoratorAnonymousInnerClass3(FileVisitor <Path> wrapped, ThrowingConsumer <Path, IOException> operation) : base(wrapped)
 {
     this._operation = operation;
 }
示例#16
0
        private bool RecurseVisit( DirectoryInfo _Directory, FileVisitor _Visitor )
        {
            // Visit files
            FileInfo[]	Files = _Directory.GetFiles();
            foreach ( FileInfo File in Files )
                if ( !_Visitor( File ) )
                    return false;

            // Recurse through directories
            DirectoryInfo[]	Directories = _Directory.GetDirectories();
            foreach ( DirectoryInfo Dir in Directories )
                if ( !RecurseVisit( Dir, _Visitor ) )
                    return false;

            return true;
        }
示例#17
0
        private static FileVisitorResult Walk(FileVisitor fileVisitor, DirectoryInfo directoryInfo)
        {
            FileVisitorResult preVisitResult = fileVisitor.PreVisitDirectory(directoryInfo);
            bool preSkipSiblings             = false;

            switch (preVisitResult)
            {
            case FileVisitorResult.TERMINATE:
                return(FileVisitorResult.TERMINATE);

            case FileVisitorResult.CONTINUE:
                break;

            case FileVisitorResult.SKIP_SUBTREE:
                return(FileVisitorResult.CONTINUE);

            case FileVisitorResult.SKIP_SIBLINGS:
                preSkipSiblings = true;
                break;
            }

            IOException occurredException = null;

            foreach (FileSystemInfo fileSystemInfo in directoryInfo.GetFileSystemInfos())
            {
                if (((int)fileSystemInfo.Attributes & (int)FileAttributes.Directory) != 0)
                {
                    DirectoryInfo     subdir           = (DirectoryInfo)fileSystemInfo;
                    FileVisitorResult walkSubdirResult = Walk(fileVisitor, subdir);
                    switch (walkSubdirResult)
                    {
                    case FileVisitorResult.CONTINUE:
                        break;

                    case FileVisitorResult.SKIP_SIBLINGS:
                        return(FileVisitorResult.CONTINUE);

                    case FileVisitorResult.TERMINATE:
                        return(FileVisitorResult.TERMINATE);

                    default:
                        throw new NotImplementedException(walkSubdirResult.ToString());
                    }
                }
                else
                {
                    FileInfo subfile = (FileInfo)fileSystemInfo;
                    try
                    {
                        FileVisitorResult visitFileResult = fileVisitor.VisitFile(subfile);
                        switch (visitFileResult)
                        {
                        case FileVisitorResult.CONTINUE:
                            break;

                        case FileVisitorResult.SKIP_SIBLINGS:
                            return(FileVisitorResult.CONTINUE);

                        case FileVisitorResult.TERMINATE:
                            return(FileVisitorResult.TERMINATE);

                        default:
                            throw new NotImplementedException(visitFileResult.ToString());
                        }
                    }
                    catch (IOException ioe)
                    {
                        FileVisitorResult visitFileFailedResult = fileVisitor.VisitFileFailed(subfile, ioe);
                        switch (visitFileFailedResult)
                        {
                        case FileVisitorResult.TERMINATE:
                            return(FileVisitorResult.TERMINATE);

                        case FileVisitorResult.CONTINUE:
                            break;

                        case FileVisitorResult.SKIP_SIBLINGS:
                            return(FileVisitorResult.CONTINUE);

                        default:
                            throw new NotImplementedException(visitFileFailedResult.ToString());
                        }
                    }
                }
            }

            FileVisitorResult postVisitResult = fileVisitor.PostVisitDirectory(directoryInfo, occurredException);

            return(preSkipSiblings ? FileVisitorResult.SKIP_SIBLINGS : postVisitResult);
        }
示例#18
0
 public FileVisitorAnonymousInnerClass(System.Predicate <Path> predicate, FileVisitor <Path> wrapped)
 {
     this._predicate = predicate;
     this._wrapped   = wrapped;
 }
示例#19
0
 public static FileVisitor <Path> OnlyMatching(System.Predicate <Path> predicate, FileVisitor <Path> wrapped)
 {
     return(new FileVisitorAnonymousInnerClass(predicate, wrapped));
 }
示例#20
0
 public Decorator(FileVisitor <T> wrapped)
 {
     this.Wrapped = wrapped;
 }
示例#21
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;
    }
示例#22
0
 public DirectoryTraverser(
     DirectoryVisitor onDirectory, FileVisitor onFile)
     : this(onDirectory,onFile,null,null)
 {
 }
示例#23
0
 public static FileVisitor <Path> ThrowExceptions(FileVisitor <Path> wrapped)
 {
     return(new DecoratorAnonymousInnerClass(wrapped));
 }
示例#24
0
 public static FileVisitor <Path> OnFile(ThrowingConsumer <Path, IOException> operation, FileVisitor <Path> wrapped)
 {
     return(new DecoratorAnonymousInnerClass3(wrapped, operation));
 }
示例#25
0
 public DirectoryTraverser(
     DirectoryVisitor onDirectory, FileVisitor onFile) :
     this(onDirectory, onFile, null, null)
 {
 }
示例#26
0
 public DecoratorAnonymousInnerClass(FileVisitor <Path> wrapped) : base(wrapped)
 {
 }