diff options
Diffstat (limited to 'Build/source/texk/makejvf/main.c')
-rw-r--r-- | Build/source/texk/makejvf/main.c | 91 |
1 files changed, 84 insertions, 7 deletions
diff --git a/Build/source/texk/makejvf/main.c b/Build/source/texk/makejvf/main.c index 132fb35b13a..60cb5a73446 100644 --- a/Build/source/texk/makejvf/main.c +++ b/Build/source/texk/makejvf/main.c @@ -5,14 +5,17 @@ #include <kpathsea/config.h> #include <ptexenc/ptexenc.h> #include "makejvf.h" +#include "uniblock.h" FILE *vfp,*afp=NULL; -char *atfmname,*vtfmname,*afmname,*vfname,*kanatfm; -int kanatume=-1,chotai=0,baseshift=0,minute=0; +char *atfmname,*vtfmname,*afmname,*vfname,*kanatfm,*jistfm,*ucsqtfm; +int kanatume=-1,chotai=0,baseshift=0,minute=0,useset3=0,hankana=0,fidzero=0; +long ucs=0; int main(int argc, char ** argv) { - int i,j; + int i,j,ib; + long ch; set_enc_string(NULL, "EUC"); if (argc < 3) { @@ -66,6 +69,48 @@ int main(int argc, char ** argv) case 'm': minute=1; break; + case 'u': + argv++; + if (!strcmp(*argv,"gb")) + ucs = ENTRY_G; + else if (!strcmp(*argv,"cns")) + ucs = ENTRY_C; + else if (!strcmp(*argv,"jisq")) + ucs = ENTRY_JQ; + else if (!strcmp(*argv,"jis")) + ucs = ENTRY_J; + else if (!strcmp(*argv,"ks")) + ucs = ENTRY_K; + else { + fprintf(stderr,"Charset is not set\n"); + ucs = ENTRY_NO; + } + break; + case '3': + useset3=1; + break; + case 'J': + if ((*argv)[2]!='\0') { + jistfm = strdup(&(*argv)[2]); + } + else { + jistfm = strdup(*(++argv)); + } + break; + case 'U': + if ((*argv)[2]!='\0') { + ucsqtfm = strdup(&(*argv)[2]); + } + else { + ucsqtfm = strdup(*(++argv)); + } + break; + case 'H': + hankana=1; + break; + case 'i': + fidzero=1; + break; default: usage(); exit(0); @@ -111,11 +156,35 @@ int main(int argc, char ** argv) maketfm(kanatfm); } + if (jistfm) { + if (!strcmp(&jistfm[strlen(jistfm)-4],".tfm")) { + jistfm[strlen(jistfm)-4] = '\0'; + } + maketfm(jistfm); + } + + if (ucsqtfm) { + if (!strcmp(&ucsqtfm[strlen(ucsqtfm)-4],".tfm")) { + ucsqtfm[strlen(ucsqtfm)-4] = '\0'; + } + maketfm(ucsqtfm); + } + vfp = vfopen(vfname); - for (i=0;i<94;i++) - for (j=0;j<94;j++) - writevf((0x21+i)*256+(0x21+j),vfp); + if (ucs) { + ib=0; + for (i=0;i<(useset3+1);i++) + for (j=0;j<65536;j++) { + ch=i*2*65536+j; + if (search_cjk_entry(&ib,ch,ucs)) + writevfu(ch,vfp); + } + } else { + for (i=0;i<94;i++) + for (j=0;j<94;j++) + writevf((0x21+i)*256+(0x21+j),vfp); + } vfclose(vfp); @@ -124,7 +193,7 @@ int main(int argc, char ** argv) void usage(void) { - fputs2("MAKEJVF ver.1.1a -- make Japanese VF file.\n", stderr); + fputs2("MAKEJVF ver.1.1a-u1.00 -- make Japanese VF file.\n", stderr); fputs2("%% makejvf [<options>] <TFMfile> <PSfontTFM>\n", stderr); fputs2("options:\n", stderr); fputs2("-C 長体モード\n", stderr); @@ -136,4 +205,12 @@ void usage(void) fputs2("-a <AFMfile> AFMファイル名(かな詰め時に使用)\n", stderr); fputs2("-k <数値> かな詰めマージン指定\n", stderr); fputs2(" 文字幅を1000として整数で指定。-aオプションと共に使用\n", stderr); + fputs2("-u <Charset> UCS mode\n", stderr); + fputs2(" <Charset> gb : GB, cns : CNS, ks : KS\n", stderr); + fputs2(" jis : JIS, jisq : JIS quote only\n", stderr); + fputs2("-J <TFMfile> JIS encoded PS font TFM name for quote, double quote with UCS mode\n", stderr); + fputs2("-U <TFMfile> UCS encoded PS font TFM name for quote, double quote with UCS mode\n", stderr); + fputs2("-3 use set3 (with UCS mode)\n", stderr); + fputs2("-H use half-width katakana (with UCS mode)\n", stderr); + fputs2("-i font ID from No.0\n", stderr); } |