试图了解html5lib-test中的ParseError数量

时间:2015-09-29 11:52:54

标签: html5 testing specifications

我正在考虑html5lib-tests中的以下测试用例:

{"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 个答案:

答案 0 :(得分:1)

您缺少的是&#34;预处理输入流&#34;部分:

  

在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 + 8FFFE,U + 8FFFF,U + 9FFFE,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字符到达标记器之前发生解析错误。鉴于tokenizer被定义为从输入流中读取,tokenizer测试假定输入流已经应用了正常的预处理。