2015-09-29 40 views
1

我一直在尋找在html5lib-tests下面的測試案例:試圖瞭解在html5lib測試ParseError數

{"description":"<!DOCTYPE\\u0008", 
"input":"<!DOCTYPE\u0008", 
"output":["ParseError", "ParseError", "ParseError", 
      ["DOCTYPE", "\u0008", null, null, false]]}, 

source

State      |Input char | Actions 
-------------------------------------------------------------------------------------------- 
Data State     | "<"  | -> TagOpenState 
TagOpenState    | "!"  | -> MarkupDeclarationOpenState 
MarkupDeclarationOpenState | "DOCTYPE" | -> DOCTYPE state 
DOCTYPE state    | "\u0008" | Parse error; -> before DOCTYPE name state (reconsume) 
before DOCTYPE name state | "\u0008" | DOCTYPE(name = "\u0008"); -> DOCTYPE name state 
DOCTYPE name state   | EOF  | Parse error. Set force quirks on. Emit DOCTYPE -> Data state. 
Data state     | EOF  | Emit EOF. 

我想知道在哪裏這三個錯誤是從哪裏來的?我只能跟蹤兩個,但我認爲我在某個地方發生邏輯錯誤。

回答

1

你缺少的一個是一個從「預處理輸入流」部分:

在範圍U + 0001到U + 0008 U + 000E至U的任何字符任何出現+ 001F,U + 007F至U + 009F,U + FDD0至U + FDEF以及字符U + 000B,U + FFFE,U + FFFF,U + 1FFFE,U + 1FFFF,U + 2FFFE,U + 2FFFF,U + 3FFFE,U + 3FFFF,U + 4FFFE,U + 4FFFF,U + 5FFFE,U + 5FFFF,U + 6FFFE,U + 6FFFF,U + 7FFFE,U + 7FFFF,U + U + 9FFFF,U + AFFFE,U + AFFFF,U + BFFFE,U + BFFFF,U + CFFFE,U + CFFFF,U + DFFFE,U + DFFFF,U + EFFFE,U + EFFFF,U + FFFFE,U + FFFFF,U + 10FFFE和U + 10FFFF是解析錯誤。這些都是控制字符或永久性未定義的Unicode字符(非字符)。

這導致在U + 0008字符到達標記器之前出現解析錯誤。鑑於標記器被定義爲從輸入流中讀取,標記器測試假定輸入流具有對其應用的正常預處理。