[ Index ]
 

Code source de Symfony 1.0.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/vendor/phing/util/ -> PathTokenizer.php (source)

   1  <?php
   2  /*
   3   *  $Id: PathTokenizer.php 3076 2006-12-18 08:52:12Z fabien $
   4   *
   5   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   6   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   7   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   8   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   9   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16   *
  17   * This software consists of voluntary contributions made by many individuals
  18   * and is licensed under the LGPL. For more information please see
  19   * <http://phing.info>. 
  20   */
  21  
  22  
  23  
  24  include_once 'phing/util/StringHelper.php';
  25  
  26  
  27  
  28  /**
  29  
  30   * A Path tokenizer takes a path and returns the components that make up
  31  
  32   * that path.
  33  
  34   *
  35  
  36   * The path can use path separators of either ':' or ';' and file separators
  37  
  38   * of either '/' or '\'.
  39  
  40   *
  41  
  42   * @author Hans Lellelid <hans@xmpl.org> (Phing)
  43  
  44   * @author Conor MacNeill (Ant)
  45  
  46   * @author Jeff Tulley <jtulley@novell.com>  (Ant)
  47  
  48   * @pacakge phing.util
  49  
  50   */ 
  51  
  52  class PathTokenizer {
  53  
  54      
  55  
  56      /**
  57  
  58       * A array of tokens, created by preg_split().
  59  
  60       */
  61  
  62      private $tokens = array();
  63  
  64      
  65  
  66      /**
  67  
  68       * A string which stores any path components which have been read ahead
  69  
  70       * due to DOS filesystem compensation.
  71  
  72       * @var string
  73  
  74       */
  75  
  76      private $lookahead;
  77  
  78      
  79  
  80      /**
  81  
  82       * Flag to indicate whether or not we are running on a platform with a
  83  
  84       * DOS style filesystem
  85  
  86       * @var boolean
  87  
  88       */
  89  
  90      private $dosStyleFilesystem;
  91  
  92  
  93  
  94      /**
  95  
  96       * Constructs a path tokenizer for the specified path.
  97  
  98       * 
  99  
 100       * @param path The path to tokenize. Must not be <code>null</code>.
 101  
 102       */
 103  
 104      public function __construct($path) {
 105  
 106          // on Windows and Unix, we can ignore delimiters and still have
 107  
 108          // enough information to tokenize correctly.    
 109  
 110          $this->tokens = preg_split("/[;:]/", $path, -1, PREG_SPLIT_NO_EMPTY);
 111  
 112          $this->dosStyleFilesystem = ( PATH_SEPARATOR == ';');
 113  
 114      }
 115  
 116  
 117  
 118      /**
 119  
 120       * Tests if there are more path elements available from this tokenizer's
 121  
 122       * path. If this method returns <code>true</code>, then a subsequent call 
 123  
 124       * to nextToken will successfully return a token.
 125  
 126       * 
 127  
 128       * @return <code>true</code> if and only if there is at least one token 
 129  
 130       * in the string after the current position; <code>false</code> otherwise.
 131  
 132       */
 133  
 134      public function hasMoreTokens() {
 135  
 136          if ($this->lookahead !== null) {
 137  
 138              return true;
 139  
 140          }        
 141  
 142          return !empty($this->tokens);
 143  
 144      }
 145  
 146      
 147  
 148      /**
 149  
 150       * Returns the next path element from this tokenizer.
 151  
 152       * 
 153  
 154       * @return the next path element from this tokenizer.
 155  
 156       * 
 157  
 158       * @throws Exception if there are no more elements in this tokenizer's path.
 159  
 160       */
 161  
 162      public function nextToken() {
 163  
 164              
 165  
 166          if ($this->lookahead !== null) {
 167  
 168              $token = $this->lookahead;
 169  
 170              $this->lookahead = null;
 171  
 172          } else {
 173  
 174              $token = trim(array_shift($this->tokens));
 175  
 176          }
 177  
 178              
 179  
 180  
 181  
 182          if (strlen($token) === 1 && Character::isLetter($token{0})
 183  
 184                                  && $this->dosStyleFilesystem
 185  
 186                                  && !empty($this->tokens)) {
 187  
 188              // we are on a dos style system so this path could be a drive
 189  
 190              // spec. We look at the next token
 191  
 192              $nextToken = trim(array_shift($this->tokens));
 193  
 194              if (StringHelper::startsWith('\\', $nextToken) || StringHelper::startsWith('/', $nextToken)) {
 195  
 196                  // we know we are on a DOS style platform and the next path
 197  
 198                  // starts with a slash or backslash, so we know this is a 
 199  
 200                  // drive spec
 201  
 202                  $token .= ':' . $nextToken;
 203  
 204              } else {
 205  
 206                  // store the token just read for next time
 207  
 208                  $this->lookahead = $nextToken;
 209  
 210              }
 211  
 212          }
 213  
 214          
 215  
 216          return $token;
 217  
 218      }
 219  
 220  
 221  
 222      /**
 223  
 224       * Non StringTokenizer function, that indicates whether the specified path is contained in loaded tokens.
 225  
 226       * We can do this easily because in PHP implimentation we're using arrays.
 227  
 228       * @param string $path path to search for.
 229  
 230       * @return boolean
 231  
 232       */
 233  
 234      public function contains($path) {
 235  
 236          return in_array($path, $this->tokens, true);        
 237  
 238      }
 239  
 240      
 241  
 242  }
 243  
 244  
 245  


Généré le : Fri Mar 16 22:42:14 2007 par Balluche grâce à PHPXref 0.7