95 lines
2.4 KiB
PHP
95 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\View\Compilers\Concerns;
|
|
|
|
trait CompilesEchos
|
|
{
|
|
/**
|
|
* Compile Blade echos into valid PHP.
|
|
*
|
|
* @param string $value
|
|
* @return string
|
|
*/
|
|
protected function compileEchos($value)
|
|
{
|
|
foreach ($this->getEchoMethods() as $method) {
|
|
$value = $this->$method($value);
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* Get the echo methods in the proper order for compilation.
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function getEchoMethods()
|
|
{
|
|
return [
|
|
'compileRawEchos',
|
|
'compileEscapedEchos',
|
|
'compileRegularEchos',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Compile the "raw" echo statements.
|
|
*
|
|
* @param string $value
|
|
* @return string
|
|
*/
|
|
protected function compileRawEchos($value)
|
|
{
|
|
$pattern = sprintf('/(@)?%s\s*(.+?)\s*%s(\r?\n)?/s', $this->rawTags[0], $this->rawTags[1]);
|
|
|
|
$callback = function ($matches) {
|
|
$whitespace = empty($matches[3]) ? '' : $matches[3].$matches[3];
|
|
|
|
return $matches[1] ? substr($matches[0], 1) : "<?php echo {$matches[2]}; ?>{$whitespace}";
|
|
};
|
|
|
|
return preg_replace_callback($pattern, $callback, $value);
|
|
}
|
|
|
|
/**
|
|
* Compile the "regular" echo statements.
|
|
*
|
|
* @param string $value
|
|
* @return string
|
|
*/
|
|
protected function compileRegularEchos($value)
|
|
{
|
|
$pattern = sprintf('/(@)?%s\s*(.+?)\s*%s(\r?\n)?/s', $this->contentTags[0], $this->contentTags[1]);
|
|
|
|
$callback = function ($matches) {
|
|
$whitespace = empty($matches[3]) ? '' : $matches[3].$matches[3];
|
|
|
|
$wrapped = sprintf($this->echoFormat, $matches[2]);
|
|
|
|
return $matches[1] ? substr($matches[0], 1) : "<?php echo {$wrapped}; ?>{$whitespace}";
|
|
};
|
|
|
|
return preg_replace_callback($pattern, $callback, $value);
|
|
}
|
|
|
|
/**
|
|
* Compile the escaped echo statements.
|
|
*
|
|
* @param string $value
|
|
* @return string
|
|
*/
|
|
protected function compileEscapedEchos($value)
|
|
{
|
|
$pattern = sprintf('/(@)?%s\s*(.+?)\s*%s(\r?\n)?/s', $this->escapedTags[0], $this->escapedTags[1]);
|
|
|
|
$callback = function ($matches) {
|
|
$whitespace = empty($matches[3]) ? '' : $matches[3].$matches[3];
|
|
|
|
return $matches[1] ? $matches[0] : "<?php echo e({$matches[2]}); ?>{$whitespace}";
|
|
};
|
|
|
|
return preg_replace_callback($pattern, $callback, $value);
|
|
}
|
|
}
|