46 public function parse(\Twig_Token $token)
52 'output' => $this->output,
53 'var_name' =>
'asset_url',
57 $stream = $this->parser->getStream();
58 while (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
59 if ($stream->test(\Twig_Token::STRING_TYPE)) {
61 $inputs[] = $stream->next()->getValue();
62 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'filter')) {
65 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
66 $filters = array_merge($filters, array_filter(array_map(
'trim', explode(
',', $stream->expect(\Twig_Token::STRING_TYPE)->getValue()))));
67 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'output')) {
70 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
71 $attributes[
'output'] = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
72 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'name')) {
75 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
76 $name = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
77 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'as')) {
80 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
81 $attributes[
'var_name'] = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
82 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'debug')) {
85 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
86 $attributes[
'debug'] =
'true' == $stream->expect(\Twig_Token::NAME_TYPE,
array(
'true',
'false'))->getValue();
87 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'combine')) {
90 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
91 $attributes[
'combine'] =
'true' == $stream->expect(\Twig_Token::NAME_TYPE,
array(
'true',
'false'))->getValue();
92 } elseif ($stream->test(\Twig_Token::NAME_TYPE,
'vars')) {
95 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
96 $stream->expect(\Twig_Token::PUNCTUATION_TYPE,
'[');
98 while ($stream->test(\Twig_Token::STRING_TYPE)) {
99 $attributes[
'vars'][] = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
101 if (!$stream->test(\Twig_Token::PUNCTUATION_TYPE,
',')) {
108 $stream->expect(\Twig_Token::PUNCTUATION_TYPE,
']');
109 } elseif ($stream->test(\Twig_Token::NAME_TYPE, $this->extensions)) {
111 $key = $stream->next()->getValue();
112 $stream->expect(\Twig_Token::OPERATOR_TYPE,
'=');
113 $attributes[$key] = $stream->expect(\Twig_Token::STRING_TYPE)->getValue();
115 $token = $stream->getCurrent();
116 throw new \Twig_Error_Syntax(sprintf(
'Unexpected token "%s" of value "%s"', \Twig_Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $stream->getFilename());
120 $stream->expect(\Twig_Token::BLOCK_END_TYPE);
122 $body = $this->parser->subparse(
array($this,
'testEndTag'),
true);
124 $stream->expect(\Twig_Token::BLOCK_END_TYPE);
126 if ($this->single && 1 < count($inputs)) {
127 $inputs = array_slice($inputs, -1);
131 $name = $this->factory->generateAssetName($inputs, $filters, $attributes);
134 $asset = $this->factory->createAsset($inputs, $filters, $attributes +
array(
'name' => $name));
136 return $this->
createBodyNode($asset, $body, $inputs, $filters, $name, $attributes, $token->getLine(), $this->
getTag());
163 $reflector = new \ReflectionMethod($this,
'createNode');
165 if (__CLASS__ !== $reflector->getDeclaringClass()->name) {
166 @trigger_error(sprintf(
'Overwriting %s::createNode is deprecated since 1.3. Overwrite %s instead.', __CLASS__, __METHOD__), E_USER_DEPRECATED);
168 return $this->
createNode($asset, $body, $inputs, $filters, $name, $attributes, $lineno,
$tag);
171 return new AsseticNode($asset, $body, $inputs, $filters, $name, $attributes, $lineno,
$tag);
190 @trigger_error(sprintf(
'The %s method is deprecated since 1.3 and will be removed in 2.0. Use createBodyNode instead.', __METHOD__), E_USER_DEPRECATED);
193 throw new \InvalidArgumentException(
'The body must be a Twig_Node. Custom implementations of Twig_NodeInterface are not supported.');
196 return new AsseticNode($asset, $body, $inputs, $filters, $name, $attributes, $lineno,
$tag);
parse(\Twig_Token $token)
createNode(AssetInterface $asset, \Twig_NodeInterface $body, array $inputs, array $filters, $name, array $attributes=array(), $lineno=0, $tag=null)
__construct(AssetFactory $factory, $tag, $output, $single=false, array $extensions=array())
Constructor.
createBodyNode(AssetInterface $asset, \Twig_Node $body, array $inputs, array $filters, $name, array $attributes=array(), $lineno=0, $tag=null)
An asset has a mutable URL and content and can be loaded and dumped.
Create styles array
The data for the language used.
testEndTag(\Twig_Token $token)
The asset factory creates asset objects.