Понимание синтаксического анализа формата файла SVG - PullRequest
5 голосов
/ 22 сентября 2011

Во-первых, Суть здесь

Map.svg в гистограмме - это оригинальная карта, с которой я работаю, получил ее из общего достояния Викимедиа.

Так вот, в этом оригинальном сообщении есть масса земли у восточной части Техаса. Я удалил его с помощью Inkscape, и он переписал путь странным новым способом. Разница включена в суть.

Теперь этот новый способ написания пути взрывает мою логику синтаксического анализатора, и я пытаюсь понять, что произошло. Я надеюсь, что кто-то здесь знает больше о формате файла SVG, который я делаю. Я признаю, что я не прочитал всю стандартную спецификацию SVG, однако части, которые я читал, ничего не упоминали о пропущенных командах или относительных координатах. С другой стороны, я, возможно, смотрел на неправильную спецификацию, не уверен.

Как я понял, данные о путях SVG были очень просты, примерно так:

(M,L,C)[point{n}] .... [Z] затем повторите тошноту

Теперь часть, которую я пытаюсь понять, заключается в том, что этот новый Inkscape выписал что-то вроде относительных координат, без команд типа L или L, подразумеваемых каким-либо образом. Моя интуиция говорит мне, что здесь произошло, для кого-то очевидно. Для чего это стоит, я делаю мой анализ в C.

1 Ответ

7 голосов
/ 22 сентября 2011

Если вы анализируете SVG, почему бы не взглянуть на спецификацию SVG?

Начать новый подпуть с заданной (x, y) координаты. M (верхний регистр) означает, что последуют абсолютные координаты; m (строчные буквы) означает, что будут следовать относительные координаты.Если за moveto следуют несколько пар координат, последующие пары обрабатываются как неявные команды lineto.

From: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...