/** * Link parser for rear-generation Description. * @param string $link * @return RM\Thorin\Descriptor */ public function getDescriptor($link) { $filename = basename($link); $tmp = explode('.', basename($link)); $ext = array_pop($tmp); $arguments = array_pop($tmp); $filename = implode('.', $tmp); if (!isset($arguments)) { return; } $arguments = explode('|', $arguments); if (substr($arguments[0], 0, 6) !== 'modes-') { return; } $modes = array_reverse(explode('-', substr(array_shift($arguments), 6))); $params = []; $modifiers = []; foreach ($arguments as $value) { $tmp = explode('-', $value); if (substr($value, 0, 6) === 'param-') { $tmp = explode('-', base64_decode($tmp[1])); $params[$tmp[0]] = $tmp[1]; } else { $name = array_shift($tmp); $modifiers[] = [$name => $tmp]; } } foreach ($modes as $mode) { $mode = $this->modeStorage->getMode($mode); foreach ($mode->getProviders() as $provider) { $source = $provider->getSource($filename, $params); if ($source !== NULL) { $descriptor = new Descriptor($source, $mode); foreach ($modifiers as $modifier) { foreach ($modifier as $name => $args) { $descriptor->addModifier($name, $args); } } } } if (isset($descriptor)) { return $descriptor; } } }
public function getMode($name) { return $this->modeStorage->getMode($name); }