Example #1
0
 /**
  * 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;
         }
     }
 }
Example #2
0
 public function getMode($name)
 {
     return $this->modeStorage->getMode($name);
 }