summaryrefslogtreecommitdiffstats
path: root/library/vendor/Zend/View/Stream.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/vendor/Zend/View/Stream.php183
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;
+ }
+ }
+}