~xalioth/stellarium-website/with-gettext

« back to all changes in this revision

Viewing changes to streams.php

  • Committer: Fabien Chéreau
  • Date: 2011-05-26 11:16:19 UTC
  • Revision ID: fabien.chereau@gmail.com-20110526111619-pk7h9zelqeho4ztl
Initial test using gettext for web translation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/*
 
3
   Copyright (c) 2003, 2005, 2006, 2009 Danilo Segan <danilo@kvota.net>.
 
4
 
 
5
   This file is part of PHP-gettext.
 
6
 
 
7
   PHP-gettext is free software; you can redistribute it and/or modify
 
8
   it under the terms of the GNU General Public License as published by
 
9
   the Free Software Foundation; either version 2 of the License, or
 
10
   (at your option) any later version.
 
11
 
 
12
   PHP-gettext is distributed in the hope that it will be useful,
 
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
   GNU General Public License for more details.
 
16
 
 
17
   You should have received a copy of the GNU General Public License
 
18
   along with PHP-gettext; if not, write to the Free Software
 
19
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
20
 
 
21
*/
 
22
 
 
23
 
 
24
  // Simple class to wrap file streams, string streams, etc.
 
25
  // seek is essential, and it should be byte stream
 
26
class StreamReader {
 
27
  // should return a string [FIXME: perhaps return array of bytes?]
 
28
  function read($bytes) {
 
29
    return false;
 
30
  }
 
31
 
 
32
  // should return new position
 
33
  function seekto($position) {
 
34
    return false;
 
35
  }
 
36
 
 
37
  // returns current position
 
38
  function currentpos() {
 
39
    return false;
 
40
  }
 
41
 
 
42
  // returns length of entire stream (limit for seekto()s)
 
43
  function length() {
 
44
    return false;
 
45
  }
 
46
};
 
47
 
 
48
class StringReader {
 
49
  var $_pos;
 
50
  var $_str;
 
51
 
 
52
  function StringReader($str='') {
 
53
    $this->_str = $str;
 
54
    $this->_pos = 0;
 
55
  }
 
56
 
 
57
  function read($bytes) {
 
58
    $data = substr($this->_str, $this->_pos, $bytes);
 
59
    $this->_pos += $bytes;
 
60
    if (strlen($this->_str)<$this->_pos)
 
61
      $this->_pos = strlen($this->_str);
 
62
 
 
63
    return $data;
 
64
  }
 
65
 
 
66
  function seekto($pos) {
 
67
    $this->_pos = $pos;
 
68
    if (strlen($this->_str)<$this->_pos)
 
69
      $this->_pos = strlen($this->_str);
 
70
    return $this->_pos;
 
71
  }
 
72
 
 
73
  function currentpos() {
 
74
    return $this->_pos;
 
75
  }
 
76
 
 
77
  function length() {
 
78
    return strlen($this->_str);
 
79
  }
 
80
 
 
81
};
 
82
 
 
83
 
 
84
class FileReader {
 
85
  var $_pos;
 
86
  var $_fd;
 
87
  var $_length;
 
88
 
 
89
  function FileReader($filename) {
 
90
    if (file_exists($filename)) {
 
91
 
 
92
      $this->_length=filesize($filename);
 
93
      $this->_pos = 0;
 
94
      $this->_fd = fopen($filename,'rb');
 
95
      if (!$this->_fd) {
 
96
        $this->error = 3; // Cannot read file, probably permissions
 
97
        return false;
 
98
      }
 
99
    } else {
 
100
      $this->error = 2; // File doesn't exist
 
101
      return false;
 
102
    }
 
103
  }
 
104
 
 
105
  function read($bytes) {
 
106
    if ($bytes) {
 
107
      fseek($this->_fd, $this->_pos);
 
108
 
 
109
      // PHP 5.1.1 does not read more than 8192 bytes in one fread()
 
110
      // the discussions at PHP Bugs suggest it's the intended behaviour
 
111
      $data = '';
 
112
      while ($bytes > 0) {
 
113
        $chunk  = fread($this->_fd, $bytes);
 
114
        $data  .= $chunk;
 
115
        $bytes -= strlen($chunk);
 
116
      }
 
117
      $this->_pos = ftell($this->_fd);
 
118
 
 
119
      return $data;
 
120
    } else return '';
 
121
  }
 
122
 
 
123
  function seekto($pos) {
 
124
    fseek($this->_fd, $pos);
 
125
    $this->_pos = ftell($this->_fd);
 
126
    return $this->_pos;
 
127
  }
 
128
 
 
129
  function currentpos() {
 
130
    return $this->_pos;
 
131
  }
 
132
 
 
133
  function length() {
 
134
    return $this->_length;
 
135
  }
 
136
 
 
137
  function close() {
 
138
    fclose($this->_fd);
 
139
  }
 
140
 
 
141
};
 
142
 
 
143
// Preloads entire file in memory first, then creates a StringReader
 
144
// over it (it assumes knowledge of StringReader internals)
 
145
class CachedFileReader extends StringReader {
 
146
  function CachedFileReader($filename) {
 
147
    if (file_exists($filename)) {
 
148
 
 
149
      $length=filesize($filename);
 
150
      $fd = fopen($filename,'rb');
 
151
 
 
152
      if (!$fd) {
 
153
        $this->error = 3; // Cannot read file, probably permissions
 
154
        return false;
 
155
      }
 
156
      $this->_str = fread($fd, $length);
 
157
      fclose($fd);
 
158
 
 
159
    } else {
 
160
      $this->error = 2; // File doesn't exist
 
161
      return false;
 
162
    }
 
163
  }
 
164
};
 
165
 
 
166
 
 
167
?>