private function _parseFile($filename) { echo "Opening {$filename} <br>"; $data = file_get_contents($filename); $tokenizer = new App_Tokenizer(); $tokenizer->parse($data); $tokens = $tokenizer->getTokenData(); $fileData = array('classes' => array(), 'requires' => array(), 'interfaces' => array()); $lastClass = ''; $docBlock = array(); foreach ($tokens as $token) { switch ($token['token']) { case T_REQUIRE: case T_REQUIRE_ONCE: $requiredFile = trim($token['data'], '\'"'); if (!in_array($requiredFile, $fileData['requires'])) { $fileData['requires'][] = str_replace($this->_stripFromPath, '', $requiredFile); } break; case T_DOC_COMMENT: $docBlock = array(); $matches = array(); preg_match('/@package\\s+(.*)/', $token['data'], $matches); if (count($matches) == 2) { $docBlock['package'] = $matches[1]; } preg_match('/@subpackage\\s+(.*)/', $token['data'], $matches); if (count($matches) == 2) { $docBlock['subpackage'] = $matches[1]; } break; case T_CLASS: $fileData['classes'][$token['data']] = array('extends' => '', 'implements' => array(), 'docBlock' => $docBlock); $lastClass = $token['data']; break; case T_INTERFACE: $fileData['interfaces'][] = $token['data']; break; case T_EXTENDS: if ($lastClass == '') { throw new Exception('Extends can not come before any class declarations!'); } $fileData['classes'][$lastClass]['extends'] = $token['data']; break; case T_IMPLEMENTS: if ($lastClass == '') { throw new Exception('Implements can not come before any class declarations!'); } $fileData['classes'][$lastClass]['implements'][] = $token['data']; break; } } $this->_files[str_replace($this->_stripFromPath, '', $filename)] = $fileData; }
private function _parseFile($filename) { echo "Opening {$filename} <br>"; flush(); $data = file_get_contents($filename); $tokenizer = new App_Tokenizer(); $tokenizer->parse($data); $tokens = $tokenizer->getTokenData(); $fileData = array('classes' => array(), 'requires' => array(), 'interfaces' => array()); $lastClass = ''; foreach ($tokens as $token) { switch ($token['token']) { case T_REQUIRE: case T_REQUIRE_ONCE: $requiredFile = trim($token['data'], '\'"'); if (!in_array($requiredFile, $fileData['requires'])) { $fileData['requires'][] = $requiredFile; } break; case T_CLASS: $fileData['classes'][$token['data']] = array('extends' => '', 'implements' => array()); $lastClass = $token['data']; break; case T_INTERFACE: $fileData['interfaces'][] = $token['data']; break; case T_EXTENDS: if ($lastClass == '') { throw new Exception('Extends can not come before any class declarations!'); } $fileData['classes'][$lastClass]['extends'] = $token['data']; break; case T_IMPLEMENTS: if ($lastClass == '') { throw new Exception('Implements can not come before any class declarations!'); } $fileData['classes'][$lastClass]['implements'][] = $token['data']; break; } } return $fileData; }