Jelajahi Sumber

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 tahun lalu
induk
melakukan
a1838f676e
1 mengubah file dengan 50 tambahan dan 0 penghapusan
  1. 50 0
      Libraries/LibWeb/Parser/HTMLTokenizer.cpp

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

@@ -2436,6 +2436,56 @@ _StartOfFunction:
             }
             }
             END_STATE
             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:
         default:
             TODO();
             TODO();
         }
         }