diff -r 877f952ae2bd -r 6b6c2214f778 web/lib/Zend/File/ClassFileLocator.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/File/ClassFileLocator.php Thu Mar 21 19:52:38 2013 +0100 @@ -0,0 +1,173 @@ +getInnerIterator()->current(); + + // If we somehow have something other than an SplFileInfo object, just + // return false + if (!$file instanceof SplFileInfo) { + return false; + } + + // If we have a directory, it's not a file, so return false + if (!$file->isFile()) { + return false; + } + + // If not a PHP file, skip + if ($file->getBasename('.php') == $file->getBasename()) { + return false; + } + + $contents = file_get_contents($file->getRealPath()); + $tokens = token_get_all($contents); + $count = count($tokens); + $i = 0; + while ($i < $count) { + $token = $tokens[$i]; + + if (!is_array($token)) { + // single character token found; skip + $i++; + continue; + } + + list($id, $content, $line) = $token; + + switch ($id) { + case T_NAMESPACE: + // Namespace found; grab it for later + $namespace = ''; + $done = false; + do { + ++$i; + $token = $tokens[$i]; + if (is_string($token)) { + if (';' === $token) { + $done = true; + } + continue; + } + list($type, $content, $line) = $token; + switch ($type) { + case T_STRING: + case T_NS_SEPARATOR: + $namespace .= $content; + break; + } + } while (!$done && $i < $count); + + // Set the namespace of this file in the object + $file->namespace = $namespace; + break; + case T_CLASS: + case T_INTERFACE: + // Abstract class, class, or interface found + + // Get the classname + $class = ''; + do { + ++$i; + $token = $tokens[$i]; + if (is_string($token)) { + continue; + } + list($type, $content, $line) = $token; + switch ($type) { + case T_STRING: + $class = $content; + break; + } + } while (empty($class) && $i < $count); + + // If a classname was found, set it in the object, and + // return boolean true (found) + if (!empty($class)) { + $file->classname = $class; + return true; + } + break; + default: + break; + } + ++$i; + } + + // No class-type tokens found; return false + return false; + } +}