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.