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))
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;
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;
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;
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
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)
q+=CopyMagickString(q,value,extent);
break;
}
- case '%':
+ case '%': /* percent escaped */
{
*q++=(*p);
break;
}
- default:
+ default: /* percent not expanded */
{
*q++='%';
*q++=(*p);