我正在尝试编写一个小 SVG 路径解析器/规范化器,并遇到了规范的最后一个问题:
据我了解,大多数命令都支持额外的隐式命令,当它们这样做并且处于相对模式时,“当前点”将在最后一个隐式命令之后更新,而不是在它们之间。
但是“moveTo”命令有些特殊,它允许隐含的“lineTo”命令。而“lineTo”命令它自己只会在最后一个隐式命令之后更新“当前点”:
从当前点到给定的 (x,y) 坐标画一条线,该坐标成为新的当前点。L(大写)表示后面跟着绝对坐标;l(小写)表示后面跟着相对坐标。可以指定多个坐标对来绘制折线。在命令结束时,新的当前点设置为提供的最后一组坐标。
我不确定带有附加“lineTo”的“moveTo”是做什么的。SVG 路径规范的摘录:
在给定的 (x,y) 坐标处开始一个新的子路径。M(大写)表示后面跟着绝对坐标;m(小写)表示将跟随相对坐标。如果 moveto 后跟多对坐标,则后续对将被视为隐式 lineto 命令。因此,如果 moveto 是相对的,则隐式 lineto 命令将是相对的,如果 moveto 是绝对的,则将是绝对的。如果相对 moveto (m) 作为路径的第一个元素出现,则将其视为一对绝对坐标。在这种情况下,即使初始 moveto 被解释为绝对 moveto,后续的坐标对也被视为相对坐标。
尤其是最后一句话,令人费解。
更糟糕的是,他们在SVGTiny Path Spec中写了另一个描述,而几乎所有其他内容都是一样的:
将在给定 (x,y) 坐标处开始一条新的子路径。这也应在给定坐标处建立一个新的当前点。如果相对“moveto”(m)作为“路径”的第一个元素出现,则应将其视为一对绝对坐标。如果 'moveto' 后跟多对坐标,则后续对将被视为隐含的 'lineto' 命令。
这是否意味着“当前点”在两者之间进行了更新(这将与其他所有内容不一致)还是只是他们在较新版本中更正的模棱两可的描述?