public static function find($library, array $options = array())
{
$format = function ($file, $config) {
$trim = array(strlen($config['path']) + 1, strlen($config['suffix']));
$rTrim = strpos($file, $config['suffix']) !== false ? -$trim[1] : 9999;
$file = preg_split('/[\\/\\\\]/', substr($file, $trim[0], $rTrim));
return $config['prefix'] . join('\\', $file);
};
$defaults = compact('format') + array('path' => '', 'recursive' => false, 'filter' => '/^(\\w+)?(\\\\[a-z0-9_]+)+\\\\[A-Z][a-zA-Z0-9]+$/', 'exclude' => '', 'namespaces' => false);
$options += $defaults;
$libs = array();
if ($options['namespaces'] && $options['filter'] === $defaults['filter']) {
$options['format'] = function ($class, $config) use($format, $defaults) {
if (is_dir($class)) {
return $format($class, $config);
}
if (preg_match($defaults['filter'], $class = $format($class, $config))) {
return $class;
}
};
$options['filter'] = false;
}
if ($library === true) {
foreach (static::$_configurations as $library => $config) {
$libs = array_merge($libs, static::find($library, $options));
}
return $libs;
}
if (!isset(static::$_configurations[$library])) {
return null;
}
$config = static::$_configurations[$library];
$options['path'] = "{$config['path']}{$options['path']}/*";
$libs = static::_search($config, $options);
return array_values(array_filter($libs));
}