| Viewing file:  Glob.php (3.51 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\Finder\Expression;
 
 /**
 * @author Jean-François Simon <contact@jfsimon.fr>
 */
 class Glob implements ValueInterface
 {
 /**
 * @var string
 */
 private $pattern;
 
 /**
 * @param string $pattern
 */
 public function __construct($pattern)
 {
 $this->pattern = $pattern;
 }
 
 /**
 * {@inheritdoc}
 */
 public function render()
 {
 return $this->pattern;
 }
 
 /**
 * {@inheritdoc}
 */
 public function renderPattern()
 {
 return $this->pattern;
 }
 
 /**
 * {@inheritdoc}
 */
 public function getType()
 {
 return Expression::TYPE_GLOB;
 }
 
 /**
 * {@inheritdoc}
 */
 public function isCaseSensitive()
 {
 return true;
 }
 
 /**
 * {@inheritdoc}
 */
 public function prepend($expr)
 {
 $this->pattern = $expr.$this->pattern;
 
 return $this;
 }
 
 /**
 * {@inheritdoc}
 */
 public function append($expr)
 {
 $this->pattern .= $expr;
 
 return $this;
 }
 
 /**
 * Tests if glob is expandable ("*.{a,b}" syntax).
 *
 * @return bool
 */
 public function isExpandable()
 {
 return false !== strpos($this->pattern, '{')
 && false !== strpos($this->pattern, '}');
 }
 
 /**
 * @param bool $strictLeadingDot
 * @param bool $strictWildcardSlash
 *
 * @return Regex
 */
 public function toRegex($strictLeadingDot = true, $strictWildcardSlash = true)
 {
 $firstByte = true;
 $escaping = false;
 $inCurlies = 0;
 $regex = '';
 $sizeGlob = strlen($this->pattern);
 for ($i = 0; $i < $sizeGlob; $i++) {
 $car = $this->pattern[$i];
 if ($firstByte) {
 if ($strictLeadingDot && '.' !== $car) {
 $regex .= '(?=[^\.])';
 }
 
 $firstByte = false;
 }
 
 if ('/' === $car) {
 $firstByte = true;
 }
 
 if ('.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) {
 $regex .= "\\$car";
 } elseif ('*' === $car) {
 $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*');
 } elseif ('?' === $car) {
 $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.');
 } elseif ('{' === $car) {
 $regex .= $escaping ? '\\{' : '(';
 if (!$escaping) {
 ++$inCurlies;
 }
 } elseif ('}' === $car && $inCurlies) {
 $regex .= $escaping ? '}' : ')';
 if (!$escaping) {
 --$inCurlies;
 }
 } elseif (',' === $car && $inCurlies) {
 $regex .= $escaping ? ',' : '|';
 } elseif ('\\' === $car) {
 if ($escaping) {
 $regex .= '\\\\';
 $escaping = false;
 } else {
 $escaping = true;
 }
 
 continue;
 } else {
 $regex .= $car;
 }
 $escaping = false;
 }
 
 return new Regex('^'.$regex.'$');
 }
 }
 
 |