From da2c20b14bc2802eaf94e07a13ac79aab4cbfa71 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Gertz?= Date: Tue, 26 Dec 2017 17:48:38 +0100 Subject: [PATCH] Add interface and filters --- Twig/Filter/CPackFilter.php | 100 ++++++++++++++++++++++++++++++ Twig/Filter/FilterInterface.php | 9 +++ Twig/Filter/JPackFilter.php | 105 ++++++++++++++++++++++++++++++++ 3 files changed, 214 insertions(+) create mode 100644 Twig/Filter/CPackFilter.php create mode 100644 Twig/Filter/FilterInterface.php create mode 100644 Twig/Filter/JPackFilter.php diff --git a/Twig/Filter/CPackFilter.php b/Twig/Filter/CPackFilter.php new file mode 100644 index 0000000..dff71c9 --- /dev/null +++ b/Twig/Filter/CPackFilter.php @@ -0,0 +1,100 @@ +hasParameter('rapsys_pack.cpackfilter')) { + if ($parameters = $containerInterface->getParameter('rapsys_pack.cpackfilter')) { + foreach($parameters as $k => $v) { + if (isset($this->$k)) { + $this->$k = $v; + } + } + } + } + + //Set fileName + $this->fileName = $fileName; + + //Set line + $this->line = $line; + + //Deal with compress + if (!empty($this->compress)) { + //Append minify parameter + if ($this->compress == 'minify') { + $this->bin .= ' --minify'; + //Unknown compress type + #XXX: default compression is pretty + } elseif ($this->compress !== 'pretty') { + //Throw an error on unknown compress + throw new \Twig_Error(sprintf('Got unexpected compress for %s: %s', $this->bin, $this->compress), $this->line, $this->fileName); + } + } + } + + public function process($content) { + //Create descriptors + $descriptorSpec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ); + + //Open process + if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) { + //Set stderr as non blocking + stream_set_blocking($pipes[2], 0); + + //Send content to stdin + fwrite($pipes[0], $content); + + //Close stdin + fclose($pipes[0]); + + //Read content from stdout + if ($stdout = stream_get_contents($pipes[1])) { + $content = $stdout; + } + + //Close stdout + fclose($pipes[1]); + + //Read content from stderr + if (($stderr = stream_get_contents($pipes[2]))) { + throw new \Twig_Error(sprintf('Got unexpected strerr for %s: %s', $this->bin, $stderr), $this->line, $this->fileName); + } + + //Close stderr + fclose($pipes[2]); + + //Close process + if (($ret = proc_close($proc))) { + throw new \Twig_Error(sprintf('Got unexpected non zero return code %s: %d', $this->bin, $ret), $this->line, $this->fileName); + } + } + + //Return content + return $content; + } +} diff --git a/Twig/Filter/FilterInterface.php b/Twig/Filter/FilterInterface.php new file mode 100644 index 0000000..2dc2b6f --- /dev/null +++ b/Twig/Filter/FilterInterface.php @@ -0,0 +1,9 @@ +hasParameter('rapsys_pack.jpackfilter')) { + if ($parameters = $containerInterface->getParameter('rapsys_pack.jpackfilter')) { + foreach($parameters as $k => $v) { + if (isset($this->$k)) { + $this->$k = $v; + } + } + } + } + + //Set fileName + $this->fileName = $fileName; + + //Set line + $this->line = $line; + + //Deal with compress + if (!empty($this->compress)) { + //Append clean parameter + if ($this->compress == 'clean') { + $this->bin .= ' --clean'; + //Append shrink parameter + } elseif ($this->compress == 'shrink') { + $this->bin .= ' --shrink'; + //Append obfuscate parameter + } elseif ($this->compress == 'obfuscate') { + $this->bin .= ' --obfuscate'; + //Unknown compress type + #XXX: default compression is best + } elseif ($this->compress !== 'best') { + //Throw an error on unknown compress + throw new \Twig_Error(sprintf('Got unexpected compress for %s: %s', $this->bin, $this->compress), $this->line, $this->fileName); + } + } + } + + public function process($content) { + //Create descriptors + $descriptorSpec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ); + + //Open process + if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) { + //Set stderr as non blocking + stream_set_blocking($pipes[2], 0); + + //Send content to stdin + fwrite($pipes[0], $content); + + //Close stdin + fclose($pipes[0]); + + //Read content from stdout + if ($stdout = stream_get_contents($pipes[1])) { + $content = $stdout; + } + + //Close stdout + fclose($pipes[1]); + + //Read content from stderr + if (($stderr = stream_get_contents($pipes[2]))) { + throw new \Twig_Error(sprintf('Got unexpected strerr for %s: %s', $this->bin, $stderr), $this->line, $this->fileName); + } + + //Close stderr + fclose($pipes[2]); + + //Close process + if (($ret = proc_close($proc))) { + throw new \Twig_Error(sprintf('Got unexpected non zero return code %s: %d', $this->bin, $ret), $this->line, $this->fileName); + } + } + + //Return content + return $content; + } +} -- 2.41.0