/** * Returns a function to use for listing * * @return function(string): string[] */ protected function entries() { return function ($package) { if ('' === $package) { $folder = $this->base; $prefix = ''; } else { $folder = new Folder($this->base, strtr($package, '/', DIRECTORY_SEPARATOR)); $prefix = $package . '/'; } $r = []; foreach ($folder->entries() as $entry) { $name = $entry->name(); if (is_dir($entry)) { $r[] = $prefix . $name . '/'; } else { foreach ($this->extensions as $extension) { $offset = -strlen($extension); if (0 === substr_compare($name, $extension, $offset)) { $r[] = $prefix . substr($name, 0, $offset); } } } } return $r; }; }