diff options
Diffstat (limited to 'Build/source/texk')
-rw-r--r-- | Build/source/texk/makejvf/ChangeLog | 5 | ||||
-rw-r--r-- | Build/source/texk/makejvf/tfmread.c | 64 | ||||
-rw-r--r-- | Build/source/texk/makejvf/version.h | 2 |
3 files changed, 43 insertions, 28 deletions
diff --git a/Build/source/texk/makejvf/ChangeLog b/Build/source/texk/makejvf/ChangeLog index c19b5d4a8cf..30301f9a85a 100644 --- a/Build/source/texk/makejvf/ChangeLog +++ b/Build/source/texk/makejvf/ChangeLog @@ -1,3 +1,8 @@ +2017-07-31 Hironobu Yamashita <h.y.acetaminophen@gmail.com> + + makejvf version 20170731. + * tfmread.c, version.h: Support large GLUEKERN table. + 2017-07-24 Hironobu Yamashita <h.y.acetaminophen@gmail.com> * tfmread.c, makejvf.h: More efficient code. Note that 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, diff --git a/Build/source/texk/makejvf/version.h b/Build/source/texk/makejvf/version.h index 19b3cc57db5..a2b27658c60 100644 --- a/Build/source/texk/makejvf/version.h +++ b/Build/source/texk/makejvf/version.h @@ -1,2 +1,2 @@ -#define VERSION "20170720" +#define VERSION "20170731" #define BUG_ADDRESS "issue@texjp.org" |