]> granicus.if.org Git - imagemagick/commitdiff
...
authorCristy <urban-warrior@imagemagick.org>
Sun, 9 Jun 2019 13:52:31 +0000 (09:52 -0400)
committerCristy <urban-warrior@imagemagick.org>
Sun, 9 Jun 2019 13:52:31 +0000 (09:52 -0400)
MagickCore/annotate.c

index 8e7577f66e76ada42fdf43ee985a2959fc56a550..a1145780aca478f80967b7e29b58981f4623a7a8 100644 (file)
@@ -223,7 +223,9 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
   const DrawInfo *draw_info,ExceptionInfo *exception)
 {
   char
+    *p,
     primitive[MagickPathExtent],
+    *text,
     **textlist;
 
   DrawInfo
@@ -245,9 +247,6 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
   register ssize_t
     i;
 
-  size_t
-    length;
-
   TypeMetric
     metrics;
 
@@ -265,16 +264,36 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
     return(MagickFalse);
   if (*draw_info->text == '\0')
     return(MagickTrue);
-  textlist=StringToList(draw_info->text);
-  if (textlist == (char **) NULL)
-    return(MagickFalse);
-  length=strlen(textlist[0]);
-  for (i=1; textlist[i] != (char *) NULL; i++)
-    if (strlen(textlist[i]) > length)
-      length=strlen(textlist[i]);
-  number_lines=(size_t) i;
   annotate=CloneDrawInfo((ImageInfo *) NULL,draw_info);
+  text=annotate->text;
+  annotate->text=(char *) NULL;
   annotate_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
+  number_lines=1;
+  for (p=text; *p != '\0'; p++)
+    if (*p == '\n')
+      number_lines++;
+  textlist=AcquireQuantumMemory(number_lines+1,sizeof(*textlist));
+  if (textlist == (char **) NULL)
+    return(MagickFalse);
+  p=text;
+  for (i=0; i < number_lines; i++)
+  {
+    char
+      *q;
+
+    textlist[i]=p;
+    for (q=p; *q != '\0'; q++)
+      if ((*q == '\r') || (*q == '\n'))
+        break;
+    if (*q == '\r')
+      {
+        *q='\0';
+        q++;
+      }
+    *q='\0';
+    p=q+1;
+  }
+  textlist[i]=(char *) NULL;
   SetGeometry(image,&geometry);
   SetGeometryInfo(&geometry_info);
   if (annotate_info->geometry != (char *) NULL)
@@ -291,6 +310,8 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
   (void) memset(&metrics,0,sizeof(metrics));
   for (i=0; textlist[i] != (char *) NULL; i++)
   {
+    if (*textlist[i] == '\0')
+      continue;
     /*
       Position text relative to image.
     */
@@ -498,8 +519,6 @@ MagickExport MagickBooleanType AnnotateImage(Image *image,
   */
   annotate_info=DestroyDrawInfo(annotate_info);
   annotate=DestroyDrawInfo(annotate);
-  for (i=0; textlist[i] != (char *) NULL; i++)
-    textlist[i]=DestroyString(textlist[i]);
   textlist=(char **) RelinquishMagickMemory(textlist);
   return(status);
 }