[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

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


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7