<?php
-/*
+/**
+ * PHP-Gettext External Library: StreamReader classes
+ *
+ * @package External
+ * @subpackage PHP-gettext
+ *
+ * @internal
Copyright (c) 2003, 2005 Danilo Segan <danilo@kvota.net>.
This file is part of PHP-gettext.
along with PHP-gettext; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
+ */
// Simple class to wrap file streams, string streams, etc.
function read($bytes) {
return false;
}
-
+
// should return new position
function seekto($position) {
return false;
}
-
+
// returns current position
function currentpos() {
return false;
}
-
+
// returns length of entire stream (limit for seekto()s)
function length() {
return false;
function StringReader($str='') {
$this->_str = $str;
$this->_pos = 0;
+ // If string functions are overloaded, we need to use the mb versions
+ $this->is_overloaded = ((ini_get("mbstring.func_overload") & 2) != 0) && function_exists('mb_substr');
+ }
+
+ 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 read($bytes) {
- $data = substr($this->_str, $this->_pos, $bytes);
+ $data = $this->_substr($this->_str, $this->_pos, $bytes);
$this->_pos += $bytes;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->_strlen($this->_str)<$this->_pos)
+ $this->_pos = $this->_strlen($this->_str);
return $data;
}
function seekto($pos) {
$this->_pos = $pos;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
+ if ($this->_strlen($this->_str)<$this->_pos)
+ $this->_pos = $this->_strlen($this->_str);
return $this->_pos;
}
}
function length() {
- return strlen($this->_str);
+ return $this->_strlen($this->_str);
}
-
}
$bytes -= strlen($chunk);
}
$this->_pos = ftell($this->_fd);
-
+
return $data;
} else return '';
}
}
-// Preloads entire file in memory first, then creates a StringReader
+// Preloads entire file in memory first, then creates a StringReader
// over it (it assumes knowledge of StringReader internals)
class CachedFileReader extends StringReader {
function CachedFileReader($filename) {
+ parent::StringReader();
+
if (file_exists($filename)) {
$length=filesize($filename);
$fd = fopen($filename,'rb');
if (!$fd) {
- $this->error = 3; // Cannot read file, probably permissions
- return false;
+ $this->error = 3; // Cannot read file, probably permissions
+ return false;
}
$this->_str = fread($fd, $length);
- fclose($fd);
+ fclose($fd);
} else {
$this->error = 2; // File doesn't exist
}
-?>
\ No newline at end of file
+?>