[SPIP] +2.1.12
[velocampus/web/www.git] / www / extensions / safehtml / lib / safehtml / classes / HTMLSax3 / States.php
diff --git a/www/extensions/safehtml/lib/safehtml/classes/HTMLSax3/States.php b/www/extensions/safehtml/lib/safehtml/classes/HTMLSax3/States.php
new file mode 100644 (file)
index 0000000..eb4a315
--- /dev/null
@@ -0,0 +1,179 @@
+<?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