/[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.1, Tue Jan 1 21:03:23 2002 UTC revision 1.4, Tue Apr 23 23:02:54 2002 UTC
# Line 2  Line 2 
2   * CvsGraph graphical representation generator of brances and revisions   * CvsGraph graphical representation generator of brances and revisions
3   * of a file in cvs/rcs.   * of a file in cvs/rcs.
4   *   *
5   * Copyright (C) 2001  B. Stultiens   * Copyright (C) 2001,2002  B. Stultiens
6   *   *
7   * This program is free software; you can redistribute it and/or modify   * This program is free software; you can redistribute it and/or modify
8   * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
# Line 50  Line 50 
50                  font_t  *f;                  font_t  *f;
51                  char    **s;                  char    **s;
52                  color_t *c;                  color_t *c;
53                    double  *d;
54                  int     val;    /* FIXME: Oops, sizeof(int) must be sizeof(void *) */                  int     val;    /* FIXME: Oops, sizeof(int) must be sizeof(void *) */
55          } confref;          } confref;
56  } keyword_t;  } keyword_t;
# Line 57  Line 58 
58  typedef union {  typedef union {
59          keyword_t       *kw;          keyword_t       *kw;
60          int             i;          int             i;
61            double          d;
62          char            *str;          char            *str;
63  } YYSTYPE;  } YYSTYPE;
64    
# Line 73  Line 75 
75          TYPE_BOOLEAN,          TYPE_BOOLEAN,
76          TYPE_COLOR,          TYPE_COLOR,
77          TYPE_FONT,          TYPE_FONT,
78          TYPE_STRING          TYPE_STRING,
79            TYPE_DOUBLE
80  };  };
81    
82  static keyword_t keywords[] = {  static keyword_t keywords[] = {
83          { "branch_bgcolor",     TYPE_COLOR,     { &conf.branch_bgcolor } },          { "branch_bgcolor",     TYPE_COLOR,     { &conf.branch_bgcolor } },
84          { "branch_bspace",      TYPE_NUMBER,    { &conf.branch_bspace } },          { "branch_bspace",      TYPE_NUMBER,    { &conf.branch_bspace } },
85          { "branch_color",       TYPE_COLOR,     { &conf.branch_color } },          { "branch_color",       TYPE_COLOR,     { &conf.branch_color } },
86          { "branch_font",        TYPE_FONT,      { &conf.branch_font } },          { "branch_font",        TYPE_FONT,      { &conf.branch_font.gdfont } },
87            { "branch_ttfont",      TYPE_STRING,    { &conf.branch_font.ttfont } },
88            { "branch_ttsize",      TYPE_DOUBLE,    { &conf.branch_font.ttsize } },
89            { "branch_tag_color",   TYPE_COLOR,     { &conf.branch_tag_color } },
90            { "branch_tag_font",    TYPE_FONT,      { &conf.branch_tag_font.gdfont } },
91            { "branch_tag_ttfont",  TYPE_STRING,    { &conf.branch_tag_font.ttfont } },
92            { "branch_tag_ttsize",  TYPE_DOUBLE,    { &conf.branch_tag_font.ttsize } },
93          { "branch_lspace",      TYPE_NUMBER,    { &conf.branch_lspace } },          { "branch_lspace",      TYPE_NUMBER,    { &conf.branch_lspace } },
94          { "branch_rspace",      TYPE_NUMBER,    { &conf.branch_rspace } },          { "branch_rspace",      TYPE_NUMBER,    { &conf.branch_rspace } },
95          { "branch_tspace",      TYPE_NUMBER,    { &conf.branch_tspace } },          { "branch_tspace",      TYPE_NUMBER,    { &conf.branch_tspace } },
# Line 88  Line 97 
97          { "branch_margin",      TYPE_NUMBER,    { &conf.branch_margin } },          { "branch_margin",      TYPE_NUMBER,    { &conf.branch_margin } },
98          { "branch_dupbox",      TYPE_BOOLEAN,   { &conf.branch_dupbox } },          { "branch_dupbox",      TYPE_BOOLEAN,   { &conf.branch_dupbox } },
99          { "upside_down",        TYPE_BOOLEAN,   { &conf.upside_down } },          { "upside_down",        TYPE_BOOLEAN,   { &conf.upside_down } },
100          { "auto_kern",          TYPE_BOOLEAN,   { &conf.auto_kern } },          { "auto_stretch",       TYPE_BOOLEAN,   { &conf.auto_stretch } },
101          { "color_bg",           TYPE_COLOR,     { &conf.color_bg } },          { "color_bg",           TYPE_COLOR,     { &conf.color_bg } },
102            { "transparent_bg",     TYPE_BOOLEAN,   { &conf.transparent_bg } },
103          { "cvsmodule",          TYPE_STRING,    { &conf.cvsmodule } },          { "cvsmodule",          TYPE_STRING,    { &conf.cvsmodule } },
104          { "cvsroot",            TYPE_STRING,    { &conf.cvsroot } },          { "cvsroot",            TYPE_STRING,    { &conf.cvsroot } },
105          { "date_format",        TYPE_STRING,    { &conf.date_format } },          { "date_format",        TYPE_STRING,    { &conf.date_format } },
106          { "box_shadow",         TYPE_BOOLEAN,   { &conf.box_shadow } },          { "box_shadow",         TYPE_BOOLEAN,   { &conf.box_shadow } },
107          { "strip_untagged",     TYPE_BOOLEAN,   { &conf.strip_untagged } },          { "strip_untagged",     TYPE_BOOLEAN,   { &conf.strip_untagged } },
108          { "strip_first_rev",    TYPE_BOOLEAN,   { &conf.strip_first_rev } },          { "strip_first_rev",    TYPE_BOOLEAN,   { &conf.strip_first_rev } },
109            { "anti_alias",         TYPE_BOOLEAN,   { &conf.anti_alias } },
110            { "use_ttf",            TYPE_BOOLEAN,   { &conf.use_ttf } },
111            { "parse_logs",         TYPE_BOOLEAN,   { &conf.parse_logs } },
112            { "thick_lines",        TYPE_NUMBER,    { &conf.thick_lines } },
113          { "rev_color",          TYPE_COLOR,     { &conf.rev_color } },          { "rev_color",          TYPE_COLOR,     { &conf.rev_color } },
114          { "rev_bgcolor",        TYPE_COLOR,     { &conf.rev_bgcolor } },          { "rev_bgcolor",        TYPE_COLOR,     { &conf.rev_bgcolor } },
115          { "rev_font",           TYPE_FONT,      { &conf.rev_font } },          { "rev_font",           TYPE_FONT,      { &conf.rev_font.gdfont } },
116            { "rev_ttfont",         TYPE_STRING,    { &conf.rev_font.ttfont } },
117            { "rev_ttsize",         TYPE_DOUBLE,    { &conf.rev_font.ttsize } },
118          { "rev_separator",      TYPE_NUMBER,    { &conf.rev_separator } },          { "rev_separator",      TYPE_NUMBER,    { &conf.rev_separator } },
119          { "rev_minline",        TYPE_NUMBER,    { &conf.rev_minline } },          { "rev_minline",        TYPE_NUMBER,    { &conf.rev_minline } },
120          { "rev_maxline",        TYPE_NUMBER,    { &conf.rev_maxline } },          { "rev_maxline",        TYPE_NUMBER,    { &conf.rev_maxline } },
# Line 108  Line 124 
124          { "rev_bspace",         TYPE_NUMBER,    { &conf.rev_bspace } },          { "rev_bspace",         TYPE_NUMBER,    { &conf.rev_bspace } },
125          { "rev_text",           TYPE_STRING,    { &conf.rev_text } },          { "rev_text",           TYPE_STRING,    { &conf.rev_text } },
126          { "rev_text_color",     TYPE_COLOR,     { &conf.rev_text_color } },          { "rev_text_color",     TYPE_COLOR,     { &conf.rev_text_color } },
127          { "rev_text_font",      TYPE_FONT,      { &conf.rev_text_font } },          { "rev_text_font",      TYPE_FONT,      { &conf.rev_text_font.gdfont } },
128            { "rev_text_ttfont",    TYPE_STRING,    { &conf.rev_text_font.ttfont } },
129            { "rev_text_ttsize",    TYPE_DOUBLE,    { &conf.rev_text_font.ttsize } },
130          { "tag_color",          TYPE_COLOR,     { &conf.tag_color } },          { "tag_color",          TYPE_COLOR,     { &conf.tag_color } },
131          { "tag_font",           TYPE_FONT,      { &conf.tag_font } },          { "tag_font",           TYPE_FONT,      { &conf.tag_font.gdfont } },
132            { "tag_ttfont",         TYPE_STRING,    { &conf.tag_font.ttfont } },
133            { "tag_ttsize",         TYPE_DOUBLE,    { &conf.tag_font.ttsize } },
134          { "title",              TYPE_STRING,    { &conf.title } },          { "title",              TYPE_STRING,    { &conf.title } },
135          { "title_x",            TYPE_NUMBER,    { &conf.title_x } },          { "title_x",            TYPE_NUMBER,    { &conf.title_x } },
136          { "title_y",            TYPE_NUMBER,    { &conf.title_y } },          { "title_y",            TYPE_NUMBER,    { &conf.title_y } },
137          { "title_font",         TYPE_FONT,      { &conf.title_font } },          { "title_font",         TYPE_FONT,      { &conf.title_font.gdfont } },
138            { "title_ttfont",       TYPE_STRING,    { &conf.title_font.ttfont } },
139            { "title_ttsize",       TYPE_DOUBLE,    { &conf.title_font.ttsize } },
140          { "title_align",        TYPE_NUMBER,    { &conf.title_align } },          { "title_align",        TYPE_NUMBER,    { &conf.title_align } },
141          { "title_color",        TYPE_COLOR,     { &conf.title_color } },          { "title_color",        TYPE_COLOR,     { &conf.title_color } },
142          { "margin_top",         TYPE_NUMBER,    { &conf.margin_top } },          { "margin_top",         TYPE_NUMBER,    { &conf.margin_top } },
# Line 135  Line 157 
157          { "gif",                TYPE_VALUE,     { (void *)IMAGE_GIF } },          { "gif",                TYPE_VALUE,     { (void *)IMAGE_GIF } },
158          { "true",               TYPE_VALUE,     { (void *)1 } },          { "true",               TYPE_VALUE,     { (void *)1 } },
159          { "false",              TYPE_VALUE,     { (void *)0 } },          { "false",              TYPE_VALUE,     { (void *)0 } },
160            { "not",                TYPE_VALUE,     { (void *)-1 } },
161          { "left",               TYPE_VALUE,     { (void *)0 } },          { "left",               TYPE_VALUE,     { (void *)0 } },
162          { "center",             TYPE_VALUE,     { (void *)1 } },          { "center",             TYPE_VALUE,     { (void *)1 } },
163          { "right",              TYPE_VALUE,     { (void *)2 } },          { "right",              TYPE_VALUE,     { (void *)2 } },
# Line 209  Line 232 
232          fprintf(DEBUGSTREAM, "%i\n", i);          fprintf(DEBUGSTREAM, "%i\n", i);
233  }  }
234    
235  static void debug_pfont(const char *n, font_t f)  static void debug_pdouble(const char *n, double d)
236    {
237            debug_pname(n);
238            fprintf(DEBUGSTREAM, "%g\n", d);
239    }
240    
241    static void debug_pfont(const char *n, gdFontPtr f)
242  {  {
243          const char *s = "<Unknown font>";          const char *s = "<Unknown font>";
244          debug_pname(n);          debug_pname(n);
# Line 243  Line 272 
272          debug_pbool("upside_down", conf.upside_down);          debug_pbool("upside_down", conf.upside_down);
273          debug_pbool("strip_untagged", conf.strip_untagged);          debug_pbool("strip_untagged", conf.strip_untagged);
274          debug_pbool("strip_first_rev", conf.strip_first_rev);          debug_pbool("strip_first_rev", conf.strip_first_rev);
275          debug_pbool("auto_kern", conf.auto_kern);          debug_pbool("auto_stretch", conf.auto_stretch);
276            debug_pbool("anti_alias", conf.anti_alias);
277          debug_pfont("tag_font", conf.tag_font);          debug_pbool("use_ttf", conf.use_ttf);
278            debug_pint("thick_lines", conf.thick_lines);
279    
280            debug_pfont("tag_font", conf.tag_font.gdfont);
281            debug_pstring("tag_ttfont", conf.tag_font.ttfont);
282            debug_psouble("tag_ttsize", conf.tag_font.ttsize);
283          debug_pcolor("tag_color", &conf.tag_color);          debug_pcolor("tag_color", &conf.tag_color);
284    
285          debug_pfont("rev_font", conf.rev_font);          debug_pfont("rev_font", conf.rev_font.gdfont);
286            debug_pstring("rev_ttfont", conf.rev_font.ttfont);
287            debug_pdouble("rev_ttsize", conf.rev_font.ttsize);
288          debug_pcolor("rev_color", &conf.rev_color);          debug_pcolor("rev_color", &conf.rev_color);
289          debug_pcolor("rev_bgcolor", &conf.rev_bgcolor);          debug_pcolor("rev_bgcolor", &conf.rev_bgcolor);
290          debug_pint("rev_separator", conf.rev_separator);          debug_pint("rev_separator", conf.rev_separator);
# Line 260  Line 296 
296          debug_pint("rev_bspace", conf.rev_bspace);          debug_pint("rev_bspace", conf.rev_bspace);
297          debug_pstring("rev_text", conf.rev_text);          debug_pstring("rev_text", conf.rev_text);
298          debug_pcolor("rev_text_color", &conf.rev_text_color);          debug_pcolor("rev_text_color", &conf.rev_text_color);
299          debug_pfont("rev_text_font", conf.rev_text_font);          debug_pfont("rev_text_font", conf.rev_text_font.gdfont);
300            debug_pstring("rev_text_ttfont", conf.rev_text_font.ttfont);
301          debug_pfont("branch_font", conf.branch_font);          debug_pdouble("rev_text_ttsize", conf.rev_text_font.ttsize);
302    
303            debug_pfont("branch_font", conf.branch_font.gdfont);
304            debug_pstring("branch_ttfont", conf.branch_font.ttfont);
305            debug_pdouble("branch_ttsize", conf.branch_font.ttsize);
306          debug_pcolor("branch_color", &conf.branch_color);          debug_pcolor("branch_color", &conf.branch_color);
307            debug_pfont("branch_tag_font", conf.branch_tag_font.gdfont);
308            debug_pstring("branch_tag_ttfont", conf.branch_tag_font.ttfont);
309            debug_pdouble("branch_tag_ttsize", conf.branch_tag_font.ttsize);
310            debug_pcolor("branch_tag_color", &conf.branch_tag_color);
311          debug_pcolor("branch_bgcolor", &conf.branch_bgcolor);          debug_pcolor("branch_bgcolor", &conf.branch_bgcolor);
312          debug_pint("branch_lspace", conf.branch_lspace);          debug_pint("branch_lspace", conf.branch_lspace);
313          debug_pint("branch_rspace", conf.branch_rspace);          debug_pint("branch_rspace", conf.branch_rspace);
# Line 276  Line 320 
320          debug_pstring("title", conf.title);          debug_pstring("title", conf.title);
321          debug_pint("title_x", conf.title_x);          debug_pint("title_x", conf.title_x);
322          debug_pint("title_y", conf.title_y);          debug_pint("title_y", conf.title_y);
323          debug_pfont("title_font", conf.title_font);          debug_pfont("title_font", conf.title_font.gdfont);
324            debug_pstring("title_ttfont", conf.title_font.ttfont);
325            debug_pdouble("title_ttsize", conf.title_font.ttsize);
326          debug_pint("title_align", conf.title_align);          debug_pint("title_align", conf.title_align);
327          debug_pcolor("title_color", &conf.title_color);          debug_pcolor("title_color", &conf.title_color);
328    
# Line 544  Line 590 
590                          {                          {
591                                  char *s;                                  char *s;
592                                  char *eptr;                                  char *eptr;
593                                    int type = TYPE_NUMBER;
594                                  /* Collect number */                                  /* Collect number */
595                                  reset_str();                                  reset_str();
596                                  add_str(ch);                                  add_str(ch);
597                                  while(1)                                  while(1)
598                                  {                                  {
599                                          ch = get_input();                                          ch = get_input();
600                                          if(isxdigit(ch) || ch == 'x' || ch == 'X') /* Not exact, but close enough */                                          if(isxdigit(ch) || ch == 'x' || ch == 'X' || ch == '.') /* Not exact, but close enough */
601                                                  add_str(ch);                                                  add_str(ch);
602                                          else                                          else
603                                          {                                          {
604                                                  unget_input(ch);                                                  unget_input(ch);
605                                                  break;                                                  break;
606                                          }                                          }
607                                            if(ch == '.')
608                                                    type = TYPE_DOUBLE;
609                                  }                                  }
610                                  s = get_str();                                  s = get_str();
611                                  yylval.i = strtol(s, &eptr, 0);                                  if(type == TYPE_DOUBLE)
612                                  if(*eptr)                                  {
613                                          yyerror("Invalid number");                                          yylval.d = strtod(s, &eptr);
614                                            if(*eptr)
615                                                    yyerror("Invalid floating point number");
616                                    }
617                                    else
618                                    {
619                                            yylval.i = strtol(s, &eptr, 0);
620                                            if(*eptr)
621                                                    yyerror("Invalid number");
622                                    }
623                                  xfree(s);                                  xfree(s);
624                                  return TYPE_NUMBER;                                  return type;
625                          }                          }
626                          else                          else
627                                  yyerror("Unmatched text '%c' (0x%02x)", isprint(ch) ? ch : ' ', ch);                                  yyerror("Unmatched text '%c' (0x%02x)", isprint(ch) ? ch : ' ', ch);
# Line 663  Line 721 
721                                  t = TYPE_STRING;                                  t = TYPE_STRING;
722                          else                          else
723                                  t = kw->type;                                  t = kw->type;
724    
725                            if(token == TYPE_NUMBER && kw->type == TYPE_DOUBLE)
726                            {
727                                    /* Auto promote numbers to doubles if required */
728                                    yylval.d = (double)yylval.i;
729                                    token = TYPE_DOUBLE;
730                            }
731    
732                          if(token != t)                          if(token != t)
733                          {                          {
734                                  char *e;                                  char *e;
# Line 674  Line 739 
739                                  case TYPE_COLOR:        e = "Color"; break;                                  case TYPE_COLOR:        e = "Color"; break;
740                                  case TYPE_FONT:         e = "Font"; break;                                  case TYPE_FONT:         e = "Font"; break;
741                                  case TYPE_BOOLEAN:      e = "Boolean"; break;                                  case TYPE_BOOLEAN:      e = "Boolean"; break;
742                                    case TYPE_DOUBLE:       e = "Double"; break;
743                                  default:                e = "Internal error: Unknown type"; break;                                  default:                e = "Internal error: Unknown type"; break;
744                                  }                                  }
745                                  yyerror("%s expected", e);                                  yyerror("%s expected", e);
# Line 690  Line 756 
756                                          *kw->confref.i = yylval.i;                                          *kw->confref.i = yylval.i;
757                                          break;                                          break;
758                                  case TYPE_BOOLEAN:                                  case TYPE_BOOLEAN:
759                                          *kw->confref.i = yylval.i != 0;                                          if(yylval.i == -1)
760                                                    *kw->confref.i = !*kw->confref.i;
761                                            else
762                                                    *kw->confref.i = yylval.i != 0;
763                                          break;                                          break;
764                                  case TYPE_COLOR:                                  case TYPE_COLOR:
765                                          set_color(kw->confref.c, yylval.str);                                          set_color(kw->confref.c, yylval.str);
766                                          break;                                          break;
767                                  case TYPE_FONT:                                  case TYPE_FONT:
768                                          *kw->confref.f = get_font(yylval.i);                                          kw->confref.f->gdfont = get_font(yylval.i);
769                                            break;
770                                    case TYPE_DOUBLE:
771                                            *kw->confref.d = yylval.d;
772                                          break;                                          break;
773                                  default:                                  default:
774                                          yyerror("Internal error: Unknown type passed %d", kw->type);                                          yyerror("Internal error: Unknown type passed %d", kw->type);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.0 with CvsGraph 1.7.0