我正在查看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.
我想知道这三个错误是从哪里来的?我只能追踪两个,但我想我在某个地方犯了逻辑错误。
最佳答案
您缺少的是“预处理输入流”部分中的一个:
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字符到达令牌生成器之前导致解析错误。给定标记符定义为从输入流读取,标记符测试假定输入流已对其应用了正常的预处理。
关于html5 - 试图了解html5lib-test中ParseError的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32843298/