public function parse()
{
foreach ($this->getRegexes() as $regex) {
$matches = $this->matchUserAgent($regex['regex']);
if ($matches) {
break;
}
}
if (!$matches) {
return '';
}
$name = $this->buildByMatch($regex['name'], $matches);
foreach (self::getAvailableEngines() as $engineName) {
if (strtolower($name) == strtolower($engineName)) {
return $engineName;
}
}
// This Exception should never be thrown. If so a defined browser name is missing in $availableEngines
throw new \Exception('Detected browser engine was not found in $availableEngines');
// @codeCoverageIgnore
}
protected function buildEngine($engineData, $browserVersion) { $engine = ''; // if an engine is set as default if (isset($engineData['default'])) { $engine = $engineData['default']; } // check if engine is set for browser version if (array_key_exists('versions', $engineData) && is_array($engineData['versions'])) { foreach ($engineData['versions'] as $version => $versionEngine) { if (version_compare($browserVersion, $version) >= 0) { $engine = $versionEngine; } } } // try to detect the engine using the regexes if (empty($engine)) { $engineParser = new Engine(); $engineParser->setUserAgent($this->userAgent); $engine = $engineParser->parse(); } return $engine; }