Browse Source

LibWeb: Implement all CDATA tokenizer states

Even though we haven't implemented any switches to these states yet,
we may as well have them ready for when we do implement the switches.
Luke 5 years ago
parent
commit
a1838f676e
1 changed files with 50 additions and 0 deletions
  1. 50 0
      Libraries/LibWeb/Parser/HTMLTokenizer.cpp

+ 50 - 0
Libraries/LibWeb/Parser/HTMLTokenizer.cpp

@@ -2436,6 +2436,56 @@ _StartOfFunction:
             }
             END_STATE
 
+            BEGIN_STATE(CDATASection)
+            {
+                ON(']')
+                {
+                    SWITCH_TO(CDATASectionBracket);
+                }
+                ON_EOF
+                {
+                    PARSE_ERROR();
+                    EMIT_EOF;
+                }
+                ANYTHING_ELSE
+                {
+                    EMIT_CURRENT_CHARACTER;
+                }
+            }
+            END_STATE
+
+            BEGIN_STATE(CDATASectionBracket)
+            {
+                ON(']')
+                {
+                    SWITCH_TO(CDATASectionEnd);
+                }
+                ANYTHING_ELSE
+                {
+                    EMIT_CHARACTER_AND_RECONSUME_IN(']', CDATASection);
+                }
+            }
+            END_STATE
+
+            BEGIN_STATE(CDATASectionEnd)
+            {
+                ON(']')
+                {
+                    EMIT_CHARACTER(']');
+                }
+                ON('>')
+                {
+                    SWITCH_TO(Data);
+                }
+                ANYTHING_ELSE
+                {
+                    m_queued_tokens.enqueue(HTMLToken::make_character(']'));
+                    m_queued_tokens.enqueue(HTMLToken::make_character(']'));
+                    RECONSUME_IN(CDATASection);
+                }
+            }
+            END_STATE
+
         default:
             TODO();
         }