version 1.2, 2005/04/04 07:36:44 |
version 1.15, 2013/08/31 08:16:02 |
|
|
/* $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.1 2005/04/04 06:10:58 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.14 2005/08/15 16:28:59 ohara Exp $ */ |
|
|
#include <stdio.h> |
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
int Debug = 0; |
int Debug = 0; |
#define VMAX 20 |
#define VMAX 20 |
#define LIMIT 65536 |
#define LIMIT 65536 |
|
|
char *shortDescription; |
char *shortDescription; |
char *description; |
char *description; |
char *algorithm; |
char *algorithm; |
|
char *changelog; |
char *examplev[VMAX]; |
char *examplev[VMAX]; |
char *exampleDescv[VMAX]; |
char *exampleDescv[VMAX]; |
int examplec; |
int examplec; |
Line 29 struct item *getItem(void); |
|
Line 32 struct item *getItem(void); |
|
char *str(char *key); |
char *str(char *key); |
char *str2(char *key,int size); |
char *str2(char *key,int size); |
int cmpItem(struct item *it,struct item *it2); |
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; |
char *S; |
int Ssize = 256; |
int Ssize = 256; |
|
|
int Include = 0; |
int Include = 0; |
int GenExample = 0; |
int GenExample = 0; |
int DebugItem = 0; |
int DebugItem = 0; |
|
char *Title = NULL; |
|
char *Author = NULL; |
|
char *InfoName = NULL; |
|
int NoSorting = 0; |
|
|
|
int |
main(int argc,char *argv[]) { |
main(int argc,char *argv[]) { |
char *t; |
char *t; |
int p,c,n,i; |
int c,n,i; |
struct item *tt; |
struct item *tt; |
struct item *items[ITEMMAX]; |
struct item *items[ITEMMAX]; |
|
|
Line 66 main(int argc,char *argv[]) { |
|
Line 86 main(int argc,char *argv[]) { |
|
Debug = 1; |
Debug = 1; |
}else if (strcmp(argv[i],"--debugItem") == 0) { |
}else if (strcmp(argv[i],"--debugItem") == 0) { |
DebugItem = 1; |
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) { |
|
NoSorting = 1; |
}else { |
}else { |
fprintf(stderr,"Unknown option\n"); exit(1); |
fprintf(stderr,"Unknown option\n"); exit(1); |
} |
} |
Line 102 main(int argc,char *argv[]) { |
|
Line 130 main(int argc,char *argv[]) { |
|
items[n++] = tt; |
items[n++] = tt; |
} |
} |
} |
} |
if (Debug) fprintf(stderr,"Sorting...\n"); |
|
shell(items,n); |
if (!NoSorting) { |
if (Debug) fprintf(stderr,"Done.\n"); |
if (Debug) fprintf(stderr,"Sorting...\n"); |
|
shell(items,n); |
|
if (Debug) fprintf(stderr,"Done.\n"); |
|
} |
|
|
if (DebugItem) { |
if (DebugItem) { |
for (i=0; i<n; i++) { |
for (i=0; i<n; i++) { |
Line 113 main(int argc,char *argv[]) { |
|
Line 144 main(int argc,char *argv[]) { |
|
exit(0); |
exit(0); |
} |
} |
|
|
|
if (Title) printTitlePage(Title,Author,InfoName); |
|
|
printMenu(stdout,items,n); |
printMenu(stdout,items,n); |
|
|
for (i=0; i<n; i++) { |
for (i=0; i<n; i++) { |
printTexi(stdout,items[i]); |
printTexi(stdout,items[i]); |
} |
} |
|
|
|
if (Title) printBye(); |
exit(0); |
exit(0); |
} |
} |
|
|
|
int |
genInclude(char *name) { |
genInclude(char *name) { |
char fname[4098]; |
char fname[4098]; |
FILE *fp; |
FILE *fp; |
Line 140 genInclude(char *name) { |
|
Line 176 genInclude(char *name) { |
|
return 0; |
return 0; |
} |
} |
|
|
|
int |
cmpItem(struct item *it,struct item *it2) { |
cmpItem(struct item *it,struct item *it2) { |
return strcmp(it->sortKey,it2->sortKey); |
return strcmp(it->sortKey,it2->sortKey); |
} |
} |
Line 150 struct item * newItem(){ |
|
Line 187 struct item * newItem(){ |
|
fprintf(stderr,"newItem: No more memory.\n"); |
fprintf(stderr,"newItem: No more memory.\n"); |
exit(20); |
exit(20); |
} |
} |
a->argc = 0; a->optc = 0; a->refc=0; a->examplec = 0; |
memset(a, 0, sizeof(struct item)); |
a->type=0; |
|
a->category = a->category2 = a->name = a->shortDescription |
|
= a->description = a->author = a->algorithm = a->sortKey = NULL; |
|
return a; |
return a; |
} |
} |
|
|
|
int |
nextToken(char *key,int n) { |
nextToken(char *key,int n) { |
static int pos = 0; |
static int pos = 0; |
int i = 0; |
int i = 0; |
Line 194 nextToken(char *key,int n) { |
|
Line 229 nextToken(char *key,int n) { |
|
return pos; |
return pos; |
} |
} |
|
|
|
void |
printItem(struct item *it) { |
printItem(struct item *it) { |
int i; |
int i; |
if (it == NULL) return; |
if (it == NULL) return; |
Line 217 printItem(struct item *it) { |
|
Line 253 printItem(struct item *it) { |
|
printf("examplev[%d]=%s\n",i,it->examplev[i]); |
printf("examplev[%d]=%s\n",i,it->examplev[i]); |
for (i=0; i <it->examplec; i++) |
for (i=0; i <it->examplec; i++) |
printf("exampleDescv[%d]=%s\n",i,it->exampleDescv[i]); |
printf("exampleDescv[%d]=%s\n",i,it->exampleDescv[i]); |
|
if (it->changelog != NULL) |
|
printf("changelog=%s\n",it->changelog); |
for (i=0; i<it->refc; i++) |
for (i=0; i<it->refc; i++) |
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) |
Line 250 char *str2(char *key,int size) { |
|
Line 288 char *str2(char *key,int size) { |
|
return s; |
return s; |
} |
} |
char *getCategory(char *key) { |
char *getCategory(char *key) { |
int i,n; |
int i; |
char *s; |
char *s; |
s = str(key); |
s = str(key); |
for (i=0; i<strlen(s); i++) { |
for (i=0; i<strlen(s); i++) { |
Line 262 char *getCategory(char *key) { |
|
Line 300 char *getCategory(char *key) { |
|
return s; |
return s; |
} |
} |
char *getCategory2(char *key) { |
char *getCategory2(char *key) { |
int i,n; |
int i; |
char *s; |
char *s; |
int count; |
int count=0; |
s = str(key); |
s = str(key); |
for (i=0; i<strlen(s); i++) { |
for (i=0; i<strlen(s); i++) { |
if ((s[i] == '_') || (s[i] == '.')) count++; |
if ((s[i] == '_') || (s[i] == '.')) count++; |
Line 284 struct item *getItem() { |
|
Line 322 struct item *getItem() { |
|
int pp,pOld; |
int pp,pOld; |
int argc; |
int argc; |
int examplec = 0; |
int examplec = 0; |
|
int i; |
it = newItem(); |
it = newItem(); |
do { |
do { |
p = nextToken(key,LIMIT); |
p = nextToken(key,LIMIT); |
Line 302 struct item *getItem() { |
|
Line 341 struct item *getItem() { |
|
if (strcmp(key,"(") != 0) { |
if (strcmp(key,"(") != 0) { |
pp = p+1; |
pp = p+1; |
it->type = 1; /* For non-functions */ |
it->type = 1; /* For non-functions */ |
|
goto LL ; |
}else{ |
}else{ |
it->type = 0; /* For functions */ |
it->type = 0; /* For functions */ |
argc = 0; |
argc = 0; |
Line 346 struct item *getItem() { |
|
Line 386 struct item *getItem() { |
|
}while (p >= 0); |
}while (p >= 0); |
it->shortDescription = str2(&(S[pp]),pOld-pp); |
it->shortDescription = str2(&(S[pp]),pOld-pp); |
|
|
|
LL: ; |
|
if (it->type == 1 ) {strcpy(key,"description:"); p++; } |
do { |
do { |
/* Get Description or Examples */ |
/* Get Description or Examples */ |
if (strcmp(key,"end:") == 0) break; |
if (strcmp(key,"end:") == 0) break; |
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,"changelog:") == 0 || |
strcmp(key,"sortKey:") == 0 || |
strcmp(key,"sortKey:") == 0 || |
strcmp(key,"example:") == 0 || |
strcmp(key,"example:") == 0 || |
strcmp(key,"example_description:") ==0 ) { |
strcmp(key,"example_description:") ==0 ) { |
Line 361 struct item *getItem() { |
|
Line 403 struct item *getItem() { |
|
do { |
do { |
pOld = p; |
pOld = p; |
p = nextToken(key,LIMIT); |
p = nextToken(key,LIMIT); |
/* printf("%s\n",key); */ |
/* printf("key=%s\n",key); */ |
if (key[strlen(key)-1] == ':') break; /* Next keyword. */ |
if (key[strlen(key)-1] == ':') { |
|
pOld = p-strlen(key); |
|
break; /* Next keyword. */ |
|
} |
}while (p >= 0); |
}while (p >= 0); |
if (strcmp(key2,"description:") == 0) { |
if (strcmp(key2,"description:") == 0) { |
it->description = str2(&(S[pp]),pOld-pp); |
it->description = str2(&(S[pp]),pOld-pp); |
Line 389 struct item *getItem() { |
|
Line 434 struct item *getItem() { |
|
if (strcmp(key2,"algorithm:") == 0) { |
if (strcmp(key2,"algorithm:") == 0) { |
it->algorithm = str2(&(S[pp]),pOld-pp); |
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) { |
}else if (strcmp(key,"ref:") == 0) { |
argc = 0; |
argc = 0; |
while ((pp=nextToken(key,LIMIT)) >= 0) { |
while ((pp=nextToken(key,LIMIT)) >= 0) { |
Line 404 struct item *getItem() { |
|
Line 452 struct item *getItem() { |
|
} |
} |
} |
} |
}else{ |
}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); |
p = nextToken(key,LIMIT); |
} |
} |
}while (p >= 0); |
}while (p >= 0); |
Line 412 struct item *getItem() { |
|
Line 464 struct item *getItem() { |
|
return it; |
return it; |
} |
} |
|
|
|
void |
shell(struct item *v[],int n) { |
shell(struct item *v[],int n) { |
int gap,i,j; |
int gap,i,j; |
struct item *temp; |
struct item *temp; |
Line 427 shell(struct item *v[],int n) { |
|
Line 480 shell(struct item *v[],int n) { |
|
} |
} |
} |
} |
|
|
|
void |
printMenu(FILE *fp, struct item **it, int n) { |
printMenu(FILE *fp, struct item **it, int n) { |
int i,m; |
int i,m; |
|
|
Line 441 printMenu(FILE *fp, struct item **it, int n) { |
|
Line 495 printMenu(FILE *fp, struct item **it, int n) { |
|
} |
} |
} |
} |
|
|
|
void |
printTexi(FILE *fp, struct item *it) { |
printTexi(FILE *fp, struct item *it) { |
int i; |
if (it->type == 1) printTexi1(fp,it); |
if (it->type == 1) return printTexi1(fp,it); |
else printTexi0(fp,it); |
else return printTexi0(fp,it); |
return; |
} |
} |
|
|
|
void |
printTexi_common(FILE *fp,struct item *it) { |
printTexi_common(FILE *fp,struct item *it) { |
int i; |
int i; |
if (it->description != NULL) { |
if ((it->shortDescription != NULL) || (it->refc >0) |
fprintf(fp,"%s\n\n",it->description); |
|| (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) { |
if (it->algorithm != NULL) { |
fprintf(fp,"\n\n@noindent\nAlgorithm: \n"); |
fprintf(fp,"\n\n@noindent\nAlgorithm: \n@quotation\n"); |
fprintf(fp,"%s\n\n",it->algorithm); |
fprintf(fp,"%s\n@end quotation\n",it->algorithm); |
} |
} |
|
|
if (it->examplec > 0) { |
if (it->examplec > 0) { |
Line 466 printTexi_common(FILE *fp,struct item *it) { |
|
Line 530 printTexi_common(FILE *fp,struct item *it) { |
|
fprintf(fp,"Example %d:\n",i); |
fprintf(fp,"Example %d:\n",i); |
} |
} |
fprintf(fp,"@example\n"); |
fprintf(fp,"@example\n"); |
fprintf(fp,"%s\n",it->examplev[i]); |
outputExample(fp,it->examplev[i]); |
if (GenExample) { |
if (GenExample) { |
outputOfExample(it->examplev[i]); |
outputOfExample(it->examplev[i]); |
} |
} |
Line 479 printTexi_common(FILE *fp,struct item *it) { |
|
Line 543 printTexi_common(FILE *fp,struct item *it) { |
|
if (it->author != NULL) { |
if (it->author != NULL) { |
fprintf(fp,"Author : %s\n\n",it->author); |
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) { |
if (it->refc > 0) { |
fprintf(fp,"@table @t\n"); |
fprintf(fp,"\n\nReferences:\n@quotation\n"); |
fprintf(fp,"@item References\n"); |
|
for (i=0; i <it->refc; i++) { |
for (i=0; i <it->refc; i++) { |
fprintf(fp,"@code{%s} ",it->refv[i]); |
fprintf(fp," @code{%s} ",it->refv[i]); |
if (i != it->refc-1) fprintf(fp,", "); |
if (i != it->refc-1) fprintf(fp,", \n"); |
} |
} |
fprintf(fp,"\n@end table\n"); |
fprintf(fp,"\n@end quotation\n"); |
} |
} |
fprintf(fp,"\n"); |
fprintf(fp,"\n"); |
} |
} |
|
|
|
void |
printTexi0(FILE *fp, struct item *it) { |
printTexi0(FILE *fp, struct item *it) { |
int i; |
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) { |
if (it == NULL) { |
fprintf(fp,"@c item is NULL.\n"); |
fprintf(fp,"@c item is NULL.\n"); |
return ; |
return ; |
} |
} |
|
fprintf(fp,"@c sortKey: %s\n",it->sortKey); |
if (it->name == NULL) { |
if (it->name == NULL) { |
fprintf(fp,"@c item name is missing.\n"); |
fprintf(fp,"@c item name is missing.\n"); |
return ; |
return ; |
Line 563 printTexi0(FILE *fp, struct item *it) { |
|
Line 632 printTexi0(FILE *fp, struct item *it) { |
|
printTexi_common(fp,it); |
printTexi_common(fp,it); |
} |
} |
|
|
|
void |
printTexi1(FILE *fp, struct item *it) { |
printTexi1(FILE *fp, struct item *it) { |
int i; |
int i; |
/* For it->type == 1 */ |
/* 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) { |
if (it == NULL) { |
fprintf(fp,"@c item is NULL.\n"); |
fprintf(fp,"@c item is NULL.\n"); |
return ; |
return ; |
} |
} |
|
fprintf(fp,"@c sortKey: %s\n",it->sortKey); |
|
|
if (it->shortDescription != NULL) { |
if (it->shortDescription != NULL) { |
for (i=0; i<strlen(it->shortDescription); i++) { |
for (i=0; i<strlen(it->shortDescription); i++) { |
Line 589 printTexi1(FILE *fp, struct item *it) { |
|
Line 660 printTexi1(FILE *fp, struct item *it) { |
|
printTexi_common(fp,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;} |
|
else if (s[i+1] == '}') {fprintf(fp,"%s","@}"); i += 1;} |
|
else if (s[i+1] == '@') {fprintf(fp,"%s","@@"); i += 1;} |
|
else if (strncmp(&(s[i+1]),"colon",5)==0) { |
|
fprintf(fp,":"); i += 5; |
|
}else fprintf(fp,"@@"); |
|
}else{ |
|
if (s[i] == '{') {fprintf(fp,"%s","@{"); } |
|
else if (s[i] == '}') {fprintf(fp,"%s","@}");} |
|
else fputc(s[i],fp); |
|
} |
|
} |
|
} |
|
|
|
void |
outputOfExample(char *com) { |
outputOfExample(char *com) { |
FILE *fp2; |
FILE *fp2; |
int c; |
int c; |
Line 616 outputOfExample(char *com) { |
|
Line 713 outputOfExample(char *com) { |
|
putchar('\n'); |
putchar('\n'); |
} |
} |
|
|
|
void |
|
printTitlePage(char *title, char *author,char *infoName) { |
|
printf("\\input texinfo\n"); |
|
printf("@def@colon{:}\n\n"); |
|
printf("@iftex\n"); |
|
printf("@catcode`@#=6\n"); |
|
printf("@def@b#1{{@bf@gt #1}}\n"); |
|
printf("@catcode`@#=@other\n"); |
|
printf("@end iftex\n"); |
|
printf("@overfullrule=0pt\n"); |
|
|
|
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"); |
|
printf("@title %s\n",Title); |
|
printf("@subtitle Edition : auto generated by oxgentexi on @today{}\n"); |
|
if (author != NULL) printf("@author %s\n",author); |
|
printf("@end titlepage\n\n"); |
|
printf("@synindex vr fn\n"); |
|
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 */ |
/* Old file was OpenXM/src/asir-contrib/packages/doc/gentexi.c */ |