...
diff --git a/coders/svg.c b/coders/svg.c
index c75e669..39270c7 100644
--- a/coders/svg.c
+++ b/coders/svg.c
@@ -288,6 +288,7 @@
   const char *string)
 {
   char
+    *next_token,
     token[MagickPathExtent];
 
   const char
@@ -300,7 +301,7 @@
   assert(string != (const char *) NULL);
   p=(const char *) string;
   GetNextToken(p,&p,MagickPathExtent,token);
-  value=StringToDouble(token,(char **) NULL);
+  value=StringToDouble(token,&next_token);
   if (strchr(token,'%') != (char *) NULL)
     {
       double
@@ -785,6 +786,7 @@
   char
     *color,
     id[MagickPathExtent],
+    *next_token,
     token[MagickPathExtent],
     **tokens,
     *units;
@@ -1274,7 +1276,23 @@
             }
           if (LocaleCompare(keyword,"font-size") == 0)
             {
-              svg_info->pointsize=GetUserSpaceCoordinateValue(svg_info,0,value);
+              if (LocaleCompare(value,"xx-small") == 0)
+                svg_info->pointsize=6.144;
+              else if (LocaleCompare(value,"x-small") == 0)
+                svg_info->pointsize=7.68;
+              else if (LocaleCompare(value,"small") == 0)
+                svg_info->pointsize=9.6;
+              else if (LocaleCompare(value,"medium") == 0)
+                svg_info->pointsize=12.0;
+              else if (LocaleCompare(value,"large") == 0)
+                svg_info->pointsize=14.4;
+              else if (LocaleCompare(value,"x-large") == 0)
+                svg_info->pointsize=17.28;
+              else if (LocaleCompare(value,"xx-large") == 0)
+                svg_info->pointsize=20.736;
+              else
+                svg_info->pointsize=GetUserSpaceCoordinateValue(svg_info,0,
+                  value);
               (void) FormatLocaleFile(svg_info->file,"font-size %g\n",
                 svg_info->pointsize);
               break;
@@ -1325,23 +1343,23 @@
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.rx=StringToDouble(token,(char **) NULL);
+                        affine.rx=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.ry=StringToDouble(token,(char **) NULL);
+                        affine.ry=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.sy=StringToDouble(token,(char **) NULL);
+                        affine.sy=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.tx=StringToDouble(token,(char **) NULL);
+                        affine.tx=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.ty=StringToDouble(token,(char **) NULL);
+                        affine.ty=StringToDouble(token,&next_token);
                         break;
                       }
                     break;
@@ -1944,23 +1962,23 @@
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.rx=StringToDouble(token,(char **) NULL);
+                        affine.rx=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.ry=StringToDouble(token,(char **) NULL);
+                        affine.ry=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.sy=StringToDouble(token,(char **) NULL);
+                        affine.sy=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.tx=StringToDouble(token,(char **) NULL);
+                        affine.tx=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        affine.ty=StringToDouble(token,(char **) NULL);
+                        affine.ty=StringToDouble(token,&next_token);
                         break;
                       }
                     break;
@@ -1981,11 +1999,11 @@
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        x=StringToDouble(token,(char **) NULL);
+                        x=StringToDouble(token,&next_token);
                         GetNextToken(p,&p,MagickPathExtent,token);
                         if (*token == ',')
                           GetNextToken(p,&p,MagickPathExtent,token);
-                        y=StringToDouble(token,(char **) NULL);
+                        y=StringToDouble(token,&next_token);
                         affine.sx=cos(DegreesToRadians(fmod(angle,360.0)));
                         affine.rx=sin(DegreesToRadians(fmod(angle,360.0)));
                         affine.ry=(-sin(DegreesToRadians(fmod(angle,360.0))));
@@ -2087,11 +2105,11 @@
             {
               p=(const char *) value;
               GetNextToken(p,&p,MagickPathExtent,token);
-              svg_info->view_box.x=StringToDouble(token,(char **) NULL);
+              svg_info->view_box.x=StringToDouble(token,&next_token);
               GetNextToken(p,&p,MagickPathExtent,token);
               if (*token == ',')
                 GetNextToken(p,&p,MagickPathExtent,token);
-              svg_info->view_box.y=StringToDouble(token,(char **) NULL);
+              svg_info->view_box.y=StringToDouble(token,&next_token);
               GetNextToken(p,&p,MagickPathExtent,token);
               if (*token == ',')
                 GetNextToken(p,&p,MagickPathExtent,token);
@@ -3606,6 +3624,7 @@
     keyword[MagickPathExtent],
     message[MagickPathExtent],
     name[MagickPathExtent],
+    *next_token,
     *token,
     type[MagickPathExtent];
 
@@ -3739,27 +3758,27 @@
         if (LocaleCompare("affine",keyword) == 0)
           {
             GetNextToken(q,&q,extent,token);
-            affine.sx=StringToDouble(token,(char **) NULL);
+            affine.sx=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.rx=StringToDouble(token,(char **) NULL);
+            affine.rx=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.ry=StringToDouble(token,(char **) NULL);
+            affine.ry=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.sy=StringToDouble(token,(char **) NULL);
+            affine.sy=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.tx=StringToDouble(token,(char **) NULL);
+            affine.tx=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.ty=StringToDouble(token,(char **) NULL);
+            affine.ty=StringToDouble(token,&next_token);
             break;
           }
         if (LocaleCompare("alpha",keyword) == 0)
@@ -3770,8 +3789,8 @@
         if (LocaleCompare("angle",keyword) == 0)
           {
             GetNextToken(q,&q,extent,token);
-            affine.rx=StringToDouble(token,(char **) NULL);
-            affine.ry=StringToDouble(token,(char **) NULL);
+            affine.rx=StringToDouble(token,&next_token);
+            affine.ry=StringToDouble(token,&next_token);
             break;
           }
         if (LocaleCompare("arc",keyword) == 0)
@@ -4075,23 +4094,23 @@
                 GetNextToken(q,&q,extent,token);
                 (void) CopyMagickString(type,token,MagickPathExtent);
                 GetNextToken(q,&q,extent,token);
-                svg_info.segment.x1=StringToDouble(token,(char **) NULL);
-                svg_info.element.cx=StringToDouble(token,(char **) NULL);
+                svg_info.segment.x1=StringToDouble(token,&next_token);
+                svg_info.element.cx=StringToDouble(token,&next_token);
                 GetNextToken(q,&q,extent,token);
                 if (*token == ',')
                   GetNextToken(q,&q,extent,token);
-                svg_info.segment.y1=StringToDouble(token,(char **) NULL);
-                svg_info.element.cy=StringToDouble(token,(char **) NULL);
+                svg_info.segment.y1=StringToDouble(token,&next_token);
+                svg_info.element.cy=StringToDouble(token,&next_token);
                 GetNextToken(q,&q,extent,token);
                 if (*token == ',')
                   GetNextToken(q,&q,extent,token);
-                svg_info.segment.x2=StringToDouble(token,(char **) NULL);
+                svg_info.segment.x2=StringToDouble(token,&next_token);
                 svg_info.element.major=StringToDouble(token,
                   (char **) NULL);
                 GetNextToken(q,&q,extent,token);
                 if (*token == ',')
                   GetNextToken(q,&q,extent,token);
-                svg_info.segment.y2=StringToDouble(token,(char **) NULL);
+                svg_info.segment.y2=StringToDouble(token,&next_token);
                 svg_info.element.minor=StringToDouble(token,
                   (char **) NULL);
                 (void) FormatLocaleString(message,MagickPathExtent,
@@ -4131,11 +4150,11 @@
                 GetNextToken(q,&q,extent,token);
                 (void) CopyMagickString(name,token,MagickPathExtent);
                 GetNextToken(q,&q,extent,token);
-                svg_info.bounds.x=StringToDouble(token,(char **) NULL);
+                svg_info.bounds.x=StringToDouble(token,&next_token);
                 GetNextToken(q,&q,extent,token);
                 if (*token == ',')
                   GetNextToken(q,&q,extent,token);
-                svg_info.bounds.y=StringToDouble(token,(char **) NULL);
+                svg_info.bounds.y=StringToDouble(token,&next_token);
                 GetNextToken(q,&q,extent,token);
                 if (*token == ',')
                   GetNextToken(q,&q,extent,token);
@@ -4189,11 +4208,11 @@
         if (LocaleCompare("scale",keyword) == 0)
           {
             GetNextToken(q,&q,extent,token);
-            affine.sx=StringToDouble(token,(char **) NULL);
+            affine.sx=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.sy=StringToDouble(token,(char **) NULL);
+            affine.sy=StringToDouble(token,&next_token);
             break;
           }
         if (LocaleCompare("skewX",keyword) == 0)
@@ -4344,11 +4363,11 @@
         if (LocaleCompare("translate",keyword) == 0)
           {
             GetNextToken(q,&q,extent,token);
-            affine.tx=StringToDouble(token,(char **) NULL);
+            affine.tx=StringToDouble(token,&next_token);
             GetNextToken(q,&q,extent,token);
             if (*token == ',')
               GetNextToken(q,&q,extent,token);
-            affine.ty=StringToDouble(token,(char **) NULL);
+            affine.ty=StringToDouble(token,&next_token);
             break;
           }
         status=MagickFalse;
@@ -4397,11 +4416,11 @@
       if (IsPoint(q) == MagickFalse)
         break;
       GetNextToken(q,&q,extent,token);
-      point.x=StringToDouble(token,(char **) NULL);
+      point.x=StringToDouble(token,&next_token);
       GetNextToken(q,&q,extent,token);
       if (*token == ',')
         GetNextToken(q,&q,extent,token);
-      point.y=StringToDouble(token,(char **) NULL);
+      point.y=StringToDouble(token,&next_token);
       GetNextToken(q,(const char **) NULL,extent,token);
       if (*token == ',')
         GetNextToken(q,&q,extent,token);