--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/assetic/src/Assetic/Extension/Twig/TwigFormulaLoader.php Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,93 @@
+<?php
+
+/*
+ * This file is part of the Assetic package, an OpenSky project.
+ *
+ * (c) 2010-2011 OpenSky Project Inc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Assetic\Extension\Twig;
+
+use Assetic\Factory\Loader\FormulaLoaderInterface;
+use Assetic\Factory\Resource\ResourceInterface;
+
+/**
+ * Loads asset formulae from Twig templates.
+ *
+ * @author Kris Wallsmith <kris.wallsmith@gmail.com>
+ */
+class TwigFormulaLoader implements FormulaLoaderInterface
+{
+ private $twig;
+
+ public function __construct(\Twig_Environment $twig)
+ {
+ $this->twig = $twig;
+ }
+
+ public function load(ResourceInterface $resource)
+ {
+ try {
+ $tokens = $this->twig->tokenize($resource->getContent(), (string) $resource);
+ $nodes = $this->twig->parse($tokens);
+ } catch (\Exception $e) {
+ return array();
+ }
+
+ return $this->loadNode($nodes);
+ }
+
+ /**
+ * Loads assets from the supplied node.
+ *
+ * @return array An array of asset formulae indexed by name
+ */
+ private function loadNode(\Twig_Node $node)
+ {
+ $formulae = array();
+
+ if ($node instanceof AsseticNode) {
+ $formulae[$node->getAttribute('name')] = array(
+ $node->getAttribute('inputs'),
+ $node->getAttribute('filters'),
+ array(
+ 'output' => $node->getAttribute('asset')->getTargetPath(),
+ 'name' => $node->getAttribute('name'),
+ 'debug' => $node->getAttribute('debug'),
+ 'combine' => $node->getAttribute('combine'),
+ ),
+ );
+ } elseif ($node instanceof \Twig_Node_Expression_Function) {
+ $name = $node->getNode('name')->getAttribute('name');
+ if ($this->twig->getFunction($name) instanceof AsseticFilterFunction) {
+ $arguments = array();
+ foreach ($node->getNode('arguments') as $argument) {
+ $arguments[] = eval('return '.$this->twig->compile($argument).';');
+ }
+
+ $invoker = $this->twig->getExtension('assetic')->getFilterInvoker($name);
+
+ $inputs = isset($arguments[0]) ? (array) $arguments[0] : array();
+ $filters = $invoker->getFilters();
+ $options = array_replace($invoker->getOptions(), isset($arguments[1]) ? $arguments[1] : array());
+
+ if (!isset($options['name'])) {
+ $options['name'] = $invoker->getFactory()->generateAssetName($inputs, $filters, $options);
+ }
+
+ $formulae[$options['name']] = array($inputs, $filters, $options);
+ }
+ }
+
+ foreach ($node as $child) {
+ if ($child instanceof \Twig_Node) {
+ $formulae += $this->loadNode($child);
+ }
+ }
+
+ return $formulae;
+ }
+}