summaryrefslogtreecommitdiff
path: root/inc/contrib/Twig/NodeVisitor/SafeAnalysis.php
diff options
context:
space:
mode:
authorMichael Save <savetheinternet@tinyboard.org>2012-04-09 20:52:26 +1000
committerMichael Save <savetheinternet@tinyboard.org>2012-04-09 20:52:26 +1000
commit874b8cbf002e9d8bf0ff39671e1501165016320a (patch)
tree1428acec23fef6c607e10fd355d88af31c2029ed /inc/contrib/Twig/NodeVisitor/SafeAnalysis.php
parent69c9a9dd452299e0e8f7335966a1d0b4036df583 (diff)
inc/contrib -> inc/lib
Diffstat (limited to 'inc/contrib/Twig/NodeVisitor/SafeAnalysis.php')
-rw-r--r--inc/contrib/Twig/NodeVisitor/SafeAnalysis.php107
1 files changed, 0 insertions, 107 deletions
diff --git a/inc/contrib/Twig/NodeVisitor/SafeAnalysis.php b/inc/contrib/Twig/NodeVisitor/SafeAnalysis.php
deleted file mode 100644
index 5961ba29..00000000
--- a/inc/contrib/Twig/NodeVisitor/SafeAnalysis.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-class Twig_NodeVisitor_SafeAnalysis implements Twig_NodeVisitorInterface
-{
- protected $data = array();
-
- public function getSafe(Twig_NodeInterface $node)
- {
- $hash = spl_object_hash($node);
- if (isset($this->data[$hash])) {
- foreach($this->data[$hash] as $bucket) {
- if ($bucket['key'] === $node) {
- return $bucket['value'];
- }
- }
- }
- return null;
- }
-
- protected function setSafe(Twig_NodeInterface $node, array $safe)
- {
- $hash = spl_object_hash($node);
- if (isset($this->data[$hash])) {
- foreach($this->data[$hash] as &$bucket) {
- if ($bucket['key'] === $node) {
- $bucket['value'] = $safe;
- return;
- }
- }
- }
- $this->data[$hash][] = array(
- 'key' => $node,
- 'value' => $safe,
- );
- }
-
- public function enterNode(Twig_NodeInterface $node, Twig_Environment $env)
- {
- return $node;
- }
-
- public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env)
- {
- if ($node instanceof Twig_Node_Expression_Constant) {
- // constants are marked safe for all
- $this->setSafe($node, array('all'));
- } elseif ($node instanceof Twig_Node_Expression_BlockReference) {
- // blocks are safe by definition
- $this->setSafe($node, array('all'));
- } elseif ($node instanceof Twig_Node_Expression_Parent) {
- // parent block is safe by definition
- $this->setSafe($node, array('all'));
- } elseif ($node instanceof Twig_Node_Expression_Conditional) {
- // intersect safeness of both operands
- $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3')));
- $this->setSafe($node, $safe);
- } elseif ($node instanceof Twig_Node_Expression_Filter) {
- // filter expression is safe when the filter is safe
- $name = $node->getNode('filter')->getAttribute('value');
- $args = $node->getNode('arguments');
- if (false !== $filter = $env->getFilter($name)) {
- $this->setSafe($node, $filter->getSafe($args));
- } else {
- $this->setSafe($node, array());
- }
- } elseif ($node instanceof Twig_Node_Expression_Function) {
- // function expression is safe when the function is safe
- $name = $node->getAttribute('name');
- $args = $node->getNode('arguments');
- $function = $env->getFunction($name);
- if (false !== $function) {
- $this->setSafe($node, $function->getSafe($args));
- } else {
- $this->setSafe($node, array());
- }
- } else {
- $this->setSafe($node, array());
- }
-
- return $node;
- }
-
- protected function intersectSafe(array $a = null, array $b = null)
- {
- if (null === $a || null === $b) {
- return array();
- }
-
- if (in_array('all', $a)) {
- return $b;
- }
-
- if (in_array('all', $b)) {
- return $a;
- }
-
- return array_intersect($a, $b);
- }
-
- /**
- * {@inheritdoc}
- */
- public function getPriority()
- {
- return 0;
- }
-}