]> granicus.if.org Git - graphviz/commitdiff
extract color.h from types.h
authorellson <devnull@localhost>
Tue, 18 Oct 2005 18:35:13 +0000 (18:35 +0000)
committerellson <devnull@localhost>
Tue, 18 Oct 2005 18:35:13 +0000 (18:35 +0000)
20 files changed:
lib/common/Makefile.am
lib/common/Makefile.old
lib/common/colxlate.c
lib/common/geom.c
lib/common/geom.h
lib/common/render.h
lib/common/renderprocs.h
lib/common/types.h
lib/common/utils.h
lib/gvc/gvconfig.c
lib/gvc/gvcontext.c
lib/gvc/gvdevice.c
lib/gvc/gvjobs.c
lib/gvc/gvlayout.c
lib/gvc/gvplugin.c
lib/gvc/gvrender.c
lib/gvc/gvtextlayout.c
lib/gvc/gvusershape.c
plugin/dot_layout/gvlayout_dot_layout.c
plugin/neato_layout/gvlayout_neato_layout.c

index 252404787591775dab0736b10294dcc3e60e3186..eab1a2a83eec508d6a35a6be4dee06ce0b813160 100644 (file)
@@ -9,9 +9,9 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/lib/graph \
        -I$(top_srcdir)/lib/cdt  @GD_INCLUDES@ @EXPAT_INCLUDES@ @Z_INCLUDES@
 
-pkginclude_HEADERS = logic.h geom.h const.h macros.h types.h globals.h \
-       htmllex.h htmltable.h pointset.h render.h renderprocs.h \
-       utils.h colortbl.h
+pkginclude_HEADERS = logic.h arith.h geom.h color.h colortbl.h \
+       const.h macros.h types.h globals.h utils.h \
+       htmllex.h htmltable.h pointset.h render.h renderprocs.h
 noinst_LTLIBRARIES = libcommon.la
 
 if !DISABLE_CODEGENS
index 0aef2071fc720d5a62188a65e347cd4eb99ddffd..40f68da26ce51f98a3d78e02c4fef12b36f66fe0 100644 (file)
@@ -19,7 +19,7 @@ DEFINES = -DHAVE_CONFIG_H
 AWKDIR = $(ROOT)/awk
 
 HDRS = colortbl.h const.h globals.h macros.h render.h \
-       renderprocs.h types.h utils.h geom.h logic.h
+       renderprocs.h types.h utils.h geom.h logic.h color.h arith.h
 
 OBJS = args.o arrows.o gdusershape.o mapgen.o psgen.o svgusershape.o \
        colxlate.o globals.o mifgen.o psusershape.o timing.o \
index ad0ea4776bfb24835910d7cdfbfb75bc5735608c..c12a6feaf851aae5c3a57c49e0c79d6160a4af59 100644 (file)
 *              AT&T Research, Florham Park NJ             *
 **********************************************************/
 
-#include "render.h"
-#include "gvplugin.h"
-#include "gvcint.h"
-#include "gvcproc.h"
-#include "colortbl.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <ctype.h>
 
-static void hsv2rgb(double h, double s, double v, double *r, double *g,
-                   double *b)
+#include "color.h"
+#include "colortbl.h"
+
+static void hsv2rgb(double h, double s, double v,
+                       double *r, double *g, double *b)
 {
     int i;
     double f, p, q, t;
@@ -75,8 +76,8 @@ static void hsv2rgb(double h, double s, double v, double *r, double *g,
     }
 }
 
-static void rgb2hsv(double r, double g, double b, double *h, double *s,
-                   double *v)
+static void rgb2hsv(double r, double g, double b,
+               double *h, double *s, double *v)
 {
 
     double rgbmin, rgbmax;
@@ -121,7 +122,7 @@ static void rgb2cmyk(double r, double g, double b, double *c, double *m,
     *y -= *k;
 }
 
-static int colorcmpf(void *p0, void *p1)
+static int colorcmpf(const void *p0, const void *p1)
 {
     /* fast comparison of first character */
     int i = (((hsbcolor_t *) p0)->name[0] - ((hsbcolor_t *) p1)->name[0]);
@@ -132,40 +133,47 @@ static int colorcmpf(void *p0, void *p1)
 
 char *canontoken(char *str)
 {
-    static unsigned char canon[SMALLBUF];
-    unsigned char c;
-    unsigned char *p = (unsigned char *) str;
-    unsigned char *q = canon;
-    int i = SMALLBUF;
+    static unsigned char *canon;
+    static int allocated;
+    unsigned char c, *p, *q;
+    int len;
 
-    while ((c = *p++) && (--i)) {
+    p = (unsigned char *) str;
+    len = strlen(str);
+    if (len >= allocated) {
+       allocated = len + 1 + 10;
+       canon = realloc(canon, allocated);
+       if (!canon)
+           return NULL;
+    }
+    q = (unsigned char *) canon;
+    while ((c = *p++)) {
        if (isalnum(c) == FALSE)
            continue;
        if (isupper(c))
            c = tolower(c);
        *q++ = c;
     }
-    if (c)
-       agerr(AGWARN, "color value '%s' truncated\n", str);
     *q = '\0';
-    return (char *) canon;
+    return (char*)canon;
 }
 
-void colorxlate(char *str, color_t * color, color_type_t target_type)
+int colorxlate(char *str, color_t * color, color_type_t target_type)
 {
     static hsbcolor_t *last;
-    hsbcolor_t fake;
-    unsigned char canon[SMALLBUF];
+    static unsigned char *canon;
+    static int allocated;
     unsigned char *p, *q;
-    char *missedcolor;
-    unsigned char ch;
+    hsbcolor_t fake;
+    unsigned char c;
     double H, S, V, R, G, B;
     double C, M, Y, K;
     unsigned int r, g, b, a;
-    int i;
+    int len, rc;
 
     color->type = target_type;
 
+    rc = COLOR_OK;
     for (; *str == ' '; str++);        /* skip over any leading whitespace */
     p = (unsigned char *) str;
 
@@ -217,20 +225,26 @@ void colorxlate(char *str, color_t * color, color_type_t target_type)
        case COLOR_INDEX:
            break;
        }
-       return;
+       return rc;
     }
 
     /* test for hsv value such as: ".6,.5,.3" */
-    if (((ch = *p) == '.') || isdigit(ch)) {
+    if (((c = *p) == '.') || isdigit(c)) {
+       len = strlen((char*)p);
+       if (len >= allocated) {
+           allocated = len + 1 + 10;
+           canon = realloc(canon, allocated);
+           if (! canon) {
+               rc = COLOR_MALLOC_FAIL;
+               return rc;
+           }
+       }
        q = canon;
-       i = SMALLBUF;
-       while ((ch = *p++) && (--i)) {
-           if (ch == ',')
-               ch = ' ';
-           *q++ = ch;
+       while ((c = *p++)) {
+           if (c == ',')
+               c = ' ';
+           *q++ = c;
        }
-       if (ch)
-           agerr(AGWARN, "color value '%s' truncated\n", str);
        *q = '\0';
 
        if (sscanf((char *) canon, "%lf%lf%lf", &H, &S, &V) == 3) {
@@ -278,12 +292,14 @@ void colorxlate(char *str, color_t * color, color_type_t target_type)
            case COLOR_INDEX:
                break;
            }
-           return;
+           return rc;
        }
     }
 
     /* test for known color name (generic, not renderer specific known names) */
     fake.name = canontoken(str);
+    if (!fake.name)
+       return COLOR_MALLOC_FAIL;
     if ((last == NULL)
        || (last->name[0] != fake.name[0])
        || (strcmp(last->name, fake.name))) {
@@ -291,7 +307,7 @@ void colorxlate(char *str, color_t * color, color_type_t target_type)
                                      (void *) color_lib,
                                      sizeof(color_lib) /
                                      sizeof(hsbcolor_t), sizeof(fake),
-                                     (bsearch_cmpf) colorcmpf);
+                                     colorcmpf);
     }
     if (last != NULL) {
        switch (target_type) {
@@ -346,15 +362,11 @@ void colorxlate(char *str, color_t * color, color_type_t target_type)
        case COLOR_INDEX:
            break;
        }
-       return;
+       return rc;
     }
 
     /* if we're still here then we failed to find a valid color spec */
-    missedcolor = malloc(strlen(str) + 16);
-    sprintf(missedcolor, "color %s", str);
-    if (emit_once(missedcolor))
-       agerr(AGWARN, "%s is not a known color. Using black.\n", str);
-    free(missedcolor);
+    rc = COLOR_UNKNOWN;
     switch (target_type) {
     case HSV_DOUBLE:
        color->u.HSV[0] = color->u.HSV[1] = color->u.HSV[2] = 0.0;
@@ -381,5 +393,5 @@ void colorxlate(char *str, color_t * color, color_type_t target_type)
     case COLOR_INDEX:
        break;
     }
-    return;
+    return rc;
 }
index 196167f2adb7503c20faf9f6b78bb276c9b3707c..f8aeef29b0907e3ed156ca5834c98612848e5436 100644 (file)
@@ -18,8 +18,6 @@
  * no specific dependance on graphs */
 
 #include <stdio.h>
-#include "logic.h"
-#include "pathplan.h"
 #include "geom.h"
 
 point pointof(int x, int y)
index c606a9e3a24b9939c9efdbed513381c7f59a449d..1d30a2bb873208dc6f553cbe0d474050e304e520 100644 (file)
 /* geometric functions (e.g. on points and boxes) with application to, but
  * no specific dependance on graphs */
 
+#include "arith.h"
+
 #ifndef GV_GEOM_H
 #define GV_GEOM_H
 
-#include "pathplan.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -29,45 +29,14 @@ extern "C" {
 typedef struct { int x, y; } point;
 
 typedef struct pointf_s { double x, y; } pointf;
+
+/* tell pathplan/pathgeom.h */
 #define HAVE_POINTF_S
 
 typedef struct { point LL, UR; } box;
 
 typedef struct { pointf LL, UR; } boxf;
 
-#ifdef MIN
-#undef MIN
-#endif
-#define MIN(a,b)       ((a)<(b)?(a):(b))
-
-#ifdef MAX
-#undef MAX
-#endif
-#define MAX(a,b)       ((a)>(b)?(a):(b))
-
-#ifdef ABS
-#undef ABS
-#endif
-#define ABS(a)         ((a) >= 0 ? (a) : -(a))
-
-#ifndef MAXINT
-#define        MAXINT          ((int)(~(unsigned)0 >> 1))
-#endif
-#ifndef MAXSHORT
-#define        MAXSHORT        (0x7fff)
-#endif
-#ifndef MAXDOUBLE
-#define MAXDOUBLE   1.7976931348623157e+308
-#endif
-#ifndef MAXFLOAT
-#define MAXFLOAT   ((float)3.40282347e+38)
-#endif
-
-#ifdef BETWEEN
-#undef BETWEEN
-#endif
-#define BETWEEN(a,b,c) (((a) <= (b)) && ((b) <= (c)))
-
 /* true if point p is inside box b */
 #define INSIDE(p,b)    (BETWEEN((b).LL.x,(p).x,(b).UR.x) && BETWEEN((b).LL.y,(p).y,(b).UR.y))
 /* true if boxes b0 and b1 overlap */
@@ -80,11 +49,6 @@ typedef struct { pointf LL, UR; } boxf;
 /* expand box b0 as needed to enclose box b1 */
 #define EXPANDBB(b0, b1) (b0.LL.x = MIN(b0.LL.x, b1.LL.x), b0.LL.y = MIN(b0.LL.y, b1.LL.y), b0.UR.x = MAX(b0.UR.x, b1.UR.x), b0.UR.y = MAX(b0.UR.y, b1.UR.y))
 
-#define ROUND(f)        ((f>=0)?(int)(f + .5):(int)(f - .5))
-#define RADIANS(deg)   ((deg)/180.0 * PI)
-#define DEGREES(rad)   ((rad)/PI * 180.0)
-
-#define SQR(v) ((v) * (v))
 #define DIST2(p1,p2) (SQR((p1.x) - (p2.x))) + (SQR((p1.y) - (p2.y)))
 #define DIST(p1,p2) (sqrt(DIST2((p1),(p2))))
 
index 0454b89f46b3cb77a3faaab6fdd697c983f07cd4..1f5add85c195faabd2d9ff423d4f10bbfde20603 100644 (file)
@@ -49,9 +49,6 @@
 #include <string.h>
 #endif
 
-#include "logic.h"
-#include "geom.h"
-#include "pathplan.h"
 #include "macros.h"
 #include "const.h"
 #include "types.h"
index 7252e284f7a51d5d578ca56eace2ebbe5ac945a2..3e5d20316803809a2cb3f4e8cdded5f0fcd9c209 100644 (file)
@@ -42,8 +42,6 @@ extern "C" {
                                 splineInfo *);
     extern char *canontoken(char *str);
     extern char* charsetToStr (int c);
-    extern void colorxlate(char *str, color_t * color,
-                          color_type_t target_type);
     extern point coord(node_t * n);
     extern void do_graph_label(graph_t * sg);
     extern void graph_init(graph_t * g, boolean use_rankdir);
index db52d96548c7fd0e01d9789715d98ee34be77371..acede7b6fa141f957689e900cb66a848eaefe11e 100644 (file)
 #ifndef GV_TYPES_H
 #define GV_TYPES_H
 
+#include "geom.h"
+#include "pathplan.h"
+#include "color.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -292,29 +296,6 @@ extern "C" {
        unsigned char sides;    /* sides of node exposed to field */
     } field_t;
 
-    typedef struct hsbcolor_t {
-       char *name;
-       unsigned char h, s, b;
-    } hsbcolor_t;
-
-/* possible representations of color in color_t */
-    typedef enum { HSV_DOUBLE, RGBA_BYTE, RGBA_WORD, CMYK_BYTE,
-           RGBA_DOUBLE, COLOR_STRING, COLOR_INDEX } color_type_t;
-
-/* color_t can hold a color spec in a choice or representations */
-    typedef struct color_s {
-       union {
-           double RGBA[4];
-           double HSV[3];
-           unsigned char rgba[4];
-           unsigned char cmyk[4];
-           int rrggbbaa[4];
-           char *string;
-           int index;
-       } u;
-       color_type_t type;
-    } color_t;
-
     typedef struct nlist_t {
        node_t **list;
        int size;
index 8396edbfa2e3917c2af21209272d9ae457a02604..3359e7d6a79cdfe62397e5cdd7a930bfeb82ad47 100644 (file)
 extern "C" {
 #endif
 
-
-/* extern char *pathget(char *, char *, char *); */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "geom.h"
-
 #ifndef HAVE_STRCASECMP
     extern int strcasecmp(const char *s1, const char *s2);
 #endif
index 2b30799354cab5c119bdaaa3166ce1917677ddf3..9a76bac8677e129f3219536c0a53bc03fbcdf932 100644 (file)
 #include       <glob.h>
 #endif
 
-#include        "logic.h"
 #include        "geom.h"
-#include        "macros.h"
+#include        "color.h"
+
 #include        "const.h"
 #include        "types.h"
 #include        "graph.h"
+
 #include       "gvplugin.h"
 #include       "gvcint.h"
 #include        "gvcproc.h"
index 7bf67158eff946594bd61cd066a386497a01324e..ae732d6dfe40ea3d55bfb008e092e6805dffbe11 100644 (file)
 #include        <stdio.h>
 #include        <stdlib.h>
 
-#include       "logic.h"
 #include       "geom.h"
-#include       "macros.h"
+
 #include       "types.h"
 #include       "graph.h"
+
 #include        "gvplugin.h"
 #include        "gvcint.h"
 #include        "gvcproc.h"
index a0df29f303d66da376e9a0b9233dc43d97fba3aa..0c95b5272dd509da48f3e9c18dcb7bc0581f6d9e 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
-#include "logic.h"
 #include "geom.h"
+
 #include "const.h"
 #include "types.h"
-#include "macros.h"
 
 #include "gvplugin_device.h"
 #include "gvplugin.h"
index d7d263e836b4caee2d705b6833e9c96960387829..e0fbb347e582e3df6b5a1f44e4a2c48c18cb5427 100644 (file)
 #include       <stdio.h>
 #include       <stdlib.h>
 
-#include       "logic.h"
 #include       "geom.h"
+
 #include       "types.h"
+
 #include        "gvplugin.h"
 #include        "gvcint.h"
 #include        "gvcproc.h"
index 16ede4ae5e775aeea90910a744652b09220a0d75..d52b603f232cb5a955fa424fde32799f52e8ec6b 100644 (file)
 
 #include <stdio.h>
 
-#include "logic.h"
 #include "geom.h"
+
 #include "const.h"
 #include "types.h"
-#include "macros.h"
 #include "graph.h"
 #include "cdt.h"
 
index 18051aac1fda66dd443db8067e1cf99146c8604a..c87f78ac01bc35a1046c73893450d082aa44a41f 100644 (file)
 #include       <ltdl.h>
 #endif
 
-#include        "logic.h"
 #include        "geom.h"
+
 #include        "types.h"
-#include        "macros.h"
 #include        "graph.h"
+
 #include        "gvplugin.h"
 #include        "gvcint.h"
 #include        "gvcproc.h"
index d2205289e0cba88a7cd64f812638849b443c41a8..f5ab323a8dcb3530b4678c8ed64a7edbdc3be2aa 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-#include "logic.h"
 #include "geom.h"
+#include "pathplan.h"
+#include "color.h"
 #include "const.h"
 #include "types.h"
 #include "macros.h"
-#include "geom.h"
 #include "globals.h"
 #include "graph.h"
 #include "cdt.h"
 #include "gvcint.h"
 #include "gvcproc.h"
 
+extern int emit_once(char *str);
+
 #ifndef DISABLE_CODEGENS
 extern codegen_t PS_CodeGen;
 #endif
 
-/* FIXME - need these but without rest of crap in common/ */
-extern void colorxlate(char *str, color_t * color,
-                      color_type_t target_type);
-extern char *canontoken(char *str);
-
 int gvrender_select(GVJ_t * job, char *str)
 {
     GVC_t *gvc = job->gvc;
@@ -197,6 +194,7 @@ static void gvrender_resolve_color(gvrender_features_t * features,
                                   char *name, color_t * color)
 {
     char *tok;
+    int rc;
 
     color->u.string = name;
     color->type = COLOR_STRING;
@@ -204,7 +202,19 @@ static void gvrender_resolve_color(gvrender_features_t * features,
     if (!features->knowncolors || (bsearch(&tok, features->knowncolors, features->sz_knowncolors,
                 sizeof(char *), gvrender_comparestr)) == NULL) {
        /* if tok was not found in known_colors */
-       colorxlate(name, color, features->color_type);
+       rc = colorxlate(name, color, features->color_type);
+       if (rc != COLOR_OK) {
+           if (rc == COLOR_UNKNOWN) {
+               char *missedcolor = malloc(strlen(name) + 16);
+               sprintf(missedcolor, "color %s", name);
+               if (emit_once(missedcolor))
+                   agerr(AGWARN, "%s is not a known color.\n", name);
+               free(missedcolor);
+           }
+           else {
+               agerr(AGERR, "error in colxlate()\n");
+           }
+       }
     }
 }
 
index c6f5b5eb057d2865ecf7331bca315f6959adcec5..9365cf2c71b532333bb63fa280b8eea7877e26d8 100644 (file)
 
 #include <stdio.h>
 
-#include "logic.h"
 #include "geom.h"
+
 #include "const.h"
 #include "types.h"
-#include "macros.h"
 
 #include "gvplugin_textlayout.h"
 #include "gvplugin.h"
index 4ce4fadb45a5ef3889037a0ee75a8d5b84e2ce68..6beaaad0b4cc090a8545ccbe5de0feee9a9651ec 100644 (file)
 
 #include <stdio.h>
 
-#include "logic.h"
 #include "geom.h"
+
+#include "macros.h"
 #include "const.h"
 #include "types.h"
-#include "macros.h"
 #include "cdt.h"
 #include "graph.h"
 
index 9555d01aa853016a9c9e807d2d887e96a556b196..6b2564d86e158557b2f453a2b9dd65f805a59a24 100644 (file)
 
 #include <stdio.h>
 
-#include "logic.h"
 #include "geom.h"
-#include "macros.h"
-#include "const.h"
+
 #include "types.h"
 
 #include "gvplugin_layout.h"
index ecd92864d8ae40a95e8810ef834153ca09ee97ce..bbc600f5fcfaa8afc77df6b60d45e07f27e11fbb 100644 (file)
 
 #include <stdio.h>
 
-#include "logic.h"
 #include "geom.h"
-#include "macros.h"
-#include "const.h"
+
 #include "types.h"
 
 #include "gvplugin_layout.h"