⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xml_htmlsax_states.php

📁 ATutor是一个学习管理系统(LCMS/LMS), 为教师和学生建立一个网络教学平台。
💻 PHP
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: *///// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2002 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license,      |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/3_0.txt.                                  |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Alexander Zhukov <alex@veresk.ru> Original port from Python |// | Authors: Harry Fuecks <hfuecks@phppatterns.com> Port to PEAR + more  |// | Authors: Many @ Sitepointforums Advanced PHP Forums                  |// +----------------------------------------------------------------------+//// $Id: XML_HTMLSax_States.php 2291 2004-11-16 19:35:41Z joel $///*** Main parser components* @package XML_HTMLSax* @version $Id: XML_HTMLSax_States.php 2291 2004-11-16 19:35:41Z joel $*//*** Define parser states*/define('XML_HTMLSAX_STATE_STOP', 0);define('XML_HTMLSAX_STATE_START', 1);define('XML_HTMLSAX_STATE_TAG', 2);define('XML_HTMLSAX_STATE_OPENING_TAG', 3);define('XML_HTMLSAX_STATE_CLOSING_TAG', 4);define('XML_HTMLSAX_STATE_ESCAPE', 6);define('XML_HTMLSAX_STATE_JASP', 7);define('XML_HTMLSAX_STATE_PI', 8);/*** StartingState searches for the start of any XML tag* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_StartingState  {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_TAG    * @access protected    */    function parse(&$context) {        $data = $context->scanUntilString('<');        if ($data != '') {            $context->handler_object_data->                {$context->handler_method_data}($context->htmlsax, $data);        }        $context->IgnoreCharacter();        return XML_HTMLSAX_STATE_TAG;    }}/*** Decides which state to move one from after StartingState* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_TagState {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant the next state to move into    * @access protected    */    function parse(&$context) {        switch($context->ScanCharacter()) {        case '/':            return XML_HTMLSAX_STATE_CLOSING_TAG;            break;        case '?':            return XML_HTMLSAX_STATE_PI;            break;        case '%':            return XML_HTMLSAX_STATE_JASP;            break;        case '!':            return XML_HTMLSAX_STATE_ESCAPE;            break;        default:            $context->unscanCharacter();            return XML_HTMLSAX_STATE_OPENING_TAG;        }    }}/*** Dealing with closing XML tags* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_ClosingTagState {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_START    * @access protected    */    function parse(&$context) {        $tag = $context->scanUntilCharacters('/>');        if ($tag != '') {            $char = $context->scanCharacter();            if ($char == '/') {                $char = $context->scanCharacter();                if ($char != '>') {                    $context->unscanCharacter();                }            }            $context->handler_object_element->                {$context->handler_method_closing}($context->htmlsax, $tag, FALSE);        }        return XML_HTMLSAX_STATE_START;    }}/*** Dealing with opening XML tags* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_OpeningTagState {    /**    * Handles attributes    * @param string attribute name    * @param string attribute value    * @return void    * @access protected    * @see XML_HTMLSax_AttributeStartState    */    function parseAttributes(&$context) {        $Attributes = array();            $context->ignoreWhitespace();        $attributename = $context->scanUntilCharacters("=/> \n\r\t");        while ($attributename != '') {            $attributevalue = NULL;            $context->ignoreWhitespace();            $char = $context->scanCharacter();            if ($char == '=') {                $context->ignoreWhitespace();                $char = $context->ScanCharacter();                if ($char == '"') {                    $attributevalue= $context->scanUntilString('"');                    $context->IgnoreCharacter();                } else if ($char == "'") {                    $attributevalue = $context->scanUntilString("'");                    $context->IgnoreCharacter();                } else {                    $context->unscanCharacter();                    $attributevalue =                        $context->scanUntilCharacters("> \n\r\t");                }            } else if ($char !== NULL) {                $attributevalue = true;                $context->unscanCharacter();            }            $Attributes[$attributename] = $attributevalue;                        $context->ignoreWhitespace();            $attributename = $context->scanUntilCharacters("=/> \n\r\t");        }        return $Attributes;    }    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_START    * @access protected    */    function parse(&$context) {        $tag = $context->scanUntilCharacters("/> \n\r\t");        if ($tag != '') {            $this->attrs = array();            $Attributes = $this->parseAttributes($context);            $char = $context->scanCharacter();            if ($char == '/') {                $char = $context->scanCharacter();                if ($char != '>') {                    $context->unscanCharacter();                }                $context->handler_object_element->                    {$context->handler_method_opening}($context->htmlsax, $tag,                     $Attributes, TRUE);                $context->handler_object_element->                    {$context->handler_method_closing}($context->htmlsax, $tag,                     TRUE);            } else {                $context->handler_object_element->                    {$context->handler_method_opening}($context->htmlsax, $tag,                     $Attributes, FALSE);            }        }        return XML_HTMLSAX_STATE_START;    }}/*** Deals with XML escapes handling comments and CDATA correctly* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_EscapeState {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_START    * @access protected    */    function parse(&$context) {        if ($context->parser_options['XML_OPTION_FULL_ESCAPES']==0) {            $char = $context->ScanCharacter();            if ($char == '-') {                $char = $context->ScanCharacter();                if ($char == '-') {                    $text = $context->scanUntilString('-->');                    $context->IgnoreCharacter();                    $context->IgnoreCharacter();                } else {                    $context->unscanCharacter();                    $text = $context->scanUntilString('>');                }            } else if ( $char == '[') {                $context->scanUntilString('CDATA[');                for ( $i=0;$i<6;$i++ ) {                    $context->IgnoreCharacter();                }                $text = $context->scanUntilString(']]>');                $context->IgnoreCharacter();                $context->IgnoreCharacter();            } else {                $context->unscanCharacter();                $text = $context->scanUntilString('>');            }        } else {            $text = $context->scanUntilString('>');        }        $context->IgnoreCharacter();        if ($text != '') {            $context->handler_object_escape->            {$context->handler_method_escape}($context->htmlsax, $text);        }        return XML_HTMLSAX_STATE_START;    }}/*** Deals with JASP/ASP markup* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_JaspState {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_START    * @access protected    */    function parse(&$context) {        $text = $context->scanUntilString('%>');        if ($text != '') {            $context->handler_object_jasp->                {$context->handler_method_jasp}($context->htmlsax, $text);        }        $context->IgnoreCharacter();        $context->IgnoreCharacter();        return XML_HTMLSAX_STATE_START;    }}/*** Deals with XML processing instructions* @package XML_HTMLSax* @access protected*/class XML_HTMLSax_PiState {    /**    * @param XML_HTMLSax_StateParser subclass    * @return constant XML_HTMLSAX_STATE_START    * @access protected    */    function parse(&$context) {        $target = $context->scanUntilCharacters(" \n\r\t");        $data = $context->scanUntilString('?>');        if ($data != '') {            $context->handler_object_pi->            {$context->handler_method_pi}($context->htmlsax, $target, $data);        }        $context->IgnoreCharacter();        $context->IgnoreCharacter();        return XML_HTMLSAX_STATE_START;    }}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -