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

  1. <?php
  2. //
  3. // +---------------------------------------------------------------------------+
  4. // | PEAR :: XML :: Transformer :: PHP Namespace Handler                       |
  5. // +---------------------------------------------------------------------------+
  6. // | Copyright (c) 2002-2004 Sebastian Bergmann <sb@sebastian-bergmann.de> and |
  7. // |                         Kristian K÷hntopp <kris@koehntopp.de>.            |
  8. // +---------------------------------------------------------------------------+
  9. // | This source file is subject to version 3.00 of the PHP License,           |
  10. // | that is available at http://www.php.net/license/3_0.txt.                  |
  11. // | If you did not receive a copy of the PHP license and are unable to        |
  12. // | obtain it through the world-wide-web, please send a note to               |
  13. // | license@php.net so we can mail you a copy immediately.                    |
  14. // +---------------------------------------------------------------------------+
  15. //
  16. // $Id: PHP.php,v 1.14.2.1 2004/02/06 15:41:59 sebastian Exp $
  17. //
  18.  
  19. require_once 'XML/Transformer/Namespace.php';
  20.  
  21. /**
  22. * Handler for the PHP Namespace.
  23. *
  24. * Example
  25. *
  26. *   <?php
  27. *   require_once 'XML/Transformer_OutputBuffer.php';
  28. *   require_once 'XML/Transformer/Namespace/PHP.php';
  29. *
  30. *   $t = new XML_Transformer_OutputBuffer;
  31. *   $t->overloadNamespace('php', new XML_Transformer_Namespace_PHP);
  32. *   $t->start();
  33. *   ?>
  34. *   <dl>
  35. *     <dd>Current time: <php:expr>time()</php:expr></dd>
  36. *     <php:setvariable name="foo">bar</php:setvariable>
  37. *     <dd>foo = <php:getvariable name="foo"/></dd>
  38. *   </dl>
  39. *
  40. *   <php:namespace name="my">
  41. *    <php:define name="tag">
  42. *     <h1 align="$align">$content</h1>
  43. *    </php:define>
  44. *   </php:namespace>
  45. *
  46. *   <my:tag align="center">Some Text</my:tag>
  47. *
  48. * Output
  49. *
  50. *   <dl>
  51. *     <dd>Current time: 1032158587</dd>
  52. *     <dd>foo = bar</dd>
  53. *   </dl>
  54. *
  55. *   <h1 align="center">Some Text</h1>
  56. *
  57. * @author  Sebastian Bergmann <sb@sebastian-bergmann.de>
  58. * @author  Kristian K÷hntopp <kris@koehntopp.de>
  59. * @version $Revision: 1.14.2.1 $
  60. * @access  public
  61. */
  62. class XML_Transformer_Namespace_PHP extends XML_Transformer_Namespace {
  63.     // {{{ Members
  64.  
  65.     /**
  66.     * @var    boolean
  67.     * @access public
  68.     */
  69.     var $defaultNamespacePrefix = 'php';
  70.  
  71.     /**
  72.     * @var    string
  73.     * @access private
  74.     */
  75.     var $_defineName;
  76.  
  77.     /**
  78.     * @var    string
  79.     * @access private
  80.     */
  81.     var $_namespace = 'define';
  82.  
  83.     /**
  84.     * @var    string
  85.     * @access private
  86.     */
  87.     var $_inNamespace = false;
  88.  
  89.     /**
  90.     * @var    string
  91.     * @access private
  92.     */
  93.     var $_namespaceClassDefinition = '';
  94.  
  95.     /**
  96.     * @var    string
  97.     * @access private
  98.     */
  99.     var $_variable = '';
  100.  
  101.     // }}}
  102.     // {{{ function start_define($attributes)
  103.  
  104.     /**
  105.     * @param  array
  106.     * @return string
  107.     * @access public
  108.     */
  109.     function start_define($attributes) {
  110.         if ($this->_inNamespace) {
  111.             $this->_defineName = $attributes['name'];
  112.         }
  113.         
  114.         $this->getLock();
  115.         return '';
  116.     }
  117.  
  118.     // }}}
  119.     // {{{ function end_define($cdata)
  120.  
  121.     /**
  122.     * @param  string
  123.     * @return string
  124.     * @access public
  125.     */
  126.     function end_define($cdata) {
  127.         if (!$this->_inNamespace)
  128.             return '';
  129.  
  130.         $this->releaseLock();
  131.  
  132.         $this->_namespaceClassDefinition .= sprintf('
  133.           var $%s_attributes = array();
  134.  
  135.           function start_%s($att) {
  136.               $this->%s_attributes = $att;
  137.  
  138.               return "";
  139.           }
  140.  
  141.           function end_%s($content) {
  142.               foreach ($this->%s_attributes as $__k => $__v) {
  143.                   $$__k = $__v;
  144.               }
  145.               
  146.               $str = "%s";
  147.               return $str;
  148.           }',
  149.  
  150.           $this->_defineName,
  151.           $this->_defineName,
  152.           $this->_defineName,
  153.           $this->_defineName,
  154.           $this->_defineName,
  155.           addslashes($cdata)
  156.         );
  157.  
  158.         return '';
  159.     }
  160.  
  161.     // }}}
  162.     // {{{ function start_namespace($attributes)
  163.  
  164.     /**
  165.     * @param  array
  166.     * @return string
  167.     * @access public
  168.     */
  169.     function start_namespace($attributes) {
  170.         $this->_inNamespace = true;
  171.         $this->_namespace   = $attributes['name'];
  172.  
  173.         $classname = 'PEAR_XML_TRANSFORMER_NAMESPACE_PHP_' . $this->_namespace;
  174.  
  175.         $this->_namespaceClassDefinition = sprintf(
  176.           'class %s extends XML_Transformer_Namespace {',
  177.           $classname
  178.         );
  179.  
  180.         return '';
  181.     }
  182.  
  183.     // }}}
  184.     // {{{ function end_namespace($cdata)
  185.  
  186.     /**
  187.     * @param  string
  188.     * @return string
  189.     * @access public
  190.     */
  191.     function end_namespace($cdata) {
  192.         $classname = 'PEAR_XML_TRANSFORMER_NAMESPACE_PHP_' . $this->_namespace;
  193.  
  194.         eval($this->_namespaceClassDefinition . ' };');
  195.         $this->_namespaceClassDefinition = '';
  196.  
  197.         $this->_transformer->overloadNamespace(
  198.           $this->_namespace,
  199.           new $classname,
  200.           true
  201.         );
  202.  
  203.         $this->_namespace   = '';
  204.         $this->_inNamespace = false;
  205.  
  206.         return '';
  207.     }
  208.  
  209.     // }}}
  210.     // {{{ function start_expr($attributes)
  211.  
  212.     /**
  213.     * @param  array
  214.     * @return string
  215.     * @access public
  216.     */
  217.     function start_expr($attributes) {}
  218.  
  219.     // }}}
  220.     // {{{ function end_expr($cdata)
  221.  
  222.     /**
  223.     * @param  string
  224.     * @return string
  225.     * @access public
  226.     */
  227.     function end_expr($cdata) {
  228.         return eval('return ' . $cdata . ';');
  229.     }
  230.  
  231.     // }}}
  232.     // {{{ function start_logic($attributes)
  233.  
  234.     /**
  235.     * @param  array
  236.     * @return string
  237.     * @access public
  238.     */
  239.     function start_logic($attributes) {}
  240.  
  241.     // }}}
  242.     // {{{ function end_logic($cdata)
  243.  
  244.     /**
  245.     * @param  string
  246.     * @return string
  247.     * @access public
  248.     */
  249.     function end_logic($cdata) {
  250.         // This does not actually work in PHP 4.2.3,
  251.         // when using XML_Transformer_OutputBuffer.
  252.         // It should, though.
  253.         ob_start();
  254.         eval($cdata);
  255.         $buffer = ob_get_contents();
  256.         ob_end_clean();
  257.         return $buffer;
  258.     }
  259.  
  260.     // }}}
  261.     // {{{ function start_getparameter($attributes)
  262.  
  263.     /**
  264.     * @param  array
  265.     * @return string
  266.     * @access public
  267.     */
  268.     function start_getparameter($attributes) {
  269.         return isset($_GET[$attributes['name']]) ? $_GET[$attributes['name']] : '';
  270.     }
  271.  
  272.     // }}}
  273.     // {{{ function end_getparameter($cdata)
  274.  
  275.     /**
  276.     * @param  string
  277.     * @return string
  278.     * @access public
  279.     */
  280.     function end_getparameter($cdata) {
  281.         return $cdata;
  282.     }
  283.  
  284.     // }}}
  285.     // {{{ function start_postparameter($attributes)
  286.  
  287.     /**
  288.     * @param  array
  289.     * @return string
  290.     * @access public
  291.     */
  292.     function start_postparameter($attributes) {
  293.         return isset($_POST[$attributes['name']]) ? $_POST[$attributes['name']] : '';
  294.     }
  295.  
  296.     // }}}
  297.     // {{{ function end_postparameter($cdata)
  298.  
  299.     /**
  300.     * @param  string
  301.     * @return string
  302.     * @access public
  303.     */
  304.     function end_postparameter($cdata) {
  305.         return $cdata;
  306.     }
  307.  
  308.     // }}}
  309.     // {{{ function start_cookievariable($attributes)
  310.  
  311.     /**
  312.     * @param  array
  313.     * @return string
  314.     * @access public
  315.     */
  316.     function start_cookievariable($attributes) {
  317.         return isset($_COOKIE[$attributes['name']]) ? $_COOKIE[$attributes['name']] : '';
  318.     }
  319.  
  320.     // }}}
  321.     // {{{ function end_cookievariable($cdata)
  322.  
  323.     /**
  324.     * @param  string
  325.     * @return string
  326.     * @access public
  327.     */
  328.     function end_cookievariable($cdata) {
  329.         return $cdata;
  330.     }
  331.  
  332.     // }}}
  333.     // {{{ function start_servervariable($attributes)
  334.  
  335.     /**
  336.     * @param  array
  337.     * @return string
  338.     * @access public
  339.     */
  340.     function start_servervariable($attributes) {
  341.         return isset($_SERVER[$attributes['name']]) ? $_SERVER[$attributes['name']] : '';
  342.     }
  343.  
  344.     // }}}
  345.     // {{{ function end_servervariable($cdata)
  346.  
  347.     /**
  348.     * @param  string
  349.     * @return string
  350.     * @access public
  351.     */
  352.     function end_servervariable($cdata) {
  353.         return $cdata;
  354.     }
  355.  
  356.     // }}}
  357.     // {{{ function start_sessionvariable($attributes)
  358.  
  359.     /**
  360.     * @param  array
  361.     * @return string
  362.     * @access public
  363.     */
  364.     function start_sessionvariable($attributes) {
  365.         return isset($_SESSION[$attributes['name']]) ? $_SESSION[$attributes['name']] : '';
  366.     }
  367.  
  368.     // }}}
  369.     // {{{ function end_sessionvariable($cdata)
  370.  
  371.     /**
  372.     * @param  string
  373.     * @return string
  374.     * @access public
  375.     */
  376.     function end_sessionvariable($cdata) {
  377.         return $cdata;
  378.     }
  379.  
  380.     // }}}
  381.     // {{{ function start_getvariable($attributes)
  382.  
  383.     /**
  384.     * @param  array
  385.     * @return string
  386.     * @access public
  387.     */
  388.     function start_getvariable($attributes) {
  389.         return isset($GLOBALS[$attributes['name']]) ? $GLOBALS[$attributes['name']] : '';
  390.     }
  391.  
  392.     // }}}
  393.     // {{{ function end_getvariable($cdata)
  394.  
  395.     /**
  396.     * @param  string
  397.     * @return string
  398.     * @access public
  399.     */
  400.     function end_getvariable($cdata) {
  401.         return $cdata;
  402.     }
  403.  
  404.     // }}}
  405.     // {{{ function start_setvariable($attributes)
  406.  
  407.     /**
  408.     * @param  array
  409.     * @return string
  410.     * @access public
  411.     */
  412.     function start_setvariable($attributes) {
  413.         $this->_variable = isset($attributes['name']) ? $attributes['name'] : '';
  414.  
  415.         return '';
  416.     }
  417.  
  418.     // }}}
  419.     // {{{ function end_setvariable($cdata)
  420.  
  421.     /**
  422.     * @param  string
  423.     * @return string
  424.     * @access public
  425.     */
  426.     function end_setvariable($cdata) {
  427.         if ($this->_variable != '') {
  428.             $GLOBALS[$this->_variable] = $cdata;
  429.             $this->_variable = '';
  430.         }
  431.  
  432.         return '';
  433.     }
  434.  
  435.     // }}}
  436. }
  437.  
  438. /*
  439.  * vim600:  et sw=2 ts=2 fdm=marker
  440.  * vim<600: et sw=2 ts=2
  441.  */
  442. ?>
  443.