<?php
namespace Poirot\Loader;
if (defined(__FILE__.'_included'))
## file is included once!!
return;
else
define(__FILE__.'_included', true);
const SEPARATOR_NAMESPACES = '\\';
/**
* Watch File Exists Within Given Resource
*
* @param string $name requested name to resolve
* @param string $resource may find within this resource of match
* @param string $match match with this namespace
* @param string $postfix append to resource match usually file extension
*
* @return string resolved path to file if exists
*/
function funcWatchFileExists($name, $resource, $match, $postfix = null)
{
if (is_file($match))
$pathToFile = $match;
else {
## $match = 'Poirot\Loader'
## $name = 'Poirot\Loader\ClassMapAutoloader'
## $maskOffClass = '\ClassMapAutoloader'
$maskOffClass = ($match == '*' || $match == '**')
? $name
: substr($name, strlen($match), strlen($name));
## we suppose class mask must find within match
## so convert namespaces to directory slashes
$pathToFile =
_normalizeDir($resource)
. _normalizeResourceName($maskOffClass);
if ($postfix !== null) $pathToFile.=$postfix;
if (! file_exists($pathToFile) )
return false;
}
return $pathToFile;
}
/**
* Normalize Directory Path
*
* @param string $dir
*
* @return string
*/
function _normalizeDir($dir)
{
static $_c_Normalized;
if (isset($_c_Normalized[$dir]))
return $_c_Normalized[$dir];
$dir = rtrim(strtr($dir, SEPARATOR_NAMESPACES, '/'), '/');
$_c_Normalized[$dir] = $dir;
return $dir;
}
/**
* Convert Class Namespace Trailing To Path
*
* @param string $maskOffClass
*
* @return string
*/
function _normalizeResourceName($maskOffClass)
{
$maskOffClass = ltrim($maskOffClass, SEPARATOR_NAMESPACES);
return ($maskOffClass !== '') ? '/'. _normalizeDir($maskOffClass) : '';
}
|