2011-09-22 59 views
2

首先,gist here幫助理解解析SVG文件格式

Map.svg的要點是原來的地圖我的工作,得到了它關閉維基共享資源。

現在,在原來的svg中,德克薩斯州的東部地區有一塊地塊。我使用Inkscape將其刪除,並以一種奇怪的新方式重新編寫了路徑。差異包括在要點中。

現在,這種新的編寫路徑的方式打破了我的解析器邏輯,我試圖理解發生了什麼。我希望這裏有人知道更多關於我所做的SVG文件格式。我承認我沒有讀完整個SVG標準規範,但是我讀過的部分沒有提及缺少命令或相對座標的任何內容。然後,我可能再次看到不正確的規格,不確定。

我的理解是這樣的,SVG路徑數據是非常簡單的,像這樣:

(M,L,C)[point{n}] .... [Z]然後重複廣告nauseum

現在我想了解的部分是這個新的Inkscape中有寫出似乎是相對座標的東西,沒有像L這樣的命令,或者L以某種方式暗示。我的直覺告訴我,這裏發生的事情對某人來說是顯而易見的。對於什麼值得我在C中進行解析。

+2

大寫路徑命令是全球性的,下殼體是相對的。 – robertc

回答

6

如果您解析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

+0

謝謝,現在我知道我正在尋找正確的源材料。我認爲隱含的線-tos是正在發生的事情的關鍵。謝謝! – slf

+0

我不是故意暗示我根本沒有看規範,我只是想說我一定錯過了一些東西,因爲我知道我錯過了關於隱含行的部分 – slf

+0

@slf:W3C規範(和其他規範,就此而言)是相當艱鉅的野獸。在您可以瀏覽它們之前,需要一些習慣。 –