--- /dev/null
+<?php\r
+define('XML_HTMLSAX3_STATE_STOP', 0);\r
+define('XML_HTMLSAX3_STATE_START', 1);\r
+define('XML_HTMLSAX3_STATE_TAG', 2);\r
+define('XML_HTMLSAX3_STATE_OPENING_TAG', 3);\r
+define('XML_HTMLSAX3_STATE_CLOSING_TAG', 4);\r
+define('XML_HTMLSAX3_STATE_ESCAPE', 6);\r
+define('XML_HTMLSAX3_STATE_JASP', 7);\r
+define('XML_HTMLSAX3_STATE_PI', 8);\r
+class XML_HTMLSax3_StartingState {\r
+ function parse(&$context) {\r
+ $data = $context->scanUntilString('<');\r
+ if ($data != '') {\r
+ $context->handler_object_data->\r
+ {$context->handler_method_data}($context->htmlsax, $data);\r
+ }\r
+ $context->IgnoreCharacter();\r
+ return XML_HTMLSAX3_STATE_TAG;\r
+ }\r
+}\r
+class XML_HTMLSax3_TagState {\r
+ function parse(&$context) {\r
+ switch($context->ScanCharacter()) {\r
+ case '/':\r
+ return XML_HTMLSAX3_STATE_CLOSING_TAG;\r
+ break;\r
+ case '?':\r
+ return XML_HTMLSAX3_STATE_PI;\r
+ break;\r
+ case '%':\r
+ return XML_HTMLSAX3_STATE_JASP;\r
+ break;\r
+ case '!':\r
+ return XML_HTMLSAX3_STATE_ESCAPE;\r
+ break;\r
+ default:\r
+ $context->unscanCharacter();\r
+ return XML_HTMLSAX3_STATE_OPENING_TAG;\r
+ }\r
+ }\r
+}\r
+class XML_HTMLSax3_ClosingTagState {\r
+ function parse(&$context) {\r
+ $tag = $context->scanUntilCharacters('/>');\r
+ if ($tag != '') {\r
+ $char = $context->scanCharacter();\r
+ if ($char == '/') {\r
+ $char = $context->scanCharacter();\r
+ if ($char != '>') {\r
+ $context->unscanCharacter();\r
+ }\r
+ }\r
+ $context->handler_object_element->\r
+ {$context->handler_method_closing}($context->htmlsax, $tag, FALSE);\r
+ }\r
+ return XML_HTMLSAX3_STATE_START;\r
+ }\r
+}\r
+class XML_HTMLSax3_OpeningTagState {\r
+ function parseAttributes(&$context) {\r
+ $Attributes = array();\r
+ \r
+ $context->ignoreWhitespace();\r
+ $attributename = $context->scanUntilCharacters("=/> \n\r\t");\r
+ while ($attributename != '') {\r
+ $attributevalue = NULL;\r
+ $context->ignoreWhitespace();\r
+ $char = $context->scanCharacter();\r
+ if ($char == '=') {\r
+ $context->ignoreWhitespace();\r
+ $char = $context->ScanCharacter();\r
+ if ($char == '"') {\r
+ $attributevalue= $context->scanUntilString('"');\r
+ $context->IgnoreCharacter();\r
+ } else if ($char == "'") {\r
+ $attributevalue = $context->scanUntilString("'");\r
+ $context->IgnoreCharacter();\r
+ } else {\r
+ $context->unscanCharacter();\r
+ $attributevalue =\r
+ $context->scanUntilCharacters("> \n\r\t");\r
+ }\r
+ } else if ($char !== NULL) {\r
+ $attributevalue = NULL;\r
+ $context->unscanCharacter();\r
+ }\r
+ $Attributes[$attributename] = $attributevalue;\r
+ \r
+ $context->ignoreWhitespace();\r
+ $attributename = $context->scanUntilCharacters("=/> \n\r\t");\r
+ }\r
+ return $Attributes;\r
+ }\r
+\r
+ function parse(&$context) {\r
+ $tag = $context->scanUntilCharacters("/> \n\r\t");\r
+ if ($tag != '') {\r
+ $this->attrs = array();\r
+ $Attributes = $this->parseAttributes($context);\r
+ $char = $context->scanCharacter();\r
+ if ($char == '/') {\r
+ $char = $context->scanCharacter();\r
+ if ($char != '>') {\r
+ $context->unscanCharacter();\r
+ }\r
+ $context->handler_object_element->\r
+ {$context->handler_method_opening}($context->htmlsax, $tag, \r
+ $Attributes, TRUE);\r
+ $context->handler_object_element->\r
+ {$context->handler_method_closing}($context->htmlsax, $tag, \r
+ TRUE);\r
+ } else {\r
+ $context->handler_object_element->\r
+ {$context->handler_method_opening}($context->htmlsax, $tag, \r
+ $Attributes, FALSE);\r
+ }\r
+ }\r
+ return XML_HTMLSAX3_STATE_START;\r
+ }\r
+}\r
+\r
+class XML_HTMLSax3_EscapeState {\r
+ function parse(&$context) {\r
+ $char = $context->ScanCharacter();\r
+ if ($char == '-') {\r
+ $char = $context->ScanCharacter();\r
+ if ($char == '-') {\r
+ $context->unscanCharacter();\r
+ $context->unscanCharacter();\r
+ $text = $context->scanUntilString('-->');\r
+ $text .= $context->scanCharacter();\r
+ $text .= $context->scanCharacter();\r
+ } else {\r
+ $context->unscanCharacter();\r
+ $text = $context->scanUntilString('>');\r
+ }\r
+ } else if ( $char == '[') {\r
+ $context->unscanCharacter();\r
+ $text = $context->scanUntilString(']>');\r
+ $text.= $context->scanCharacter();\r
+ } else {\r
+ $context->unscanCharacter();\r
+ $text = $context->scanUntilString('>');\r
+ }\r
+\r
+ $context->IgnoreCharacter();\r
+ if ($text != '') {\r
+ $context->handler_object_escape->\r
+ {$context->handler_method_escape}($context->htmlsax, $text);\r
+ }\r
+ return XML_HTMLSAX3_STATE_START;\r
+ }\r
+}\r
+class XML_HTMLSax3_JaspState {\r
+ function parse(&$context) {\r
+ $text = $context->scanUntilString('%>');\r
+ if ($text != '') {\r
+ $context->handler_object_jasp->\r
+ {$context->handler_method_jasp}($context->htmlsax, $text);\r
+ }\r
+ $context->IgnoreCharacter();\r
+ $context->IgnoreCharacter();\r
+ return XML_HTMLSAX3_STATE_START;\r
+ }\r
+}\r
+class XML_HTMLSax3_PiState {\r
+ function parse(&$context) {\r
+ $target = $context->scanUntilCharacters(" \n\r\t");\r
+ $data = $context->scanUntilString('?>');\r
+ if ($data != '') {\r
+ $context->handler_object_pi->\r
+ {$context->handler_method_pi}($context->htmlsax, $target, $data);\r
+ }\r
+ $context->IgnoreCharacter();\r
+ $context->IgnoreCharacter();\r
+ return XML_HTMLSAX3_STATE_START;\r
+ }\r
+}\r
+?>
\ No newline at end of file