home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 June / ENTER.ISO / files / xampp-win32-1.4.5-installer.exe / xampp / XML_HTMLSax_Decorators.php < prev    next >
Encoding:
PHP Script  |  2004-03-24  |  9.0 KB  |  306 lines

  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: XML_HTMLSax_Decorators.php,v 1.6 2003/12/04 23:35:20 harryf Exp $
  23. //
  24. /**
  25. * Decorators for dealing with parser options
  26. * @package XML_HTMLSax
  27. * @version $Id: XML_HTMLSax_Decorators.php,v 1.6 2003/12/04 23:35:20 harryf Exp $
  28. * @see XML_HTMLSax::set_option
  29. */
  30. /**
  31. * Trims the contents of element data from whitespace at start and end
  32. * @package XML_HTMLSax
  33. * @access protected
  34. */
  35. class XML_HTMLSax_Trim {
  36.     /**
  37.     * Original handler object
  38.     * @var object
  39.     * @access private
  40.     */
  41.     var $orig_obj;
  42.     /**
  43.     * Original handler method
  44.     * @var string
  45.     * @access private
  46.     */
  47.     var $orig_method;
  48.     /**
  49.     * Constructs XML_HTMLSax_Trim
  50.     * @param object handler object being decorated
  51.     * @param string original handler method
  52.     * @access protected
  53.     */
  54.     function XML_HTMLSax_Trim(&$orig_obj, $orig_method) {
  55.         $this->orig_obj =& $orig_obj;
  56.         $this->orig_method = $orig_method;
  57.     }
  58.     /**
  59.     * Trims the data
  60.     * @param XML_HTMLSax
  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 XML_HTMLSax
  74. * @access protected
  75. */
  76. class XML_HTMLSax_CaseFolding {
  77.     /**
  78.     * Original handler object
  79.     * @var object
  80.     * @access private
  81.     */
  82.     var $orig_obj;
  83.     /**
  84.     * Original open handler method
  85.     * @var string
  86.     * @access private
  87.     */
  88.     var $orig_open_method;
  89.     /**
  90.     * Original close handler method
  91.     * @var string
  92.     * @access private
  93.     */
  94.     var $orig_close_method;
  95.     /**
  96.     * Constructs XML_HTMLSax_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 XML_HTMLSax_CaseFolding(&$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 XML_HTMLSax
  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 XML_HTMLSax
  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 XML_HTMLSax
  131. * @access protected
  132. */
  133. class XML_HTMLSax_Linefeed {
  134.     /**
  135.     * Original handler object
  136.     * @var object
  137.     * @access private
  138.     */
  139.     var $orig_obj;
  140.     /**
  141.     * Original handler method
  142.     * @var string
  143.     * @access private
  144.     */
  145.     var $orig_method;
  146.     /**
  147.     * Constructs XML_HTMLSax_LineFeed
  148.     * @param object handler object being decorated
  149.     * @param string original handler method
  150.     * @access protected
  151.     */
  152.     function XML_HTMLSax_LineFeed(&$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 XML_HTMLSax
  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 XML_HTMLSax
  173. * @access protected
  174. */
  175. class XML_HTMLSax_Tab {
  176.     /**
  177.     * Original handler object
  178.     * @var object
  179.     * @access private
  180.     */
  181.     var $orig_obj;
  182.     /**
  183.     * Original handler method
  184.     * @var string
  185.     * @access private
  186.     */
  187.     var $orig_method;
  188.     /**
  189.     * Constructs XML_HTMLSax_Tab
  190.     * @param object handler object being decorated
  191.     * @param string original handler method
  192.     * @access protected
  193.     */
  194.     function XML_HTMLSax_Tab(&$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 XML_HTMLSax
  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 XML_HTMLSax
  216. * @access protected
  217. */
  218. class XML_HTMLSax_Entities_Parsed {
  219.     /**
  220.     * Original handler object
  221.     * @var object
  222.     * @access private
  223.     */
  224.     var $orig_obj;
  225.     /**
  226.     * Original handler method
  227.     * @var string
  228.     * @access private
  229.     */
  230.     var $orig_method;
  231.     /**
  232.     * Constructs XML_HTMLSax_Entities_Parsed
  233.     * @param object handler object being decorated
  234.     * @param string original handler method
  235.     * @access protected
  236.     */
  237.     function XML_HTMLSax_Entities_Parsed(&$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 XML_HTMLSax
  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 XML_HTMLSax
  268. * @access protected
  269. */
  270. class XML_HTMLSax_Entities_Unparsed {
  271.     /**
  272.     * Original handler object
  273.     * @var object
  274.     * @access private
  275.     */
  276.     var $orig_obj;
  277.     /**
  278.     * Original handler method
  279.     * @var string
  280.     * @access private
  281.     */
  282.     var $orig_method;
  283.     /**
  284.     * Constructs XML_HTMLSax_Entities_Unparsed
  285.     * @param object handler object being decorated
  286.     * @param string original handler method
  287.     * @access protected
  288.     */
  289.     function XML_HTMLSax_Entities_Unparsed(&$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 XML_HTMLSax
  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. ?>