first commit
This commit is contained in:
		
							
								
								
									
										18
									
								
								vendor/matthiasmullie/path-converter/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/matthiasmullie/path-converter/LICENSE
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| Copyright (c) 2015 Matthias Mullie | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy of | ||||
| this software and associated documentation files (the "Software"), to deal in | ||||
| the Software without restriction, including without limitation the rights to | ||||
| use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | ||||
| the Software, and to permit persons to whom the Software is furnished to do so, | ||||
| subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||||
| FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | ||||
| COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | ||||
| IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
							
								
								
									
										204
									
								
								vendor/matthiasmullie/path-converter/src/Converter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								vendor/matthiasmullie/path-converter/src/Converter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,204 @@ | ||||
| <?php | ||||
|  | ||||
| namespace MatthiasMullie\PathConverter; | ||||
|  | ||||
| /** | ||||
|  * Convert paths relative from 1 file to another. | ||||
|  * | ||||
|  * E.g. | ||||
|  *     ../../images/icon.jpg relative to /css/imports/icons.css | ||||
|  * becomes | ||||
|  *     ../images/icon.jpg relative to /css/minified.css | ||||
|  * | ||||
|  * Please report bugs on https://github.com/matthiasmullie/path-converter/issues | ||||
|  * | ||||
|  * @author Matthias Mullie <pathconverter@mullie.eu> | ||||
|  * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved | ||||
|  * @license MIT License | ||||
|  */ | ||||
| class Converter implements ConverterInterface | ||||
| { | ||||
|     /** | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $from; | ||||
|  | ||||
|     /** | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $to; | ||||
|  | ||||
|     /** | ||||
|      * @param string $from The original base path (directory, not file!) | ||||
|      * @param string $to   The new base path (directory, not file!) | ||||
|      * @param string $root Root directory (defaults to `getcwd`) | ||||
|      */ | ||||
|     public function __construct($from, $to, $root = '') | ||||
|     { | ||||
|         $shared = $this->shared($from, $to); | ||||
|         if ($shared === '') { | ||||
|             // when both paths have nothing in common, one of them is probably | ||||
|             // absolute while the other is relative | ||||
|             $root = $root ?: getcwd(); | ||||
|             $from = strpos($from, $root) === 0 ? $from : preg_replace('/\/+/', '/', $root.'/'.$from); | ||||
|             $to = strpos($to, $root) === 0 ? $to : preg_replace('/\/+/', '/', $root.'/'.$to); | ||||
|  | ||||
|             // or traveling the tree via `..` | ||||
|             // attempt to resolve path, or assume it's fine if it doesn't exist | ||||
|             $from = @realpath($from) ?: $from; | ||||
|             $to = @realpath($to) ?: $to; | ||||
|         } | ||||
|  | ||||
|         $from = $this->dirname($from); | ||||
|         $to = $this->dirname($to); | ||||
|  | ||||
|         $from = $this->normalize($from); | ||||
|         $to = $this->normalize($to); | ||||
|  | ||||
|         $this->from = $from; | ||||
|         $this->to = $to; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Normalize path. | ||||
|      * | ||||
|      * @param string $path | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function normalize($path) | ||||
|     { | ||||
|         // deal with different operating systems' directory structure | ||||
|         $path = rtrim(str_replace(DIRECTORY_SEPARATOR, '/', $path), '/'); | ||||
|  | ||||
|         // remove leading current directory. | ||||
|         if (substr($path, 0, 2) === './') { | ||||
|             $path = substr($path, 2); | ||||
|         } | ||||
|  | ||||
|         // remove references to current directory in the path. | ||||
|         $path = str_replace('/./', '/', $path); | ||||
|  | ||||
|         /* | ||||
|          * Example: | ||||
|          *     /home/forkcms/frontend/cache/compiled_templates/../../core/layout/css/../images/img.gif | ||||
|          * to | ||||
|          *     /home/forkcms/frontend/core/layout/images/img.gif | ||||
|          */ | ||||
|         do { | ||||
|             $path = preg_replace('/[^\/]+(?<!\.\.)\/\.\.\//', '', $path, -1, $count); | ||||
|         } while ($count); | ||||
|  | ||||
|         return $path; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Figure out the shared path of 2 locations. | ||||
|      * | ||||
|      * Example: | ||||
|      *     /home/forkcms/frontend/core/layout/images/img.gif | ||||
|      * and | ||||
|      *     /home/forkcms/frontend/cache/minified_css | ||||
|      * share | ||||
|      *     /home/forkcms/frontend | ||||
|      * | ||||
|      * @param string $path1 | ||||
|      * @param string $path2 | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function shared($path1, $path2) | ||||
|     { | ||||
|         // $path could theoretically be empty (e.g. no path is given), in which | ||||
|         // case it shouldn't expand to array(''), which would compare to one's | ||||
|         // root / | ||||
|         $path1 = $path1 ? explode('/', $path1) : array(); | ||||
|         $path2 = $path2 ? explode('/', $path2) : array(); | ||||
|  | ||||
|         $shared = array(); | ||||
|  | ||||
|         // compare paths & strip identical ancestors | ||||
|         foreach ($path1 as $i => $chunk) { | ||||
|             if (isset($path2[$i]) && $path1[$i] == $path2[$i]) { | ||||
|                 $shared[] = $chunk; | ||||
|             } else { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return implode('/', $shared); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Convert paths relative from 1 file to another. | ||||
|      * | ||||
|      * E.g. | ||||
|      *     ../images/img.gif relative to /home/forkcms/frontend/core/layout/css | ||||
|      * should become: | ||||
|      *     ../../core/layout/images/img.gif relative to | ||||
|      *     /home/forkcms/frontend/cache/minified_css | ||||
|      * | ||||
|      * @param string $path The relative path that needs to be converted | ||||
|      * | ||||
|      * @return string The new relative path | ||||
|      */ | ||||
|     public function convert($path) | ||||
|     { | ||||
|         // quit early if conversion makes no sense | ||||
|         if ($this->from === $this->to) { | ||||
|             return $path; | ||||
|         } | ||||
|  | ||||
|         $path = $this->normalize($path); | ||||
|         // if we're not dealing with a relative path, just return absolute | ||||
|         if (strpos($path, '/') === 0) { | ||||
|             return $path; | ||||
|         } | ||||
|  | ||||
|         // normalize paths | ||||
|         $path = $this->normalize($this->from.'/'.$path); | ||||
|  | ||||
|         // strip shared ancestor paths | ||||
|         $shared = $this->shared($path, $this->to); | ||||
|         $path = mb_substr($path, mb_strlen($shared)); | ||||
|         $to = mb_substr($this->to, mb_strlen($shared)); | ||||
|  | ||||
|         // add .. for every directory that needs to be traversed to new path | ||||
|         $to = str_repeat('../', count(array_filter(explode('/', $to)))); | ||||
|  | ||||
|         return $to.ltrim($path, '/'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Attempt to get the directory name from a path. | ||||
|      * | ||||
|      * @param string $path | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function dirname($path) | ||||
|     { | ||||
|         if (@is_file($path)) { | ||||
|             return dirname($path); | ||||
|         } | ||||
|  | ||||
|         if (@is_dir($path)) { | ||||
|             return rtrim($path, '/'); | ||||
|         } | ||||
|  | ||||
|         // no known file/dir, start making assumptions | ||||
|  | ||||
|         // ends in / = dir | ||||
|         if (mb_substr($path, -1) === '/') { | ||||
|             return rtrim($path, '/'); | ||||
|         } | ||||
|  | ||||
|         // has a dot in the name, likely a file | ||||
|         if (preg_match('/.*\..*$/', basename($path)) !== 0) { | ||||
|             return dirname($path); | ||||
|         } | ||||
|  | ||||
|         // you're on your own here! | ||||
|         return $path; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										24
									
								
								vendor/matthiasmullie/path-converter/src/ConverterInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/matthiasmullie/path-converter/src/ConverterInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| <?php | ||||
|  | ||||
| namespace MatthiasMullie\PathConverter; | ||||
|  | ||||
| /** | ||||
|  * Convert file paths. | ||||
|  * | ||||
|  * Please report bugs on https://github.com/matthiasmullie/path-converter/issues | ||||
|  * | ||||
|  * @author Matthias Mullie <pathconverter@mullie.eu> | ||||
|  * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved | ||||
|  * @license MIT License | ||||
|  */ | ||||
| interface ConverterInterface | ||||
| { | ||||
|     /** | ||||
|      * Convert file paths. | ||||
|      * | ||||
|      * @param string $path The path to be converted | ||||
|      * | ||||
|      * @return string The new path | ||||
|      */ | ||||
|     public function convert($path); | ||||
| } | ||||
							
								
								
									
										23
									
								
								vendor/matthiasmullie/path-converter/src/NoConverter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/matthiasmullie/path-converter/src/NoConverter.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| namespace MatthiasMullie\PathConverter; | ||||
|  | ||||
| /** | ||||
|  * Don't convert paths. | ||||
|  * | ||||
|  * Please report bugs on https://github.com/matthiasmullie/path-converter/issues | ||||
|  * | ||||
|  * @author Matthias Mullie <pathconverter@mullie.eu> | ||||
|  * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved | ||||
|  * @license MIT License | ||||
|  */ | ||||
| class NoConverter implements ConverterInterface | ||||
| { | ||||
|     /** | ||||
|      * {@inheritdoc} | ||||
|      */ | ||||
|     public function convert($path) | ||||
|     { | ||||
|         return $path; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user