Я хочу анализировать файлы SVG на C++ в OS X, и мне нужна библиотека. Он должен быть простым, легким и не должен иметь много зависимостей. Мои файлы SVG также просты — они содержат только простые формы и пути, такие как прямоугольники и информацию о преобразовании. Вы знаете какие-нибудь парсеры?
Примечание. Я хочу выйти за рамки информации о форме, проанализированной XML-структурой, такой как ширина прямоугольника, высота и точки пути, в числах с плавающей запятой и т. д. Я уже пробовал libtinysvg , и он не анализирует события большинства образцов w3c и имеет несколько собственных зависимостей!
Новая библиотека SVG++ — хороший выбор для чтения SVG на C++, за исключением того, что она не легкая и требует библиотеки Boost. Но поскольку это библиотека только для заголовков и использует только библиотеки только для заголовков из Boost, вам нужно только получить как SVG++, так и Boost и добавить их, чтобы включить пути, сборка не требуется.
У вас есть несколько вариантов:
Примечание о libsvgtiny: он разработан проектом Netsurf Browser и имеет очень минимальные зависимости, которые, вероятно, были бы включены во многие другие проекты, но они намеренно разделяют различные функции (они также анализируют html, xml и css, поэтому общие биты синтаксического анализа отдельная библиотека). Я построил базовую программу просмотра svg из их примера кода в nsfb , который статически скомпилирован до размера менее 300 КБ с бэкэндом libxcb, использующим musl-libc (glibc + libx11 + librsvg + все их зависимости более чем в 10 раз больше)
Примечание о librsvg: он используется чаще всего, но имеет значительно больше зависимостей.
Примечание об Amaya: не находится в активной разработке, упоминается только в том случае, если это близко к тому, что вы пытаетесь сделать с самого начала. Версии до 9.x требовали только gtk+-1.X (теперь Wx кроссплатформенный)
Примечание по QT: если вы используете C++ и хотите получить кросс-платформенный графический интерфейс, то это, вероятно, хороший выбор, поскольку многие наборы графических инструментов C++ (fltk, FOX и т. д.) не имеют встроенной возможности svg.
встроенный webkit или хром: они кроссплатформенные и предлагают множество излишеств. Вы получите не только SVG, но и множество других вещей, которые могут вам не понадобиться... но, поскольку все программы развиваются до тех пор, пока они не смогут работать с почтой, позже это позволит вам выйти вперед.
Синтаксические анализаторы XML: слишком много, чтобы упомянуть, но вы можете извлечь немного кода из tinysvg для дополнительных свойств.
Моя рекомендация: начните с svgtiny и добавляйте любые возможности, которые вам нужны. Разработчики Netsurf чрезвычайно открыты и готовы помочь.
SVG — это особый тип XML ( исходный код ). Таким образом, любая библиотека C/C++, которая позволяет вам анализировать XML, также позволит вам анализировать SVG.
Многие библиотеки публикуются в качестве ответов на вопрос « Лучший открытый анализатор XML для C++ » . Некоторые из них
Ян Худек
Мог говорит восстановить Монику