Exemple #1
0
 /**
  * @param $file
  * @return array
  * @throws \Nette\InvalidArgumentException
  */
 public function getElementsByFile($file)
 {
     if (!file_exists($file)) {
         throw new InvalidArgumentException("File '{$file}' does not exist.");
     }
     $ret = array();
     $tokenizer = new MacroTokenizer(file_get_contents($file));
     while (($word = $tokenizer->fetchWord()) !== FALSE) {
         if ($word === '{element') {
             $name = trim($tokenizer->fetchWord(), '}\'"');
             $id = trim($tokenizer->fetchWord(), '}\'"');
             $ret[$id] = $name;
         }
     }
     return $ret;
 }
 /**
  * Expands %node.word, %node.array, %node.args, %escape(), %modify(), %var, %raw in code.
  *
  * @param  string
  *
  * @return string
  */
 public function write($mask)
 {
     $args = func_get_args();
     array_shift($args);
     $word = strpos($mask, '%node.word') === false ? null : $this->argsTokenizer->fetchWord();
     $me = $this;
     $mask = Nette\Utils\Strings::replace($mask, '#%escape(\\(([^()]*+|(?1))+\\))#', function ($m) use($me) {
         return $me->escape(substr($m[1], 1, -1));
     });
     $mask = Nette\Utils\Strings::replace($mask, '#%modify(\\(([^()]*+|(?1))+\\))#', function ($m) use($me) {
         return $me->formatModifiers(substr($m[1], 1, -1));
     });
     return Nette\Utils\Strings::replace($mask, '#([,+]\\s*)?%(node\\.word|node\\.array|node\\.args|var|raw)(\\?)?(\\s*\\+\\s*)?()#', function ($m) use($me, $word, &$args) {
         list(, $l, $macro, $cond, $r) = $m;
         switch ($macro) {
             case 'node.word':
                 $code = $me->formatWord($word);
                 break;
             case 'node.args':
                 $code = $me->formatArgs();
                 break;
             case 'node.array':
                 $code = $me->formatArray();
                 $code = $cond && $code === 'array()' ? '' : $code;
                 break;
             case 'var':
                 $code = var_export(array_shift($args), true);
                 break;
             case 'raw':
                 $code = (string) array_shift($args);
                 break;
         }
         if ($cond && $code === '') {
             return $r ? $l : $r;
         } else {
             return $l . $code . $r;
         }
     });
 }