diff options
Diffstat (limited to 'buildscripts/phing/classes/phing/filters/IconvFilter.php')
-rwxr-xr-x | buildscripts/phing/classes/phing/filters/IconvFilter.php | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/buildscripts/phing/classes/phing/filters/IconvFilter.php b/buildscripts/phing/classes/phing/filters/IconvFilter.php new file mode 100755 index 00000000..c9883b17 --- /dev/null +++ b/buildscripts/phing/classes/phing/filters/IconvFilter.php @@ -0,0 +1,155 @@ +<?php + +/* + * $Id: 9c0d703f08f0160b6a699d328a6025587877e104 $ + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * and is licensed under the LGPL. For more information please see + * <http://phing.info>. +*/ + +include_once 'phing/filters/BaseParamFilterReader.php'; +include_once 'phing/filters/ChainableReader.php'; + +/** + * Encode data from <code>in</code> encoding to <code>out</code> encoding. + * + * Example: + * <pre> + * <iconvfilter inputencoding="UTF-8" outputencoding="CP1251" /> + * </pre> + * Or: + * <pre> + * <filterreader classname="phing.filters.IconvFilter"> + * <param name="inputencoding" value="UTF-8" /> + * <param name="outputencoding" value="CP1251" /> + * </filterreader> + * </pre> + * + * @author Alexey Shockov, <alexey@shockov.com> + * @version $Id$ + * @package phing.filters + */ +class IconvFilter + extends BaseParamFilterReader + implements ChainableReader { + + private $_inputEncoding; + + private $_outputEncoding; + + /** + * Returns first n lines of stream. + * @return the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + function read($len = null) { + $this->_initialize(); + + // Process whole text at once. + $text = null; + while (($data = $this->in->read($len)) !== -1) { + $text .= $data; + } + + // At the end. + if (null === $text) { + return -1; + } + + $this->log( + "Encoding " . $this->in->getResource() . " from " . $this->getInputEncoding() . " to " . $this->getOutputEncoding(), + Project::MSG_VERBOSE + ); + + return iconv($this->_inputEncoding, $this->_outputEncoding, $text); + } + + /** + * + * @param string $encoding Input encoding. + */ + public function setInputEncoding($encoding) { + $this->_inputEncoding = $encoding; + } + + /** + * + * @return string + */ + public function getInputEncoding() { + return $this->_inputEncoding; + } + + /** + * + * @param string $encoding Output encoding. + */ + public function setOutputEncoding($encoding) { + $this->_outputEncoding = $encoding; + } + + /** + * + * @return string + */ + public function getOutputEncoding() { + return $this->_outputEncoding; + } + + /** + * Creates a new IconvFilter using the passed in Reader for instantiation. + * + * @param object A Reader object providing the underlying stream. Must not be <code>null</code>. + * + * @return object A new filter based on this configuration, but filtering the specified reader. + */ + function chain(Reader $reader) { + $filter = new self($reader); + + $filter->setInputEncoding($this->getInputEncoding()); + $filter->setOutputEncoding($this->getOutputEncoding()); + + $filter->setInitialized(true); + $filter->setProject($this->getProject()); + + return $filter; + } + + /** + * Configuring object from the parameters list. + */ + private function _initialize() { + if ($this->getInitialized()) { + return; + } + + $params = $this->getParameters(); + if ($params !== null) { + foreach ($params as $param) { + if ('in' == $param->getName()) { + $this->setInputEncoding($param->getValue()); + } else if ('out' == $param->getName()) { + $this->setOutputEncoding($param->getValue()); + } + } + } + + $this->setInitialized(true); + } +} |