cvs: gd /libgd/src gdxpm.c /libgd/tests/xpm CMakeLists.txt Makefile.am color_name.c color_name.xpm

[email protected] ("Takeshi Abe") Thu, 21 Aug 2008 11:34:05 -0000
Newsgroups php.gd.cvs
Message-ID <cvstabe1219318445@cvsserver>
tabe		Thu Aug 21 11:34:05 2008 UTC

  Added files:                 
    /gd/libgd/tests/xpm	color_name.c color_name.xpm 

  Modified files:              
    /gd/libgd/src	gdxpm.c 
    /gd/libgd/tests/xpm	CMakeLists.txt Makefile.am 
  Log:
  * recognize the color names like 'AliceBlue' in gdImageCreateFromXpm()
  * deleted unused codes
  
  
http://cvs.php.net/viewvc.cgi/gd/libgd/src/gdxpm.c?r1=1.11&r2=1.12&diff_format=u
Index: gd/libgd/src/gdxpm.c
diff -u gd/libgd/src/gdxpm.c:1.11 gd/libgd/src/gdxpm.c:1.12
--- gd/libgd/src/gdxpm.c:1.11	Thu Aug 14 10:41:57 2008
+++ gd/libgd/src/gdxpm.c	Thu Aug 21 11:34:05 2008
@@ -14,6 +14,7 @@
 #include <string.h>
 #include "gd.h"
 #include "gdhelpers.h"
+#include "gd_color_map.h"
 
 #ifndef HAVE_LIBXPM
 BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm(char *filename)
@@ -58,92 +59,94 @@
 	}
 
 	for(i = 0; i < number; i++) {
-		if(strcmp(image.colorTable[i].c_color, "None") == 0) {
+		char *c_color = image.colorTable[i].c_color;
+		if(strcmp(c_color, "None") == 0) {
 		  colors[i] = gdImageGetTransparent(im);
 		  if(colors[i] == -1) colors[i] = gdImageColorAllocate(im, 0, 0, 0);
 		  if(colors[i] != -1) gdImageColorTransparent(im, colors[i]);
 		  continue;
 		}
-		len = strlen(image.colorTable[i].c_color);
-		if(len < 1 || image.colorTable[i].c_color[0] != '#') continue;
-		switch(len) {
+		len = strlen(c_color);
+		if(len < 1) continue;
+		if(c_color[0] == '#') {
+			switch(len) {
 			case 4:
 				buf[2] = '\0';
-				buf[0] = buf[1] = image.colorTable[i].c_color[1];
+				buf[0] = buf[1] = c_color[1];
 				red = strtol(buf, NULL, 16);
 
-				buf[0] = buf[1] = image.colorTable[i].c_color[2];
+				buf[0] = buf[1] = c_color[2];
 				green = strtol(buf, NULL, 16);
 
-				buf[0] = buf[1] = image.colorTable[i].c_color[3];
+				buf[0] = buf[1] = c_color[3];
 				blue = strtol(buf, NULL, 16);
-			break;
+				break;
 
 			case 7:
 				buf[2] = '\0';
-				buf[0] = image.colorTable[i].c_color[1];
-				buf[1] = image.colorTable[i].c_color[2];
+				buf[0] = c_color[1];
+				buf[1] = c_color[2];
 				red = strtol(buf, NULL, 16);
 
-				buf[0] = image.colorTable[i].c_color[3];
-				buf[1] = image.colorTable[i].c_color[4];
+				buf[0] = c_color[3];
+				buf[1] = c_color[4];
 				green = strtol(buf, NULL, 16);
 
-				buf[0] = image.colorTable[i].c_color[5];
-				buf[1] = image.colorTable[i].c_color[6];
+				buf[0] = c_color[5];
+				buf[1] = c_color[6];
 				blue = strtol(buf, NULL, 16);
-			break;
+				break;
 
 			case 10:
 				buf[3] = '\0';
-				buf[0] = image.colorTable[i].c_color[1];
-				buf[1] = image.colorTable[i].c_color[2];
-				buf[2] = image.colorTable[i].c_color[3];
+				buf[0] = c_color[1];
+				buf[1] = c_color[2];
+				buf[2] = c_color[3];
 				red = strtol(buf, NULL, 16);
 				red /= 64;
 
-				buf[0] = image.colorTable[i].c_color[4];
-				buf[1] = image.colorTable[i].c_color[5];
-				buf[2] = image.colorTable[i].c_color[6];
+				buf[0] = c_color[4];
+				buf[1] = c_color[5];
+				buf[2] = c_color[6];
 				green = strtol(buf, NULL, 16);
 				green /= 64;
 
-				buf[0] = image.colorTable[i].c_color[7];
-				buf[1] = image.colorTable[i].c_color[8];
-				buf[2] = image.colorTable[i].c_color[9];
+				buf[0] = c_color[7];
+				buf[1] = c_color[8];
+				buf[2] = c_color[9];
 				blue = strtol(buf, NULL, 16);
 				blue /= 64;
-			break;
+				break;
 
 			case 13:
 				buf[4] = '\0';
-				buf[0] = image.colorTable[i].c_color[1];
-				buf[1] = image.colorTable[i].c_color[2];
-				buf[2] = image.colorTable[i].c_color[3];
-				buf[3] = image.colorTable[i].c_color[4];
+				buf[0] = c_color[1];
+				buf[1] = c_color[2];
+				buf[2] = c_color[3];
+				buf[3] = c_color[4];
 				red = strtol(buf, NULL, 16);
 				red /= 256;
 
-				buf[0] = image.colorTable[i].c_color[5];
-				buf[1] = image.colorTable[i].c_color[6];
-				buf[2] = image.colorTable[i].c_color[7];
-				buf[3] = image.colorTable[i].c_color[8];
+				buf[0] = c_color[5];
+				buf[1] = c_color[6];
+				buf[2] = c_color[7];
+				buf[3] = c_color[8];
 				green = strtol(buf, NULL, 16);
 				green /= 256;
 
-				buf[0] = image.colorTable[i].c_color[9];
-				buf[1] = image.colorTable[i].c_color[10];
-				buf[2] = image.colorTable[i].c_color[11];
-				buf[3] = image.colorTable[i].c_color[12];
+				buf[0] = c_color[9];
+				buf[1] = c_color[10];
+				buf[2] = c_color[11];
+				buf[3] = c_color[12];
 				blue = strtol(buf, NULL, 16);
 				blue /= 256;
-			break;
+				break;
+			}
+		} else if(!gdColorMapLookup(GD_COLOR_MAP_X11, c_color, &red, &green, &blue)) {
+			continue;
 		}
 
 		colors[i] = gdImageColorResolve(im, red, green, blue);
-		if(colors[i] == -1) {
-			fprintf(stderr, "ARRRGH\n");
-		}
 	}
 
 	pointer = (int *)image.data;
http://cvs.php.net/viewvc.cgi/gd/libgd/tests/xpm/CMakeLists.txt?r1=1.1&r2=1.2&diff_format=u
Index: gd/libgd/tests/xpm/CMakeLists.txt
diff -u gd/libgd/tests/xpm/CMakeLists.txt:1.1 gd/libgd/tests/xpm/CMakeLists.txt:1.2
--- gd/libgd/tests/xpm/CMakeLists.txt:1.1	Thu Aug 14 10:45:42 2008
+++ gd/libgd/tests/xpm/CMakeLists.txt	Thu Aug 21 11:34:05 2008
@@ -1,6 +1,7 @@
 
 SET(TESTS_FILES
 	bug00166
+	color_name
 )
 
 FOREACH(test_name ${TESTS_FILES})
http://cvs.php.net/viewvc.cgi/gd/libgd/tests/xpm/Makefile.am?r1=1.1&r2=1.2&diff_format=u
Index: gd/libgd/tests/xpm/Makefile.am
diff -u gd/libgd/tests/xpm/Makefile.am:1.1 gd/libgd/tests/xpm/Makefile.am:1.2
--- gd/libgd/tests/xpm/Makefile.am:1.1	Thu Aug 14 10:45:42 2008
+++ gd/libgd/tests/xpm/Makefile.am	Thu Aug 21 11:34:05 2008
@@ -1,3 +1,3 @@
 ## Process this file with automake to produce Makefile.in -*-Makefile-*-
 
-EXTRA_DIST = CMakeLists.txt bug00166.c bug00166.xpm
+EXTRA_DIST = CMakeLists.txt bug00166.c bug00166.xpm color_name.c color_name.xpm

http://cvs.php.net/viewvc.cgi/gd/libgd/tests/xpm/color_name.c?view=markup&rev=1.1
Index: gd/libgd/tests/xpm/color_name.c
+++ gd/libgd/tests/xpm/color_name.c
/* $Id: color_name.c,v 1.1 2008/08/21 11:34:05 tabe Exp $ */
#include "gd.h"
#include <stdio.h>
#include <stdlib.h>
#include "gdtest.h"

int
main(int argc, char *argv[])
{
  gdImagePtr im;
  char path[1024];
  int c, result;

  sprintf(path, "%s/xpm/color_name.xpm", GDTEST_TOP_DIR);
  im = gdImageCreateFromXpm(path);
  if (!im) {
    return 2;
  }
  c = gdImageGetPixel(im, 2, 2);
  if (gdImageRed(im, c)      == 0xFF
      && gdImageGreen(im, c) == 0xFF
      && gdImageBlue(im, c)  == 0x0) {
    result = 0;
  } else {
    result = 1;
  }
  gdImageDestroy(im);
  return result;
}

http://cvs.php.net/viewvc.cgi/gd/libgd/tests/xpm/color_name.xpm?view=markup&rev=1.1
Index: gd/libgd/tests/xpm/color_name.xpm
+++ gd/libgd/tests/xpm/color_name.xpm
/* XPM */
static char *color_name = {
"3 5 6 1",

"  c None",
"A c AliceBlue",
"b c blue",
"c c cyan",
"w c wheat",
"y c yellow",

" A ",
"AbA",
"yby",
"ycy",
"wcw",
};