LINUX.ORG.RU

[SVG] Велосипед

 , , ,


0

2

Нудная предыстория: понадобилась мне библиотека для отрисовки SVG для cairo, на что сразу нагуглилась librsvg, но она тянула «всего-лишь» libxml2, glib и т.п. за собой, что означало не только таскание массы «груза» со собой, но и трах со сборкой всего этого на разных платформах, нагугленные далее QSvg и wxSVG также оптимизма не внушали. В результате за вечер была написана большая часть кода для отрисовки этого самого SVG, который:

а) вместился в 5 относительно небольших файлов( самый большой - «кастрированный» rapid_xml.hpp );
б) не требует ничего абсолютно, кроме стандартного STL и cairo( что логично );
в) на удивление работает быстрее хрома даже в дебажном «виде» ( видимо из-за быстрого rapid_xml ), хотя может у меня неправильный хром - FF большие файлы отрисовывает очень быстро;
г) умеет показывать большие файлы, которые отказывается понимать гномовский eog, который вообще плохо работает со сложными изображениями.
д) более-менее( не полностью ) понимает css.

Собс-но на скриншоте:

- AWN;
- XFWM;
- NetBeans;
- результат работы велосипеда.

П.С. сам код выложу через несколько дней как public domain, после приведения его в порядок и дописывания недостающего.



Проверено: JB ()
Последнее исправление: JB (всего исправлений: 1)
Ответ на: комментарий от elipse

> expat - XML parsing C library

я про нее знаю и пользовался раньше - слово «удобный» рядом с ее названием точно ставить нельзя :)

aho
() автор топика
Ответ на: комментарий от aho

Как по мне, так довольно простая библиотечка.

Да и вообще, XML - текстовые файлы, «парсить» их и безо всяких спец. библиотек можно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от aho

Ну хз, как пример, tdom сделан на ней и укатывает xml2.

Хм ,«удобство» - часто это ортогональное понятие к быстродействию. K.O.

elipse ★★★
()
Ответ на: комментарий от Eddy_Em

> Да и вообще, XML - текстовые файлы, «парсить» их и безо всяких спец. библиотек можно.

можно, но таки именно для этой задачи уже есть готовые, переносимые, уже оптимизированные и всем устраивающие решения, велосипедить и так не хорошо, а велосипедить ради велосипединга - чистое зло

aho
() автор топика
Ответ на: комментарий от elipse

> Хм ,«удобство» - часто это ортогональное понятие к быстродействию. K.O.

да, к счастью автору RapidXML получилось успешно совместить эти два понятия

aho
() автор топика
Ответ на: комментарий от elipse

> но не использовать С++ иногда важнее.

разве что для embedded, хотя и там во всю С++ используют

aho
() автор топика
Ответ на: комментарий от aho

Benchmarking XML Parsers
http://www.xml.com/pub/a/Benchmark/article.html?page=3

И ? И с чего мне говорить, что это будет лучше официальной и валидной
либы :
http://www.hiit.fi/files/fi/da/pdis/python-xml/expat-1.95.8-orig/doc/referenc...

Expat
This library is the creation of James Clark, who's also given us groff (an nroff look-alike), Jade (an implemention of ISO's DSSSL stylesheet language for SGML), XP (a Java XML parser package), XT (a Java XSL engine). James was also the technical lead on the XML Working Group at W3C that produced the XML specification.

Собственно, как увеличить быстродействие ? - да элементарно:
по максимуму забить на сервис, проверки и диагностику ошибок,
и очередная high speed turbo-lib у вас в шляпе.))





elipse ★★★
()
Ответ на: комментарий от elipse

> И ? И с чего мне говорить, что это будет лучше официальной

rapidxml используется в бусте, а буст - это чуть ли не стандарт С++, а не просто «официальный»

да элементарно: по максимуму забить на сервис, проверки и диагностику ошибок


я открою вам секрет - в rapidxml проверок на валидность больше чем в expat ;)

aho
() автор топика
Ответ на: комментарий от aho


rapidxml используется в бусте, а буст - это чуть ли не стандарт С++,


Это не аргумент и не абсолютная ценность, ну например:
ну зачем мне твой буст в ядре (или сборке) tcl для отображения svg ?
Это абсурд и на который не пойдут разрабы многих ЯП.



я открою вам секрет - в rapidxml проверок на валидность больше чем в expat ;)


Сомнительно. уже expat валиден по определению почти, а rapidxml еще надо попасть в перечень упоминаемых реализаций для xml w3c , и это для начала ))

elipse ★★★
()
Ответ на: комментарий от elipse

> Это не аргумент и не абсолютная ценность, ну например:

ну зачем мне твой буст в ядре (или сборке) tcl для отображения svg ?


я сам бустом не пользуюсь

Сомнительно. уже expat валиден по определению почти


«How can I get expat to validate my XML documents?»
«You can't. expat is not a validating parser.»

expat FAQ

да и сам expat устроен так, что там проверок вменяемых в принципе нет, это именно случай - «как увеличить быстродействие ? - да элементарно: по максимуму забить на сервис, проверки и диагностику ошибок» (с)

aho
() автор топика
Ответ на: комментарий от aho

Ты путаешь понятие валидный c валидацией

да и сам expat устроен так, что там проверок вменяемых в принципе нет, это именно случай


Ну да , ну да:
exapt.h
...
enum XML_Error {
XML_ERROR_NONE,
XML_ERROR_NO_MEMORY,
XML_ERROR_SYNTAX,
XML_ERROR_NO_ELEMENTS,
XML_ERROR_INVALID_TOKEN,
XML_ERROR_UNCLOSED_TOKEN,
XML_ERROR_PARTIAL_CHAR,
XML_ERROR_TAG_MISMATCH,
XML_ERROR_DUPLICATE_ATTRIBUTE,
XML_ERROR_JUNK_AFTER_DOC_ELEMENT,
XML_ERROR_PARAM_ENTITY_REF,
XML_ERROR_UNDEFINED_ENTITY,
XML_ERROR_RECURSIVE_ENTITY_REF,
XML_ERROR_ASYNC_ENTITY,
XML_ERROR_BAD_CHAR_REF,
XML_ERROR_BINARY_ENTITY_REF,
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
XML_ERROR_MISPLACED_XML_PI,
XML_ERROR_UNKNOWN_ENCODING,
XML_ERROR_INCORRECT_ENCODING,
XML_ERROR_UNCLOSED_CDATA_SECTION,
XML_ERROR_EXTERNAL_ENTITY_HANDLING,
XML_ERROR_NOT_STANDALONE,
XML_ERROR_UNEXPECTED_STATE,
XML_ERROR_ENTITY_DECLARED_IN_PE,
XML_ERROR_FEATURE_REQUIRES_XML_DTD,
XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING,
/* Added in 1.95.7. */
XML_ERROR_UNBOUND_PREFIX,
/* Added in 1.95.8. */
XML_ERROR_UNDECLARING_PREFIX,
XML_ERROR_INCOMPLETE_PE,
XML_ERROR_XML_DECL,
XML_ERROR_TEXT_DECL,
XML_ERROR_PUBLICID,
XML_ERROR_SUSPENDED,
XML_ERROR_NOT_SUSPENDED,
XML_ERROR_ABORTED,
XML_ERROR_FINISHED,
XML_ERROR_SUSPEND_PE,
/* Added in 2.0. */
XML_ERROR_RESERVED_PREFIX_XML,
XML_ERROR_RESERVED_PREFIX_XMLNS,
XML_ERROR_RESERVED_NAMESPACE_URI
};


Ну в принципе, ничего удивительного )
От аргументов, что «ничего нет для энтого дела», мы перешли к селф-тестам и набросам.))
И именно мне надо что-то аргументированно доказывать. sic !




elipse ★★★
()
Ответ на: комментарий от elipse

Ну да , ну да:

было бы странно, если б парсер не умел обрабатывать подобные ошибки :) а вот такое, например, expat уже прекрасно пропускает:

<!DOCTYPE list [
<!ELEMENT list (P*)> ]>

<a><b/></a>

И именно мне надо что-то аргументированно доказывать. sic !

ну да - вам ведь не понравился выбор парсера :) хотя наверное опять же языка, а не парсера

П.С. таки в rapidxml проверки на таком же уровне где-то как и в expat, я был не прав, когда сказал, что их там больше

aho
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.