[BACK]Return to oxgentexi.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / util

Diff for /OpenXM/src/util/oxgentexi.c between version 1.1 and 1.2

version 1.1, 2005/04/04 06:10:58 version 1.2, 2005/04/04 07:36:44
Line 1 
Line 1 
 /*  $OpenXM$ */  /*  $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.1 2005/04/04 06:10:58 takayama Exp $ */
   
 #include <stdio.h>  #include <stdio.h>
 int Debug = 0;  int Debug = 0;
 #define VMAX 20  #define VMAX 20
 #define LIMIT 1024  #define LIMIT   65536
 #define ITEMMAX 1024  #define ITEMMAX 1024
 struct item {  struct item {
   char *category;  /* base */    char *category;  /* base */
Line 22  struct item {
Line 22  struct item {
   int refc;    int refc;
   char *refv[VMAX];    char *refv[VMAX];
   char *author;    char *author;
     char *sortKey;
     int type;
 };  };
 struct item *getItem(void);  struct item *getItem(void);
 char *str(char *key);  char *str(char *key);
Line 36  char *Category=NULL;
Line 38  char *Category=NULL;
 char *Lang="en";  char *Lang="en";
 int Include = 0;  int Include = 0;
 int GenExample = 0;  int GenExample = 0;
   int DebugItem = 0;
   
 main(int argc,char *argv[]) {  main(int argc,char *argv[]) {
   char *t;    char *t;
Line 61  main(int argc,char *argv[]) {
Line 64  main(int argc,char *argv[]) {
       GenExample = 1;        GenExample = 1;
     }else if (strcmp(argv[i],"--debug") == 0) {      }else if (strcmp(argv[i],"--debug") == 0) {
       Debug = 1;        Debug = 1;
       }else if (strcmp(argv[i],"--debugItem") == 0) {
         DebugItem = 1;
     }else {      }else {
       fprintf(stderr,"Unknown option\n"); exit(1);        fprintf(stderr,"Unknown option\n"); exit(1);
     }      }
Line 100  main(int argc,char *argv[]) {
Line 105  main(int argc,char *argv[]) {
   if (Debug) fprintf(stderr,"Sorting...\n");    if (Debug) fprintf(stderr,"Sorting...\n");
   shell(items,n);    shell(items,n);
   if (Debug) fprintf(stderr,"Done.\n");    if (Debug) fprintf(stderr,"Done.\n");
   
     if (DebugItem) {
           for (i=0; i<n; i++) {
             printItem(items[i]);
           }
           exit(0);
     }
   
   printMenu(stdout,items,n);    printMenu(stdout,items,n);
   
   for (i=0; i<n; i++) {    for (i=0; i<n; i++) {
Line 129  genInclude(char *name) {
Line 141  genInclude(char *name) {
 }  }
   
 cmpItem(struct item *it,struct item *it2) {  cmpItem(struct item *it,struct item *it2) {
   return strcmp(it->name,it2->name);    return strcmp(it->sortKey,it2->sortKey);
 }  }
 struct item * newItem(){  struct item * newItem(){
   struct item *a;    struct item *a;
Line 139  struct item * newItem(){
Line 151  struct item * newItem(){
     exit(20);      exit(20);
   }    }
   a->argc = 0; a->optc = 0; a->refc=0; a->examplec = 0;    a->argc = 0; a->optc = 0; a->refc=0; a->examplec = 0;
     a->type=0;
   a->category = a->category2 = a->name = a->shortDescription    a->category = a->category2 = a->name = a->shortDescription
     = a->description = a->author = a->algorithm = NULL;      = a->description = a->author = a->algorithm = a->sortKey = NULL;
   return a;    return a;
 }  }
   
Line 208  printItem(struct item *it) {
Line 221  printItem(struct item *it) {
     printf("  refv[%d]=%s\n",i,it->refv[i]);      printf("  refv[%d]=%s\n",i,it->refv[i]);
   if (it->author != NULL)    if (it->author != NULL)
     printf("author=%s\n",it->author);      printf("author=%s\n",it->author);
     if (it->sortKey != NULL)
       printf("sortKey=%s\n",it->sortKey);
   printf("\n");    printf("\n");
 }  }
   
Line 280  struct item *getItem() {
Line 295  struct item *getItem() {
     return NULL;      return NULL;
   }    }
   p = nextToken(key,LIMIT);    p = nextToken(key,LIMIT);
   it->name = str(key);    it->name = it->sortKey = str(key);
   it->category = getCategory(key);    it->category = getCategory(key);
   it->category2 = getCategory2(key);    it->category2 = getCategory2(key);
   nextToken(key,LIMIT);    nextToken(key,LIMIT);
   if (strcmp(key,"(") != 0) {    if (strcmp(key,"(") != 0) {
     fprintf(stderr," ( is expected at %s\n",it->name);      pp = p+1;
     exit(10);      it->type = 1; /* For non-functions */
   }    }else{
   argc = 0;      it->type = 0; /* For functions */
   while ((pp=nextToken(key,LIMIT)) >= 0) {      argc = 0;
     if (strcmp(key,"|") == 0) {      while ((pp=nextToken(key,LIMIT)) >= 0) {
       /* options */        if (strcmp(key,"|") == 0) {
       argc = 0;          /* options */
       while ((pp=nextToken(key,LIMIT)) >= 0) {          argc = 0;
         if (strcmp(key,")") == 0) {          while ((pp=nextToken(key,LIMIT)) >= 0) {
           break;            if (strcmp(key,")") == 0) {
               break;
             }
             if (strcmp(key,",") != 0) {
               it->optv[argc] = str(key);
               argc++; it->optc = argc;
             }
             if (argc >+ VMAX -1) {
               fprintf(stderr,"Too many opt args at %s\n",it->name);
               exit(10);
             }
         }          }
         if (strcmp(key,",") != 0) {  
           it->optv[argc] = str(key);  
           argc++; it->optc = argc;  
         }  
         if (argc >+ VMAX -1) {  
           fprintf(stderr,"Too many opt args at %s\n",it->name);  
           exit(10);  
         }  
       }        }
         if (strcmp(key,")") == 0) {
           break;
         }else if (strcmp(key,",") != 0) {
           it->argv[argc] = str(key);
           argc++; it->argc=argc;
         }
         if (argc >= VMAX-1) {
           fprintf(stderr,"Too many args at %s\n",it->name);
           exit(10);
         }
     }      }
     if (strcmp(key,")") == 0) {  
       break;  
     }else if (strcmp(key,",") != 0) {  
       it->argv[argc] = str(key);  
       argc++; it->argc=argc;  
     }  
     if (argc >= VMAX-1) {  
       fprintf(stderr,"Too many args at %s\n",it->name);  
       exit(10);  
     }  
   }    }
   
   /* Getting the short Description */    /* Getting the short Description */
Line 336  struct item *getItem() {
Line 353  struct item *getItem() {
     if (strcmp(key,"description:") == 0 ||      if (strcmp(key,"description:") == 0 ||
         strcmp(key,"algorithm:") == 0 ||          strcmp(key,"algorithm:") == 0 ||
         strcmp(key,"author:") == 0 ||          strcmp(key,"author:") == 0 ||
           strcmp(key,"sortKey:") == 0 ||
         strcmp(key,"example:") == 0 ||          strcmp(key,"example:") == 0 ||
                 strcmp(key,"example_description:") ==0 ) {          strcmp(key,"example_description:") ==0 ) {
       pp = p;        pp = p;
       strcpy(key2,key);        strcpy(key2,key);
       do {        do {
Line 364  struct item *getItem() {
Line 382  struct item *getItem() {
       if (strcmp(key2,"author:") == 0) {        if (strcmp(key2,"author:") == 0) {
         it->author = str2(&(S[pp]),pOld-pp);          it->author = str2(&(S[pp]),pOld-pp);
       }        }
         if (strcmp(key2,"sortKey:") == 0) {
                   while (S[pp] <= ' ') pp++;
           it->sortKey = str2(&(S[pp]),pOld-pp);
         }
       if (strcmp(key2,"algorithm:") == 0) {        if (strcmp(key2,"algorithm:") == 0) {
         it->algorithm = str2(&(S[pp]),pOld-pp);          it->algorithm = str2(&(S[pp]),pOld-pp);
       }        }
Line 406  shell(struct item *v[],int n) {
Line 428  shell(struct item *v[],int n) {
 }  }
   
 printMenu(FILE *fp, struct item **it, int n) {  printMenu(FILE *fp, struct item **it, int n) {
   int i;    int i,m;
   
   fprintf(fp,"@menu\n");    m = 0;
   for ( i = 0; i < n; i++ )    for ( i = 0; i < n; i++ )
         fprintf(fp,"* %s::\n",it[i]->name);      if (it[i]->type != 1) m++;
   fprintf(fp,"@end menu\n");    if (m != 0) {
       fprintf(fp,"@menu\n");
       for ( i = 0; i < n; i++ )
         if (it[i]->type != 1) fprintf(fp,"* %s::\n",it[i]->name);
       fprintf(fp,"@end menu\n");
     }
 }  }
   
 printTexi(FILE *fp, struct item *it) {  printTexi(FILE *fp, struct item *it) {
   int i;    int i;
   fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi.\n");    if (it->type == 1) return printTexi1(fp,it);
     else return printTexi0(fp,it);
   }
   
   printTexi_common(FILE *fp,struct item *it) {
     int i;
     if (it->description != NULL) {
       fprintf(fp,"%s\n\n",it->description);
     }
   
     if (it->algorithm != NULL) {
       fprintf(fp,"\n\n@noindent\nAlgorithm: \n");
       fprintf(fp,"%s\n\n",it->algorithm);
     }
   
     if (it->examplec > 0) {
       for (i=0; i<it->examplec; i++) {
         if (it->examplec == 1) {
           fprintf(fp,"Example:\n");
         }else{
           fprintf(fp,"Example %d:\n",i);
         }
         fprintf(fp,"@example\n");
         fprintf(fp,"%s\n",it->examplev[i]);
         if (GenExample) {
           outputOfExample(it->examplev[i]);
         }
         fprintf(fp,"@end example\n");
         if (it->exampleDescv[i] != NULL && strlen(it->exampleDescv[i]) > 0) {
           fprintf(fp,"%s\n\n",it->exampleDescv[i]);
         }
       }
     }
     if (it->author != NULL) {
       fprintf(fp,"Author : %s\n\n",it->author);
     }
     if (it->refc > 0) {
       fprintf(fp,"@table @t\n");
       fprintf(fp,"@item References\n");
       for (i=0; i <it->refc; i++) {
         fprintf(fp,"@code{%s} ",it->refv[i]);
         if (i != it->refc-1) fprintf(fp,", ");
       }
       fprintf(fp,"\n@end table\n");
     }
     fprintf(fp,"\n");
   }
   
   printTexi0(FILE *fp, struct item *it) {
     int i;
   
     fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi0.\n");
   if (it == NULL) {    if (it == NULL) {
     fprintf(fp,"@c item is NULL.\n");      fprintf(fp,"@c item is NULL.\n");
     return ;      return ;
Line 481  printTexi(FILE *fp, struct item *it) {
Line 559  printTexi(FILE *fp, struct item *it) {
   fprintf(fp,"@c @itemize @bullet \n");    fprintf(fp,"@c @itemize @bullet \n");
   fprintf(fp,"@c @item \n");    fprintf(fp,"@c @item \n");
   fprintf(fp,"@c @end itemize\n");    fprintf(fp,"@c @end itemize\n");
   
   if (it->description != NULL) {  
     fprintf(fp,"%s\n\n",it->description);  
   }  
   
   if (it->algorithm != NULL) {    printTexi_common(fp,it);
     fprintf(fp,"\n\n@noindent\nAlgorithm: \n");  }
     fprintf(fp,"%s\n\n",it->algorithm);  
   printTexi1(FILE *fp, struct item *it) {
     int i;
     /* For  it->type == 1 */
   
     fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi1.\n");
     if (it == NULL) {
       fprintf(fp,"@c item is NULL.\n");
       return ;
   }    }
   
   if (it->examplec > 0) {    if (it->shortDescription != NULL) {
     for (i=0; i<it->examplec; i++) {      for (i=0; i<strlen(it->shortDescription); i++) {
           if (it->examplec == 1) {        fprintf(fp,"%c",it->shortDescription[i]);
         fprintf(fp,"Example:\n");  
           }else{  
         fprintf(fp,"Example %d:\n",i);  
           }  
       fprintf(fp,"@example\n");  
       fprintf(fp,"%s\n",it->examplev[i]);  
       if (GenExample) {  
         outputOfExample(it->examplev[i]);  
       }  
       fprintf(fp,"@end example\n");  
           if (it->exampleDescv[i] != NULL && strlen(it->exampleDescv[i]) > 0) {  
                 fprintf(fp,"%s\n\n",it->exampleDescv[i]);  
           }  
     }      }
       fprintf(fp," \n");
   }    }
   if (it->author != NULL) {  
     fprintf(fp,"Author : %s\n\n",it->author);    /* include file */
     if (Include) {
       if (genInclude(it->name))
         fprintf(fp,"@c @include tmp/%s-auto-en.texi\n",it->name);
   }    }
   if (it->refc > 0) {  
     fprintf(fp,"@table @t\n");    printTexi_common(fp,it);
     fprintf(fp,"@item References\n");  
     for (i=0; i <it->refc; i++) {  
       fprintf(fp,"@code{%s} ",it->refv[i]);  
       if (i != it->refc-1) fprintf(fp,", ");  
     }  
     fprintf(fp,"\n@end table\n");  
   }  
   fprintf(fp,"\n");  
 }  }
   
 outputOfExample(char *com) {  outputOfExample(char *com) {

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>