From 9e945e87e6b8e04f4319505f27c0c574876df7ae Mon Sep 17 00:00:00 2001 From: Hironobu Yamashita Date: Sat, 15 Jul 2017 04:06:19 +0000 Subject: Improve hankaku-kana TFM support git-svn-id: svn://tug.org/texlive/trunk@44804 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/makejvf/write.c | 47 +++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 9 deletions(-) (limited to 'Build/source/texk/makejvf/write.c') diff --git a/Build/source/texk/makejvf/write.c b/Build/source/texk/makejvf/write.c index 18831e4fa9f..ccab817a049 100644 --- a/Build/source/texk/makejvf/write.c +++ b/Build/source/texk/makejvf/write.c @@ -654,7 +654,10 @@ void writevfu(int code, FILE *fp) case 0xFF90: case 0xFF91: case 0xFF92: case 0xFF93: case 0xFF94: case 0xFF95: case 0xFF96: case 0xFF97: case 0xFF98: case 0xFF99: case 0xFF9A: case 0xFF9B: case 0xFF9C: case 0xFF9D: case 0xFF9E: case 0xFF9F: if (jfm_id == 11 && hankana) { /* Ⱦ³ÑÊÒ²¾Ì¾¡¢²£½ñ¤­»þ */ - cc=3; + if (kanatfm) + cc=4; + else + cc=3; if (skip2) cc+=numcount(skip2)+1; fputnum(cc,4,fp); @@ -664,13 +667,16 @@ void writevfu(int code, FILE *fp) fputc(157+numcount(skip2)-1,fp); /* DOWN */ fputnum2(skip2,fp); } + if (kanatfm) fputc(173+fidshift,fp); /* FONT_NUM_2 */ fputc(129,fp); /* SET2 */ fputnum(code,2,fp); /* char code */ + pstfm_codes[pstfm_nt-1]=code; + pstfm_nt+=1; return; } default: if (w != zw) { - if ((code >= 0x3041 && code <= 0x33FF) && kanatume>=0) { + if (!uniblock_iskanji && kanatume>=0) { sprintf(buf2,"CH <%X>",code); rewind(afp); while (fgets(buf,255,afp)!=NULL) { @@ -788,7 +794,7 @@ void writevfu(int code, FILE *fp) fputnum2(skip2,fp); } if (kanatfm) { - if (code <= 0x33FF) + if (!uniblock_iskanji) fputc(173+fidshift,fp); /* FONT_NUM_2 */ else fputc(172+fidshift,fp); /* FONT_NUM_1 */ @@ -817,6 +823,7 @@ void maketfm(char *name) { char nbuf[256]; FILE *fp; + int i; strcpy(nbuf,name); strcat(nbuf,".tfm"); @@ -827,12 +834,22 @@ void maketfm(char *name) } fputnum(jfm_id,2,fp); /* JFM ID */ - fputnum(1,2,fp); /* number of char type */ - fputnum(27,2,fp); /* file words */ + fputnum(pstfm_nt,2,fp); /* number of char type */ + if (pstfm_nt>1) + fputnum(27+pstfm_nt+1,2,fp); /* file words */ + else + fputnum(27,2,fp); /* file words */ fputnum(2,2,fp); /* header words */ - fputnum(0,2,fp); /* min of char type */ - fputnum(0,2,fp); /* max of char type */ - fputnum(2,2,fp); /* width words */ + if (pstfm_nt>1) { + fputnum(0,2,fp); /* min of char type */ + fputnum(1,2,fp); /* max of char type */ + fputnum(3,2,fp); /* width words */ + } + else { + fputnum(0,2,fp); /* min of char type */ + fputnum(0,2,fp); /* max of char type */ + fputnum(2,2,fp); /* width words */ + } fputnum(2,2,fp); /* height words */ fputnum(2,2,fp); /* depth words */ fputnum(1,2,fp); /* italic words */ @@ -844,12 +861,24 @@ void maketfm(char *name) fputnum(0,4,fp); /* check sum */ fputnum(10*(1<<20),4,fp); /* design size */ + /* others */ fputnum(0,2,fp); /* char code */ fputnum(0,2,fp); /* char type */ + /* hankaku-kana */ + for (i=0;i1) + fputnum((2<<24)+(1<<20)+(1<<16),4,fp); /* char info */ + /* others */ fputnum((1<<24)+(1<<20)+(1<<16),4,fp); /* char info */ fputnum(0,4,fp); /* width */ - fputnum(1<<20,4,fp); /* width */ + if (pstfm_nt>1) + fputnum(1<<19,4,fp); /* width, hankaku-kana */ + fputnum(1<<20,4,fp); /* width, others */ if (jfm_id == 11) { fputnum(0,4,fp); /* height */ fputnum((int)((1<<20)*0.9),4,fp); /* height */ -- cgit v1.2.3