diff options
author | Karl Berry <karl@freefriends.org> | 2010-04-11 00:28:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-04-11 00:28:06 +0000 |
commit | 001b7975ce276ec6e72bf2b317cef8afe92c2948 (patch) | |
tree | 3c73cdd11c93462911cb416a231af743f48d5368 /Build/source/texk/mendexk/main.c | |
parent | 22d2dd3a9e8cc227f8d51b2fe8cf1734c2844959 (diff) |
add ptex from Akira, Norbert, and jTeX group; ptex not actually built by default yet
git-svn-id: svn://tug.org/texlive/trunk@17797 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/mendexk/main.c')
-rw-r--r-- | Build/source/texk/mendexk/main.c | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/Build/source/texk/mendexk/main.c b/Build/source/texk/mendexk/main.c new file mode 100644 index 00000000000..9fac729869c --- /dev/null +++ b/Build/source/texk/mendexk/main.c @@ -0,0 +1,376 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <kpathsea/config.h> +#include <ptexenc/ptexenc.h> +#include "mendex.h" + +#include "kana.h" +#include "var.h" + +#ifdef KPATHSEA +#include "kp.h" +#endif + +char *styfile,*idxfile[256],indfile[256],*dicfile,logfile[256]; + +#ifdef KPATHSEA +/* default paths */ +#ifndef DEFAULT_INDEXSTYLES +#define DEFAULT_INDEXSTYLES "." +#endif +#ifndef DEFAULT_INDEXDICTS +#define DEFAULT_INDEXDICTS "." +#endif +KpathseaSupportInfo kp_ist,kp_dict; +#endif + +#define VERSION "version 2.6f [14-Aug-2009]" + +int main(int argc, char **argv) +{ + int i,j,cc=0,startpagenum=-1,ecount=0; + char *envbuff; + + set_enc_string(NULL, "EUC"); +#ifdef KPATHSEA + KP_init(argv[0]); + kp_ist.var_name = "INDEXSTYLE"; + kp_ist.path = DEFAULT_INDEXSTYLES; /* default path. */ + kp_ist.suffix = "ist"; + KP_entry_filetype(&kp_ist); + kp_dict.var_name = "INDEXDICTIONARY"; + kp_dict.path = DEFAULT_INDEXDICTS; /* default path */ + kp_dict.suffix = "dict"; + KP_entry_filetype(&kp_dict); +#endif + +/* check options */ + + for (i=1,j=0;i<argc;i++) { + if ((argv[i][0]=='-')&&(strlen(argv[i])>=2)) { + switch (argv[i][1]) { + case 'c': + bcomp=1; + break; + + case 'd': + if ((argv[i][2]=='\0')&&(i+1<argc)) { + i++; + dicfile=malloc(strlen(argv[i])+1); + strcpy(dicfile,argv[i]); + } + else { + dicfile=malloc(strlen(&argv[i][2])+1); + strcpy(dicfile,&argv[i][2]); + } + break; + + case 'f': + force=1; + break; + + case 'g': + gflg=1; + break; + + case 'i': + fsti=1; + break; + + case 'l': + lorder=1; + break; + + case 'o': + if ((argv[i][2]=='\0')&&(i+1<argc)) { + strcpy(indfile,argv[++i]); + } + else { + strcpy(indfile,&argv[i][2]); + } + break; + + case 'p': + if ((argv[i][2]=='\0')&&(i+1<argc)) { + i++; + if (strcmp(argv[i],"any")==0) fpage=2; + else if (strcmp(argv[i],"odd")==0) fpage=3; + else if (strcmp(argv[i],"even")==0) fpage=4; + else { + fpage=1; + startpagenum=atoi(argv[i]); + } + } + else { + if (strcmp(&argv[i][2],"any")==0) fpage=2; + else if (strcmp(&argv[i][2],"odd")==0) fpage=3; + else if (strcmp(&argv[i][2],"even")==0) fpage=4; + else { + fpage=1; + startpagenum=atoi(&argv[i][2]); + } + } + break; + + case 'q': + verb=0; + break; + + case 't': + if ((argv[i][2]=='\0')&&(i+1<argc)) { + strcpy(logfile,argv[++i]); + } + else { + strcpy(logfile,&argv[i][2]); + } + break; + + case 'r': + prange=0; + break; + + case 's': + if ((argv[i][2]=='\0')&&(i+1<argc)) { + i++; + styfile=malloc(strlen(argv[i])+1); + strcpy(styfile,argv[i]); + } + else { + styfile=malloc(strlen(&argv[i][2])+1); + strcpy(styfile,&argv[i][2]); + } + break; + + case 'v': + debug=1; + break; + + case 'E': + set_enc_string("EUC", NULL); + break; + + case 'J': + set_enc_string("JIS", NULL); + break; + + case 'S': + set_enc_string("SJIS", NULL); + break; + + case 'U': + set_enc_string("UTF8", NULL); + break; + + default: + fprintf(stderr,"mendex - Japanese index processor, %s (%s).\n",VERSION, get_enc_string()); + fprintf(stderr," Copyright 2009 ASCII MEDIA WORKS.(ptex-staff@ml.asciimw.jp)\n"); + fprintf(stderr,"usage:\n"); + fprintf(stderr,"%% mendex [-ilqrcg] [-s sty] [-d dic] [-o ind] [-t log] [-p no] [idx0 idx1 ...]\n"); + fprintf(stderr,"options:\n"); + fprintf(stderr,"-i use stdin as the input file.\n"); + fprintf(stderr,"-l use letter ordering.\n"); + fprintf(stderr,"-q quiet mode.\n"); + fprintf(stderr,"-r disable implicit page formation.\n"); + fprintf(stderr,"-c compress blanks. (ignore leading and trailing blanks.)\n"); + fprintf(stderr,"-g make Japanese index head <%s>.\n", AKASATANA); + fprintf(stderr,"-f force to output kanji.\n"); + fprintf(stderr,"-s sty take sty as style file.\n"); + fprintf(stderr,"-d dic take dic as dictionary file.\n"); + fprintf(stderr,"-o ind take ind as the output index file.\n"); + fprintf(stderr,"-t log take log as the error log file.\n"); + fprintf(stderr,"-p no set the starting page number of index.\n"); + fprintf(stderr,"-E EUC mode.\n"); + fprintf(stderr,"-J JIS mode.\n"); + fprintf(stderr,"-S ShiftJIS mode.\n"); + fprintf(stderr,"-U UTF-8 mode.\n"); + fprintf(stderr,"idx... input files.\n"); + exit(0); + break; + } + } + else { + cc=strlen(argv[i]); + if (cc<4) cc+=4; + else if (strcmp(&argv[i][cc-4],".idx")) cc+=4; + idxfile[j]=malloc(cc+1); + strcpy(idxfile[j++],argv[i]); + } + } + idxcount=j+fsti; + +/* check option errors */ + + if (idxcount==0) idxcount=fsti=1; + + if (styfile==NULL) { +#ifdef KPATHSEA +#ifdef KPATHSEA3 + envbuff=KP_get_value("INDEXDEFAULTSTYLE",NULL); +#else + envbuff=KP_get_value("INDEXDEFAULTSTYLE","INDEXDEFAULTSTYLE",NULL); +#endif +#else + envbuff=getenv("INDEXDEFAULTSTYLE"); +#endif + if (envbuff!=NULL) { + styfile=malloc(strlen(envbuff)+1); + strcpy(styfile,envbuff); + } + } + + if (styfile!=NULL) styread(styfile); + + if ((indfile[0]=='\0')&&(idxcount-fsti>0)) { + for (i=strlen(idxfile[0]);i>=0;i--) { + if (idxfile[0][i]=='.') { + strncpy(indfile,idxfile[0],i); + sprintf(&indfile[i],".ind"); + break; + } + } + if (i==-1) sprintf(indfile,"%s.ind",idxfile[0]); + } + + if (logfile[0]=='\0') { + if (idxcount-fsti>0) { + for (i=strlen(idxfile[0]);i>=0;i--) { + if (idxfile[0][i]=='.') { + strncpy(logfile,idxfile[0],i); + sprintf(&logfile[i],".ilg"); + break; + } + } + if (i==-1) sprintf(logfile,"%s.ilg",idxfile[0]); + efp=fopen(logfile,"w"); + } + else { + efp=stderr; + strcpy(logfile,"stderr"); + } + } + else efp=fopen(logfile,"w"); + + if (strcmp(argv[0],"makeindex")==0) { + verb_printf(efp,"This is Not `MAKEINDEX\', But `MENDEX\' %s (%s).\n", + VERSION, get_enc_string()); + } + else { + verb_printf(efp,"This is mendex %s (%s).\n", + VERSION, get_enc_string()); + } + +/* init kanatable */ + + initkanatable(); + +/* read dictionary */ + + ecount+=dicread(dicfile); + + switch (letter_head) { + case 0: + case 1: + if (gflg==1) { + strcpy(atama,akasatana); + } + else { + strcpy(atama,aiueo); + } + break; + + case 2: + if (gflg==1) { + strcpy(atama,AKASATANA); + } + else { + strcpy(atama,AIUEO); + } + break; + + default: + break; + } + +/* read idx file */ + + lines=0; + ecount=0; + ind=(struct index *)malloc(sizeof(struct index)); + + for (i=0;i<idxcount-fsti;i++) { + ecount+=idxread(idxfile[i],lines); + } + if (fsti==1) { + ecount+=idxread(NULL,lines); + } + verb_printf(efp,"%d entries accepted, %d rejected.\n",acc,reject); + + if (ecount!=0) { + verb_printf(efp,"%d errors, written in %s.\n",ecount,logfile); + lines=0; + } + if (lines==0) { + verb_printf(efp,"Nothing written in output file.\n"); + if (efp!=stderr) fclose(efp); + exit(-1); + } + +/* sort index */ + + verb_printf(efp,"Sorting index."); + + scount=0; + wsort(ind,lines); + + verb_printf(efp,"...done(%d comparisons).\n",scount); + +/* sort pages */ + + verb_printf(efp,"Sorting pages."); + + scount=0; + pagesort(ind,lines); + + verb_printf(efp,"...done(%d comparisons).\n",scount); + +/* get last page */ + + if ((fpage>1)&&(idxcount-fsti>0)) cc=lastpage(idxfile[0]); + + switch (fpage) { + case 2: + startpagenum=cc+1; + break; + + case 3: + if ((cc+1)%2==0) startpagenum=cc+2; + else startpagenum=cc+1; + break; + + case 4: + if ((cc+1)%2==1) startpagenum=cc+2; + else startpagenum=cc+1; + break; + + default: + break; + } + +/* write indfile */ + + verb_printf(efp,"Making index file."); + + indwrite(indfile,ind,startpagenum); + + verb_printf(efp,"...done.\n"); + + if (idxcount-fsti==0) strcpy(indfile,"stdout"); + + verb_printf(efp,"%d warnings, written in %s.\n",warn,logfile); + verb_printf(efp,"Output written in %s.\n",indfile); + if (efp!=stderr) fclose(efp); + + exit(0); +} |