texlive[72345] Build/source/texk/dvipsk: dvips: More strict check of

commits+takuji at tug.org commits+takuji at tug.org
Sun Sep 22 07:07:20 CEST 2024


Revision: 72345
          https://tug.org/svn/texlive?view=revision&revision=72345
Author:   takuji
Date:     2024-09-22 07:07:20 +0200 (Sun, 22 Sep 2024)
Log Message:
-----------
dvips: More strict check of OFM FONTDIR for pTeX

Modified Paths:
--------------
    trunk/Build/source/texk/dvipsk/ChangeLog
    trunk/Build/source/texk/dvipsk/dopage.c
    trunk/Build/source/texk/dvipsk/dvips.h
    trunk/Build/source/texk/dvipsk/tfmload.c
    trunk/Build/source/texk/dvipsk/virtualfont.c

Modified: trunk/Build/source/texk/dvipsk/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvipsk/ChangeLog	2024-09-22 05:07:14 UTC (rev 72344)
+++ trunk/Build/source/texk/dvipsk/ChangeLog	2024-09-22 05:07:20 UTC (rev 72345)
@@ -1,3 +1,11 @@
+2024-09-22  TANAKA Takuji  <ttk at t-lab.opal.ne.jp>
+
+	* {virtualfont,dopage,tfmload}.c, dvips.h:
+	More strict check to interpret OFM FONTDIR
+	as pTeX vertical writing.
+	https://github.com/texjporg/tex-jp-build/issues/170#issuecomment-2295037307
+	https://github.com/texjporg/tex-jp-build/issues/99
+
 2024-03-10  Karl Berry  <karl at tug.org>
 
 	* TL'24 release.

Modified: trunk/Build/source/texk/dvipsk/dopage.c
===================================================================
--- trunk/Build/source/texk/dvipsk/dopage.c	2024-09-22 05:07:14 UTC (rev 72344)
+++ trunk/Build/source/texk/dvipsk/dopage.c	2024-09-22 05:07:20 UTC (rev 72345)
@@ -138,7 +138,7 @@
          int kind0;
          cd0 = curfnt->localfonts->desc->chardesc;
          kind0 = curfnt->localfonts->desc->kind;
-         if (mychar<curfnt->localfonts->desc->maxchars && (cd0[mychar].flags & EXISTS)) {
+         if (mychar<curfnt->localfonts->desc->maxchars && (cd0[mychar].flags2 & EXISTS)) {
 #ifdef DEBUG
             if (dd(D_FONTS))
                fprintf_str(stderr,

Modified: trunk/Build/source/texk/dvipsk/dvips.h
===================================================================
--- trunk/Build/source/texk/dvipsk/dvips.h	2024-09-22 05:07:14 UTC (rev 72344)
+++ trunk/Build/source/texk/dvipsk/dvips.h	2024-09-22 05:07:20 UTC (rev 72345)
@@ -10,6 +10,7 @@
 #define CREATIONDATE
 
 #define MAX_CODE 0x110000
+#define MAX_VF_CODE 0x1000000
 #define MAX_2BYTES_CODE 0x10000
 #define VF_MEM_UNIT 0x10000
 #define CD_IDX(i)  ((i>=MAX_2BYTES_CODE ? MAX_2BYTES_CODE : i))

Modified: trunk/Build/source/texk/dvipsk/tfmload.c
===================================================================
--- trunk/Build/source/texk/dvipsk/tfmload.c	2024-09-22 05:07:14 UTC (rev 72344)
+++ trunk/Build/source/texk/dvipsk/tfmload.c	2024-09-22 05:07:20 UTC (rev 72345)
@@ -109,7 +109,7 @@
    integer scaledsize;
    integer id, nt = 0;
    integer nw, hd;
-   integer bc, ec;
+   integer bc, ec, direc = -1;
    integer nco=0, ncw=0, npc=0, no_repeats = 0;
    uinteger *index = NULL;
    halfword *chartype = NULL;
@@ -161,18 +161,7 @@
       bc = tfm32(); ec = tfm32();
       nw = tfm32();
       for (i=0; i<8; i++) li=tfm32();
-      if (!noptex && font_level==1 && ec>=0x2E00) {
-         curfnt->iswide = 1;
-         if (li==5) {  /* interpret FONTDIR RT as pTeX vertical writing */
-            curfnt->dir = 9;
-#ifdef DEBUG
-            if (dd(D_FONTS))
-               fprintf_str(stderr,
-                  "We will interpret font (%s.ofm) direction as pTeX vertical writing.\n",
-                  curfnt->name);
-#endif /* DEBUG */
-         }
-      }
+      direc = li;
       if ((font_level>1 || hd<2 || bc<0 || ec<0 || nw<0
                        || bc>ec+1 || ec>0x10FFFF || nw>0x110000) ||
          (font_level==0 && (ec>65535 || nw>65536)))
@@ -294,8 +283,22 @@
                curfnt->chardesc[i].pixelwidth = -((integer)(conv*-li+0.5));
             curfnt->chardesc[i].flags = (curfnt->resfont ? EXISTS : 0);
             curfnt->chardesc[i].flags2 = EXISTS;
+            if (!noptex && font_level==1 && (i>=0x2E80 && !(0xFB00<=i && i<=0xFB06))) {
+               curfnt->iswide = 1;
+            }
          }
       if (ec>=256) curfnt->codewidth = 2; /* XXX: 2byte-code can have ec<256 */
+      if (!noptex && font_level==1 && curfnt->iswide == 1) {
+         if (direc==5) {  /* interpret FONTDIR RT as pTeX vertical writing */
+            curfnt->dir = 9;
+#ifdef DEBUG
+            if (dd(D_FONTS))
+               fprintf_str(stderr,
+                  "We will interpret font (%s.ofm) direction as pTeX vertical writing.\n",
+                  curfnt->name);
+#endif /* DEBUG */
+         }
+      }
    }
    free(chardat);
    free(scaled);

Modified: trunk/Build/source/texk/dvipsk/virtualfont.c
===================================================================
--- trunk/Build/source/texk/dvipsk/virtualfont.c	2024-09-22 05:07:14 UTC (rev 72344)
+++ trunk/Build/source/texk/dvipsk/virtualfont.c	2024-09-22 05:07:20 UTC (rev 72345)
@@ -235,7 +235,7 @@
                font_level = tfm16();
                tfm32(); tfm32(); tfm32(); /* li, hd, bc */
                ec = tfm32();
-               if (font_level==1 && ec>=0x2E00)  /* We interpret the ofm is for pTeX */
+               if (font_level==1 && ec>=0x2E80)  /* We interpret the ofm is for pTeX */
                   curfnt->kind = VF_PTEX;
             }
             fclose(tfmfile);
@@ -253,7 +253,7 @@
          if (length<2) badvf("negative length packet");
          if (length>65535) badvf("packet too long");
          cc = vfquad();
-         if (cc>=no_of_chars && cc<MAX_CODE) {
+         if (cc>=no_of_chars && cc<MAX_VF_CODE) {
             j = VF_MEM_UNIT * ((integer)(cc/VF_MEM_UNIT) + 1);
             curfnt->chardesc = (chardesctype *)xrealloc(curfnt->chardesc,
                          sizeof(chardesctype)*j);



More information about the tex-live-commits mailing list.