2011-09-22 13 views
2

Tout d'abord, gist herecompréhension de l'aide de l'analyse syntaxique format de fichier SVG

Map.svg dans l'essentiel est la carte originale, je travaille avec, il a obtenu hors wikimedia commons.

Maintenant, il y a une masse terrestre au large du coût de l'est du Texas dans ce svg d'origine. Je l'ai supprimé en utilisant Inkscape, et il a réécrit le chemin d'une manière étrange. Le diff est inclus dans l'essentiel.

Maintenant, cette nouvelle façon d'écrire le chemin explose ma logique d'analyseur, et j'essaie de comprendre ce qui s'est passé. J'espère que quelqu'un ici en sait plus sur le format de fichier SVG que je fais. J'admettrai que je n'ai pas lu toute la spécification standard SVG, cependant les parties que j'ai lues ne mentionnent rien sur les commandes manquantes ou les coordonnées relatives. Ensuite, je peux avoir regardé la spécification incorrecte, pas sûr.

La façon dont je l'ai compris, les données de chemin SVG était très simple, quelque chose comme ceci:

(M,L,C)[point{n}] .... [Z] puis répéter ad nauseam

Maintenant, la partie que je suis en train de comprendre est ce nouveau Inkscape a écrit ce qui semble être des coordonnées relatives, sans que des commandes comme L, ou L soient impliquées d'une façon ou d'une autre. Mon instinct me dit que ce qui s'est passé ici est évident pour quelqu'un. Pour ce que ça vaut, je fais mon analyse en C.

+2

commandes de chemin de Majuscules sont globaux, sont minuscules par rapport. – robertc

Répondre

6

Si vous analysez SVG, pourquoi ne pas regarder la spécification SVG?

Commencez un nouveau sous-chemin à la coordonnée (x, y) donnée. M (majuscule) indique que les coordonnées absolues suivront; m (minuscules) indique que les coordonnées relatives suivront. Si un moveto est suivi de plusieurs paires de coordonnées, les paires suivantes sont traitées comme des commandes lineto implicites.

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

Vous avez dit,

La façon dont je l'ai compris, les données de chemin SVG a été très en avant droit, quelque chose comme ceci: (M,L,C)[point{n}] .... [Z]

Je ne Je ne sais pas où vous avez cette information. Arrêtez d'obtenir vos informations de cette source.

Je dois admettre que je l'ai pas lu les spécifications standards SVG ... toute

Personne ne lit la spécification entière. Concentrez-vous sur la partie que vous mettez en œuvre pour le moment. Vous pouvez aussi commencer avec SVG Tiny, et travailler avec ce sous-ensemble pour le moment.

La grammaire de chemin est l'endroit où vous devriez commencer lors de l'écriture d'un analyseur. Si vous ne pouvez pas le lire, alors achetez un livre sur les compilateurs.

grammaire chemin: http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataBNF

+0

Merci, maintenant je sais que je regarde le bon matériel source. Je pense que la ligne de touche implicite est la clé de ce qui se passe. Merci! – slf

+0

Je ne voulais pas dire que je n'ai pas regardé la spécification du tout, je voulais juste dire que j'ai manqué quelque chose parce que je sais que j'ai raté la partie sur les lignes-implicites – slf

+0

@slf: Les spécifications du W3C (et autres specs, d'ailleurs) sont des bêtes assez redoutables. Il faut s'y habituer avant de pouvoir les naviguer. –