struct svgtiny_parse_state state)
{
float x, y, width, height;
struct svgtiny_parse_state state)
{
float x, y, width, height;
svgtiny_parse_position_attributes(svg, state, &x, &y, &width, &height);
svgtiny_parse_paint_attributes(svg, &state);
svgtiny_parse_font_attributes(svg, &state);
/* parse viewBox */
svgtiny_parse_position_attributes(svg, state, &x, &y, &width, &height);
svgtiny_parse_paint_attributes(svg, &state);
svgtiny_parse_font_attributes(svg, &state);
/* parse viewBox */
if (view_box) {
const char *s = (const char *) view_box->children->content;
float min_x, min_y, vwidth, vheight;
if (view_box) {
const char *s = (const char *) view_box->children->content;
float min_x, min_y, vwidth, vheight;
+ float *p;
+ unsigned int i;
+ float last_x = 0, last_y = 0;
+ float last_cubic_x = 0, last_cubic_y = 0;
+ float last_quad_x = 0, last_quad_y = 0;
svgtiny_parse_paint_attributes(path, &state);
svgtiny_parse_transform_attributes(path, &state);
svgtiny_parse_paint_attributes(path, &state);
svgtiny_parse_transform_attributes(path, &state);
- unsigned int i = 0;
- float last_x = 0, last_y = 0;
- float last_cubic_x = 0, last_cubic_y = 0;
- float last_quad_x = 0, last_quad_y = 0;
struct svgtiny_parse_state state)
{
float x, y, width, height;
struct svgtiny_parse_state state)
{
float x, y, width, height;
svgtiny_parse_position_attributes(rect, state,
&x, &y, &width, &height);
svgtiny_parse_paint_attributes(rect, &state);
svgtiny_parse_transform_attributes(rect, &state);
svgtiny_parse_position_attributes(rect, state,
&x, &y, &width, &height);
svgtiny_parse_paint_attributes(rect, &state);
svgtiny_parse_transform_attributes(rect, &state);
struct svgtiny_parse_state state)
{
float x = 0, y = 0, r = -1;
struct svgtiny_parse_state state)
{
float x = 0, y = 0, r = -1;
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "cx") == 0)
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "cx") == 0)
struct svgtiny_parse_state state)
{
float x = 0, y = 0, rx = -1, ry = -1;
struct svgtiny_parse_state state)
{
float x = 0, y = 0, rx = -1, ry = -1;
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "cx") == 0)
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "cx") == 0)
struct svgtiny_parse_state state)
{
float x1 = 0, y1 = 0, x2 = 0, y2 = 0;
struct svgtiny_parse_state state)
{
float x1 = 0, y1 = 0, x2 = 0, y2 = 0;
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "x1") == 0)
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "x1") == 0)
svgtiny_parse_paint_attributes(line, &state);
svgtiny_parse_transform_attributes(line, &state);
svgtiny_parse_paint_attributes(line, &state);
svgtiny_parse_transform_attributes(line, &state);
svgtiny_parse_paint_attributes(poly, &state);
svgtiny_parse_transform_attributes(poly, &state);
svgtiny_parse_paint_attributes(poly, &state);
svgtiny_parse_transform_attributes(poly, &state);
struct svgtiny_parse_state state)
{
float x, y, width, height;
struct svgtiny_parse_state state)
{
float x, y, width, height;
svgtiny_parse_position_attributes(text, state,
&x, &y, &width, &height);
svgtiny_parse_font_attributes(text, &state);
svgtiny_parse_transform_attributes(text, &state);
svgtiny_parse_position_attributes(text, state,
&x, &y, &width, &height);
svgtiny_parse_font_attributes(text, &state);
svgtiny_parse_transform_attributes(text, &state);
- float px = state.ctm.a * x + state.ctm.c * y + state.ctm.e;
- float py = state.ctm.b * x + state.ctm.d * y + state.ctm.f;
+ px = state.ctm.a * x + state.ctm.c * y + state.ctm.e;
+ py = state.ctm.b * x + state.ctm.d * y + state.ctm.f;
/* state.ctm.e = px - state.origin_x; */
/* state.ctm.f = py - state.origin_y; */
/*struct css_style style = state.style;
style.font_size.value.length.value *= state.ctm.a;*/
/* state.ctm.e = px - state.origin_x; */
/* state.ctm.f = py - state.origin_y; */
/*struct css_style style = state.style;
style.font_size.value.length.value *= state.ctm.a;*/
const struct svgtiny_parse_state state,
float *x, float *y, float *width, float *height)
{
const struct svgtiny_parse_state state,
float *x, float *y, float *width, float *height)
{
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "x") == 0)
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "x") == 0)
void svgtiny_parse_paint_attributes(const xmlNode *node,
struct svgtiny_parse_state *state)
{
void svgtiny_parse_paint_attributes(const xmlNode *node,
struct svgtiny_parse_state *state)
{
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "fill") == 0)
const char *name = (const char *) attr->name;
const char *content = (const char *) attr->children->content;
if (strcmp(name, "fill") == 0)
- state->stroke_width = svgtiny_parse_length(s,
+ value = strndup(s, strcspn(s, "; "));
+ state->stroke_width = svgtiny_parse_length(value,
void svgtiny_parse_font_attributes(const xmlNode *node,
struct svgtiny_parse_state *state)
{
void svgtiny_parse_font_attributes(const xmlNode *node,
struct svgtiny_parse_state *state)
{
if (strcmp((const char *) attr->name, "font-size") == 0) {
/*if (css_parse_length(
(const char *) attr->children->content,
if (strcmp((const char *) attr->name, "font-size") == 0) {
/*if (css_parse_length(
(const char *) attr->children->content,
float za, zb, zc, zd, ze, zf;
float angle, x, y;
int n;
float za, zb, zc, zd, ze, zf;
float angle, x, y;
int n;
svgtiny_code svgtiny_add_path(float *p, unsigned int n,
struct svgtiny_parse_state *state)
{
svgtiny_code svgtiny_add_path(float *p, unsigned int n,
struct svgtiny_parse_state *state)
{
if (state->fill == svgtiny_LINEAR_GRADIENT)
return svgtiny_add_path_linear_gradient(p, n, state);
svgtiny_transform_path(p, n, state);
if (state->fill == svgtiny_LINEAR_GRADIENT)
return svgtiny_add_path_linear_gradient(p, n, state);
svgtiny_transform_path(p, n, state);
void svgtiny_transform_path(float *p, unsigned int n,
struct svgtiny_parse_state *state)
{
void svgtiny_transform_path(float *p, unsigned int n,
struct svgtiny_parse_state *state)
{
float x0 = p[j], y0 = p[j + 1];
float x = state->ctm.a * x0 + state->ctm.c * y0 +
state->ctm.e;
float x0 = p[j], y0 = p[j + 1];
float x = state->ctm.a * x0 + state->ctm.c * y0 +
state->ctm.e;