有关树构建的一些问题[html规范]

时间:2018-08-10 03:24:42

标签: html standards

我知道通常不会在一个问题中提出一堆问题,只是每个问题都与前一个问题相互联系。再问一堆单独的问题,我认为那是错误的。


所以我首先要开始的是:

  

由于每个令牌都是从令牌生成器发出的,因此用户代理必须   请按照以下列表中的适当步骤操作,即   树木施工调度员:

我正确理解,令牌分析器将在分析源文本中的所有令牌后立即完成其工作,也就是说,令牌分析器一旦创建新令牌,便将其发送到树管理器中,然后继续使令牌。我说的对吗?

这些单词看起来像这样:

lexical analysis
created a token
placed in the tree dispatcher
lexical analysis
created a token
placed in the tree dispatcher
...
lexical analysis
no tokens created

正如您在树结构调度程序中看到的那样,有很多项目,我不完全理解它们。

  
      
  • 如果打开的元素堆栈为空
  •   
  • 如果调整后的当前节点是HTML命名空间中的元素
  •   
  • 如果调整后的当前节点是MathML文本集成点,并且标记是开始标记,其标记名称既不是“ mglyph”也不是   “ malignmark”
  •   
  • 如果调整后的当前节点是MathML文本集成点,并且令牌是字符令牌
  •   
  • 如果调整后的当前节点是MathML注解xml元素,并且令牌是标签名称为“ svg”的起始标签
  •   
  • 如果调整后的当前节点是HTML集成点,并且令牌是开始标签
  •   
  • 如果调整后的当前节点是HTML集成点,并且令牌是字符令牌
  •   
  • 如果令牌是文件结束令牌

         

    根据本节中给出的规则处理令牌   对应于HTML内容中的当前插入模式。

  •   
  • 否则

         

    根据本节中给出的规则处理令牌   解析外部内容中的令牌。

  •   

例如,据我了解,有术语调整后的当前节点,它可以是任何标签,例如<section>。这是一个没有任何节点的节点-<section></section>。我希望看到所有部分的示例,其中包含已调整的当前节点。例如,如果调整后的当前节点是MathML注解xml元素,并且令牌是标签名称为“ svg”的开始标签:此处说该节点为{{1} }(来自MathML名称空间),并且起始令牌是名称为annotation-xml的标签。如果您通过文字表示该项目,则它应如下所示:

svg

树结构分配器中的最后一项将以外部内容进行解析。在这一点上,我们还看到了很多项目如何从令牌生成器感知令牌。如果我理解正确,我们可以从树结构调度程序(<annotation-xml> <!-- this is adjusted current node --> <svg> <!-- this is start token named svg --> <!-- something content here --> </svg> </annotation-xml> )的最后一项到达此处,也就是说,我们应该具有这样一种结构来获取外部内容:Otherwise或{{ 1}}。


接下来,指向-<svg></svg>。对说明感兴趣。

  
      
  • 开始标记,其标记名称是以下之一:“ b”,“ big”,“ blockquote”,“ body”,“ br”,“ center”,“ code”,“ dd”,“ div “,” dl“,” dt“,” em“,   “嵌入”,“ h1”,“ h2”,“ h3”,“ h4”,“ h5”,“ h6”,“ head”,“ hr”,“ i”,“ img”,   “ li”,“ listing”,“ menu”,“ meta”,“ nobr”,“ ol”,“ p”,“ pre”,“ ruby​​”,   “ s”,“ small”,“ span”,“ strong”,“ strike”,“ sub”,“ sup”,“ table”,“ tt”,   “ u”,“ ul”,“ var”
  •   
  • 起始标记,其标记名称为“字体”(如果令牌具有名为“ color”,“ face”或“ size”的任何属性)

         

    解析错误。

         

    如果解析器最初是为HTML片段解析创建的   算法,然后按照“任何其他开始标签”条目中所述进行操作   下面。 (碎片情况)

         

    否则:

         

    从打开的元素堆栈中弹出一个元素,然后继续弹出   从打开的元素堆栈到当前节点的更多元素   是MathML文本集成点,HTML集成点或   HTML名称空间中的元素。

         

    然后,重新处理令牌。

  •   

据我了解,这不是一条指令,这里至少有3条指令,我想了解一下这一点,每个示例中有3条指令。

例如:<math></math>时的结构应如何,A start tag...时的结构应如何,Parse error时的结构应如何?

1 个答案:

答案 0 :(得分:0)

  

令牌生成器创建新令牌后,立即将其释放到树管理器中,然后继续生成令牌。我说的对吗?

否,它必须等待树构造阶段处理令牌,因为这可能会影响令牌生成器接下来要做的事情。正如规范在12.2.5 Tokenization中所说:

  

发出令牌时,必须在树构建阶段立即对其进行处理。树的构造阶段可以影响标记化阶段的状态,并且可以在流中插入其他字符。

(我想我不理解您的任何其他问题。)