/[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.22, Wed Jun 22 22:51:51 2005 UTC revision 1.23, Thu Dec 15 13:06:09 2005 UTC
# 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 777  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 795  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 812  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 824  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 912  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
# Line 922  Line 959 
959   * Color reference by name for late-binding color allocation   * Color reference by name for late-binding color allocation
960   **************************************************************************   **************************************************************************
961   */   */
962  color_t *get_colorref(const char *confcolor)  color_t *get_colorref(const char *confcolor, int idx)
963  {  {
964          keyword_t skw;          keyword_t skw;
965          keyword_t *kw;          keyword_t *kw;
# Line 931  Line 968 
968    
969          skw.keyword = confcolor;          skw.keyword = confcolor;
970          kw = bsearch(&skw, keywords, NKEYWORDS, sizeof(keywords[0]), cmp_kw);          kw = bsearch(&skw, keywords, NKEYWORDS, sizeof(keywords[0]), cmp_kw);
971          if(!kw || kw->type != TYPE_COLOR)          if(!kw || (kw->type != TYPE_COLOR && kw->type != TYPE_COLORLIST))
972                  return NULL;                  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;          return kw->confref.c;
980  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0