=================================================================== RCS file: /home/cvs/OpenXM/src/util/oxgentexi.c,v retrieving revision 1.4 retrieving revision 1.15 diff -u -p -r1.4 -r1.15 --- OpenXM/src/util/oxgentexi.c 2005/04/05 13:12:06 1.4 +++ OpenXM/src/util/oxgentexi.c 2013/08/31 08:16:02 1.15 @@ -1,6 +1,8 @@ -/* $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.3 2005/04/04 12:38:32 takayama Exp $ */ +/* $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.14 2005/08/15 16:28:59 ohara Exp $ */ #include +#include +#include int Debug = 0; #define VMAX 20 #define LIMIT 65536 @@ -16,6 +18,7 @@ struct item { char *shortDescription; char *description; char *algorithm; + char *changelog; char *examplev[VMAX]; char *exampleDescv[VMAX]; int examplec; @@ -29,6 +32,18 @@ struct item *getItem(void); char *str(char *key); char *str2(char *key,int size); int cmpItem(struct item *it,struct item *it2); +void printItem(struct item *it); +void shell(struct item *v[],int n); +void printMenu(FILE *fp, struct item **it, int n); +void printBye(); +void printTitlePage(char *title, char *author,char *infoName); +void printItem(struct item *it); +void printTexi(FILE *fp, struct item *it); +void printTexi_common(FILE *fp,struct item *it); +void printTexi0(FILE *fp, struct item *it); +void printTexi1(FILE *fp, struct item *it); +void outputExample(FILE *fp,char *s); +void outputOfExample(char *com); char *S; int Ssize = 256; @@ -41,11 +56,13 @@ int GenExample = 0; int DebugItem = 0; char *Title = NULL; char *Author = NULL; +char *InfoName = NULL; int NoSorting = 0; +int main(int argc,char *argv[]) { char *t; - int p,c,n,i; + int c,n,i; struct item *tt; struct item *items[ITEMMAX]; @@ -71,6 +88,8 @@ main(int argc,char *argv[]) { DebugItem = 1; }else if (strcmp(argv[i],"--title") == 0) { i++; Title = str(argv[i]); + }else if (strcmp(argv[i],"--infoName") == 0) { + i++; InfoName = str(argv[i]); }else if (strcmp(argv[i],"--author") == 0) { i++; Author = str(argv[i]); }else if (strcmp(argv[i],"--noSorting") == 0) { @@ -125,7 +144,7 @@ main(int argc,char *argv[]) { exit(0); } - if (Title) printTitlePage(Title,Author); + if (Title) printTitlePage(Title,Author,InfoName); printMenu(stdout,items,n); @@ -137,6 +156,7 @@ main(int argc,char *argv[]) { exit(0); } +int genInclude(char *name) { char fname[4098]; FILE *fp; @@ -156,6 +176,7 @@ genInclude(char *name) { return 0; } +int cmpItem(struct item *it,struct item *it2) { return strcmp(it->sortKey,it2->sortKey); } @@ -166,13 +187,11 @@ struct item * newItem(){ fprintf(stderr,"newItem: No more memory.\n"); exit(20); } - a->argc = 0; a->optc = 0; a->refc=0; a->examplec = 0; - a->type=0; - a->category = a->category2 = a->name = a->shortDescription - = a->description = a->author = a->algorithm = a->sortKey = NULL; + memset(a, 0, sizeof(struct item)); return a; } - + +int nextToken(char *key,int n) { static int pos = 0; int i = 0; @@ -210,6 +229,7 @@ nextToken(char *key,int n) { return pos; } +void printItem(struct item *it) { int i; if (it == NULL) return; @@ -233,6 +253,8 @@ printItem(struct item *it) { printf("examplev[%d]=%s\n",i,it->examplev[i]); for (i=0; i examplec; i++) printf("exampleDescv[%d]=%s\n",i,it->exampleDescv[i]); + if (it->changelog != NULL) + printf("changelog=%s\n",it->changelog); for (i=0; irefc; i++) printf(" refv[%d]=%s\n",i,it->refv[i]); if (it->author != NULL) @@ -266,7 +288,7 @@ char *str2(char *key,int size) { return s; } char *getCategory(char *key) { - int i,n; + int i; char *s; s = str(key); for (i=0; i= 0); if (strcmp(key2,"description:") == 0) { it->description = str2(&(S[pp]),pOld-pp); @@ -407,6 +434,9 @@ struct item *getItem() { if (strcmp(key2,"algorithm:") == 0) { it->algorithm = str2(&(S[pp]),pOld-pp); } + if (strcmp(key2,"changelog:") == 0) { + it->changelog = str2(&(S[pp]),pOld-pp); + } }else if (strcmp(key,"ref:") == 0) { argc = 0; while ((pp=nextToken(key,LIMIT)) >= 0) { @@ -422,7 +452,11 @@ struct item *getItem() { } } }else{ - fprintf(stderr,"Warning: unknown keyword << %s >> at %s. Ignored.\n",key, it->name); + fprintf(stderr,"Error: unknown keyword << %s >> at %s.\n",key, it->name); + fprintf(stderr," The error occurs around "); + for (i=pp ; i < p; i++) fputc(S[i],stderr); + fprintf(stderr,"\n\n"); + exit(1); p = nextToken(key,LIMIT); } }while (p >= 0); @@ -430,6 +464,7 @@ struct item *getItem() { return it; } +void shell(struct item *v[],int n) { int gap,i,j; struct item *temp; @@ -445,6 +480,7 @@ shell(struct item *v[],int n) { } } +void printMenu(FILE *fp, struct item **it, int n) { int i,m; @@ -459,21 +495,31 @@ printMenu(FILE *fp, struct item **it, int n) { } } +void printTexi(FILE *fp, struct item *it) { - int i; - if (it->type == 1) return printTexi1(fp,it); - else return printTexi0(fp,it); + if (it->type == 1) printTexi1(fp,it); + else printTexi0(fp,it); + return; } +void printTexi_common(FILE *fp,struct item *it) { int i; - if (it->description != NULL) { - fprintf(fp,"%s\n\n",it->description); + if ((it->shortDescription != NULL) || (it->refc >0) + || (it->examplec > 0)) { + if (it->description != NULL) { + fprintf(fp,"\nDescription:\n"); + fprintf(fp,"@quotation\n%s\n@end quotation\n\n",it->description); + } + }else { + 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); + fprintf(fp,"\n\n@noindent\nAlgorithm: \n@quotation\n"); + fprintf(fp,"%s\n@end quotation\n",it->algorithm); } if (it->examplec > 0) { @@ -497,22 +543,26 @@ printTexi_common(FILE *fp,struct item *it) { if (it->author != NULL) { fprintf(fp,"Author : %s\n\n",it->author); } + if (it->changelog != NULL) { + fprintf(fp,"\n\nChange Log:\n@quotation\n"); + fprintf(fp,"%s\n@end quotation\n",it->changelog); + } if (it->refc > 0) { - fprintf(fp,"@table @t\n"); - fprintf(fp,"@item References\n"); + fprintf(fp,"\n\nReferences:\n@quotation\n"); for (i=0; i refc; i++) { - fprintf(fp,"@code{%s} ",it->refv[i]); - if (i != it->refc-1) fprintf(fp,", "); + fprintf(fp," @code{%s} ",it->refv[i]); + if (i != it->refc-1) fprintf(fp,", \n"); } - fprintf(fp,"\n@end table\n"); + fprintf(fp,"\n@end quotation\n"); } fprintf(fp,"\n"); } +void printTexi0(FILE *fp, struct item *it) { int i; - fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi0.\n"); + fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi for asir function item.\n"); if (it == NULL) { fprintf(fp,"@c item is NULL.\n"); return ; @@ -582,11 +632,12 @@ printTexi0(FILE *fp, struct item *it) { printTexi_common(fp,it); } +void printTexi1(FILE *fp, struct item *it) { int i; /* For it->type == 1 */ - fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi1.\n"); + fprintf(fp,"@c DO NOT EDIT THIS FILE. Generated by gentexi for verbose item.\n"); if (it == NULL) { fprintf(fp,"@c item is NULL.\n"); return ; @@ -609,8 +660,15 @@ printTexi1(FILE *fp, struct item *it) { printTexi_common(fp,it); } +void outputExample(FILE *fp,char *s) { int i; + /* Remove unnecessary spaces at the tail. */ + for (i=strlen(s)-1; i>=0; i--) { + if (s[i] == '\n') break; + else if (s[i] <= ' ') {s[i] = 0;} + else break; + } for (i=0; s[i] != 0; i++) { if (s[i] == '@') { if (s[i+1] == '{') {fprintf(fp,"%s","@{"); i += 1;} @@ -620,11 +678,14 @@ outputExample(FILE *fp,char *s) { fprintf(fp,":"); i += 5; }else fprintf(fp,"@@"); }else{ - fputc(s[i],fp); + if (s[i] == '{') {fprintf(fp,"%s","@{"); } + else if (s[i] == '}') {fprintf(fp,"%s","@}");} + else fputc(s[i],fp); } } } +void outputOfExample(char *com) { FILE *fp2; int c; @@ -652,7 +713,8 @@ outputOfExample(char *com) { putchar('\n'); } -printTitlePage(char *title, char *author) { +void +printTitlePage(char *title, char *author,char *infoName) { printf("\\input texinfo\n"); printf("@def@colon{:}\n\n"); printf("@iftex\n"); @@ -662,7 +724,8 @@ printTitlePage(char *title, char *author) { printf("@end iftex\n"); printf("@overfullrule=0pt\n"); - printf("@setfilename %s\n",Title); + if (infoName != NULL) printf("@setfilename %s\n",infoName); + else printf("@setfilename asir-contrib-infoName-is-not-set\n"); printf("@settitle %s\n",Title); printf("@titlepage\n"); @@ -674,7 +737,17 @@ printTitlePage(char *title, char *author) { printf("@node Top,, (dir), (dir)\n\n"); } +void printBye() { + printf("@node Index,,, Top\n"); + printf("@unnumbered Index\n"); + printf("@printindex fn\n"); + printf("@printindex cp\n"); + printf("@iftex\n"); + printf("@vfill @eject\n"); + printf("@end iftex\n"); + printf("@summarycontents\n"); + printf("@contents\n"); printf("\n@bye\n"); } /* Old file was OpenXM/src/asir-contrib/packages/doc/gentexi.c */