forked from twigphp/Twig-extensions
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
26 changed files
with
939 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
abstract class Twig_Extensions_Grammar implements Twig_Extensions_GrammarInterface | ||
{ | ||
protected $name; | ||
protected $parser; | ||
|
||
public function __construct($name) | ||
{ | ||
$this->name = $name; | ||
} | ||
|
||
public function setParser(Twig_ParserInterface $parser) | ||
{ | ||
$this->parser = $parser; | ||
} | ||
|
||
public function getName() | ||
{ | ||
return $this->name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Arguments extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:arguments>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
return $this->parser->getExpressionParser()->parseArguments(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Array extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:array>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
return $this->parser->getExpressionParser()->parseArrayExpression(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Body extends Twig_Extensions_Grammar | ||
{ | ||
protected $end; | ||
|
||
public function __construct($name, $end = null) | ||
{ | ||
parent::__construct($name); | ||
|
||
$this->end = null === $end ? 'end'.$name : $end; | ||
} | ||
|
||
public function __toString() | ||
{ | ||
return sprintf('<%s:body>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
$stream = $this->parser->getStream(); | ||
$stream->expect(Twig_Token::BLOCK_END_TYPE); | ||
|
||
return $this->parser->subparse(array($this, 'decideBlockEnd'), true); | ||
} | ||
|
||
public function decideBlockEnd($token) | ||
{ | ||
return $token->test($this->end); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Boolean extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:boolean>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, array('true', 'false')); | ||
|
||
return new Twig_Node_Expression_Constant('true' === $token->getValue() ? true : false, $token->getLine()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Constant extends Twig_Extensions_Grammar | ||
{ | ||
protected $type; | ||
|
||
public function __construct($name, $type = null) | ||
{ | ||
$this->name = $name; | ||
$this->type = null === $type ? Twig_Token::NAME_TYPE : $type; | ||
} | ||
|
||
public function __toString() | ||
{ | ||
return $this->name; | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
$this->parser->getStream()->expect($this->type, $this->name); | ||
|
||
return $this->name; | ||
} | ||
|
||
public function getType() | ||
{ | ||
return $this->type; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Expression extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
return $this->parser->getExpressionParser()->parseExpression(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Hash extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:hash>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
return $this->parser->getExpressionParser()->parseHashExpression(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Number extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:number>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
$this->parser->getStream()->expect(Twig_Token::NUMBER_TYPE); | ||
|
||
return new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Optional extends Twig_Extensions_Grammar | ||
{ | ||
protected $grammar; | ||
|
||
public function __construct() | ||
{ | ||
$this->grammar = array(); | ||
foreach (func_get_args() as $grammar) { | ||
$this->addGrammar($grammar); | ||
} | ||
} | ||
|
||
public function __toString() | ||
{ | ||
$repr = array(); | ||
foreach ($this->grammar as $grammar) { | ||
$repr[] = (string) $grammar; | ||
} | ||
|
||
return sprintf('[%s]', implode(' ', $repr)); | ||
} | ||
|
||
public function addGrammar(Twig_Extensions_GrammarInterface $grammar) | ||
{ | ||
$this->grammar[] = $grammar; | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
// test if we have the optional element before consuming it | ||
if ($this->grammar[0] instanceof Twig_Extensions_Grammar_Constant) { | ||
if (!$this->parser->getStream()->test($this->grammar[0]->getType(), $this->grammar[0]->getName())) { | ||
return array(); | ||
} | ||
} elseif ($this->grammar[0] instanceof Twig_Extensions_Grammar_Name) { | ||
if (!$this->parser->getStream()->test(Twig_Token::NAME_TYPE)) { | ||
return array(); | ||
} | ||
} elseif ($this->parser->getStream()->test(Twig_Token::BLOCK_END_TYPE)) { | ||
// if this is not a Constant or a Name, it must be the last element of the tag | ||
|
||
return array(); | ||
} | ||
|
||
$elements = array(); | ||
foreach ($this->grammar as $grammar) { | ||
$grammar->setParser($this->parser); | ||
|
||
$element = $grammar->parse($token); | ||
if (is_array($element)) { | ||
$elements = array_merge($elements, $element); | ||
} else { | ||
$elements[$grammar->getName()] = $element; | ||
} | ||
} | ||
|
||
return $elements; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of Twig. | ||
* | ||
* (c) 2010 Fabien Potencier | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
class Twig_Extensions_Grammar_Switch extends Twig_Extensions_Grammar | ||
{ | ||
public function __toString() | ||
{ | ||
return sprintf('<%s:switch>', $this->name); | ||
} | ||
|
||
public function parse(Twig_Token $token) | ||
{ | ||
$this->parser->getStream()->expect(Twig_Token::NAME_TYPE, $this->name); | ||
|
||
return new Twig_Node_Expression_Constant(true, $token->getLine()); | ||
} | ||
} |
Oops, something went wrong.