summaryrefslogtreecommitdiff
path: root/inc/lib/Twig/Compiler.php
diff options
context:
space:
mode:
authorBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
committerBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
commitf79395851b044689567e0e6c9504acbcaa742782 (patch)
treeee539aee9ffa90e8accd6f130b30a8ebed7a232e /inc/lib/Twig/Compiler.php
parent28f32baf0125ca5085266e73dc5071e5814d8e3b (diff)
Twig update to latest Twig 1.x legacy as per vichan
Diffstat (limited to 'inc/lib/Twig/Compiler.php')
-rw-r--r--inc/lib/Twig/Compiler.php90
1 files changed, 54 insertions, 36 deletions
diff --git a/inc/lib/Twig/Compiler.php b/inc/lib/Twig/Compiler.php
index b80210b1..803eb896 100644
--- a/inc/lib/Twig/Compiler.php
+++ b/inc/lib/Twig/Compiler.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,31 +21,31 @@ class Twig_Compiler implements Twig_CompilerInterface
protected $source;
protected $indentation;
protected $env;
- protected $debugInfo;
+ protected $debugInfo = array();
protected $sourceOffset;
protected $sourceLine;
protected $filename;
+ private $varNameSalt = 0;
- /**
- * Constructor.
- *
- * @param Twig_Environment $env The twig environment instance
- */
public function __construct(Twig_Environment $env)
{
$this->env = $env;
- $this->debugInfo = array();
}
+ /**
+ * @deprecated since 1.25 (to be removed in 2.0)
+ */
public function getFilename()
{
+ @trigger_error(sprintf('The %s() method is deprecated since version 1.25 and will be removed in 2.0.', __FUNCTION__), E_USER_DEPRECATED);
+
return $this->filename;
}
/**
* Returns the environment instance related to this compiler.
*
- * @return Twig_Environment The environment instance
+ * @return Twig_Environment
*/
public function getEnvironment()
{
@@ -66,21 +66,24 @@ class Twig_Compiler implements Twig_CompilerInterface
* Compiles a node.
*
* @param Twig_NodeInterface $node The node to compile
- * @param integer $indentation The current indentation
+ * @param int $indentation The current indentation
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function compile(Twig_NodeInterface $node, $indentation = 0)
{
$this->lastLine = null;
$this->source = '';
+ $this->debugInfo = array();
$this->sourceOffset = 0;
// source code starts at 1 (as we then increment it when we encounter new lines)
$this->sourceLine = 1;
$this->indentation = $indentation;
+ $this->varNameSalt = 0;
if ($node instanceof Twig_Node_Module) {
- $this->filename = $node->getAttribute('filename');
+ // to be removed in 2.0
+ $this->filename = $node->getTemplateName();
}
$node->compile($this);
@@ -91,7 +94,7 @@ class Twig_Compiler implements Twig_CompilerInterface
public function subcompile(Twig_NodeInterface $node, $raw = true)
{
if (false === $raw) {
- $this->addIndentation();
+ $this->source .= str_repeat(' ', $this->indentation * 4);
}
$node->compile($this);
@@ -104,7 +107,7 @@ class Twig_Compiler implements Twig_CompilerInterface
*
* @param string $string The string
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function raw($string)
{
@@ -116,14 +119,13 @@ class Twig_Compiler implements Twig_CompilerInterface
/**
* Writes a string to the compiled code by adding indentation.
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function write()
{
$strings = func_get_args();
foreach ($strings as $string) {
- $this->addIndentation();
- $this->source .= $string;
+ $this->source .= str_repeat(' ', $this->indentation * 4).$string;
}
return $this;
@@ -132,10 +134,14 @@ class Twig_Compiler implements Twig_CompilerInterface
/**
* Appends an indentation to the current PHP code after compilation.
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
+ *
+ * @deprecated since 1.27 (to be removed in 2.0).
*/
public function addIndentation()
{
+ @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use write(\'\') instead.', E_USER_DEPRECATED);
+
$this->source .= str_repeat(' ', $this->indentation * 4);
return $this;
@@ -146,7 +152,7 @@ class Twig_Compiler implements Twig_CompilerInterface
*
* @param string $value The string
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function string($value)
{
@@ -160,12 +166,12 @@ class Twig_Compiler implements Twig_CompilerInterface
*
* @param mixed $value The value to convert
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function repr($value)
{
if (is_int($value) || is_float($value)) {
- if (false !== $locale = setlocale(LC_NUMERIC, 0)) {
+ if (false !== $locale = setlocale(LC_NUMERIC, '0')) {
setlocale(LC_NUMERIC, 'C');
}
@@ -181,14 +187,14 @@ class Twig_Compiler implements Twig_CompilerInterface
} elseif (is_array($value)) {
$this->raw('array(');
$first = true;
- foreach ($value as $key => $value) {
+ foreach ($value as $key => $v) {
if (!$first) {
$this->raw(', ');
}
$first = false;
$this->repr($key);
$this->raw(' => ');
- $this->repr($value);
+ $this->repr($v);
}
$this->raw(')');
} else {
@@ -201,28 +207,28 @@ class Twig_Compiler implements Twig_CompilerInterface
/**
* Adds debugging information.
*
- * @param Twig_NodeInterface $node The related twig node
- *
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function addDebugInfo(Twig_NodeInterface $node)
{
- if ($node->getLine() != $this->lastLine) {
- $this->write("// line {$node->getLine()}\n");
+ if ($node->getTemplateLine() != $this->lastLine) {
+ $this->write(sprintf("// line %d\n", $node->getTemplateLine()));
// when mbstring.func_overload is set to 2
// mb_substr_count() replaces substr_count()
// but they have different signatures!
if (((int) ini_get('mbstring.func_overload')) & 2) {
+ @trigger_error('Support for having "mbstring.func_overload" different from 0 is deprecated version 1.29 and will be removed in 2.0.', E_USER_DEPRECATED);
+
// this is much slower than the "right" version
$this->sourceLine += mb_substr_count(mb_substr($this->source, $this->sourceOffset), "\n");
} else {
$this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset);
}
$this->sourceOffset = strlen($this->source);
- $this->debugInfo[$this->sourceLine] = $node->getLine();
+ $this->debugInfo[$this->sourceLine] = $node->getTemplateLine();
- $this->lastLine = $node->getLine();
+ $this->lastLine = $node->getTemplateLine();
}
return $this;
@@ -230,15 +236,17 @@ class Twig_Compiler implements Twig_CompilerInterface
public function getDebugInfo()
{
+ ksort($this->debugInfo);
+
return $this->debugInfo;
}
/**
* Indents the generated code.
*
- * @param integer $step The number of indentation to add
+ * @param int $step The number of indentation to add
*
- * @return Twig_Compiler The current compiler instance
+ * @return $this
*/
public function indent($step = 1)
{
@@ -250,19 +258,29 @@ class Twig_Compiler implements Twig_CompilerInterface
/**
* Outdents the generated code.
*
- * @param integer $step The number of indentation to remove
+ * @param int $step The number of indentation to remove
+ *
+ * @return $this
*
- * @return Twig_Compiler The current compiler instance
+ * @throws LogicException When trying to outdent too much so the indentation would become negative
*/
public function outdent($step = 1)
{
// can't outdent by more steps than the current indentation level
if ($this->indentation < $step) {
- throw new LogicException('Unable to call outdent() as the indentation would become negative');
+ throw new LogicException('Unable to call outdent() as the indentation would become negative.');
}
$this->indentation -= $step;
return $this;
}
+
+ public function getVarName()
+ {
+ return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->varNameSalt++));
+ }
}
+
+class_alias('Twig_Compiler', 'Twig\Compiler', false);
+class_exists('Twig_Node');