[ Index ]
 

Code source de PRADO 3.0.6

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/framework/3rdParty/SafeHtml/HTMLSax3/ -> States.php (source)

   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: States.php 1397 2006-09-07 07:55:53Z wei $
  23  //
  24  /**
  25  * Parsing states.
  26  * @package System.Security.SafeHtml
  27  * @version $Id: States.php 1397 2006-09-07 07:55:53Z wei $
  28  */
  29  /**
  30  * Define parser states
  31  */
  32  /*define('TSAX3_STATE_STOP', 0);
  33  define('TSAX3_STATE_START', 1);
  34  define('TSAX3_STATE_TAG', 2);
  35  define('TSAX3_STATE_OPENING_TAG', 3);
  36  define('TSAX3_STATE_CLOSING_TAG', 4);
  37  define('TSAX3_STATE_ESCAPE', 6);
  38  define('TSAX3_STATE_JASP', 7);
  39  define('TSAX3_STATE_PI', 8);
  40  */
  41  /**
  42  * StartingState searches for the start of any XML tag
  43  * @package System.Security.SafeHtml
  44  * @access protected
  45  */
  46  class TSax3_StartingState  {
  47      /**
  48      * @param TSax3_StateParser subclass
  49      * @return constant TSAX3_STATE_TAG
  50      * @access protected
  51      */
  52      function parse(&$context) {
  53          $data = $context->scanUntilString('<');
  54          if ($data != '') {
  55              $context->handler_object_data->
  56                  {$context->handler_method_data}($context->htmlsax, $data);
  57          }
  58          $context->IgnoreCharacter();
  59          return TSax3_StateParser::TSAX3_STATE_TAG;
  60      }
  61  }
  62  /**
  63  * Decides which state to move one from after StartingState
  64  * @package System.Security.SafeHtml
  65  * @access protected
  66  */
  67  class TSax3_TagState {
  68      /**
  69      * @param TSax3_StateParser subclass
  70      * @return constant the next state to move into
  71      * @access protected
  72      */
  73      function parse(&$context) {
  74          switch($context->ScanCharacter()) {
  75          case '/':
  76              return TSax3_StateParser::TSAX3_STATE_CLOSING_TAG;
  77              break;
  78          case '?':
  79              return TSax3_StateParser::TSAX3_STATE_PI;
  80              break;
  81          case '%':
  82              return TSax3_StateParser::TSAX3_STATE_JASP;
  83              break;
  84          case '!':
  85              return TSax3_StateParser::TSAX3_STATE_ESCAPE;
  86              break;
  87          default:
  88              $context->unscanCharacter();
  89              return TSax3_StateParser::TSAX3_STATE_OPENING_TAG;
  90          }
  91      }
  92  }
  93  /**
  94  * Dealing with closing XML tags
  95  * @package System.Security.SafeHtml
  96  * @access protected
  97  */
  98  class TSax3_ClosingTagState {
  99      /**
 100      * @param TSax3_StateParser subclass
 101      * @return constant TSAX3_STATE_START
 102      * @access protected
 103      */
 104      function parse(&$context) {
 105          $tag = $context->scanUntilCharacters('/>');
 106          if ($tag != '') {
 107              $char = $context->scanCharacter();
 108              if ($char == '/') {
 109                  $char = $context->scanCharacter();
 110                  if ($char != '>') {
 111                      $context->unscanCharacter();
 112                  }
 113              }
 114              $context->handler_object_element->
 115                  {$context->handler_method_closing}($context->htmlsax, $tag, FALSE);
 116          }
 117          return TSax3_StateParser::TSAX3_STATE_START;
 118      }
 119  }
 120  /**
 121  * Dealing with opening XML tags
 122  * @package System.Security.SafeHtml
 123  * @access protected
 124  */
 125  class TSax3_OpeningTagState {
 126      /**
 127      * Handles attributes
 128      * @param string attribute name
 129      * @param string attribute value
 130      * @return void
 131      * @access protected
 132      * @see TSax3_AttributeStartState
 133      */
 134      function parseAttributes(&$context) {
 135          $Attributes = array();
 136      
 137          $context->ignoreWhitespace();
 138          $attributename = $context->scanUntilCharacters("=/> \n\r\t");
 139          while ($attributename != '') {
 140              $attributevalue = NULL;
 141              $context->ignoreWhitespace();
 142              $char = $context->scanCharacter();
 143              if ($char == '=') {
 144                  $context->ignoreWhitespace();
 145                  $char = $context->ScanCharacter();
 146                  if ($char == '"') {
 147                      $attributevalue= $context->scanUntilString('"');
 148                      $context->IgnoreCharacter();
 149                  } else if ($char == "'") {
 150                      $attributevalue = $context->scanUntilString("'");
 151                      $context->IgnoreCharacter();
 152                  } else {
 153                      $context->unscanCharacter();
 154                      $attributevalue =
 155                          $context->scanUntilCharacters("> \n\r\t");
 156                  }
 157              } else if ($char !== NULL) {
 158                  $attributevalue = NULL;
 159                  $context->unscanCharacter();
 160              }
 161              $Attributes[$attributename] = $attributevalue;
 162              
 163              $context->ignoreWhitespace();
 164              $attributename = $context->scanUntilCharacters("=/> \n\r\t");
 165          }
 166          return $Attributes;
 167      }
 168  
 169      /**
 170      * @param TSax3_StateParser subclass
 171      * @return constant TSAX3_STATE_START
 172      * @access protected
 173      */
 174      function parse(&$context) {
 175          $tag = $context->scanUntilCharacters("/> \n\r\t");
 176          if ($tag != '') {
 177              $this->attrs = array();
 178              $Attributes = $this->parseAttributes($context);
 179              $char = $context->scanCharacter();
 180              if ($char == '/') {
 181                  $char = $context->scanCharacter();
 182                  if ($char != '>') {
 183                      $context->unscanCharacter();
 184                  }
 185                  $context->handler_object_element->
 186                      {$context->handler_method_opening}($context->htmlsax, $tag, 
 187                      $Attributes, TRUE);
 188                  $context->handler_object_element->
 189                      {$context->handler_method_closing}($context->htmlsax, $tag, 
 190                      TRUE);
 191              } else {
 192                  $context->handler_object_element->
 193                      {$context->handler_method_opening}($context->htmlsax, $tag, 
 194                      $Attributes, FALSE);
 195              }
 196          }
 197          return TSax3_StateParser::TSAX3_STATE_START;
 198      }
 199  }
 200  
 201  /**
 202  * Deals with XML escapes handling comments and CDATA correctly
 203  * @package System.Security.SafeHtml
 204  * @access protected
 205  */
 206  class TSax3_EscapeState {
 207      /**
 208      * @param TSax3_StateParser subclass
 209      * @return constant TSAX3_STATE_START
 210      * @access protected
 211      */
 212      function parse(&$context) {
 213          $char = $context->ScanCharacter();
 214          if ($char == '-') {
 215              $char = $context->ScanCharacter();
 216              if ($char == '-') {
 217                  $context->unscanCharacter();
 218                  $context->unscanCharacter();
 219                  $text = $context->scanUntilString('-->');
 220                  $text .= $context->scanCharacter();
 221                  $text .= $context->scanCharacter();
 222              } else {
 223                  $context->unscanCharacter();
 224                  $text = $context->scanUntilString('>');
 225              }
 226          } else if ( $char == '[') {
 227              $context->unscanCharacter();
 228              $text = $context->scanUntilString(']>');
 229              $text.= $context->scanCharacter();
 230          } else {
 231              $context->unscanCharacter();
 232              $text = $context->scanUntilString('>');
 233          }
 234  
 235          $context->IgnoreCharacter();
 236          if ($text != '') {
 237              $context->handler_object_escape->
 238              {$context->handler_method_escape}($context->htmlsax, $text);
 239          }
 240          return TSax3_StateParser::TSAX3_STATE_START;
 241      }
 242  }
 243  /**
 244  * Deals with JASP/ASP markup
 245  * @package System.Security.SafeHtml
 246  * @access protected
 247  */
 248  class TSax3_JaspState {
 249      /**
 250      * @param TSax3_StateParser subclass
 251      * @return constant TSAX3_STATE_START
 252      * @access protected
 253      */
 254      function parse(&$context) {
 255          $text = $context->scanUntilString('%>');
 256          if ($text != '') {
 257              $context->handler_object_jasp->
 258                  {$context->handler_method_jasp}($context->htmlsax, $text);
 259          }
 260          $context->IgnoreCharacter();
 261          $context->IgnoreCharacter();
 262          return TSax3_StateParser::TSAX3_STATE_START;
 263      }
 264  }
 265  /**
 266  * Deals with XML processing instructions
 267  * @package System.Security.SafeHtml
 268  * @access protected
 269  */
 270  class TSax3_PiState {
 271      /**
 272      * @param TSax3_StateParser subclass
 273      * @return constant TSAX3_STATE_START
 274      * @access protected
 275      */
 276      function parse(&$context) {
 277          $target = $context->scanUntilCharacters(" \n\r\t");
 278          $data = $context->scanUntilString('?>');
 279          if ($data != '') {
 280              $context->handler_object_pi->
 281              {$context->handler_method_pi}($context->htmlsax, $target, $data);
 282          }
 283          $context->IgnoreCharacter();
 284          $context->IgnoreCharacter();
 285          return TSax3_StateParser::TSAX3_STATE_START;
 286      }
 287  }
 288  ?>


Généré le : Sun Feb 25 21:07:04 2007 par Balluche grâce à PHPXref 0.7