write() public method

Expands %node.word, %node.array, %node.args, %escape(), %modify(), %var, %raw, %word in code.
public write ( $mask ) : string
return string
Beispiel #1
0
 public function macroSecured(Latte\MacroNode $node, Latte\PhpWriter $writer)
 {
     if ($node->prefix === $node::PREFIX_TAG) {
         return $writer->write($node->htmlNode->closing ? 'if(array_pop($_l->secured)){' : 'if($_l->secured[] = $acl->isUserAllowedTo(%node.args)) {');
     }
     return $writer->write('if ($acl->isUserAllowedTo(%node.args)) {');
 }
 /**
  * Add support of placeholder replacement into the standart translator macro
  *
  * @param MacroNode $node
  * @param PhpWriter $writer
  * @return strings
  */
 public function macroTranslate(MacroNode $node, PhpWriter $writer)
 {
     if ($node->closing) {
         return $writer->write('echo %modify($template->translate(ob_get_clean()))');
     } elseif ($node->isEmpty = $node->args !== '') {
         return $writer->write('echo %modify(Nedryse\\Latte\\Macros\\TemplateMacroSet::template(call_user_func_array(array($template, \'translate\'), array_merge(array(%node.word), $_args = ((is_array(current($_args = %node.array)) === TRUE) ? current($_args) : $_args))), array_merge($template->getParameters(), get_defined_vars(), $_args)))');
     } else {
         return 'ob_start()';
     }
 }
 /**
  * {ifEnabled ...}
  */
 public function macroIfNotEnabled(MacroNode $node, PhpWriter $writer)
 {
     if ($node->data->capture = $node->args === '') {
         return 'ob_start()';
     }
     if ($node->prefix === $node::PREFIX_TAG) {
         return $writer->write($node->htmlNode->closing ? 'if (array_pop($_l->ifs)) {' : 'if ($_l->ifs[] = (%node.args)) {');
     }
     return $writer->write('if (!call_user_func($this->filters->enabled, %node.word, %node.array?)) {');
 }
Beispiel #4
0
 /**
  * @param MacroNode $node
  * @param PhpWriter $writer
  * @throws CompileException
  */
 public function macroEditrouble(MacroNode $node, PhpWriter $writer)
 {
     $name = $node->tokenizer->fetchWord();
     if ($name === false) {
         throw new CompileException("Missing editrouble name in {{$node->name}}.");
     }
     $args = $writer->write('%node.args');
     $attrs = " data-editrouble='\" . json_encode([" . ($args ? $args . ',' : '') . "'name' => \"" . $name . "\"]) . \"'";
     preg_match('#(^.*?>)(.*)(<.*\\z)#s', $node->content, $parts);
     $node->content = '<?php echo \'' . substr($parts[1], 0, -1) . '\' . ' . '($_presenter->editroubleConnector->checkPermission() ? ' . '"' . $attrs . '" : \'\') . \'>\'; ' . $writer->write('echo $_presenter->editroubleConnector->getContent("' . $name . '", [%node.args])') . ' ?>' . $parts[3];
 }
Beispiel #5
0
 public function macroSrc(PhpWriter $writer)
 {
     $code = self::getCode('%node.array');
     // in macro must go result on output
     $code[] = 'echo %escape(%modify($link));';
     return $writer->write(implode('', $code));
 }
 /**
  * @param MacroNode $node
  * @param PhpWriter $writer
  * @param string $else
  * @param bool $comma
  * @return string
  */
 private function modify(MacroNode $node, PhpWriter $writer, $else = '', $comma = TRUE)
 {
     if (!$node->modifiers) {
         return $else;
     }
     return $writer->write(($comma ? ', ' : '') . 'function ($s, $type) { $_fi = new LR\\FilterInfo($type); return %modifyContent($s); }');
 }
 public function macroLabel(Latte\MacroNode $node, Latte\PhpWriter $writer)
 {
     while ($node->parentNode) {
         if ($node->parentNode->name == 'gpspicker') {
             $cmd = 'if ($_label = $_gpspicker->getPartialLabel(%node.word)) echo $_label->addAttributes(%node.array)';
             if ($node->isEmpty = substr($node->args, -1) === '/') {
                 $node->setArgs(substr($node->args, 0, -1));
                 return $writer->write($cmd);
             } else {
                 return $writer->write($cmd . '->startTag()');
             }
         }
         $node = $node->parentNode;
     }
     throw new CompileException('{gpspicker:label} can be used only within {gpspicker} macro.');
 }
 /**
  * Extracts translation messages from a file to the catalogue.
  *
  * @param string           $file The path to look into
  * @param MessageCatalogue $catalogue The catalogue
  */
 public function extractFile($file, MessageCatalogue $catalogue)
 {
     $buffer = NULL;
     $parser = new Parser();
     $parser->shortNoEscape = TRUE;
     foreach ($tokens = $parser->parse(file_get_contents($file)) as $token) {
         if ($token->type !== $token::MACRO_TAG || !in_array($token->name, array('_', '/_'), TRUE)) {
             if ($buffer !== NULL) {
                 $buffer .= $token->text;
             }
             continue;
         }
         if ($token->name === '/_') {
             $catalogue->set(($this->prefix ? $this->prefix . '.' : '') . $buffer, $buffer);
             $buffer = NULL;
         } elseif ($token->name === '_' && empty($token->value)) {
             $buffer = '';
         } else {
             $args = new MacroTokens($token->value);
             $writer = new PhpWriter($args, $token->modifiers);
             $message = $writer->write('%node.word');
             if (in_array(substr(trim($message), 0, 1), array('"', '\''), TRUE)) {
                 $message = substr(trim($message), 1, -1);
             }
             $catalogue->set(($this->prefix ? $this->prefix . '.' : '') . $message, $message);
         }
     }
 }
Beispiel #9
0
 /**
  * {ifCurrent destination [,] [params]}
  */
 public function macroIfCurrent(MacroNode $node, PhpWriter $writer)
 {
     if ($node->modifiers) {
         throw new CompileException('Modifiers are not allowed here.');
     }
     return $writer->write($node->args ? 'if ($_presenter->isLinkCurrent(%node.word, %node.array?)) {' : 'if ($_presenter->getLastCreatedRequestFlag("current")) {');
 }
Beispiel #10
0
 /**
  * @param MacroNode $node
  * @param PhpWriter $writer
  *
  * @return string
  *
  * @throws Latte\CompileException
  */
 public function macroPhone(MacroNode $node, PhpWriter $writer)
 {
     $arguments = self::prepareMacroArguments($node->args);
     if ($arguments['phone'] === NULL) {
         throw new Latte\CompileException("Please provide phone number.");
     }
     return $writer->write('echo %escape($template->getPhoneNumberService()->format("' . $arguments['phone'] . '", "' . $arguments['country'] . '", ' . $arguments['format'] . '))');
 }
 public function macroSet(MacroNode $node, PhpWriter $writer)
 {
     $parts = Strings::replace($node->args, '~(\\s*(=>|=)\\s*|\\s+)~', '~~~', 1);
     $parts = Strings::split($parts, '/~~~/');
     $variable = $parts[0];
     $rest = $parts[1];
     return $writer->write($variable . ' = %modify(' . $rest . ')');
 }
Beispiel #12
0
 /**
  * generates random number for front assets versing
  */
 public function macroVersion(MacroNode $node, PhpWriter $writer)
 {
     $length = 10;
     $word = $node->tokenizer->fetchWord();
     if (is_numeric($word)) {
         $length = (int) $word;
     }
     return $writer->write(' ?>?' . Random::generate($length) . '<?php ');
 }
Beispiel #13
0
 /**
  * @param Latte\MacroNode $node
  * @param Latte\PhpWriter $writer
  * @return string
  */
 public function attrImg(Latte\MacroNode $node, Latte\PhpWriter $writer)
 {
     if ($node->htmlNode->name === 'a') {
         $attr = 'href=';
     } else {
         $attr = 'src=';
     }
     return $writer->write('echo \' ' . $attr . '"\' . $imageStorage->get(%node.args)->getLink() . \'"\'');
 }
Beispiel #14
0
 public function macroRowCol(MacroNode $node, PhpWriter $writer)
 {
     $name = $node->tokenizer->fetchWord();
     if ($name === false) {
         throw new CompileException("Missing Column name in {{$node->name}}.");
     }
     $node->tokenizer->reset();
     return $writer->write("\n            \$rowClassName = 'row';\n            \$args = %node.array;\n            if (array_key_exists('row', \$args)) {\n                \$rowClassName = \$args['row'];\n            }\n            \n            echo '<div class=\"' . \$rowClassName . '\">';\n            echo '<div class=\"' .%node.word. '\">';\n        ");
 }
Beispiel #15
0
 /**
  * {input ...}
  */
 public function macroInput(MacroNode $node, PhpWriter $writer)
 {
     $class = get_class($this);
     $words = $node->tokenizer->fetchWords();
     if (!$words) {
         throw new CompileException("Missing name in {{$node->name}}.");
     }
     $name = array_shift($words);
     return $writer->write(($name[0] === '$' ? '$_input = is_object(%0.word) ? %0.word : $_form[%0.word];' : '$_input = $_form[%0.word];') . 'echo ' . $class . '::input($_input->%1.raw->addAttributes(%node.array), $_input)', $name, $words ? 'getControlPart(' . implode(', ', array_map(array($writer, 'formatWord'), $words)) . ')' : 'getControl()');
 }
Beispiel #16
0
 /**
  * Render button caption
  * @author Pavel Železný <*****@*****.**>
  * @param \Latte\MacroNode $node
  * @param \Latte\PhpWriter $writer
  * @return string
  */
 public function macroCaption(MacroNode $node, PhpWriter $writer)
 {
     if ($node->args !== '') {
         $code = '$_input = (is_object(%node.word) ? %node.word : $_form[%node.word]);';
         $code .= 'echo $_input->getControl()->caption;';
         $code .= 'unset($_input);';
     } else {
         $code = 'echo isset($_buttonCaption) ? $_buttonCaption : NULL;';
     }
     return $writer->write($code);
 }
Beispiel #17
0
    /**
     * overwritten default link macro, added fallback to link generator when neither control or presenter is available
     *
     * @param MacroNode
     * @param PhpWriter
     * @return string
     */
    public function macroLink(MacroNode $node, PhpWriter $writer)
    {
        return $writer->write('
		$_currentLinkBuilder = NULL;
		if(isset(' . ($node->name === 'plink' ? '$_presenter' : '$_control') . ')) {
			$_currentLinkBuilder = ' . ($node->name === 'plink' ? '$_presenter' : '$_control') . ';
		} else {
			$_currentLinkBuilder = $template->global->linkBuilder;
		}
		echo %escape(%modify($_currentLinkBuilder->link(%node.word, %node.array?)));
		');
    }
Beispiel #18
0
 public function ettext(\Latte\MacroNode $node, \Latte\PhpWriter $writer)
 {
     $this->setFunction($node->name);
     $args = h4kuna\Template\LattePhpTokenizer::toArray($node);
     $argsGettext = $this->getGettextArgs($args);
     $out = $this->function . '(' . implode(', ', $argsGettext) . ')';
     $key = (int) (substr($this->function, 0, 1) == 'd');
     $diff = $this->foundReplace($args[$key]);
     if ($diff) {
         $out = 'sprintf(' . $out . ', ' . implode(', ', array_slice($args, $diff)) . ')';
     }
     $this->function = NULL;
     return $writer->write('echo %modify(' . $out . ')');
 }
Beispiel #19
0
 public function ettext(MacroNode $node, PhpWriter $writer)
 {
     $this->setFunction($node->name);
     $args = self::stringToArgs($node->args);
     $argsGettext = $this->getGettextArgs($args);
     $out = $this->function . '(' . implode(', ', $argsGettext) . ')';
     $key = (int) (substr($this->function, 0, 1) == 'd');
     $diff = $this->foundReplace($args[$key]);
     if ($diff) {
         $out = 'sprintf(' . $out . ', ' . implode(', ', array_slice($args, $diff)) . ')';
     }
     $this->function = NULL;
     return $writer->write('echo %modify(' . $out . ')');
 }
Beispiel #20
0
 /**
  * @param Nette\Latte\MacroNode $node
  * @param Nette\Latte\PhpWriter $writer
  * @return string
  * @throws Nette\Latte\CompileException
  */
 public function macroAttrImg(MacroNode $node, PhpWriter $writer)
 {
     $this->isUsed = TRUE;
     $arguments = Helpers::prepareMacroArguments($node->args);
     if ($arguments["name"] === NULL) {
         throw new Nette\Latte\CompileException("Please provide filename.");
     }
     $namespace = $arguments["namespace"];
     unset($arguments["namespace"]);
     $arguments = array_map(function ($value) use($writer) {
         return $value ? $writer->formatWord($value) : 'NULL';
     }, $arguments);
     $command = '$_imagePipe';
     $command .= $namespace !== NULL ? '->setNamespace(' . $writer->formatWord(trim($namespace)) . ')' : '';
     $command .= '->request(' . implode(", ", $arguments) . ')';
     return $writer->write('?> src="<?php echo %escape(' . $writer->formatWord($command) . ')?>" <?php');
 }
Beispiel #21
0
 /**
  * @param MacroNode $node
  * @param PhpWriter $writer
  */
 public function macroLink(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write('echo %escape(%modify($template->_presenter->link(%node.word, %node.array?)))');
 }
 /**
  * @param \Latte\MacroNode $node
  * @param \Latte\PhpWriter $writer
  * @return string
  */
 public function macroSrc(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write('echo " src=\\"". ' . get_class($this) . '::getUrl($template->getImagesManager(), %node.args). "\\"";');
 }
 /**
  * {/block}
  * {/snippet}
  * {/snippetArea}
  * {/define}
  */
 public function macroBlockEnd(MacroNode $node, PhpWriter $writer)
 {
     if (isset($node->data->name)) {
         // block, snippet, define
         if ($node->name === 'snippet' && $node->prefix === MacroNode::PREFIX_NONE && preg_match('#^.*? n:\\w+>\\n?#s', $node->content, $m1) && preg_match('#[ \\t]*<[^<]+\\z#s', $node->content, $m2)) {
             $node->openingCode = $m1[0] . $node->openingCode;
             $node->content = substr($node->content, strlen($m1[0]), -strlen($m2[0]));
             $node->closingCode .= $m2[0];
         }
         if (empty($node->data->leave)) {
             if ($node->name === 'snippetArea' && empty($node->data->dynamic)) {
                 $node->content = "<?php \$_control->snippetMode = isset(\$_snippetMode) && \$_snippetMode; ?>{$node->content}<?php \$_control->snippetMode = FALSE; ?>";
             }
             if (!empty($node->data->dynamic)) {
                 $node->content .= '<?php if (isset($_l->dynSnippets)) return $_l->dynSnippets; ?>';
             }
             if ($node->name === 'snippetArea') {
                 $node->content .= '<?php return FALSE; ?>';
             }
             $this->namedBlocks[$node->data->name] = $tmp = preg_replace('#^\\n+|(?<=\\n)[ \\t]+\\z#', '', $node->content);
             $node->content = substr_replace($node->content, $node->openingCode . "\n", strspn($node->content, "\n"), strlen($tmp));
             $node->openingCode = '<?php ?>';
         }
     } elseif ($node->modifiers) {
         // anonymous block with modifier
         return $writer->write('echo %modify(ob_get_clean())');
     }
 }
Beispiel #24
0
 /**
  * {inputError ...}
  */
 public function macroInputError(MacroNode $node, PhpWriter $writer)
 {
     $name = $node->tokenizer->fetchWord();
     if (!$name) {
         return $writer->write('echo %escape($_input->getError())');
     } elseif ($name[0] === '$') {
         return $writer->write('$_input = is_object(%0.word) ? %0.word : $_form[%0.word]; echo %escape($_input->getError())', $name);
     } else {
         return $writer->write('echo %escape($_form[%0.word]->getError())', $name);
     }
 }
 public function macroHref(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write(' ?> href="<?php echo %escape(' . ($node->name === 'plink' ? '$_presenter' : '$_control') . '->link(%node.word, %node.array?)) ?>"<?php ');
 }
Beispiel #26
0
 public function macroFilterEnd(MacroNode $macroNode, PhpWriter $phpWriter)
 {
     return $phpWriter->write('if (isset($_tmpFilter)) { $filter = $_tmpFilter; unset($_tmpFilter); }');
 }
Beispiel #27
0
 /**
  * {status ...}
  */
 public function macroStatus(MacroNode $node, PhpWriter $writer)
 {
     if ($node->modifiers) {
         trigger_error("Modifiers are not allowed in {{$node->name}}", E_USER_WARNING);
     }
     return $writer->write((substr($node->args, -1) === '?' ? 'if (!headers_sent()) ' : '') . 'header((isset($_SERVER["SERVER_PROTOCOL"]) ? $_SERVER["SERVER_PROTOCOL"] : "HTTP/1.1") . " " . %0.var, TRUE, %0.var)', (int) $node->args);
 }
Beispiel #28
0
 /**
  * {ifCurrent destination [,] [params]}
  */
 public function macroIfCurrent(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write($node->args ? 'if ($_presenter->isLinkCurrent(%node.word, %node.array?)) {' : 'if ($_presenter->getLastCreatedRequestFlag("current")) {');
 }
Beispiel #29
0
 public function macroContainer(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write('$_form->render(\'container\', $_form[%node.word])');
 }
Beispiel #30
0
 /**
  * @param MacroNode $node
  * @param PhpWriter $writer
  */
 public function macroMlink(MacroNode $node, PhpWriter $writer)
 {
     return $writer->write('echo %escape(%modify($template->_presenter->link("Micro:Website:Page:", %node.array?)))');
 }