mirror of
https://github.com/there4/markdown-resume.git
synced 2024-12-03 08:59:35 -05:00
This includes several vendor libraries: Assetic, LessPHP, Mustache, SmartyPants, Markdown
98 lines
3.1 KiB
PHP
Executable File
98 lines
3.1 KiB
PHP
Executable File
<?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'),
|
|
'vars' => $node->getAttribute('vars'),
|
|
),
|
|
);
|
|
} elseif ($node instanceof \Twig_Node_Expression_Function) {
|
|
$name = version_compare(\Twig_Environment::VERSION, '1.2.0-DEV', '<')
|
|
? $node->getNode('name')->getAttribute('name')
|
|
: $node->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;
|
|
}
|
|
}
|