Changeset 1101:7273894e61b8 for inc/libs/twig/Node
- Timestamp:
- 02/15/13 08:35:19 (13 years ago)
- Branch:
- twig
- Children:
- 1106:a4487f3ca4b4, 1147:2e5cb79e4782
- Location:
- inc/libs/twig/Node
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
inc/libs/twig/Node/Expression/Filter.php
r991 r1101 10 10 * file that was distributed with this source code. 11 11 */ 12 class Twig_Node_Expression_Filter extends Twig_Node_Expression 12 class Twig_Node_Expression_Filter extends Twig_Node_Expression_Call 13 13 { 14 14 public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) … … 20 20 { 21 21 $name = $this->getNode('filter')->getAttribute('value'); 22 $filter = $compiler->getEnvironment()->getFilter($name); 22 23 23 if (false === $filter = $compiler->getEnvironment()->getFilter($name)) { 24 $message = sprintf('The filter "%s" does not exist', $name); 25 if ($alternatives = $compiler->getEnvironment()->computeAlternatives($name, array_keys($compiler->getEnvironment()->getFilters()))) { 26 $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); 27 } 28 29 throw new Twig_Error_Syntax($message, $this->getLine(), $compiler->getFilename()); 24 $this->setAttribute('name', $name); 25 $this->setAttribute('type', 'filter'); 26 $this->setAttribute('thing', $filter); 27 $this->setAttribute('needs_environment', $filter->needsEnvironment()); 28 $this->setAttribute('needs_context', $filter->needsContext()); 29 $this->setAttribute('arguments', $filter->getArguments()); 30 if ($filter instanceof Twig_FilterCallableInterface || $filter instanceof Twig_SimpleFilter) { 31 $this->setAttribute('callable', $filter->getCallable()); 30 32 } 31 33 32 $this->compileFilter($compiler, $filter); 33 } 34 35 protected function compileFilter(Twig_Compiler $compiler, Twig_FilterInterface $filter) 36 { 37 $compiler 38 ->raw($filter->compile().'(') 39 ->raw($filter->needsEnvironment() ? '$this->env, ' : '') 40 ->raw($filter->needsContext() ? '$context, ' : '') 41 ; 42 43 foreach ($filter->getArguments() as $argument) { 44 $compiler 45 ->string($argument) 46 ->raw(', ') 47 ; 48 } 49 50 $compiler->subcompile($this->getNode('node')); 51 52 foreach ($this->getNode('arguments') as $node) { 53 $compiler 54 ->raw(', ') 55 ->subcompile($node) 56 ; 57 } 58 59 $compiler->raw(')'); 34 $this->compileCallable($compiler); 60 35 } 61 36 } -
inc/libs/twig/Node/Expression/Filter/Default.php
r991 r1101 24 24 public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) 25 25 { 26 $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant(' _default', $node->getLine()), $arguments, $node->getLine());26 $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('default', $node->getLine()), $arguments, $node->getLine()); 27 27 28 28 if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) { -
inc/libs/twig/Node/Expression/Function.php
r991 r1101 9 9 * file that was distributed with this source code. 10 10 */ 11 class Twig_Node_Expression_Function extends Twig_Node_Expression 11 class Twig_Node_Expression_Function extends Twig_Node_Expression_Call 12 12 { 13 13 public function __construct($name, Twig_NodeInterface $arguments, $lineno) … … 19 19 { 20 20 $name = $this->getAttribute('name'); 21 $function = $compiler->getEnvironment()->getFunction($name); 21 22 22 if (false === $function = $compiler->getEnvironment()->getFunction($name)) { 23 $message = sprintf('The function "%s" does not exist', $name); 24 if ($alternatives = $compiler->getEnvironment()->computeAlternatives($name, array_keys($compiler->getEnvironment()->getFunctions()))) { 25 $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); 26 } 27 28 throw new Twig_Error_Syntax($message, $this->getLine(), $compiler->getFilename()); 23 $this->setAttribute('name', $name); 24 $this->setAttribute('type', 'function'); 25 $this->setAttribute('thing', $function); 26 $this->setAttribute('needs_environment', $function->needsEnvironment()); 27 $this->setAttribute('needs_context', $function->needsContext()); 28 $this->setAttribute('arguments', $function->getArguments()); 29 if ($function instanceof Twig_FunctionCallableInterface || $function instanceof Twig_SimpleFunction) { 30 $this->setAttribute('callable', $function->getCallable()); 29 31 } 30 32 31 $compiler->raw($function->compile().'('); 32 33 $first = true; 34 35 if ($function->needsEnvironment()) { 36 $compiler->raw('$this->env'); 37 $first = false; 38 } 39 40 if ($function->needsContext()) { 41 if (!$first) { 42 $compiler->raw(', '); 43 } 44 $compiler->raw('$context'); 45 $first = false; 46 } 47 48 foreach ($function->getArguments() as $argument) { 49 if (!$first) { 50 $compiler->raw(', '); 51 } 52 $compiler->string($argument); 53 $first = false; 54 } 55 56 foreach ($this->getNode('arguments') as $node) { 57 if (!$first) { 58 $compiler->raw(', '); 59 } 60 $compiler->subcompile($node); 61 $first = false; 62 } 63 64 $compiler->raw(')'); 33 $this->compileCallable($compiler); 65 34 } 66 35 } -
inc/libs/twig/Node/Expression/Test.php
r991 r1101 9 9 * file that was distributed with this source code. 10 10 */ 11 class Twig_Node_Expression_Test extends Twig_Node_Expression 11 class Twig_Node_Expression_Test extends Twig_Node_Expression_Call 12 12 { 13 13 public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno) … … 19 19 { 20 20 $name = $this->getAttribute('name'); 21 $testMap = $compiler->getEnvironment()->getTests(); 22 if (!isset($testMap[$name])) { 23 $message = sprintf('The test "%s" does not exist', $name); 24 if ($alternatives = $compiler->getEnvironment()->computeAlternatives($name, array_keys($compiler->getEnvironment()->getTests()))) { 25 $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); 26 } 21 $test = $compiler->getEnvironment()->getTest($name); 27 22 28 throw new Twig_Error_Syntax($message, $this->getLine(), $compiler->getFilename()); 23 $this->setAttribute('name', $name); 24 $this->setAttribute('type', 'test'); 25 $this->setAttribute('thing', $test); 26 if ($test instanceof Twig_TestCallableInterface || $test instanceof Twig_SimpleTest) { 27 $this->setAttribute('callable', $test->getCallable()); 29 28 } 30 29 31 $name = $this->getAttribute('name'); 32 $node = $this->getNode('node'); 33 34 $compiler 35 ->raw($testMap[$name]->compile().'(') 36 ->subcompile($node) 37 ; 38 39 if (null !== $this->getNode('arguments')) { 40 $compiler->raw(', '); 41 42 $max = count($this->getNode('arguments')) - 1; 43 foreach ($this->getNode('arguments') as $i => $arg) { 44 $compiler->subcompile($arg); 45 46 if ($i != $max) { 47 $compiler->raw(', '); 48 } 49 } 50 } 51 52 $compiler->raw(')'); 30 $this->compileCallable($compiler); 53 31 } 54 32 } -
inc/libs/twig/Node/Macro.php
r991 r1101 30 30 public function compile(Twig_Compiler $compiler) 31 31 { 32 $arguments = array(); 33 foreach ($this->getNode('arguments') as $argument) { 34 $arguments[] = '$_'.$argument->getAttribute('name').' = null'; 32 $compiler 33 ->addDebugInfo($this) 34 ->write(sprintf("public function get%s(", $this->getAttribute('name'))) 35 ; 36 37 $count = count($this->getNode('arguments')); 38 $pos = 0; 39 foreach ($this->getNode('arguments') as $name => $default) { 40 $compiler 41 ->raw('$_'.$name.' = ') 42 ->subcompile($default) 43 ; 44 45 if (++$pos < $count) { 46 $compiler->raw(', '); 47 } 35 48 } 36 49 37 50 $compiler 38 -> addDebugInfo($this)39 ->write( sprintf("public function get%s(%s)\n", $this->getAttribute('name'), implode(', ', $arguments)),"{\n")51 ->raw(")\n") 52 ->write("{\n") 40 53 ->indent() 41 54 ; … … 49 62 ; 50 63 51 foreach ($this->getNode('arguments') as $ argument) {64 foreach ($this->getNode('arguments') as $name => $default) { 52 65 $compiler 53 66 ->write('') 54 ->string($ argument->getAttribute('name'))55 ->raw(' => $_'.$ argument->getAttribute('name'))67 ->string($name) 68 ->raw(' => $_'.$name) 56 69 ->raw(",\n") 57 70 ;
Note: See TracChangeset
for help on using the changeset viewer.