]> granicus.if.org Git - imagemagick/blobdiff - coders/svg.c
(no commit message)
[imagemagick] / coders / svg.c
index 784d97c0ce3be9760bf362dffd2d79d79c4e1563..e6179ccabadc485f3d1560b42a7d2ef998af1ffb 100644 (file)
@@ -18,7 +18,7 @@
 %                                March 2000                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -260,12 +260,12 @@ static SVGInfo *AcquireSVGInfo(void)
   SVGInfo
     *svg_info;
 
-  svg_info=(SVGInfo *) AcquireAlignedMemory(1,sizeof(*svg_info));
+  svg_info=(SVGInfo *) AcquireMagickMemory(sizeof(*svg_info));
   if (svg_info == (SVGInfo *) NULL)
     return((SVGInfo *) NULL);
   (void) ResetMagickMemory(svg_info,0,sizeof(*svg_info));
   svg_info->text=AcquireString("");
-  svg_info->scale=(double *) AcquireAlignedMemory(1,sizeof(*svg_info->scale));
+  svg_info->scale=(double *) AcquireMagickMemory(sizeof(*svg_info->scale));
   if (svg_info->scale == (double *) NULL)
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   GetAffineMatrix(&svg_info->affine);
@@ -382,6 +382,7 @@ static char **GetStyleTokens(void *context,const char *style,int *number_tokens)
     *svg_info;
 
   svg_info=(SVGInfo *) context;
+  (void) svg_info;
   *number_tokens=0;
   if (style == (const char *) NULL)
     return((char **) NULL);
@@ -713,6 +714,7 @@ static void SVGSetDocumentLocator(void *context,xmlSAXLocatorPtr location)
   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
     "  SAX.setDocumentLocator()");
   svg_info=(SVGInfo *) context;
+  (void) svg_info;
 }
 
 static void SVGStartDocument(void *context)
@@ -949,6 +951,14 @@ static void SVGStartElement(void *context,const xmlChar *name,
           break;
       }
     }
+  if (strchr((char *) name,':') != (char *) NULL)
+    {
+      /*
+        Skip over namespace.
+      */
+      for ( ; *name != ':'; name++) ;
+      name++;
+    }
   switch (*name)
   {
     case 'C':
@@ -1391,14 +1401,14 @@ static void SVGStartElement(void *context,const xmlChar *name,
                   default:
                     break;
                 }
-                transform.sx=current.sx*affine.sx+current.ry*affine.rx;
-                transform.rx=current.rx*affine.sx+current.sy*affine.rx;
-                transform.ry=current.sx*affine.ry+current.ry*affine.sy;
-                transform.sy=current.rx*affine.ry+current.sy*affine.sy;
-                transform.tx=current.sx*affine.tx+current.ry*affine.ty+
-                  current.tx;
-                transform.ty=current.rx*affine.tx+current.sy*affine.ty+
-                  current.ty;
+                transform.sx=affine.sx*current.sx+affine.ry*current.rx;
+                transform.rx=affine.rx*current.sx+affine.sy*current.rx;
+                transform.ry=affine.sx*current.ry+affine.ry*current.sy;
+                transform.sy=affine.rx*current.ry+affine.sy*current.sy;
+                transform.tx=affine.sx*current.tx+affine.ry*current.ty+
+                  affine.tx;
+                transform.ty=affine.rx*current.tx+affine.sy*current.ty+
+                  affine.ty;
               }
               MVGPrintf(svg_info->file,
                 "affine %g %g %g %g %g %g\n",transform.sx,
@@ -1983,14 +1993,14 @@ static void SVGStartElement(void *context,const xmlChar *name,
                   default:
                     break;
                 }
-                transform.sx=current.sx*affine.sx+current.ry*affine.rx;
-                transform.rx=current.rx*affine.sx+current.sy*affine.rx;
-                transform.ry=current.sx*affine.ry+current.ry*affine.sy;
-                transform.sy=current.rx*affine.ry+current.sy*affine.sy;
-                transform.tx=current.sx*affine.tx+current.ry*affine.ty+
-                  current.tx;
-                transform.ty=current.rx*affine.tx+current.sy*affine.ty+
-                  current.ty;
+                transform.sx=affine.sx*current.sx+affine.ry*current.rx;
+                transform.rx=affine.rx*current.sx+affine.sy*current.rx;
+                transform.ry=affine.sx*current.ry+affine.ry*current.sy;
+                transform.sy=affine.rx*current.ry+affine.sy*current.sy;
+                transform.tx=affine.sx*current.tx+affine.ry*current.ty+
+                  affine.tx;
+                transform.ty=affine.rx*current.tx+affine.sy*current.ty+
+                  affine.ty;
               }
               MVGPrintf(svg_info->file,
                 "affine %g %g %g %g %g %g\n",transform.sx,
@@ -2140,6 +2150,14 @@ static void SVGEndElement(void *context,const xmlChar *name)
   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
     "  SAX.endElement(%s)",name);
   svg_info=(SVGInfo *) context;
+  if (strchr((char *) name,':') != (char *) NULL)
+    {
+      /*
+        Skip over namespace.
+      */
+      for ( ; *name != ':'; name++) ;
+      name++;
+    }
   switch (*name)
   {
     case 'C':
@@ -2467,6 +2485,7 @@ static void SVGIgnorableWhitespace(void *context,const xmlChar *c,int length)
   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
     "  SAX.ignorableWhitespace(%.30s, %d)",c,length);
   svg_info=(SVGInfo *) context;
+  (void) svg_info;
 }
 
 static void SVGProcessingInstructions(void *context,const xmlChar *target,
@@ -2481,6 +2500,7 @@ static void SVGProcessingInstructions(void *context,const xmlChar *target,
   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
     "  SAX.processingInstruction(%s, %s)",target,data);
   svg_info=(SVGInfo *) context;
+  (void) svg_info;
 }
 
 static void SVGComment(void *context,const xmlChar *value)
@@ -3225,6 +3245,7 @@ static MagickBooleanType IsPoint(const char *point)
     value;
 
   value=strtol(point,&p,10);
+  (void) value;
   return(p != point ? MagickTrue : MagickFalse);
 }