From a866ad3d7a0c7e4fd33461f928246a90d40f68df Mon Sep 17 00:00:00 2001 From: Mikko Mononen Date: Sun, 26 Jan 2014 22:07:28 +0200 Subject: [PATCH] Further nextPathItem fixes for numbers --- src/nanosvg.h | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/nanosvg.h b/src/nanosvg.h index 3db337d..57a7bc5 100644 --- a/src/nanosvg.h +++ b/src/nanosvg.h @@ -119,6 +119,11 @@ static int nsvg__isspace(char c) return strchr(" \t\n\v\f\r", c) != 0; } +static int nsvg__isdigit(char c) +{ + return strchr("0123456789", c) != 0; +} + static int nsvg__isnum(char c) { return strchr("0123456789+-.eE", c) != 0; @@ -555,17 +560,48 @@ static const char* nsvg__getNextPathItem(const char* s, char* it) // Skip white spaces and commas while (*s && (nsvg__isspace(*s) || *s == ',')) s++; if (!*s) return s; - if (*s == '-' || *s == '+' || nsvg__isnum(*s)) { - while (*s && nsvg__isnum(*s)) { + if (*s == '-' || *s == '+' || nsvg__isdigit(*s)) { + // sign + if (*s == '-' || *s == '+') { if (i < 63) it[i++] = *s; s++; } + // integer part + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + if (*s == '.') { + // decimal point + if (i < 63) it[i++] = *s; + s++; + // fraction part + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + } + // exponent + if (*s == 'e' || *s == 'E') { + if (i < 63) it[i++] = *s; + s++; + if (*s == '-' || *s == '+') { + if (i < 63) it[i++] = *s; + s++; + } + while (*s && nsvg__isdigit(*s)) { + if (i < 63) it[i++] = *s; + s++; + } + } it[i] = '\0'; } else { + // Parse command it[0] = *s++; it[1] = '\0'; return s; } + return s; } @@ -773,7 +809,7 @@ static unsigned int nsvg__parseColorName(const char* str) } } - return 0; + return NSVG_RGB(128, 128, 128); } static unsigned int nsvg__parseColor(const char* str)