diff options
Diffstat (limited to 'Build/source/texk/makejvf/tfmread.c')
-rw-r--r-- | Build/source/texk/makejvf/tfmread.c | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/Build/source/texk/makejvf/tfmread.c b/Build/source/texk/makejvf/tfmread.c index a2f3ac51288..c9acfdebd68 100644 --- a/Build/source/texk/makejvf/tfmread.c +++ b/Build/source/texk/makejvf/tfmread.c @@ -11,7 +11,7 @@ unsigned char *header,*char_type,*char_info,*glue_kern; int jfmread(int kcode) { - int i,ctype=0,w_ind,w,ll=0,rr=0,gk_ind,k_ind,g_ind; + int i,ctype=0,w_ind,w,ll=0,rr=0,tag,gk_ind,gk2_ind; for (i = 0 ; i < nt ; i++) { if (upair(&char_type[i*4]) == kcode) { @@ -27,38 +27,48 @@ int jfmread(int kcode) rightamount = 0; if (w != zw && ctype > 0) { /* get natural length of JFM glue between <type0> and <type of kcode> */ - gk_ind = char_info[0*4+3]; /* remainder for <type0> */ - for (i = 0 ; i < nl-gk_ind ; i++) { - if (glue_kern[(gk_ind+i)*4+1] == ctype) { - if (glue_kern[(gk_ind+i)*4+2] >= 128) { - k_ind = glue_kern[(gk_ind+i)*4+3]; - ll = kern[k_ind]; + tag = char_info[ctype*4+2] % 4; + if (tag == 1) { + gk_ind = char_info[0*4+3]; /* remainder for <type0> */ + if (glue_kern[gk_ind*4] == 254) /* support for large gluekern table */ + gk_ind = upair(&glue_kern[gk_ind*4+2]); + for (i = 0 ; i < nl-gk_ind ; i++) { + if (glue_kern[(gk_ind+i)*4+1] == ctype) { + if (glue_kern[(gk_ind+i)*4+2] >= 128) { + gk2_ind = glue_kern[(gk_ind+i)*4+3]; + ll = kern[gk2_ind]; + } + else { + gk2_ind = glue_kern[(gk_ind+i)*4+3]; + ll = glue[3*gk2_ind]; + } + break; } - else { - g_ind = glue_kern[(gk_ind+i)*4+3]; - ll = glue[3*g_ind]; - } - break; + if (glue_kern[(gk_ind+i)*4] >= 128) + break; } - if (glue_kern[(gk_ind+i)*4] >= 128) - break; } /* get natural length of JFM glue between <type of kcode> and <type0> */ - gk_ind = char_info[ctype*4+3]; /* remainder for <type of kcode> */ - for (i = 0 ; i < nl-gk_ind ; i++) { - if (glue_kern[(gk_ind+i)*4+1] == 0) { - if (glue_kern[(gk_ind+i)*4+2] >= 128) { - k_ind = glue_kern[(gk_ind+i)*4+3]; - rr = kern[k_ind]; - } - else { - g_ind = glue_kern[(gk_ind+i)*4+3]; - rr = glue[3*g_ind]; + tag = char_info[ctype*4+2] % 4; + if (tag == 1) { + gk_ind = char_info[ctype*4+3]; /* remainder for <type of kcode> */ + if (glue_kern[gk_ind*4] == 254) /* support for large gluekern table */ + gk_ind = upair(&glue_kern[gk_ind*4+2]); + for (i = 0 ; i < nl-gk_ind ; i++) { + if (glue_kern[(gk_ind+i)*4+1] == 0) { + if (glue_kern[(gk_ind+i)*4+2] >= 128) { + gk2_ind = glue_kern[(gk_ind+i)*4+3]; + rr = kern[gk2_ind]; + } + else { + gk2_ind = glue_kern[(gk_ind+i)*4+3]; + rr = glue[3*gk2_ind]; + } + break; } - break; + if (glue_kern[(gk_ind+i)*4] >= 128) + break; } - if (glue_kern[(gk_ind+i)*4] >= 128) - break; } if (abs(zw - ll - w - rr) <= 1) /* allow round-off error */ /* character width is truncated, |