X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/d3b1ea255664edd2deef17f900a655613d20820d..48ab98cb1779cf2088c1351ac3dd3d0da6fb31d3:/wp-includes/pomo/streams.php?ds=sidebyside diff --git a/wp-includes/pomo/streams.php b/wp-includes/pomo/streams.php index 3b0241af..dbb1de80 100644 --- a/wp-includes/pomo/streams.php +++ b/wp-includes/pomo/streams.php @@ -3,80 +3,20 @@ * Classes, which help reading streams of data from files. * Based on the classes from Danilo Segan * - * @version $Id: streams.php 33 2009-02-16 09:33:39Z nbachiyski $ + * @version $Id: streams.php 718 2012-10-31 00:32:02Z nbachiyski $ * @package pomo * @subpackage streams */ - -/** - * Provides file-like methods for manipulating a string instead - * of a physical file. - */ -class POMO_StringReader { - var $_pos; - var $_str; - - function POMO_StringReader($str = '') { - $this->_str = $str; - $this->_pos = 0; - } - - function read($bytes) { - $data = substr($this->_str, $this->_pos, $bytes); - $this->_pos += $bytes; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); - - return $data; - } - - function seekto($pos) { - $this->_pos = $pos; - if (strlen($this->_str)<$this->_pos) - $this->_pos = strlen($this->_str); - return $this->_pos; - } - - function pos() { - return $this->_pos; - } - - function length() { - return strlen($this->_str); - } - -} - -/** - * Reads the contents of the file in the beginning. - */ -class POMO_CachedFileReader extends POMO_StringReader { - function POMO_CachedFileReader($filename) { - $this->_str = file_get_contents($filename); - if (false === $this->_str) - return false; - $this->pos = 0; - } -} - -/** - * Allows reading integers from a file. - */ -class POMO_CachedIntFileReader extends POMO_CachedFileReader { +if ( !class_exists( 'POMO_Reader' ) ): +class POMO_Reader { var $endian = 'little'; + var $_post = ''; - /** - * Opens a file and caches it. - * - * @param $filename string name of the file to be opened - * @param $endian string endianness of the words in the file, allowed - * values are 'little' or 'big'. Default value is 'little' - */ - function POMO_CachedIntFileReader($filename, $endian = 'little') { - $this->endian = $endian; - parent::POMO_CachedFileReader($filename); + function POMO_Reader() { + $this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr'); + $this->_pos = 0; } /** @@ -96,7 +36,7 @@ class POMO_CachedIntFileReader extends POMO_CachedFileReader { */ function readint32() { $bytes = $this->read(4); - if (4 != strlen($bytes)) + if (4 != $this->strlen($bytes)) return false; $endian_letter = ('big' == $this->endian)? 'N' : 'V'; $int = unpack($endian_letter, $bytes); @@ -112,11 +52,158 @@ class POMO_CachedIntFileReader extends POMO_CachedFileReader { */ function readint32array($count) { $bytes = $this->read(4 * $count); - if (4*$count != strlen($bytes)) + if (4*$count != $this->strlen($bytes)) return false; $endian_letter = ('big' == $this->endian)? 'N' : 'V'; return unpack($endian_letter.$count, $bytes); } + + + function substr($string, $start, $length) { + if ($this->is_overloaded) { + return mb_substr($string, $start, $length, 'ascii'); + } else { + return substr($string, $start, $length); + } + } + + function strlen($string) { + if ($this->is_overloaded) { + return mb_strlen($string, 'ascii'); + } else { + return strlen($string); + } + } + + function str_split($string, $chunk_size) { + if (!function_exists('str_split')) { + $length = $this->strlen($string); + $out = array(); + for ($i = 0; $i < $length; $i += $chunk_size) + $out[] = $this->substr($string, $i, $chunk_size); + return $out; + } else { + return str_split( $string, $chunk_size ); + } + } + + + function pos() { + return $this->_pos; + } + + function is_resource() { + return true; + } + + function close() { + return true; + } +} +endif; + +if ( !class_exists( 'POMO_FileReader' ) ): +class POMO_FileReader extends POMO_Reader { + function POMO_FileReader($filename) { + parent::POMO_Reader(); + $this->_f = fopen($filename, 'rb'); + } + + function read($bytes) { + return fread($this->_f, $bytes); + } + + function seekto($pos) { + if ( -1 == fseek($this->_f, $pos, SEEK_SET)) { + return false; + } + $this->_pos = $pos; + return true; + } + + function is_resource() { + return is_resource($this->_f); + } + + function feof() { + return feof($this->_f); + } + + function close() { + return fclose($this->_f); + } + + function read_all() { + $all = ''; + while ( !$this->feof() ) + $all .= $this->read(4096); + return $all; + } } +endif; + +if ( !class_exists( 'POMO_StringReader' ) ): +/** + * Provides file-like methods for manipulating a string instead + * of a physical file. + */ +class POMO_StringReader extends POMO_Reader { + + var $_str = ''; + + function POMO_StringReader($str = '') { + parent::POMO_Reader(); + $this->_str = $str; + $this->_pos = 0; + } -?> + + function read($bytes) { + $data = $this->substr($this->_str, $this->_pos, $bytes); + $this->_pos += $bytes; + if ($this->strlen($this->_str) < $this->_pos) $this->_pos = $this->strlen($this->_str); + return $data; + } + + function seekto($pos) { + $this->_pos = $pos; + if ($this->strlen($this->_str) < $this->_pos) $this->_pos = $this->strlen($this->_str); + return $this->_pos; + } + + function length() { + return $this->strlen($this->_str); + } + + function read_all() { + return $this->substr($this->_str, $this->_pos, $this->strlen($this->_str)); + } + +} +endif; + +if ( !class_exists( 'POMO_CachedFileReader' ) ): +/** + * Reads the contents of the file in the beginning. + */ +class POMO_CachedFileReader extends POMO_StringReader { + function POMO_CachedFileReader($filename) { + parent::POMO_StringReader(); + $this->_str = file_get_contents($filename); + if (false === $this->_str) + return false; + $this->_pos = 0; + } +} +endif; + +if ( !class_exists( 'POMO_CachedIntFileReader' ) ): +/** + * Reads the contents of the file in the beginning. + */ +class POMO_CachedIntFileReader extends POMO_CachedFileReader { + function POMO_CachedIntFileReader($filename) { + parent::POMO_CachedFileReader($filename); + } +} +endif; \ No newline at end of file