了解解析SVG文件格式

时间:2011-09-22 13:59:04

标签: c image svg

首先,gist here

要点中的Map.svg是我正在使用的原始地图,将它从维基媒体公共场所中删除。

现在,德克萨斯州的东部成本在原来的svg中有一块土地。我使用Inkscape删除它,并以一种奇怪的新方式重新编写路径。差异包含在要点中。

现在这种编写路径的新方式炸毁了我的解析器逻辑,我试图了解发生了什么。我希望有人在这里了解我所做的SVG文件格式。我承认我没有阅读整个SVG标准规范,但是我读过的部分没有提到任何关于丢失命令或相对坐标的内容。然后我可能一直在看不正确的规格,不确定。

我理解它的方式,SVG路径数据非常直接,如下所示:

(M,L,C)[point{n}] .... [Z]然后重复ad-nauseum

现在,我试图理解的部分是这个新的Inkscape已经写出了看起来像相对坐标的东西,没有像L这样的命令,或L在某种程度上暗示。我的直觉告诉我这里发生的事情对某人来说是显而易见的。为了我的价值,我正在用C语言进行解析。

1 个答案:

答案 0 :(得分:7)

如果您正在解析SVG,为什么不查看SVG规范?

  

在给定(x,y)坐标处开始新的子路径。 M (大写)表示将遵循绝对坐标; m (小写)表示将遵循相对坐标。如果moveto后跟多对坐标,则后续对将被视为隐式lineto命令。

来自:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataMovetoCommands

你说,

  

我理解它的方式,SVG路径数据非常简单,如下所示:(M,L,C)[point{n}] .... [Z]

我不知道你从哪里获得这些信息。停止从该来源获取您的信息。

  

我承认我还没有阅读整个SVG标准规范......

没人读完整个规格。只关注您目前正在实施的部分。您也可以从SVG Tiny开始,现在就使用该子集。

路径语法是编写解析器时应该开始的地方。如果您无法阅读,请购买一本关于编译器的书。

路径语法:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataBNF