2014-10-19 2 views
0

The SVG 1.1 спецификация состоянии:разбор список преобразований в SVG преобразования атрибута

Значение «преобразования» атрибута является преобразование-лист, который определен как список преобразования определений, которые применяются в заказе . Определения отдельного преобразования разделяются пробелами и/или запятой.

Это также приводит пример:

<g transform="translate(-10,-20) scale(2) rotate(45) translate(5,10)"> 
    <!-- graphics elements go here --> 
</g> 

Я использую отдельный XML-парсер, чтобы получить спектрально-список атрибутов. Можно ли выполнить синтаксический анализ с возможностями, предоставляемыми стандартной библиотекой, без реализации алгоритма синтаксического анализа?

+0

дайте нам большую картину; какова реальная * проблема *, которую вы пытаетесь решить? вам может и не понадобиться разбирать его вообще –

+0

распознавание и извлечение параметров в списке преобразований – user1095108

+0

Я получаю его, но то, что я действительно спрашиваю, * с какой целью *? –

ответ

1

Библиотека синтаксического анализа XML (скорее всего) предоставит вам только строковое значение, связанное с атрибутом в анализируемом дереве.

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

+0

Правда, правда, но я ищу способы избежать этого. Размышления, твердая стена невежества, которую мы, программисты, часто встречаем. – user1095108

2

Не со стандартной библиотекой.

Но была выпущена библиотека SVG ++ 1.0 (https://github.com/svgpp/svgpp). И вы можете использовать его как это: требуется

#include <svgpp/svgpp.hpp> 
#include <algorithm> 
#include <iterator> 

using namespace svgpp; 

struct Context 
{ 
    void transform_matrix(const boost::array<double, 6> & matrix) 
    { 
    std::copy(matrix.begin(), matrix.end(), 
     std::ostream_iterator<double>(std::cout, " ")); 
    std::cout << "\n"; 
    } 
}; 

int main() 
{ 
    Context context; 
    value_parser<tag::type::transform_list>::parse(tag::attribute::transform(), context, 
    std::string("translate(-10,-20) scale(2) rotate(45) translate(5,10)"), tag::source::attribute()); 
    return 0; 
} 

Boost, но никакое дополнительное здание или ссылки - библиотека не является заголовок только.