/* Return length/coordinate in points */ float svg_parse_length(const char *str, float percent, float font_size) { char *end; float val; val = fz_strtof(str, &end); if (end == str) return 0; /* failed */ if (!strcmp(end, "px")) return val; if (!strcmp(end, "pt")) return val * 1.0f; if (!strcmp(end, "pc")) return val * 12.0f; if (!strcmp(end, "mm")) return val * 2.83464567f; if (!strcmp(end, "cm")) return val * 28.3464567f; if (!strcmp(end, "in")) return val * 72.0f; if (!strcmp(end, "em")) return val * font_size; if (!strcmp(end, "ex")) return val * font_size * 0.5f; if (!strcmp(end, "%")) return val * percent * 0.01f; if (end[0] == 0) return val; return 0; }
/* Return angle in degrees */ float svg_parse_angle(const char *str) { char *end; float val; val = fz_strtof(str, &end); if (end == str) return 0; /* failed */ if (!strcmp(end, "deg")) return val; if (!strcmp(end, "grad")) return val * 0.9f; if (!strcmp(end, "rad")) return val * FZ_RADIAN; return val; }
static char * xps_parse_float_array(fz_context *ctx, xps_document *doc, char *s, int num, float *x) { int k = 0; if (s == NULL || *s == 0) return NULL; while (*s) { while (*s == 0x0d || *s == '\t' || *s == ' ' || *s == 0x0a) s++; x[k] = fz_strtof(s, &s); while (*s == 0x0d || *s == '\t' || *s == ' ' || *s == 0x0a) s++; if (*s == ',') s++; if (++k == num) break; } return s; }