Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/* vim: set expandtab tabstop=4 shiftwidth=4: */
3
//
4
// +----------------------------------------------------------------------+
5
// | PHP Version 4                                                        |
6
// +----------------------------------------------------------------------+
7
// | Copyright (c) 1997-2002 The PHP Group                                |
8
// +----------------------------------------------------------------------+
9
// | This source file is subject to version 2.02 of the PHP license,      |
10
// | that is bundled with this package in the file LICENSE, and is        |
11
// | available at through the world-wide-web at                           |
12
// | http://www.php.net/license/3_0.txt.                                  |
13
// | If you did not receive a copy of the PHP license and are unable to   |
14
// | obtain it through the world-wide-web, please send a note to          |
15
// | license@php.net so we can mail you a copy immediately.               |
16
// +----------------------------------------------------------------------+
17
// | Authors: Alexander Zhukov <alex@veresk.ru> Original port from Python |
18
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> Port to PEAR + more  |
19
// | Authors: Many @ Sitepointforums Advanced PHP Forums                  |
20
// +----------------------------------------------------------------------+
21
//
22
// $Id: Decorators.php 1398 2006-09-08 19:31:03Z xue $
23
//
24
/**
25
* Decorators for dealing with parser options
26
* @package System.Security.SafeHtml
27
* @version $Id: Decorators.php 1398 2006-09-08 19:31:03Z xue $
28
* @see TSax3::set_option
29
*/
30
/**
31
* Trims the contents of element data from whitespace at start and end
32
* @package System.Security.SafeHtml
33
* @access protected
34
*/
35
class TSax3_Trim {
36
    /**
37
    * Original handler object
38
    * @var object
39
    * @access private
40
    */
41
    private $orig_obj;
42
    /**
43
    * Original handler method
44
    * @var string
45
    * @access private
46
    */
47
    private $orig_method;
48
    /**
49
    * Constructs TSax3_Trim
50
    * @param object handler object being decorated
51
    * @param string original handler method
52
    * @access protected
53
    */
54
    function __construct(&$orig_obj, $orig_method) {
55
        $this->orig_obj =& $orig_obj;
56
        $this->orig_method = $orig_method;
57
    }
58
    /**
59
    * Trims the data
60
    * @param TSax3
61
    * @param string element data
62
    * @access protected
63
    */
64
    function trimData(&$parser, $data) {
65
        $data = trim($data);
66
        if ($data != '') {
67
            $this->orig_obj->{$this->orig_method}($parser, $data);
68
        }
69
    }
70
}
71
/**
72
* Coverts tag names to upper case
73
* @package System.Security.SafeHtml
74
* @access protected
75
*/
76
class TSax3_CaseFolding {
77
    /**
78
    * Original handler object
79
    * @var object
80
    * @access private
81
    */
82
    private $orig_obj;
83
    /**
84
    * Original open handler method
85
    * @var string
86
    * @access private
87
    */
88
    private $orig_open_method;
89
    /**
90
    * Original close handler method
91
    * @var string
92
    * @access private
93
    */
94
    private $orig_close_method;
95
    /**
96
    * Constructs TSax3_CaseFolding
97
    * @param object handler object being decorated
98
    * @param string original open handler method
99
    * @param string original close handler method
100
    * @access protected
101
    */
102
    function __construct(&$orig_obj, $orig_open_method, $orig_close_method) {
103
        $this->orig_obj =& $orig_obj;
104
        $this->orig_open_method = $orig_open_method;
105
        $this->orig_close_method = $orig_close_method;
106
    }
107
    /**
108
    * Folds up open tag callbacks
109
    * @param TSax3
110
    * @param string tag name
111
    * @param array tag attributes
112
    * @access protected
113
    */
114
    function foldOpen(&$parser, $tag, $attrs=array(), $empty = FALSE) {
115
        $this->orig_obj->{$this->orig_open_method}($parser, strtoupper($tag), $attrs, $empty);
116
    }
117
    /**
118
    * Folds up close tag callbacks
119
    * @param TSax3
120
    * @param string tag name
121
    * @access protected
122
    */
123
    function foldClose(&$parser, $tag, $empty = FALSE) {
124
        $this->orig_obj->{$this->orig_close_method}($parser, strtoupper($tag), $empty);
125
    }
126
}
127
/**
128
* Breaks up data by linefeed characters, resulting in additional
129
* calls to the data handler
130
* @package System.Security.SafeHtml
131
* @access protected
132
*/
133
class TSax3_Linefeed {
134
    /**
135
    * Original handler object
136
    * @var object
137
    * @access private
138
    */
139
    private $orig_obj;
140
    /**
141
    * Original handler method
142
    * @var string
143
    * @access private
144
    */
145
    private $orig_method;
146
    /**
147
    * Constructs TSax3_LineFeed
148
    * @param object handler object being decorated
149
    * @param string original handler method
150
    * @access protected
151
    */
152
    function __construct(&$orig_obj, $orig_method) {
153
        $this->orig_obj =& $orig_obj;
154
        $this->orig_method = $orig_method;
155
    }
156
    /**
157
    * Breaks the data up by linefeeds
158
    * @param TSax3
159
    * @param string element data
160
    * @access protected
161
    */
162
    function breakData(&$parser, $data) {
163
        $data = explode("\n",$data);
164
        foreach ( $data as $chunk ) {
165
            $this->orig_obj->{$this->orig_method}($parser, $chunk);
166
        }
167
    }
168
}
169
/**
170
* Breaks up data by tab characters, resulting in additional
171
* calls to the data handler
172
* @package System.Security.SafeHtml
173
* @access protected
174
*/
175
class TSax3_Tab {
176
    /**
177
    * Original handler object
178
    * @var object
179
    * @access private
180
    */
181
    private $orig_obj;
182
    /**
183
    * Original handler method
184
    * @var string
185
    * @access private
186
    */
187
    private $orig_method;
188
    /**
189
    * Constructs TSax3_Tab
190
    * @param object handler object being decorated
191
    * @param string original handler method
192
    * @access protected
193
    */
194
    function __construct(&$orig_obj, $orig_method) {
195
        $this->orig_obj =& $orig_obj;
196
        $this->orig_method = $orig_method;
197
    }
198
    /**
199
    * Breaks the data up by linefeeds
200
    * @param TSax3
201
    * @param string element data
202
    * @access protected
203
    */
204
    function breakData(&$parser, $data) {
205
        $data = explode("\t",$data);
206
        foreach ( $data as $chunk ) {
207
            $this->orig_obj->{$this->orig_method}($this, $chunk);
208
        }
209
    }
210
}
211
/**
212
* Breaks up data by XML entities and parses them with html_entity_decode(),
213
* resulting in additional calls to the data handler<br />
214
* Requires PHP 4.3.0+
215
* @package System.Security.SafeHtml
216
* @access protected
217
*/
218
class TSax3_Entities_Parsed {
219
    /**
220
    * Original handler object
221
    * @var object
222
    * @access private
223
    */
224
    private $orig_obj;
225
    /**
226
    * Original handler method
227
    * @var string
228
    * @access private
229
    */
230
    private $orig_method;
231
    /**
232
    * Constructs TSax3_Entities_Parsed
233
    * @param object handler object being decorated
234
    * @param string original handler method
235
    * @access protected
236
    */
237
    function __construct(&$orig_obj, $orig_method) {
238
        $this->orig_obj =& $orig_obj;
239
        $this->orig_method = $orig_method;
240
    }
241
    /**
242
    * Breaks the data up by XML entities
243
    * @param TSax3
244
    * @param string element data
245
    * @access protected
246
    */
247
    function breakData(&$parser, $data) {
248
        $data = preg_split('/(&.+?;)/',$data,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
249
        foreach ( $data as $chunk ) {
250
            $chunk = html_entity_decode($chunk,ENT_NOQUOTES);
251
            $this->orig_obj->{$this->orig_method}($this, $chunk);
252
        }
253
    }
254
}
255
/**
256
* Compatibility with older PHP versions
257
*/
258
if (version_compare(phpversion(), '4.3', '<') && !function_exists('html_entity_decode') ) {
259
    function html_entity_decode($str, $style=ENT_NOQUOTES) {
260
        return strtr($str,
261
            array_flip(get_html_translation_table(HTML_ENTITIES,$style)));
262
    }
263
}
264
/**
265
* Breaks up data by XML entities but leaves them unparsed,
266
* resulting in additional calls to the data handler<br />
267
* @package System.Security.SafeHtml
268
* @access protected
269
*/
270
class TSax3_Entities_Unparsed {
271
    /**
272
    * Original handler object
273
    * @var object
274
    * @access private
275
    */
276
    private $orig_obj;
277
    /**
278
    * Original handler method
279
    * @var string
280
    * @access private
281
    */
282
    private $orig_method;
283
    /**
284
    * Constructs TSax3_Entities_Unparsed
285
    * @param object handler object being decorated
286
    * @param string original handler method
287
    * @access protected
288
    */
289
    function __construct(&$orig_obj, $orig_method) {
290
        $this->orig_obj =& $orig_obj;
291
        $this->orig_method = $orig_method;
292
    }
293
    /**
294
    * Breaks the data up by XML entities
295
    * @param TSax3
296
    * @param string element data
297
    * @access protected
298
    */
299
    function breakData(&$parser, $data) {
300
        $data = preg_split('/(&.+?;)/',$data,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
301
        foreach ( $data as $chunk ) {
302
            $this->orig_obj->{$this->orig_method}($this, $chunk);
303
        }
304
    }
305
}
306
 
307
/**
308
* Strips the HTML comment markers or CDATA sections from an escape.
309
* If XML_OPTIONS_FULL_ESCAPES is on, this decorator is not used.<br />
310
* @package System.Security.SafeHtml
311
* @access protected
312
*/
313
class TSax3_Escape_Stripper {
314
    /**
315
    * Original handler object
316
    * @var object
317
    * @access private
318
    */
319
    private $orig_obj;
320
    /**
321
    * Original handler method
322
    * @var string
323
    * @access private
324
    */
325
    private $orig_method;
326
    /**
327
    * Constructs TSax3_Entities_Unparsed
328
    * @param object handler object being decorated
329
    * @param string original handler method
330
    * @access protected
331
    */
332
    function __construct(&$orig_obj, $orig_method) {
333
        $this->orig_obj =& $orig_obj;
334
        $this->orig_method = $orig_method;
335
    }
336
    /**
337
    * Breaks the data up by XML entities
338
    * @param TSax3
339
    * @param string element data
340
    * @access protected
341
    */
342
    function strip(&$parser, $data) {
343
        // Check for HTML comments first
344
        if ( substr($data,0,2) == '--' ) {
345
            $patterns = array(
346
                '/^\-\-/',          // Opening comment: --
347
                '/\-\-$/',          // Closing comment: --
348
            );
349
            $data = preg_replace($patterns,'',$data);
350
 
351
        // Check for XML CDATA sections (note: don't do both!)
352
        } else if ( substr($data,0,1) == '[' ) {
353
            $patterns = array(
354
                '/^\[.*CDATA.*\[/s', // Opening CDATA
355
                '/\].*\]$/s',       // Closing CDATA
356
                );
357
            $data = preg_replace($patterns,'',$data);
358
        }
359
 
360
        $this->orig_obj->{$this->orig_method}($this, $data);
361
    }
362
}
363
?>