/[CvsGraph]/cvsgraph/readconf.c
ViewVC logotype

Diff of /cvsgraph/readconf.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.19, Wed Oct 20 22:03:36 2004 UTC revision 1.23, Thu Dec 15 13:06:09 2005 UTC
# Line 42  Line 42 
42    
43  typedef struct  typedef struct
44  {  {
45          char    *keyword;          const char      *keyword;
46          int     type;          int             type;
47          union {          union {
48                  void    *v;     /* join of other values */                  void    *v;     /* join of other values */
49                  int     *i;                  int     *i;
# Line 51  Line 51 
51                  char    **s;                  char    **s;
52                  color_t *c;                  color_t *c;
53                  double  *d;                  double  *d;
54                    stringlist_t *sl;
55                    colorlist_t *cl;
56                  INTTYPE val;                  INTTYPE val;
57          } confref;          } confref;
58  } keyword_t;  } keyword_t;
# Line 76  Line 78 
78          TYPE_COLOR,          TYPE_COLOR,
79          TYPE_FONT,          TYPE_FONT,
80          TYPE_STRING,          TYPE_STRING,
81          TYPE_DOUBLE          TYPE_DOUBLE,
82            TYPE_COLORLIST,
83            TYPE_STRINGLIST
84  };  };
85    
86  static keyword_t keywords[] = {  static keyword_t keywords[] = {
# Line 139  Line 143 
143          { "rev_text_ttfont",    TYPE_STRING,    { &conf.rev_text_font.ttfont } },          { "rev_text_ttfont",    TYPE_STRING,    { &conf.rev_text_font.ttfont } },
144          { "rev_text_ttsize",    TYPE_DOUBLE,    { &conf.rev_text_font.ttsize } },          { "rev_text_ttsize",    TYPE_DOUBLE,    { &conf.rev_text_font.ttsize } },
145          { "rev_maxtags",        TYPE_NUMBER,    { &conf.rev_maxtags } },          { "rev_maxtags",        TYPE_NUMBER,    { &conf.rev_maxtags } },
146          { "merge_color",        TYPE_COLOR,     { &conf.merge_color } },          { "merge_color",        TYPE_COLORLIST, { &conf.merge_color } },
147          { "merge_from",         TYPE_STRING,    { &conf.merge_from } },          { "merge_from",         TYPE_STRINGLIST,        { &conf.merge_from } },
148          { "merge_to",           TYPE_STRING,    { &conf.merge_to } },          { "merge_to",           TYPE_STRINGLIST,        { &conf.merge_to } },
149          { "merge_findall",      TYPE_BOOLEAN,   { &conf.merge_findall } },          { "merge_findall",      TYPE_BOOLEAN,   { &conf.merge_findall } },
150          { "merge_front",        TYPE_BOOLEAN,   { &conf.merge_front } },          { "merge_front",        TYPE_BOOLEAN,   { &conf.merge_front } },
151          { "merge_nocase",       TYPE_BOOLEAN,   { &conf.merge_nocase } },          { "merge_nocase",       TYPE_BOOLEAN,   { &conf.merge_nocase } },
# Line 172  Line 176 
176          { "margin_right",       TYPE_NUMBER,    { &conf.margin_right } },          { "margin_right",       TYPE_NUMBER,    { &conf.margin_right } },
177          { "image_type",         TYPE_NUMBER,    { &conf.image_type } },          { "image_type",         TYPE_NUMBER,    { &conf.image_type } },
178          { "image_quality",      TYPE_NUMBER,    { &conf.image_quality } },          { "image_quality",      TYPE_NUMBER,    { &conf.image_quality } },
179            { "image_compress",     TYPE_NUMBER,    { &conf.image_compress } },
180            { "image_interlace",    TYPE_BOOLEAN,   { &conf.image_interlace } },
181          { "map_name",           TYPE_STRING,    { &conf.map_name } },          { "map_name",           TYPE_STRING,    { &conf.map_name } },
182          { "map_branch_href",    TYPE_STRING,    { &conf.map_branch_href } },          { "map_branch_href",    TYPE_STRING,    { &conf.map_branch_href } },
183          { "map_branch_alt",     TYPE_STRING,    { &conf.map_branch_alt } },          { "map_branch_alt",     TYPE_STRING,    { &conf.map_branch_alt } },
# Line 614  Line 620 
620                                          yylval.kw = NULL;                                          yylval.kw = NULL;
621                                          return TYPE_KEYWORD;                                          return TYPE_KEYWORD;
622                                  }                                  }
623                                  xfree(skw.keyword);                                  xfree((void *)skw.keyword);
624                                  if(kw->type == TYPE_VALUE)                                  if(kw->type == TYPE_VALUE)
625                                  {                                  {
626                                          yylval.i = (int)kw->confref.val;                                          yylval.i = (int)kw->confref.val;
# Line 775  Line 781 
781                          }                          }
782                          if(kw->type == TYPE_FONT || kw->type == TYPE_BOOLEAN)                          if(kw->type == TYPE_FONT || kw->type == TYPE_BOOLEAN)
783                                  t = TYPE_NUMBER;                                  t = TYPE_NUMBER;
784                          else if(kw->type == TYPE_COLOR)                          else if(kw->type == TYPE_COLOR || kw->type == TYPE_COLORLIST || kw->type == TYPE_STRINGLIST)
785                                  t = TYPE_STRING;                                  t = TYPE_STRING;
786                          else                          else
787                                  t = kw->type;                                  t = kw->type;
# Line 793  Line 799 
799                                  switch(kw->type)                                  switch(kw->type)
800                                  {                                  {
801                                  case TYPE_STRING:       e = "String"; yylval.str = xstrdup("error recovery"); break;                                  case TYPE_STRING:       e = "String"; yylval.str = xstrdup("error recovery"); break;
802                                    case TYPE_STRINGLIST:   e = "StringL"; yylval.str = xstrdup("error recovery"); break;
803                                  case TYPE_NUMBER:       e = "Number"; yylval.i = 0; break;                                  case TYPE_NUMBER:       e = "Number"; yylval.i = 0; break;
804                                  case TYPE_COLOR:        e = "Color"; yylval.str = xstrdup("#123456"); break;                                  case TYPE_COLOR:        e = "Color"; yylval.str = xstrdup("#123456"); break;
805                                    case TYPE_COLORLIST:    e = "ColorL"; yylval.str = xstrdup("#123456"); break;
806                                  case TYPE_FONT:         e = "Font"; yylval.i = 0; break;                                  case TYPE_FONT:         e = "Font"; yylval.i = 0; break;
807                                  case TYPE_BOOLEAN:      e = "Boolean"; yylval.i = 0; break;                                  case TYPE_BOOLEAN:      e = "Boolean"; yylval.i = 0; break;
808                                  case TYPE_DOUBLE:       e = "Double"; yylval.d = 0.0; break;                                  case TYPE_DOUBLE:       e = "Double"; yylval.d = 0.0; break;
# Line 810  Line 818 
818                                  case TYPE_STRING:                                  case TYPE_STRING:
819                                          *kw->confref.s = yylval.str;                                          *kw->confref.s = yylval.str;
820                                          break;                                          break;
821                                    case TYPE_STRINGLIST:
822                                            kw->confref.sl->strs = xrealloc(kw->confref.sl->strs, sizeof(*kw->confref.sl->strs) * (kw->confref.sl->n + 1));
823                                            kw->confref.sl->strs[kw->confref.sl->n] = yylval.str;
824                                            kw->confref.sl->n++;
825                                            break;
826                                  case TYPE_NUMBER:                                  case TYPE_NUMBER:
827                                          *kw->confref.i = yylval.i;                                          *kw->confref.i = yylval.i;
828                                          break;                                          break;
# Line 822  Line 835 
835                                  case TYPE_COLOR:                                  case TYPE_COLOR:
836                                          set_color(kw->confref.c, yylval.str);                                          set_color(kw->confref.c, yylval.str);
837                                          break;                                          break;
838                                    case TYPE_COLORLIST:
839                                            kw->confref.cl->clrs = xrealloc(kw->confref.cl->clrs, sizeof(*kw->confref.cl->clrs) * (kw->confref.cl->n + 1));
840                                            set_color(&kw->confref.cl->clrs[kw->confref.cl->n], yylval.str);
841                                            kw->confref.cl->n++;
842                                            break;
843                                  case TYPE_FONT:                                  case TYPE_FONT:
844                                          kw->confref.f->gdfont = get_font(yylval.i);                                          kw->confref.f->gdfont = get_font(yylval.i);
845                                          break;                                          break;
# Line 910  Line 928 
928                  }                  }
929                  input_file = NULL;                  input_file = NULL;
930          }          }
931    
932            if(conf.merge_from.n != conf.merge_to.n)
933            {
934                    int x = conf.merge_from.n < conf.merge_to.n ? conf.merge_from.n : conf.merge_to.n;
935                    stack_msg(MSG_ERR, "config: merge_from(n=%d) does not match merge_to(n=%d)", conf.merge_from.n, conf.merge_to.n);
936                    conf.merge_from.n = x;
937                    conf.merge_to.n = x;
938            }
939            if(conf.merge_color.n < conf.merge_from.n)
940            {
941                    /* Silently extend missing merge_color statements with black */
942                    int x;
943                    char c[] = "#000000";
944                    for(x = conf.merge_color.n; x < conf.merge_from.n; x++)
945                    {
946                            conf.merge_color.clrs = xrealloc(conf.merge_color.clrs, sizeof(*conf.merge_color.clrs) * (conf.merge_color.n + 1));
947                            set_color(&conf.merge_color.clrs[conf.merge_color.n], c);
948                            conf.merge_color.n++;
949                    }
950            }
951    
952  #ifdef DEBUG  #ifdef DEBUG
953          dump_config();          dump_config();
954  #endif  #endif
955  }  }
956    
957    /*
958     **************************************************************************
959     * Color reference by name for late-binding color allocation
960     **************************************************************************
961     */
962    color_t *get_colorref(const char *confcolor, int idx)
963    {
964            keyword_t skw;
965            keyword_t *kw;
966    
967            assert(confcolor != NULL);
968    
969            skw.keyword = confcolor;
970            kw = bsearch(&skw, keywords, NKEYWORDS, sizeof(keywords[0]), cmp_kw);
971            if(!kw || (kw->type != TYPE_COLOR && kw->type != TYPE_COLORLIST))
972                    return NULL;
973            if(kw->type == TYPE_COLORLIST)
974            {
975                    if(idx >= kw->confref.cl->n)
976                            return NULL;
977                    return &kw->confref.cl->clrs[idx];
978            }
979            return kw->confref.c;
980    }

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0