瀏覽代碼

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 年之前
父節點
當前提交
a1838f676e
共有 1 個文件被更改,包括 50 次插入0 次删除
  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();
         }