/** * Returns the name of the programming language in which the source should have been written. Throws an * exception with code self::ERROR_INVALID_TYPE if the file's type is not a source code. It also throws an * exception with code self::ERROR_NOTFOUND_FILE if the file cannot be found. */ public function getProgrammingLanguage() { if ($this->getType() != self::TYPE_SOURCE) { throw new ApplicationModelException_File('This method supports only source code type of files.', self::ERROR_INVALID_TYPE); } $filePath = $this->getPath(); if (!is_file($filePath)) { throw new ApplicationModelException_File('Cannot access file ' . $filePath . '.', self::ERROR_NOTFOUND_FILE); } $sourceText = substr(file_get_contents($filePath), 0, 20000); if (isset($this->application->config['file_extensions'][$this->extension])) { return $this->application->config['file_extensions'][$this->extension]; } $systemExtension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION)); if (isset($this->application->config['file_extensions'][$systemExtension])) { return $this->application->config['file_extensions'][$systemExtension]; } $detector = new ProgrammingLanguageDetector(); $detector->importKnowledgeBase(file_get_contents(dirname(__FILE__) . '/../lib/ProgrammingLanguageDetector/knowledge_base.dat')); return $detector->detect($sourceText); }