diff options
Diffstat (limited to 'library/vendor/Zend/View/Stream.php')
-rw-r--r-- | library/vendor/Zend/View/Stream.php | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/library/vendor/Zend/View/Stream.php b/library/vendor/Zend/View/Stream.php new file mode 100644 index 0000000..ae8d524 --- /dev/null +++ b/library/vendor/Zend/View/Stream.php @@ -0,0 +1,183 @@ +<?php +/** + * Zend Framework + * + * LICENSE + * + * This source file is subject to the new BSD license that is bundled + * with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://framework.zend.com/license/new-bsd + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@zend.com so we can send you a copy immediately. + * + * @category Zend + * @package Zend_View + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id$ + */ + +/** + * Stream wrapper to convert markup of mostly-PHP templates into PHP prior to + * include(). + * + * Based in large part on the example at + * http://www.php.net/manual/en/function.stream-wrapper-register.php + * + * As well as the example provided at: + * http://mikenaberezny.com/2006/02/19/symphony-templates-ruby-erb/ + * written by + * Mike Naberezny (@link http://mikenaberezny.com) + * Paul M. Jones (@link http://paul-m-jones.com) + * + * @category Zend + * @package Zend_View + * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +class Zend_View_Stream +{ + /** + * Current stream position. + * + * @var int + */ + protected $_pos = 0; + + /** + * Data for streaming. + * + * @var string + */ + protected $_data; + + /** + * Stream stats. + * + * @var array + */ + protected $_stat; + + /** + * Opens the script file and converts markup. + */ + public function stream_open($path, $mode, $options, &$opened_path) + { + // get the view script source + $path = str_replace('zend.view://', '', $path); + $this->_data = file_get_contents($path); + + /** + * If reading the file failed, update our local stat store + * to reflect the real stat of the file, then return on failure + */ + if ($this->_data === false) { + $this->_stat = stat($path); + return false; + } + + /** + * Convert <?= ?> to long-form <?php echo ?> and <? ?> to <?php ?> + * + */ + $this->_data = preg_replace('/\<\?\=/', "<?php echo ", $this->_data); + $this->_data = preg_replace('/<\?(?!xml|php)/s', '<?php ', $this->_data); + + /** + * file_get_contents() won't update PHP's stat cache, so we grab a stat + * of the file to prevent additional reads should the script be + * requested again, which will make include() happy. + */ + $this->_stat = stat($path); + + return true; + } + + /** + * Included so that __FILE__ returns the appropriate info + * + * @return array + */ + public function url_stat() + { + return $this->_stat; + } + + /** + * Reads from the stream. + */ + public function stream_read($count) + { + $ret = substr($this->_data, $this->_pos, $count); + $this->_pos += strlen($ret); + return $ret; + } + + + /** + * Tells the current position in the stream. + */ + public function stream_tell() + { + return $this->_pos; + } + + + /** + * Tells if we are at the end of the stream. + */ + public function stream_eof() + { + return $this->_pos >= strlen($this->_data); + } + + + /** + * Stream statistics. + */ + public function stream_stat() + { + return $this->_stat; + } + + + /** + * Seek to a specific point in the stream. + */ + public function stream_seek($offset, $whence) + { + switch ($whence) { + case SEEK_SET: + if ($offset < strlen($this->_data) && $offset >= 0) { + $this->_pos = $offset; + return true; + } else { + return false; + } + break; + + case SEEK_CUR: + if ($offset >= 0) { + $this->_pos += $offset; + return true; + } else { + return false; + } + break; + + case SEEK_END: + if (strlen($this->_data) + $offset >= 0) { + $this->_pos = strlen($this->_data) + $offset; + return true; + } else { + return false; + } + break; + + default: + return false; + } + } +} |