From: anthony Date: Sun, 2 Oct 2011 12:01:40 +0000 (+0000) Subject: comments and reorganise percent escapes X-Git-Tag: 7.0.1-0~6919 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=698cbb1f728cef4c837e9252cf9c83fa698ed9b5;p=imagemagick comments and reorganise percent escapes --- diff --git a/MagickCore/property.c b/MagickCore/property.c index 6dab5b2c8..ab13b65b1 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -2620,14 +2620,128 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, p++; switch (*p) { - case 'b': + case '[': /* multi-character substitution */ { char - format[MaxTextExtent]; + pattern[MaxTextExtent]; + + const char + *key, + *value; + + ssize_t + depth; /* - File size. + Image value. */ + if (strchr(p,']') == (char *) NULL) + break; + depth=1; + p++; + for (i=0; (i < (MaxTextExtent-1L)) && (*p != '\0'); i++) + { + if (*p == '[') + depth++; + if (*p == ']') + depth--; + if (depth <= 0) + break; + pattern[i]=(*p++); + } + pattern[i]='\0'; + value=GetImageProperty(image,pattern); + if (value != (const char *) NULL) + { + length=strlen(value); + if ((size_t) (q-interpret_text+length+1) >= extent) + { + extent+=length; + interpret_text=(char *) ResizeQuantumMemory(interpret_text, + extent+MaxTextExtent,sizeof(*interpret_text)); + if (interpret_text == (char *) NULL) + break; + q=interpret_text+strlen(interpret_text); + } + (void) CopyMagickString(q,value,extent); + q+=length; + break; + } + else + if (IsGlob(pattern) != MagickFalse) + { + /* + Iterate over image properties. + */ + ResetImagePropertyIterator(image); + key=GetNextImageProperty(image); + while (key != (const char *) NULL) + { + if (GlobExpression(key,pattern,MagickTrue) != MagickFalse) + { + value=GetImageProperty(image,key); + if (value != (const char *) NULL) + { + length=strlen(key)+strlen(value)+2; + if ((size_t) (q-interpret_text+length+1) >= extent) + { + extent+=length; + interpret_text=(char *) ResizeQuantumMemory( + interpret_text,extent+MaxTextExtent, + sizeof(*interpret_text)); + if (interpret_text == (char *) NULL) + break; + q=interpret_text+strlen(interpret_text); + } + q+=FormatLocaleString(q,extent,"%s=%s\n",key,value); + } + } + key=GetNextImageProperty(image); + } + } + value=GetMagickProperty(image_info,image,pattern); + if (value != (const char *) NULL) + { + length=strlen(value); + if ((size_t) (q-interpret_text+length+1) >= extent) + { + extent+=length; + interpret_text=(char *) ResizeQuantumMemory(interpret_text, + extent+MaxTextExtent,sizeof(*interpret_text)); + if (interpret_text == (char *) NULL) + break; + q=interpret_text+strlen(interpret_text); + } + (void) CopyMagickString(q,value,extent); + q+=length; + break; + } + if (image_info == (ImageInfo *) NULL) + break; + value=GetImageOption(image_info,pattern); + if (value != (char *) NULL) + { + length=strlen(value); + if ((size_t) (q-interpret_text+length+1) >= extent) + { + extent+=length; + interpret_text=(char *) ResizeQuantumMemory(interpret_text, + extent+MaxTextExtent,sizeof(*interpret_text)); + if (interpret_text == (char *) NULL) + break; + q=interpret_text+strlen(interpret_text); + } + (void) CopyMagickString(q,value,extent); + q+=length; + break; + } + break; + } + case 'b': /* image size as read in */ + { + char + format[MaxTextExtent]; + (void) FormatLocaleString(format,MaxTextExtent,"%.20g",(double) ((MagickOffsetType) image->extent)); if (image->extent != (MagickSizeType) ((size_t) image->extent)) @@ -2636,11 +2750,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, q+=ConcatenateMagickString(q,"B",extent); break; } - case 'c': + case 'c': /* image comment properity */ { - /* - Image comment. - */ value=GetImageProperty(image,"comment"); if (value == (const char *) NULL) break; @@ -2658,98 +2769,56 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, q+=length; break; } - case 'd': - case 'e': - case 'f': - case 't': + case 'd': /* Directory component of filename */ { - /* - Label segment is the base of the filename. - */ - if (*image->magick_filename == '\0') - break; - switch (*p) - { - case 'd': - { - /* - Directory. - */ - GetPathComponent(image->magick_filename,HeadPath,filename); - q+=CopyMagickString(q,filename,extent); - break; - } - case 'e': - { - /* - Filename extension. - */ - GetPathComponent(image->magick_filename,ExtensionPath,filename); - q+=CopyMagickString(q,filename,extent); - break; - } - case 'f': - { - /* - Filename. - */ - GetPathComponent(image->magick_filename,TailPath,filename); - q+=CopyMagickString(q,filename,extent); - break; - } - case 't': - { - /* - Base filename. - */ - GetPathComponent(image->magick_filename,BasePath,filename); - q+=CopyMagickString(q,filename,extent); - break; - } - } + GetPathComponent(image->magick_filename,HeadPath,filename); + q+=CopyMagickString(q,filename,extent); break; } - case 'g': + case 'e': /* Filename extension (suffix) of image file */ + { + GetPathComponent(image->magick_filename,ExtensionPath,filename); + q+=CopyMagickString(q,filename,extent); + break; + } + case 'f': /* Filename without directory component */ + { + GetPathComponent(image->magick_filename,TailPath,filename); + q+=CopyMagickString(q,filename,extent); + break; + } + case 't': /* Base filename without directory or extention */ + { + GetPathComponent(image->magick_filename,BasePath,filename); + q+=CopyMagickString(q,filename,extent); + break; + } + case 'g': /* Image geometry, canvas and offset */ { - /* - Image geometry. - */ q+=FormatLocaleString(q,extent,"%.20gx%.20g%+.20g%+.20g",(double) image->page.width,(double) image->page.height,(double) image->page.x, (double) image->page.y); break; } - case 'h': + case 'h': /* Image height */ { - /* - Image height. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) (image->rows != 0 ? image->rows : image->magick_rows)); break; } - case 'i': + case 'i': /* Images filename - (output filename with "info:" ) */ { - /* - Image filename. - */ q+=CopyMagickString(q,image->filename,extent); break; } - case 'k': + case 'k': /* Number of unique colors */ { - /* - Number of unique colors. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) GetNumberColors(image, (FILE *) NULL,&image->exception)); break; } - case 'l': + case 'l': /* Image label */ { - /* - Image label. - */ value=GetImageProperty(image,"label"); if (value == (const char *) NULL) break; @@ -2766,65 +2835,44 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, q+=CopyMagickString(q,value,extent); break; } - case 'm': + case 'm': /* Image format (file magick) */ { - /* - Image format. - */ q+=CopyMagickString(q,image->magick,extent); break; } - case 'M': + case 'M': /* Magick filename - exactly as given incl. read mods */ { - /* - Image magick filename. - */ q+=CopyMagickString(q,image->magick_filename,extent); break; } - case 'n': + case 'n': /* Number of images in the list. */ { - /* - Number of images in the list. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) GetImageListLength(image)); break; } - case 'o': + case 'o': /* Image output filename */ { - /* - Image output filename. - */ q+=CopyMagickString(q,image_info->filename,extent); break; } - case 'p': + case 'p': /* Image index in curent image list */ { - /* - Image index in list. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) GetImageIndexInList(image)); break; } - case 'q': + case 'q': /* Quantum depth of image in memory */ { - /* - Image depth. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) MAGICKCORE_QUANTUM_DEPTH); break; } - case 'r': + case 'r': /* Image storage class and colorspace. */ { ColorspaceType colorspace; - /* - Image storage class and colorspace. - */ colorspace=image->colorspace; if (IsImageGray(image,&image->exception) != MagickFalse) colorspace=GRAYColorspace; @@ -2834,123 +2882,93 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, image->matte != MagickFalse ? "Matte" : ""); break; } - case 's': + case 's': /* Image scene number */ { - /* - Image scene number. - */ if (image_info->number_scenes == 0) q+=FormatLocaleString(q,extent,"%.20g",(double) image->scene); else q+=FormatLocaleString(q,extent,"%.20g",(double) image_info->scene); break; } - case 'u': + case 'u': /* Unique filename */ { - /* - Unique filename. - */ (void) CopyMagickString(filename,image_info->unique,extent); q+=CopyMagickString(q,filename,extent); break; } - case 'w': + case 'w': /* Image width */ { - /* - Image width. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) (image->columns != 0 ? image->columns : image->magick_columns)); break; } - case 'x': + case 'x': /* Image horizontal resolution (density). */ { - /* - Image horizontal resolution. - */ q+=FormatLocaleString(q,extent,"%g %s",image->x_resolution, CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t) image->units)); break; } - case 'y': + case 'y': /* Image vertical resolution (density) */ { - /* - Image vertical resolution. - */ q+=FormatLocaleString(q,extent,"%g %s",image->y_resolution, CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t) image->units)); break; } - case 'z': + case 'z': /* Image depth as read in */ { - /* - Image depth. - */ q+=FormatLocaleString(q,extent,"%.20g",(double) image->depth); break; } - case 'A': + case 'A': /* Image alpha channel */ { - /* - Image alpha channel. - */ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic( MagickBooleanOptions,(ssize_t) image->matte)); break; } - case 'C': + case 'C': /* Image compression method. */ { - /* - Image compression method. - */ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic( MagickCompressOptions,(ssize_t) image->compression)); break; } - case 'D': + case 'D': /* Image dispose method. */ { - /* - Image dispose method. - */ q+=FormatLocaleString(q,extent,"%s",CommandOptionToMnemonic( MagickDisposeOptions,(ssize_t) image->dispose)); break; } - case 'G': + case 'G': /* Image size as geometry = "%wx%h" */ { q+=FormatLocaleString(q,extent,"%.20gx%.20g",(double) image->magick_columns,(double) image->magick_rows); break; } - case 'H': + case 'H': /* layer canvas height */ { q+=FormatLocaleString(q,extent,"%.20g",(double) image->page.height); break; } - case 'O': + case 'O': /* layer canvas offset with sign = "+%X+%Y" */ { q+=FormatLocaleString(q,extent,"%+ld%+ld",(long) image->page.x,(long) image->page.y); break; } - case 'P': + case 'P': /* layer canvas page size = "%Wx%H" */ { q+=FormatLocaleString(q,extent,"%.20gx%.20g",(double) image->page.width, (double) image->page.height); break; } - case 'Q': + case 'Q': /* image compression quality */ { q+=FormatLocaleString(q,extent,"%.20g",(double) image->quality); break; } - case 'S': + case 'S': /* Image scenes */ { - /* - Image scenes. - */ if (image_info->number_scenes == 0) q+=CopyMagickString(q,"2147483647",extent); else @@ -2958,171 +2976,45 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, image_info->number_scenes)); break; } - case 'T': + case 'T': /* image time delay for animations */ { q+=FormatLocaleString(q,extent,"%.20g",(double) image->delay); break; } - case 'W': + case 'W': /* layer canvas width */ { q+=FormatLocaleString(q,extent,"%.20g",(double) image->page.width); break; } - case 'X': + case 'X': /* layer canvas X offset */ { q+=FormatLocaleString(q,extent,"%+.20g",(double) image->page.x); break; } - case 'Y': + case 'Y': /* layer canvas Y offset */ { q+=FormatLocaleString(q,extent,"%+.20g",(double) image->page.y); break; } - case 'Z': + case 'Z': /* Unique filename. */ { - /* - Unique filename. - */ (void) CopyMagickString(filename,image_info->zero,extent); q+=CopyMagickString(q,filename,extent); break; } - case '[': - { - char - pattern[MaxTextExtent]; - - const char - *key, - *value; - - ssize_t - depth; - - /* - Image value. - */ - if (strchr(p,']') == (char *) NULL) - break; - depth=1; - p++; - for (i=0; (i < (MaxTextExtent-1L)) && (*p != '\0'); i++) - { - if (*p == '[') - depth++; - if (*p == ']') - depth--; - if (depth <= 0) - break; - pattern[i]=(*p++); - } - pattern[i]='\0'; - value=GetImageProperty(image,pattern); - if (value != (const char *) NULL) - { - length=strlen(value); - if ((size_t) (q-interpret_text+length+1) >= extent) - { - extent+=length; - interpret_text=(char *) ResizeQuantumMemory(interpret_text, - extent+MaxTextExtent,sizeof(*interpret_text)); - if (interpret_text == (char *) NULL) - break; - q=interpret_text+strlen(interpret_text); - } - (void) CopyMagickString(q,value,extent); - q+=length; - break; - } - else - if (IsGlob(pattern) != MagickFalse) - { - /* - Iterate over image properties. - */ - ResetImagePropertyIterator(image); - key=GetNextImageProperty(image); - while (key != (const char *) NULL) - { - if (GlobExpression(key,pattern,MagickTrue) != MagickFalse) - { - value=GetImageProperty(image,key); - if (value != (const char *) NULL) - { - length=strlen(key)+strlen(value)+2; - if ((size_t) (q-interpret_text+length+1) >= extent) - { - extent+=length; - interpret_text=(char *) ResizeQuantumMemory( - interpret_text,extent+MaxTextExtent, - sizeof(*interpret_text)); - if (interpret_text == (char *) NULL) - break; - q=interpret_text+strlen(interpret_text); - } - q+=FormatLocaleString(q,extent,"%s=%s\n",key,value); - } - } - key=GetNextImageProperty(image); - } - } - value=GetMagickProperty(image_info,image,pattern); - if (value != (const char *) NULL) - { - length=strlen(value); - if ((size_t) (q-interpret_text+length+1) >= extent) - { - extent+=length; - interpret_text=(char *) ResizeQuantumMemory(interpret_text, - extent+MaxTextExtent,sizeof(*interpret_text)); - if (interpret_text == (char *) NULL) - break; - q=interpret_text+strlen(interpret_text); - } - (void) CopyMagickString(q,value,extent); - q+=length; - break; - } - if (image_info == (ImageInfo *) NULL) - break; - value=GetImageOption(image_info,pattern); - if (value != (char *) NULL) - { - length=strlen(value); - if ((size_t) (q-interpret_text+length+1) >= extent) - { - extent+=length; - interpret_text=(char *) ResizeQuantumMemory(interpret_text, - extent+MaxTextExtent,sizeof(*interpret_text)); - if (interpret_text == (char *) NULL) - break; - q=interpret_text+strlen(interpret_text); - } - (void) CopyMagickString(q,value,extent); - q+=length; - break; - } - break; - } - case '@': + case '@': /* Image bounding box. */ { RectangleInfo page; - /* - Image bounding box. - */ page=GetImageBoundingBox(image,exception); q+=FormatLocaleString(q,MaxTextExtent,"%.20gx%.20g%+.20g%+.20g", (double) page.width,(double) page.height,(double) page.x,(double) page.y); break; } - case '#': + case '#': /* Image signature */ { - /* - Image signature. - */ (void) SignatureImage(image,exception); value=GetImageProperty(image,"signature"); if (value == (const char *) NULL) @@ -3130,12 +3022,12 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info, q+=CopyMagickString(q,value,extent); break; } - case '%': + case '%': /* percent escaped */ { *q++=(*p); break; } - default: + default: /* percent not expanded */ { *q++='%'; *q++=(*p);