From: Cristy Date: Sat, 4 Aug 2018 22:43:58 +0000 (-0400) Subject: ... X-Git-Tag: 7.0.8-9~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=86d77650ae61f04c82dd4230a7a2fd6233a7accc;p=imagemagick ... --- diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 3f4dab7a4..12d645610 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -2374,6 +2374,7 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, primitive_extent; DrawInfo + *clone_info, **graphic_context; MagickBooleanType @@ -2422,6 +2423,9 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, StopInfo *stops; + TypeMetric + metrics; + assert(image != (Image *) NULL); assert(image->signature == MagickCoreSignature); if (image->debug != MagickFalse) @@ -2993,6 +2997,19 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, case 'l': case 'L': { + if (LocaleCompare("letter-spacing",keyword) == 0) + { + GetNextToken(q,&q,extent,token); + clone_info=CloneDrawInfo((ImageInfo *) NULL,graphic_context[n]); + clone_info->text=AcquireString(" "); + status&=GetTypeMetrics(image,clone_info,&metrics,exception); + graphic_context[n]->kerning=metrics.width* + StringToDouble(token,&next_token); + clone_info=DestroyDrawInfo(clone_info); + if (token == next_token) + ThrowPointExpectedException(token,exception); + break; + } if (LocaleCompare("line",keyword) == 0) { primitive_type=LinePrimitive; @@ -3696,9 +3713,6 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, use=(const char *) GetValueFromSplayTree(macros,token); if (use != (const char *) NULL) { - DrawInfo - *clone_info; - clone_info=CloneDrawInfo((ImageInfo *) NULL,graphic_context[n]); (void) CloneString(&clone_info->primitive,use); status=DrawImage(image,clone_info,exception); @@ -3744,6 +3758,21 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, status=MagickFalse; break; } + case 'w': + case 'W': + { + if (LocaleCompare("word-spacing",keyword) == 0) + { + GetNextToken(q,&q,extent,token); + graphic_context[n]->interword_spacing=StringToDouble(token, + &next_token); + if (token == next_token) + ThrowPointExpectedException(token,exception); + break; + } + status=MagickFalse; + break; + } default: { status=MagickFalse; @@ -4154,12 +4183,6 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info, char geometry[MagickPathExtent]; - DrawInfo - *clone_info; - - TypeMetric - metrics; - if (primitive_info[j].coordinates != 1) { status=MagickFalse; diff --git a/coders/svg.c b/coders/svg.c index b47e093a7..36dc23c71 100644 --- a/coders/svg.c +++ b/coders/svg.c @@ -872,6 +872,27 @@ static void SVGProcessStyleElement(void *context,const xmlChar *name, } break; } + case 'K': + case 'k': + { + if (LocaleCompare(keyword,"kerning") == 0) + { + (void) FormatLocaleFile(svg_info->file,"kerning \"%s\"\n",value); + break; + } + break; + } + case 'L': + case 'l': + { + if (LocaleCompare(keyword,"letter-spacing") == 0) + { + (void) FormatLocaleFile(svg_info->file,"letter-spacing \"%s\"\n", + value); + break; + } + break; + } case 'M': case 'm': { @@ -1899,6 +1920,28 @@ static void SVGStartElement(void *context,const xmlChar *name, } break; } + case 'K': + case 'k': + { + if (LocaleCompare(keyword,"kerning") == 0) + { + (void) FormatLocaleFile(svg_info->file,"kerning \"%s\"\n", + value); + break; + } + break; + } + case 'L': + case 'l': + { + if (LocaleCompare(keyword,"letter-spacing") == 0) + { + (void) FormatLocaleFile(svg_info->file,"letter-spacing \"%s\"\n", + value); + break; + } + break; + } case 'M': case 'm': { @@ -4319,9 +4362,29 @@ static MagickBooleanType WriteSVGImage(const ImageInfo *image_info,Image *image, status=MagickFalse; break; } + case 'k': + case 'K': + { + if (LocaleCompare("kerning",keyword) == 0) + { + GetNextToken(q,&q,extent,token); + (void) FormatLocaleString(message,MagickPathExtent,"kerning:%s;", + token); + (void) WriteBlobString(image,message); + } + break; + } case 'l': case 'L': { + if (LocaleCompare("letter-spacing",keyword) == 0) + { + GetNextToken(q,&q,extent,token); + (void) FormatLocaleString(message,MagickPathExtent, + "letter-spacing:%s;",token); + (void) WriteBlobString(image,message); + break; + } if (LocaleCompare("line",keyword) == 0) { primitive_type=LinePrimitive;