то есть, запилил в libart нативную читалку svg. внезапно оказалось, что мы в состоянии без проблем отрендерить даже такое:
на чём раньше наглухо висли (потому что конвертер свг где-то косячил, видимо).
сам парзер прошёл длинный путь: сначала в AGG (и на крестах, кажется), потом в NanoSVG (на си), потом в NanoVega (на D), и теперь в libart (опять на си). естественно, традиции следует чтить, поэтому никаких внешних зависимостей ему не надо. а полная одинаковость результатов гарантируется тем, что я затащил в libart как Ryu для печати даблов, так и `strtod()` из plan9 для парзинга (потому что когда я брал рю в k8vavoom, там ещё не было парзера).
единственное, обо что сломал весь череп — это градиенты. во-первых, я нихуя не понимаю, как они работают в свг, а во-вторых, ещё больше не понимаю, как в libart. помимо того, что в либарт ещё и баг с полупрозрачными градиентами: они помечены как premultiplied alpha, а на деле — обычный separate. судя по тому что до сих пор никто этот баг не нашёл — я не один не понявший как использовать градиенты.