summaryrefslogtreecommitdiff
path: root/Build/source/texk/makejvf/write.c
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2017-07-15 04:06:19 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2017-07-15 04:06:19 +0000
commit9e945e87e6b8e04f4319505f27c0c574876df7ae (patch)
tree421738cafe920c2d63c20e7fc9250140dca275d2 /Build/source/texk/makejvf/write.c
parent347edc117c2ff2e778be03471ec1c0cb81b3311d (diff)
Improve hankaku-kana TFM support
git-svn-id: svn://tug.org/texlive/trunk@44804 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/makejvf/write.c')
-rw-r--r--Build/source/texk/makejvf/write.c47
1 files changed, 38 insertions, 9 deletions
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;i<pstfm_nt-1;i++) {
+ fputnum(pstfm_codes[i],2,fp); /* char code */
+ fputnum(1,2,fp); /* char type */
+ }
+ /* hankaku-kana */
+ if (pstfm_nt>1)
+ 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 */