source: sandbox/newExpressoMail/newExpressoMail/Assetic/Filter/GoogleClosure/CompilerJarFilter.php @ 7265

Revision 7265, 2.7 KB checked in by gustavo, 12 years ago (diff)

Ticket #0000 - Criado novo modulo para o desenvolvimento do novo ExpressoMail?

  • Property svn:executable set to *
Line 
1<?php
2
3/*
4 * This file is part of the Assetic package, an OpenSky project.
5 *
6 * (c) 2010-2012 OpenSky Project Inc
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Assetic\Filter\GoogleClosure;
13
14use Assetic\Asset\AssetInterface;
15use Assetic\Exception\FilterException;
16use Symfony\Component\Process\ProcessBuilder;
17
18/**
19 * Filter for the Google Closure Compiler JAR.
20 *
21 * @link https://developers.google.com/closure/compiler/
22 * @author Kris Wallsmith <kris.wallsmith@gmail.com>
23 */
24class CompilerJarFilter extends BaseCompilerFilter
25{
26    private $jarPath;
27    private $javaPath;
28
29    public function __construct($jarPath, $javaPath = '/usr/bin/java')
30    {
31        $this->jarPath = $jarPath;
32        $this->javaPath = $javaPath;
33    }
34
35    public function filterDump(AssetInterface $asset)
36    {
37        $cleanup = array();
38
39        $pb = new ProcessBuilder(array(
40            $this->javaPath,
41            '-jar',
42            $this->jarPath,
43        ));
44
45        if (null !== $this->compilationLevel) {
46            $pb->add('--compilation_level')->add($this->compilationLevel);
47        }
48
49        if (null !== $this->jsExterns) {
50            $cleanup[] = $externs = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler');
51            file_put_contents($externs, $this->jsExterns);
52            $pb->add('--externs')->add($externs);
53        }
54
55        if (null !== $this->externsUrl) {
56            $cleanup[] = $externs = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler');
57            file_put_contents($externs, file_get_contents($this->externsUrl));
58            $pb->add('--externs')->add($externs);
59        }
60
61        if (null !== $this->excludeDefaultExterns) {
62            $pb->add('--use_only_custom_externs');
63        }
64
65        if (null !== $this->formatting) {
66            $pb->add('--formatting')->add($this->formatting);
67        }
68
69        if (null !== $this->useClosureLibrary) {
70            $pb->add('--manage_closure_dependencies');
71        }
72
73        if (null !== $this->warningLevel) {
74            $pb->add('--warning_level')->add($this->warningLevel);
75        }
76
77        if (null !== $this->language) {
78            $pb->add('--language_in')->add($this->language);
79        }
80
81        $pb->add('--js')->add($cleanup[] = $input = tempnam(sys_get_temp_dir(), 'assetic_google_closure_compiler'));
82        file_put_contents($input, $asset->getContent());
83
84        $proc = $pb->getProcess();
85        $code = $proc->run();
86        array_map('unlink', $cleanup);
87
88        if (0 < $code) {
89            throw FilterException::fromProcess($proc)->setInput($asset->getContent());
90        }
91
92        $asset->setContent($proc->getOutput());
93    }
94}
Note: See TracBrowser for help on using the repository browser.