summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c
diff options
context:
space:
mode:
authorTakuji Tanaka <ttk@t-lab.opal.ne.jp>2025-01-02 12:27:29 +0000
committerTakuji Tanaka <ttk@t-lab.opal.ne.jp>2025-01-02 12:27:29 +0000
commit484f1ec6700a206007ec0f4c5b9c3d62b9c641b0 (patch)
tree55d8b31739101eeba8990e2eb1393bd4f53ae3e2 /Build/source/texk/web2c
parent247052214bcf1eb5c2af95a685c3a988eaa44fab (diff)
{,e}uptex: Accept extended upTeX internal encoding also in pTeX-compatible EUC/SJIS mode
git-svn-id: svn://tug.org/texlive/trunk@73271 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c')
-rw-r--r--Build/source/texk/web2c/Makefile.in78
-rw-r--r--Build/source/texk/web2c/euptexdir/COPYRIGHT4
-rw-r--r--Build/source/texk/web2c/euptexdir/ChangeLog9
-rw-r--r--Build/source/texk/web2c/euptexdir/am/euptex.am19
-rwxr-xr-xBuild/source/texk/web2c/euptexdir/euptex-widow.test32
-rw-r--r--Build/source/texk/web2c/euptexdir/tests/eup-jchwidow.log910
-rwxr-xr-xBuild/source/texk/web2c/euptexdir/upkcat.test18
-rw-r--r--Build/source/texk/web2c/ptexdir/COPYRIGHT2
-rw-r--r--Build/source/texk/web2c/ptexdir/ChangeLog10
-rw-r--r--Build/source/texk/web2c/ptexdir/am/ptex.am11
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/ptex-prntknj.test4
-rwxr-xr-xBuild/source/texk/web2c/ptexdir/ptex-widow.test38
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/p-jchwidow.log470
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/pknj-e.log2
-rw-r--r--Build/source/texk/web2c/ptexdir/tests/pknj-s.log2
-rw-r--r--Build/source/texk/web2c/uptexdir/COPYRIGHT2
-rw-r--r--Build/source/texk/web2c/uptexdir/COPYRIGHT.ja2
-rw-r--r--Build/source/texk/web2c/uptexdir/ChangeLog13
-rw-r--r--Build/source/texk/web2c/uptexdir/am/uptex.am9
-rw-r--r--Build/source/texk/web2c/uptexdir/kanji.c6
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/jchwidow.tex88
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/kcat.tex74
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/up-jchwidow.log817
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/upkcat-e.txt45
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/upkcat-s.txt53
-rw-r--r--Build/source/texk/web2c/uptexdir/tests/upkcat.txt18
-rwxr-xr-xBuild/source/texk/web2c/uptexdir/upkcat.test12
-rw-r--r--Build/source/texk/web2c/uptexdir/uptex-m.ch8
-rwxr-xr-xBuild/source/texk/web2c/uptexdir/uptex-widow.test32
29 files changed, 2705 insertions, 83 deletions
diff --git a/Build/source/texk/web2c/Makefile.in b/Build/source/texk/web2c/Makefile.in
index 75bf7443cbc..05fd556f6c5 100644
--- a/Build/source/texk/web2c/Makefile.in
+++ b/Build/source/texk/web2c/Makefile.in
@@ -3283,12 +3283,13 @@ EXTRA_DIST = PROJECTS cftests cpascal.h help.h w2c/config.h \
ptexdir/tests/pknj-e.log ptexdir/tests/p-pknj-sa.typ \
ptexdir/tests/p-pknj-ea.typ ptexdir/tests/ucs.tex \
ptexdir/tests/ucs-s.log ptexdir/tests/ucs-e.log \
- $(uptex_web_srcs) $(uptex_ch_srcs) uptexdir/uptex.defines \
- uptexdir/upbibtex.ch uptexdir/updvitype.ch \
- uptexdir/uppltotf.ch uptexdir/uptftopl.ch uptexdir/COPYRIGHT \
- uptexdir/COPYRIGHT.ja uptexdir/ChangeLog $(uptex_tests) \
- $(upweb_tests) tests/enc-u.bbl tests/enc-eu.bbl \
- tests/enc-su.bbl tests/enc-uu.bbl uptexdir/tests/uptex3.tex \
+ ptexdir/tests/p-jchwidow.log $(uptex_web_srcs) \
+ $(uptex_ch_srcs) uptexdir/uptex.defines uptexdir/upbibtex.ch \
+ uptexdir/updvitype.ch uptexdir/uppltotf.ch \
+ uptexdir/uptftopl.ch uptexdir/COPYRIGHT uptexdir/COPYRIGHT.ja \
+ uptexdir/ChangeLog $(uptex_tests) $(upweb_tests) \
+ tests/enc-u.bbl tests/enc-eu.bbl tests/enc-su.bbl \
+ tests/enc-uu.bbl uptexdir/tests/uptex3.tex \
uptexdir/tests/uptex3.dvi uptexdir/tests/uptex4.tex \
uptexdir/tests/uptex4.dvi uptexdir/tests/uptex5.tex \
uptexdir/tests/uptex5.dvi uptexdir/tests/uptex3a.typ \
@@ -3307,6 +3308,7 @@ EXTRA_DIST = PROJECTS cftests cpascal.h help.h w2c/config.h \
uptexdir/tests/lmr1.tex uptexdir/tests/up-lmr1.log \
uptexdir/tests/lmr2.tex uptexdir/tests/up-lmr2.log \
uptexdir/tests/noto1.tex uptexdir/tests/up-noto1.log \
+ uptexdir/tests/jchwidow.tex uptexdir/tests/up-jchwidow.log \
$(euptex_web_srcs) $(euptex_ch_srcs) euptexdir/euptex.defines \
euptexdir/COPYRIGHT euptexdir/COPYRIGHT.jis \
euptexdir/ChangeLog euptexdir/EUPTEX.txt $(euptex_tests) \
@@ -3336,22 +3338,23 @@ EXTRA_DIST = PROJECTS cftests cpascal.h help.h w2c/config.h \
euptexdir/tests/eup-ofm.log euptexdir/tests/eup-prim.tex \
euptexdir/tests/eup-prim.log euptexdir/tests/ucs.tex \
euptexdir/tests/ucs-s.log euptexdir/tests/ucs-e.log \
- euptexdir/tests/ucs-u.log hitexdir/ChangeLog $(hitex_web) \
- $(hitex_tests) hitexdir/tests/hello.tex \
- hitexdir/tests/rule.tex pdftexdir/regex/COPYING.LIB \
- pdftexdir/regex/README $(pdftex_ch_srcs) \
- pdftexdir/pdftex.defines pdftexdir/ChangeLog pdftexdir/NEWS \
- pdftexdir/README pdftexdir/change-files.txt $(pdftex_tests) \
- tests/wprob.tex pdftexdir/tests/pdfimage.tex tests/1-4.jpg \
- tests/B.pdf tests/basic.tex tests/lily-ledger-broken.png \
- tests/expanded.tex tests/expanded.txt tests/cnfline.tex \
- tests/partoken-ok.tex tests/partoken-xfail.tex \
- $(ttf2afm_tests) pdftexdir/tests/postV3.afm \
- pdftexdir/tests/postV3.ttf pdftexdir/tests/postV7.afm \
- pdftexdir/tests/postV7.ttf $(pdftosrc_tests) \
- pdftexdir/tests/test-13.pdf pdftexdir/tests/test-13.xref \
- pdftexdir/tests/test-15.pdf pdftexdir/tests/test-15.xref \
- $(libluasocket_sources) luatexdir/luasocket/src/ftp_lua.c \
+ euptexdir/tests/ucs-u.log euptexdir/tests/eup-jchwidow.log \
+ hitexdir/ChangeLog $(hitex_web) $(hitex_tests) \
+ hitexdir/tests/hello.tex hitexdir/tests/rule.tex \
+ pdftexdir/regex/COPYING.LIB pdftexdir/regex/README \
+ $(pdftex_ch_srcs) pdftexdir/pdftex.defines pdftexdir/ChangeLog \
+ pdftexdir/NEWS pdftexdir/README pdftexdir/change-files.txt \
+ $(pdftex_tests) tests/wprob.tex pdftexdir/tests/pdfimage.tex \
+ tests/1-4.jpg tests/B.pdf tests/basic.tex \
+ tests/lily-ledger-broken.png tests/expanded.tex \
+ tests/expanded.txt tests/cnfline.tex tests/partoken-ok.tex \
+ tests/partoken-xfail.tex $(ttf2afm_tests) \
+ pdftexdir/tests/postV3.afm pdftexdir/tests/postV3.ttf \
+ pdftexdir/tests/postV7.afm pdftexdir/tests/postV7.ttf \
+ $(pdftosrc_tests) pdftexdir/tests/test-13.pdf \
+ pdftexdir/tests/test-13.xref pdftexdir/tests/test-15.pdf \
+ pdftexdir/tests/test-15.xref $(libluasocket_sources) \
+ luatexdir/luasocket/src/ftp_lua.c \
luatexdir/luasocket/src/headers_lua.c \
luatexdir/luasocket/src/http_lua.c \
luatexdir/luasocket/src/ltn12_lua.c \
@@ -3652,7 +3655,7 @@ DISTCLEANFILES = CXXLD.sh tangle.c tangle.h tangle.p tangle-web2c \
ptests/xcmr10.pl ptests/xsample*.typ ptests/x*min10.* \
ptests/xchcode*.* ptests/xskipjfmp.* ptrip.diffs p-ctrlsym.log \
p-ctrlsym.out p-ctrlsym.tex p-endline*.* p-jctrlsym*.* \
- p-chartoken.* p-lineend.* p-pknj-*.* p-ucs*.* \
+ p-chartoken.* p-lineend.* p-pknj-*.* p-ucs*.* p-jchwidow*.* \
$(nodist_uptex_SOURCES) uptex.web uptex.ch uptex-web2c uptex.p \
uptex.pool uptex-tangle $(upweb_programs:=.c) \
$(upweb_programs:=.h) $(upweb_programs:=.p) \
@@ -3665,13 +3668,14 @@ DISTCLEANFILES = CXXLD.sh tangle.c tangle.h tangle.p tangle-web2c \
uptests/x*min10.* uptests/xchcode*.* uptests/xtestnewu*.* \
uptests/xuparse.* uptests/yuparse.* uptests/ygkhuge*.* \
uptests/ygk256*.* uptests/xskipjfmp.* uptrip.diffs up-ofm.* \
- up-prim.* up-lmr*.* up-noto*.* $(nodist_euptex_SOURCES) \
- euptex.web euptex.ch euptex-web2c euptex.p euptex.pool \
- euptex-tangle euptrip.diffs pdfprimitive-euptex.* \
- eup-ctrlsym.log eup-ctrlsym.out eup-ctrlsym.tex eup-endline*.* \
- eup-jctrlsym*.* eup-pknj-*.* eup-postpena*.* eup-free_*.* \
- eup-inhibitglue*.* eup-kinsoku*.* eup-ofm.* eup-prim.* \
- eup-ucs*.* $(nodist_hitex_SOURCES) $(nodist_hishrink_SOURCES) \
+ up-prim.* up-lmr*.* up-noto*.* up-jchwidow.* \
+ $(nodist_euptex_SOURCES) euptex.web euptex.ch euptex-web2c \
+ euptex.p euptex.pool euptex-tangle euptrip.diffs \
+ pdfprimitive-euptex.* eup-ctrlsym.log eup-ctrlsym.out \
+ eup-ctrlsym.tex eup-endline*.* eup-jctrlsym*.* eup-pknj-*.* \
+ eup-postpena*.* eup-free_*.* eup-inhibitglue*.* eup-kinsoku*.* \
+ eup-ofm.* eup-prim.* eup-ucs*.* eup-jchwidow.* \
+ $(nodist_hitex_SOURCES) $(nodist_hishrink_SOURCES) \
$(nodist_histretch_SOURCES) hiformat-tangle hitex-tangle \
hello.log rule.log $(nodist_pdftex_SOURCES) pdftex-final.ch \
pdftex-web2c pdftex.p pdftex.pool pdftex-tangle pwprob.log \
@@ -4496,7 +4500,7 @@ ptex_tests = \
ptexdir/wcfname.test \
ptexdir/ptex-ctrlsym.test \
ptexdir/ptex-prntknj.test \
- ptexdir/ptex-ucs.test
+ ptexdir/ptex-ucs.test ptexdir/ptex-widow.test
uptex_cppflags = $(PTEXENC_INCLUDES) $(AM_CPPFLAGS) $(ZLIB_INCLUDES)
uptex_ldadd = libukanji.a $(pproglib) $(PTEXENC_LIBS) $(LDADD) $(ZLIB_LIBS)
@@ -4561,7 +4565,8 @@ uptex_tests = \
uptexdir/upkcat.test \
uptexdir/wcfname.test uptexdir/wcfname0.test \
uptexdir/uptex-ofm.test uptexdir/uptex-prim.test \
- uptexdir/uptex-lmr.test uptexdir/uptex-noto.test
+ uptexdir/uptex-lmr.test uptexdir/uptex-noto.test \
+ uptexdir/uptex-widow.test
# uppPLtoTF/upTFtoPL
upweb_tests = uptexdir/upbibtex.test uptexdir/updvitype.test \
@@ -4629,7 +4634,7 @@ euptex_tests = \
euptexdir/euptex-prntknj.test \
euptexdir/euptex-kinsoku.test \
euptexdir/euptex-ofm.test euptexdir/euptex-prim.test \
- euptexdir/euptex-ucs.test
+ euptexdir/euptex-ucs.test euptexdir/euptex-widow.test
# At the moment, these are the only man pages handled in the
@@ -22066,7 +22071,7 @@ ptex.ch: tie$(EXEEXT) ptex.web $(ptex_ch_srcs)
ptexdir/ptriptest.log: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
ptexdir/pver.log ptexdir/wcfname.log \
ptexdir/ptex-ctrlsym.log ptexdir/ptex-prntknj.log \
- ptexdir/ptex-ucs.log: ptex$(EXEEXT)
+ ptexdir/ptex-ucs.log ptexdir/ptex-widow.log: ptex$(EXEEXT)
ptrip.diffs: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
$(triptrap_diffs) $@
@@ -22140,7 +22145,8 @@ uptexdir/uptriptest.log uptexdir/ptriptest.log: \
uptexdir/upver.log uptexdir/upkcat.log \
uptexdir/wcfname.log uptexdir/wcfname0.log \
uptexdir/uptex-ofm.log uptexdir/uptex-prim.log \
- uptexdir/uptex-lmr.log uptexdir/uptex-noto.log: uptex$(EXEEXT)
+ uptexdir/uptex-lmr.log uptexdir/uptex-noto.log \
+ uptexdir/uptex-widow.log: uptex$(EXEEXT)
uptexdir/upbibtex.log: upbibtex$(EXEEXT)
uptexdir/updvitype.log: updvitype$(EXEEXT)
uptexdir/uppltotf.log: uppltotf$(EXEEXT)
@@ -22191,7 +22197,7 @@ euptexdir/eupver.log euptexdir/upkcat.log \
euptexdir/euptex-ctrlsym.log euptexdir/euptex-prntknj.log \
euptexdir/euptex-kinsoku.log \
euptexdir/euptex-ofm.log euptexdir/euptex-prim.log \
- euptexdir/euptex-ucs.log: euptex$(EXEEXT)
+ euptexdir/euptex-ucs.log euptexdir/euptex-widow.log: euptex$(EXEEXT)
euptrip.diffs: euptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
$(triptrap_diffs) $@
diff --git a/Build/source/texk/web2c/euptexdir/COPYRIGHT b/Build/source/texk/web2c/euptexdir/COPYRIGHT
index 88d900edbde..3d1d815f99f 100644
--- a/Build/source/texk/web2c/euptexdir/COPYRIGHT
+++ b/Build/source/texk/web2c/euptexdir/COPYRIGHT
@@ -1,6 +1,6 @@
Copyright (C) 2009 ASCII MEDIA WORKS.
-Copyright (C) 2007-2024 Takuji Tanaka
-Copyright (C) 2010-2024 Japanese TeX Development Community
+Copyright (C) 2007-2025 Takuji Tanaka
+Copyright (C) 2010-2025 Japanese TeX Development Community
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/Build/source/texk/web2c/euptexdir/ChangeLog b/Build/source/texk/web2c/euptexdir/ChangeLog
index cf904b7dbd1..684601c9fd7 100644
--- a/Build/source/texk/web2c/euptexdir/ChangeLog
+++ b/Build/source/texk/web2c/euptexdir/ChangeLog
@@ -1,3 +1,12 @@
+2025-01-02 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * upkcat.test: Update tests.
+ * euptex-widow.test, tests/eup-jchwidow.log,
+ am/euptex.am: Add new tests for widow penalty originally
+ written by Kitagawa-san.
+ https://github.com/texjporg/tex-jp-build/issues/103
+ * COPYRIGHT: copyright year.
+
2024-10-20 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
* eptex.ech, etex.ch{0,1}, fam256,ch,
diff --git a/Build/source/texk/web2c/euptexdir/am/euptex.am b/Build/source/texk/web2c/euptexdir/am/euptex.am
index f03d4270d2e..f9579d78d3b 100644
--- a/Build/source/texk/web2c/euptexdir/am/euptex.am
+++ b/Build/source/texk/web2c/euptexdir/am/euptex.am
@@ -105,7 +105,7 @@ euptex_tests = \
euptexdir/euptex-prntknj.test \
euptexdir/euptex-kinsoku.test \
euptexdir/euptex-ofm.test euptexdir/euptex-prim.test \
- euptexdir/euptex-ucs.test
+ euptexdir/euptex-ucs.test euptexdir/euptex-widow.test
euptexdir/euptriptest.log euptexdir/eptriptest.log: \
euptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
euptexdir/pdfprimitive.log: euptex$(EXEEXT)
@@ -114,7 +114,7 @@ euptexdir/eupver.log euptexdir/upkcat.log \
euptexdir/euptex-ctrlsym.log euptexdir/euptex-prntknj.log \
euptexdir/euptex-kinsoku.log \
euptexdir/euptex-ofm.log euptexdir/euptex-prim.log \
- euptexdir/euptex-ucs.log: euptex$(EXEEXT)
+ euptexdir/euptex-ucs.log euptexdir/euptex-widow.log: euptex$(EXEEXT)
EXTRA_DIST += $(euptex_tests)
@@ -140,20 +140,20 @@ EXTRA_DIST += \
euptexdir/tests/pdfprimitive-euptex.log
DISTCLEANFILES += pdfprimitive-euptex.*
-## euptex-ctrlsym.test
+## euptexdir/euptex-ctrlsym.test
EXTRA_DIST += euptexdir/tests/ctrlsym.tex euptexdir/tests/ctrlsym.log \
euptexdir/tests/endlinechar.tex euptexdir/tests/endline.log \
euptexdir/tests/control-symbol.tex euptexdir/tests/jctrlsym.log \
euptexdir/tests/eup-endlinea.typ euptexdir/tests/eup-jctrlsyma.typ
DISTCLEANFILES += eup-ctrlsym.log eup-ctrlsym.out eup-ctrlsym.tex \
eup-endline*.* eup-jctrlsym*.*
-## euptex-prntknj.test
+## euptexdir/euptex-prntknj.test
EXTRA_DIST += euptexdir/tests/printkanji.tex euptexdir/tests/pknj-s.log \
euptexdir/tests/pknj-e.log euptexdir/tests/pknj-u.log \
euptexdir/tests/eup-pknj-sa.typ euptexdir/tests/eup-pknj-ea.typ \
euptexdir/tests/eup-pknj-ua.typ
DISTCLEANFILES += eup-pknj-*.*
-## euptex-kinsoku.test
+## euptexdir/euptex-kinsoku.test
EXTRA_DIST += euptexdir/tests/postpena.tex euptexdir/tests/postpena.log \
euptexdir/tests/free_ixsp.tex euptexdir/tests/free_ixsp.log \
euptexdir/tests/free_pena.tex euptexdir/tests/free_pena.log \
@@ -161,16 +161,19 @@ EXTRA_DIST += euptexdir/tests/postpena.tex euptexdir/tests/postpena.log \
euptexdir/tests/kinsoku-table.tex euptexdir/tests/kinsoku-table.log \
euptexdir/tests/kinsoku-search.tex euptexdir/tests/kinsoku-search.log
DISTCLEANFILES += eup-postpena*.* eup-free_*.* eup-inhibitglue*.* eup-kinsoku*.*
-## euptex-ofm.test
+## euptexdir/euptex-ofm.test
EXTRA_DIST += euptexdir/tests/eup-ofm.tex euptexdir/tests/eup-ofm.log
DISTCLEANFILES += eup-ofm.*
-## euptex-prim.test
+## euptexdir/euptex-prim.test
EXTRA_DIST += euptexdir/tests/eup-prim.tex euptexdir/tests/eup-prim.log
DISTCLEANFILES += eup-prim.*
-## euptex-ucs.test
+## euptexdir/euptex-ucs.test
EXTRA_DIST += euptexdir/tests/ucs.tex euptexdir/tests/ucs-s.log \
euptexdir/tests/ucs-e.log euptexdir/tests/ucs-u.log
DISTCLEANFILES += eup-ucs*.*
+## euptexdir/euptex-widow.test
+EXTRA_DIST += euptexdir/tests/eup-jchwidow.log
+DISTCLEANFILES += eup-jchwidow.*
euptrip.diffs: euptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
$(triptrap_diffs) $@
diff --git a/Build/source/texk/web2c/euptexdir/euptex-widow.test b/Build/source/texk/web2c/euptexdir/euptex-widow.test
new file mode 100755
index 00000000000..1faa53683db
--- /dev/null
+++ b/Build/source/texk/web2c/euptexdir/euptex-widow.test
@@ -0,0 +1,32 @@
+#! /bin/sh -vx
+# Copyright 2025 Japanese TeX Development Community <issue@texjp.org>
+# You may freely use, modify and/or distribute this file.
+
+BinDir=${BinDir:-.}
+ExeExt=${ExeExt:-}
+_euptex=$BinDir/euptex$ExeExt
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+TEXMFCNF=$srcdir/../kpathsea;export TEXMFCNF
+TEXINPUTS=".;$srcdir/tests"; export TEXINPUTS
+TEXFONTS=".;$srcdir//tests"; export TEXFONTS
+TEXFORMATS=.; export TEXFORMATS
+
+# get same filename in log
+rm -f eup-jchwidow.*
+$LN_S $srcdir/uptexdir/tests/jchwidow.tex ./eup-jchwidow.tex
+
+if test ! -f ./eup-basic.tex; then
+ cp $srcdir/tests/dump-basic.tex ./eup-basic.tex
+fi
+if test ! -f ./eup-basic.fmt; then
+ $_euptex -ini -etex eup-basic || exit 1
+fi
+
+$_euptex -fmt=eup-basic -interaction=batchmode eup-jchwidow || :
+
+sed 1d eup-jchwidow.log >eup-jchwidow.out
+
+diff $srcdir/euptexdir/tests/eup-jchwidow.log eup-jchwidow.out || exit 3
+
diff --git a/Build/source/texk/web2c/euptexdir/tests/eup-jchwidow.log b/Build/source/texk/web2c/euptexdir/tests/eup-jchwidow.log
new file mode 100644
index 00000000000..97e03168843
--- /dev/null
+++ b/Build/source/texk/web2c/euptexdir/tests/eup-jchwidow.log
@@ -0,0 +1,910 @@
+entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**eup-jchwidow
+(./eup-jchwidow.tex TEST
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 378.1154fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\jpy す
+..\glue(refer from jfm) 4.58203 minus 2.291
+..\jpy 「
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.19 \TEST{す{\kcatcode`す=18 す}「。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.20 \TEST{\CR。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.22 \TEST{\Ucharcat`す 16。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.23 \TEST{\Ucharcat`す 17。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.24 \TEST{\Ucharcat`す 18。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.25 \TEST{\Ucharcat`す 19。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.28 \TEST{す。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.29 \TEST{す\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.31 \TEST{す\kchar\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.34 \TEST{\char\kuten"0419。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.35 \TEST{\char\kuten"0419\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.37 \TEST{\char\kuten"0419\kchar\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.40 \TEST{\KR。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.41 \TEST{\kchar\kuten"0419。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.42 \TEST{\kchar\kuten"0419\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.43 \TEST{\kchar\kuten"0419\kchar\kuten"0103}
+
+
+KCHAR"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.50 \TEST{い\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.51 \TEST{\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.52 \TEST{\relax\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.53 \TEST{\vrule\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.54 \TEST{b\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.55 \TEST{い\S。}
+
+
+CHAR"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.60 \TEST{い\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.61 \TEST{\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.62 \TEST{\relax\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.63 \TEST{\vrule\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.64 \TEST{b\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.65 \TEST{い\S。}
+
+
+KCHARDEF"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.70 \TEST{い\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.71 \TEST{\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.72 \TEST{\relax\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.73 \TEST{\vrule\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.74 \TEST{b\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.75 \TEST{い\S。}
+
+
+CHARDEF"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.80 \TEST{い\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.81 \TEST{\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.82 \TEST{\relax\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.83 \TEST{\vrule\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.84 \TEST{b\CA 。}
+
+
+ )
+No pages of output.
diff --git a/Build/source/texk/web2c/euptexdir/upkcat.test b/Build/source/texk/web2c/euptexdir/upkcat.test
index 602c1e5b422..3d229136606 100755
--- a/Build/source/texk/web2c/euptexdir/upkcat.test
+++ b/Build/source/texk/web2c/euptexdir/upkcat.test
@@ -1,6 +1,6 @@
#! /bin/sh -vx
# $Id$
-# Copyright 2022 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+# Copyright 2022-2025 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
# You may freely use, modify and/or distribute this file.
BinDir=${BinDir:-.}
@@ -12,8 +12,18 @@ LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF
TEXINPUTS="$srcdir/uptexdir/tests;."; export TEXINPUTS
-$_euptex -ini -etex -interaction batchmode -jobname upkcat-log kcat.tex || exit 1
-grep '::' upkcat-log.log > upkcat-log_ed.log \
- && diff upkcat-log_ed.log $srcdir/uptexdir/tests/upkcat.txt || exit 2
+rm -f eupkcat*log*.log
+
+$_euptex -ini -etex -interaction batchmode -jobname eupkcat-log kcat.tex || exit 1
+grep '::' eupkcat-log.log > eupkcat-log_ed.log \
+ && diff eupkcat-log_ed.log $srcdir/uptexdir/tests/upkcat.txt || exit 2
+
+$_euptex -ini -etex -interaction batchmode -jobname eupkcat-e-log -kanji-internal=euc kcat.tex || exit 3
+grep '::' eupkcat-e-log.log > eupkcat-e-log_ed.log \
+ && diff eupkcat-e-log_ed.log $srcdir/uptexdir/tests/upkcat-e.txt || exit 4
+
+$_euptex -ini -etex -interaction batchmode -jobname eupkcat-s-log -kanji-internal=sjis kcat.tex || exit 5
+grep '::' eupkcat-s-log.log > eupkcat-s-log_ed.log \
+ && diff eupkcat-s-log_ed.log $srcdir/uptexdir/tests/upkcat-s.txt || exit 6
exit 0
diff --git a/Build/source/texk/web2c/ptexdir/COPYRIGHT b/Build/source/texk/web2c/ptexdir/COPYRIGHT
index 0ebd3f3a08a..3e0c20b5e4f 100644
--- a/Build/source/texk/web2c/ptexdir/COPYRIGHT
+++ b/Build/source/texk/web2c/ptexdir/COPYRIGHT
@@ -1,5 +1,5 @@
Copyright (C) 2009 ASCII MEDIA WORKS.
-Copyright (C) 2010-2023 Japanese TeX Development Community
+Copyright (C) 2010-2025 Japanese TeX Development Community
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/Build/source/texk/web2c/ptexdir/ChangeLog b/Build/source/texk/web2c/ptexdir/ChangeLog
index 92cce7d5f48..fcfa2a83cc1 100644
--- a/Build/source/texk/web2c/ptexdir/ChangeLog
+++ b/Build/source/texk/web2c/ptexdir/ChangeLog
@@ -1,3 +1,13 @@
+2025-01-02 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * ptex-prntknj.test, tests/pknj-{e,s}.log:
+ Update tests.
+ * ptex-widow.test, tests/p-jchwidow.log,
+ am/ptex.am: Add new tests for widow penalty originally
+ written by Kitagawa-san.
+ https://github.com/texjporg/tex-jp-build/issues/103
+ * COPYRIGHT: copyright year.
+
2024-09-22 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
* ptex-base.ch, ptex_version.h: Version p4.1.2.
diff --git a/Build/source/texk/web2c/ptexdir/am/ptex.am b/Build/source/texk/web2c/ptexdir/am/ptex.am
index caf30c2f986..feca2da4a9d 100644
--- a/Build/source/texk/web2c/ptexdir/am/ptex.am
+++ b/Build/source/texk/web2c/ptexdir/am/ptex.am
@@ -110,11 +110,11 @@ ptex_tests = \
ptexdir/wcfname.test \
ptexdir/ptex-ctrlsym.test \
ptexdir/ptex-prntknj.test \
- ptexdir/ptex-ucs.test
+ ptexdir/ptex-ucs.test ptexdir/ptex-widow.test
ptexdir/ptriptest.log: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
ptexdir/pver.log ptexdir/wcfname.log \
ptexdir/ptex-ctrlsym.log ptexdir/ptex-prntknj.log \
- ptexdir/ptex-ucs.log: ptex$(EXEEXT)
+ ptexdir/ptex-ucs.log ptexdir/ptex-widow.log: ptex$(EXEEXT)
EXTRA_DIST += $(ptex_tests) $(pweb_tests)
DISTCLEANFILES += $(pweb_programs:=.c) $(pweb_programs:=.h) \
@@ -182,15 +182,18 @@ EXTRA_DIST += ptexdir/tests/ctrlsym.tex ptexdir/tests/ctrlsym.log \
ptexdir/tests/ptexlineendmode.tex ptexdir/tests/p-lineenda.typ
DISTCLEANFILES += p-ctrlsym.log p-ctrlsym.out p-ctrlsym.tex \
p-endline*.* p-jctrlsym*.* p-chartoken.* p-lineend.*
-## ptex-prntknj.test
+## ptexdir/ptex-prntknj.test
EXTRA_DIST += ptexdir/tests/printkanji.tex \
ptexdir/tests/pknj-s.log ptexdir/tests/pknj-e.log \
ptexdir/tests/p-pknj-sa.typ ptexdir/tests/p-pknj-ea.typ
DISTCLEANFILES += p-pknj-*.*
-## ptex-ucs.test
+## ptexdir/ptex-ucs.test
EXTRA_DIST += ptexdir/tests/ucs.tex ptexdir/tests/ucs-s.log \
ptexdir/tests/ucs-e.log
DISTCLEANFILES += p-ucs*.*
+## ptexdir/ptex-widow.test
+EXTRA_DIST += ptexdir/tests/p-jchwidow.log
+DISTCLEANFILES += p-jchwidow*.*
ptrip.diffs: ptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
$(triptrap_diffs) $@
diff --git a/Build/source/texk/web2c/ptexdir/ptex-prntknj.test b/Build/source/texk/web2c/ptexdir/ptex-prntknj.test
index 0f2c50f96fd..2bbbb3df7b7 100755
--- a/Build/source/texk/web2c/ptexdir/ptex-prntknj.test
+++ b/Build/source/texk/web2c/ptexdir/ptex-prntknj.test
@@ -31,8 +31,8 @@ fi
$_ptex -fmt=p-basic-sjis -kanji-internal=sjis -jobname=p-pknj-s -interaction=batchmode printkanji || :
$_ptex -fmt=p-basic-euc -kanji-internal=euc -jobname=p-pknj-e -interaction=batchmode printkanji || :
-sed 1d p-pknj-s.log >p-pknj-s.out
-sed 1d p-pknj-e.log >p-pknj-e.out
+sed "1d;s/characters out of 621947.$/characters out of 621947X/" p-pknj-s.log >p-pknj-s.out
+sed "1d;s/characters out of 621947.$/characters out of 621947X/" p-pknj-e.log >p-pknj-e.out
diff $srcdir/ptexdir/tests/pknj-s.log p-pknj-s.out || exit 10
diff $srcdir/ptexdir/tests/pknj-e.log p-pknj-e.out || exit 11
diff --git a/Build/source/texk/web2c/ptexdir/ptex-widow.test b/Build/source/texk/web2c/ptexdir/ptex-widow.test
new file mode 100755
index 00000000000..f1b5f7a8889
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/ptex-widow.test
@@ -0,0 +1,38 @@
+#! /bin/sh -vx
+# Copyright 2025 Japanese TeX Development Community <issue@texjp.org>
+# You may freely use, modify and/or distribute this file.
+
+BinDir=${BinDir:-.}
+ExeExt=${ExeExt:-}
+_ptex=$BinDir/ptex$ExeExt
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+TEXMFCNF=$srcdir/../kpathsea;export TEXMFCNF
+TEXINPUTS=".;$srcdir/tests"; export TEXINPUTS
+TEXFONTS=".;$srcdir//tests"; export TEXFONTS
+TEXFORMATS=.; export TEXFORMATS
+
+# get same filename in log
+rm -f p-jchwidow*.*
+$LN_S $srcdir/uptexdir/tests/jchwidow.tex ./p-jchwidow.tex
+
+if test ! -f ./p-basic.tex; then
+ cp $srcdir/tests/dump-basic.tex ./p-basic.tex
+fi
+if test ! -f ./p-basic-sjis.fmt; then
+ $_ptex -ini -kanji-internal=sjis -jobname=p-basic-sjis p-basic || exit 1
+fi
+if test ! -f ./p-basic-euc.fmt; then
+ $_ptex -ini -kanji-internal=euc -jobname=p-basic-euc p-basic || exit 2
+fi
+
+$_ptex -fmt=p-basic-sjis -kanji-internal=sjis -jobname=p-jchwidow-s -interaction=batchmode p-jchwidow || :
+$_ptex -fmt=p-basic-euc -kanji-internal=euc -jobname=p-jchwidow-e -interaction=batchmode p-jchwidow || :
+
+sed 1d p-jchwidow-s.log >p-jchwidow-s.out
+sed 1d p-jchwidow-e.log >p-jchwidow-e.out
+
+diff $srcdir/ptexdir/tests/p-jchwidow.log p-jchwidow-s.out || exit 10
+diff $srcdir/ptexdir/tests/p-jchwidow.log p-jchwidow-e.out || exit 11
+
diff --git a/Build/source/texk/web2c/ptexdir/tests/p-jchwidow.log b/Build/source/texk/web2c/ptexdir/tests/p-jchwidow.log
new file mode 100644
index 00000000000..b7c9fa40dde
--- /dev/null
+++ b/Build/source/texk/web2c/ptexdir/tests/p-jchwidow.log
@@ -0,0 +1,470 @@
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**p-jchwidow
+(./p-jchwidow.tex TEST
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 378.1154fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\jpy す
+..\glue(refer from jfm) 4.58203 minus 2.291
+..\jpy 「
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.19 \TEST{す{\kcatcode`す=18 す}「。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.20 \TEST{\CR。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.28 \TEST{す。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.29 \TEST{す\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.34 \TEST{\char\kuten"0419。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.35 \TEST{\char\kuten"0419\char\kuten"0103}
+
+
+! Invalid code (15), should be in the range 16..18.
+l.46 {\kcatcode`α=15
+
+I'm going to use 16 instead of that illegal code value.
+
+CHAR"3B1, kcatcode=15
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.60 \TEST{い\char"03B1。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.10971fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.60 \TEST{い\char"03B1。}
+
+
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.61 \TEST{\char"03B1。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.73187fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.61 \TEST{\char"03B1。}
+
+
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.62 \TEST{\relax\char"03B1。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.73187fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.62 \TEST{\relax\char"03B1。}
+
+
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.63 \TEST{\vrule\char"03B1。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.33188fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.63 \TEST{\vrule\char"03B1。}
+
+
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.64 \TEST{b\char"03B1。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 395.1763fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.64 \TEST{b\char"03B1。}
+
+
+! Bad character code (945).
+<to be read again>
+ 。\BAD.
+\TEST ...kens \undefined \else \scantokens \fi {#1
+ }}\showboxbreadth 10000\sh...
+l.65 \TEST{い\S。}
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.10971fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.65 \TEST{い\S。}
+
+
+CHARDEF"3B1, kcatcode=15
+! Bad character code (945).
+l.79 \chardef\CA="3B1
+
+A character number must be between 0 and 255, or KANJI code.
+I changed this one to zero.
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.10971fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.80 \TEST{い\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.73187fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.81 \TEST{\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.73187fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.82 \TEST{\relax\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 400.33188fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.83 \TEST{\vrule\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 395.1763fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\cmr ^^@
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.84 \TEST{b\CA 。}
+
+
+ )
+No pages of output.
diff --git a/Build/source/texk/web2c/ptexdir/tests/pknj-e.log b/Build/source/texk/web2c/ptexdir/tests/pknj-e.log
index 36de6fe134f..e86ecb65be0 100644
--- a/Build/source/texk/web2c/ptexdir/tests/pknj-e.log
+++ b/Build/source/texk/web2c/ptexdir/tests/pknj-e.log
@@ -213,7 +213,7 @@ Memory usage before: 1270&5512; after: 118&5077; still untouched: 4992459
)
Here is how much of TeX's memory you used:
25 strings out of 497935
- 137 string characters out of 6219477
+ 137 string characters out of 621947X
7541 words of memory out of 5000000
969 multiletter control sequences out of 15000+600000
3271 words of font info for 2 fonts, out of 8000000 for 9000
diff --git a/Build/source/texk/web2c/ptexdir/tests/pknj-s.log b/Build/source/texk/web2c/ptexdir/tests/pknj-s.log
index 1ef300b59d7..63272705688 100644
--- a/Build/source/texk/web2c/ptexdir/tests/pknj-s.log
+++ b/Build/source/texk/web2c/ptexdir/tests/pknj-s.log
@@ -213,7 +213,7 @@ Memory usage before: 1274&5515; after: 118&5078; still untouched: 4992456
)
Here is how much of TeX's memory you used:
24 strings out of 497935
- 135 string characters out of 6219474
+ 135 string characters out of 621947X
7544 words of memory out of 5000000
968 multiletter control sequences out of 15000+600000
3271 words of font info for 2 fonts, out of 8000000 for 9000
diff --git a/Build/source/texk/web2c/uptexdir/COPYRIGHT b/Build/source/texk/web2c/uptexdir/COPYRIGHT
index 0e73780c566..8b0aa8c9ab6 100644
--- a/Build/source/texk/web2c/uptexdir/COPYRIGHT
+++ b/Build/source/texk/web2c/uptexdir/COPYRIGHT
@@ -1,5 +1,5 @@
Copyright (C) 2009 ASCII MEDIA WORKS.
-Copyright (C) 2007-2024 Takuji Tanaka
+Copyright (C) 2007-2025 Takuji Tanaka
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/Build/source/texk/web2c/uptexdir/COPYRIGHT.ja b/Build/source/texk/web2c/uptexdir/COPYRIGHT.ja
index c75986988ee..e995c3dfeb4 100644
--- a/Build/source/texk/web2c/uptexdir/COPYRIGHT.ja
+++ b/Build/source/texk/web2c/uptexdir/COPYRIGHT.ja
@@ -4,7 +4,7 @@
【著作権表示】
Copyright (C) 2009 ASCII MEDIA WORKS.
-Copyright (C) 2007-2024 Takuji Tanaka
+Copyright (C) 2007-2025 Takuji Tanaka
All rights reserved.
【契約条件】
diff --git a/Build/source/texk/web2c/uptexdir/ChangeLog b/Build/source/texk/web2c/uptexdir/ChangeLog
index dd12069fe3e..cfd05f8f494 100644
--- a/Build/source/texk/web2c/uptexdir/ChangeLog
+++ b/Build/source/texk/web2c/uptexdir/ChangeLog
@@ -1,3 +1,16 @@
+2025-01-02 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * kanji.c, uptex-m.ch:
+ Accept extended upTeX internal encoding also in internal
+ encoding EUC/SJIS (pTeX-compatible mode).
+ * upkcat.test, tests/kcat.tex, tests/upkcat{,-{e,s}}.txt:
+ Update tests.
+ * uptex-widow.test, tests/jchwidow.tex, tests/up-jchwidow.log,
+ am/uptex.am: Add new tests for widow penalty originally
+ written by Kitagawa-san.
+ https://github.com/texjporg/tex-jp-build/issues/103
+ * COPYRIGHT, COPYRIGHT.ja: copyright year.
+
2024-10-20 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
* uptex-m.ch, uptex.defines, kanji.{c,h}:
diff --git a/Build/source/texk/web2c/uptexdir/am/uptex.am b/Build/source/texk/web2c/uptexdir/am/uptex.am
index 4f56d6792a6..85070a6917c 100644
--- a/Build/source/texk/web2c/uptexdir/am/uptex.am
+++ b/Build/source/texk/web2c/uptexdir/am/uptex.am
@@ -173,13 +173,15 @@ uptex_tests = \
uptexdir/upkcat.test \
uptexdir/wcfname.test uptexdir/wcfname0.test \
uptexdir/uptex-ofm.test uptexdir/uptex-prim.test \
- uptexdir/uptex-lmr.test uptexdir/uptex-noto.test
+ uptexdir/uptex-lmr.test uptexdir/uptex-noto.test \
+ uptexdir/uptex-widow.test
uptexdir/uptriptest.log uptexdir/ptriptest.log: \
uptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
uptexdir/upver.log uptexdir/upkcat.log \
uptexdir/wcfname.log uptexdir/wcfname0.log \
uptexdir/uptex-ofm.log uptexdir/uptex-prim.log \
- uptexdir/uptex-lmr.log uptexdir/uptex-noto.log: uptex$(EXEEXT)
+ uptexdir/uptex-lmr.log uptexdir/uptex-noto.log \
+ uptexdir/uptex-widow.log: uptex$(EXEEXT)
upweb_tests = \
uptexdir/upbibtex.test \
uptexdir/updvitype.test \
@@ -283,6 +285,9 @@ DISTCLEANFILES += up-lmr*.*
## uptexdir/uptex-noto.test
EXTRA_DIST += uptexdir/tests/noto1.tex uptexdir/tests/up-noto1.log
DISTCLEANFILES += up-noto*.*
+## uptexdir/uptex-widow.test
+EXTRA_DIST += uptexdir/tests/jchwidow.tex uptexdir/tests/up-jchwidow.log
+DISTCLEANFILES += up-jchwidow.*
uptrip.diffs: uptex$(EXEEXT) dvitype$(EXEEXT) pltotf$(EXEEXT) tftopl$(EXEEXT)
$(triptrap_diffs) $@
diff --git a/Build/source/texk/web2c/uptexdir/kanji.c b/Build/source/texk/web2c/uptexdir/kanji.c
index bf453e24602..7dce7fe518a 100644
--- a/Build/source/texk/web2c/uptexdir/kanji.c
+++ b/Build/source/texk/web2c/uptexdir/kanji.c
@@ -9,6 +9,7 @@
#define IVS_CHAR_LIMIT 0x4400000
#define CJK_CHAR_LIMIT 0x1000000
#define LATIN_CHAR_LIMIT 0x2E80
+#define UCS_CHAR_LIMIT 0x110000
#define CJK_TOKEN_FLAG 0xFFFFFF
#define CAT_LEFT_BRACE 1
#define CAT_DELIM_NUM 15
@@ -48,7 +49,8 @@ boolean is_char_kanji(integer c)
if (is_internalUPTEX())
return ((c >= 0)&&(c<IVS_CHAR_LIMIT));
else
- return iskanji1(Hi(c)) && iskanji2(Lo(c));
+ return ((iskanji1(Hi(c)) && iskanji2(Lo(c))) ||
+ (UCS_CHAR_LIMIT<=c && c<IVS_CHAR_LIMIT));
}
boolean ismultiprn(integer c)
@@ -523,7 +525,7 @@ binary_search (long x, long *a, int left, int right)
integer kcatcodekey(integer c)
{
integer block;
- if (is_internalUPTEX()) {
+ if (is_internalUPTEX() || (UCS_CHAR_LIMIT<=c && c<IVS_CHAR_LIMIT)) {
block = binary_search((long)c, ucs_range, 0, NUCS_RANGE-1);
switch (block) {
case 0x01: /* Block : Latin-1 Supplement */
diff --git a/Build/source/texk/web2c/uptexdir/tests/jchwidow.tex b/Build/source/texk/web2c/uptexdir/tests/jchwidow.tex
new file mode 100644
index 00000000000..44ba3d3db72
--- /dev/null
+++ b/Build/source/texk/web2c/uptexdir/tests/jchwidow.tex
@@ -0,0 +1,88 @@
+%#!euptex
+\font\cmr=cmr10\cmr
+\ifx\kanjiskip\undefined\else
+ \ifnum\jis"2121="3000
+ \jfont\jpy=umin10 at 10pt\jpy
+ \else
+ \jfont\jpy=min10 at 10pt\jpy
+ \fi
+\fi
+
+\def\TEST#1{{\setbox0=\vbox{\noindent
+ ああああああ%
+ \ifx\scantokens\undefined\else\scantokens\fi
+ {#1}}\showboxbreadth10000\showboxdepth10000\tracingonline1\showbox0}}
+
+\message{TEST}
+
+\chardef\CR=`す
+\TEST{す{\kcatcode`す=18 す}「。}
+\TEST{\CR。}
+\ifx\Ucharcat\undefined\else
+\TEST{\Ucharcat`す 16。}
+\TEST{\Ucharcat`す 17。}
+\TEST{\Ucharcat`す 18。}
+\TEST{\Ucharcat`す 19。}
+\fi
+
+\TEST{す。}
+\TEST{す\char\kuten"0103}
+\ifx\kchar\undefined\else
+\TEST{す\kchar\kuten"0103}
+\fi
+
+\TEST{\char\kuten"0419。}
+\TEST{\char\kuten"0419\char\kuten"0103}
+\ifx\kchar\undefined\else
+\TEST{\char\kuten"0419\kchar\kuten"0103}
+
+\kchardef\KR=`す
+\TEST{\KR。}
+\TEST{\kchar\kuten"0419。}
+\TEST{\kchar\kuten"0419\char\kuten"0103}
+\TEST{\kchar\kuten"0419\kchar\kuten"0103}
+\fi
+
+{\kcatcode`α=15
+\ifx\kchar\undefined\else
+ \message{KCHAR"3B1, kcatcode=15}
+ \def\S{\kchar"03B1}
+ \TEST{い\kchar"03B1。}
+ \TEST{\kchar"03B1。}
+ \TEST{\relax\kchar"03B1。}
+ \TEST{\vrule\kchar"03B1。}
+ \TEST{b\kchar"03B1。}
+ \TEST{い\S。}
+\fi
+
+ \message{CHAR"3B1, kcatcode=15}
+ \def\S{\char"03B1}
+ \TEST{い\char"03B1。}
+ \TEST{\char"03B1。}
+ \TEST{\relax\char"03B1。}
+ \TEST{\vrule\char"03B1。}
+ \TEST{b\char"03B1。}
+ \TEST{い\S。}
+
+\ifx\kchardef\undefined\else
+ \message{KCHARDEF"3B1, kcatcode=15}
+ \kchardef\KA="3B1
+ \TEST{い\KA 。}
+ \TEST{\KA 。}
+ \TEST{\relax\KA 。}
+ \TEST{\vrule\KA 。}
+ \TEST{b\KA 。}
+ \TEST{い\S。}
+\fi
+
+ \message{CHARDEF"3B1, kcatcode=15}
+ \chardef\CA="3B1
+ \TEST{い\CA 。}
+ \TEST{\CA 。}
+ \TEST{\relax\CA 。}
+ \TEST{\vrule\CA 。}
+ \TEST{b\CA 。}
+}
+
+\bye
+
diff --git a/Build/source/texk/web2c/uptexdir/tests/kcat.tex b/Build/source/texk/web2c/uptexdir/tests/kcat.tex
index 6a3f930c2fa..9a3d4c94e66 100644
--- a/Build/source/texk/web2c/uptexdir/tests/kcat.tex
+++ b/Build/source/texk/web2c/uptexdir/tests/kcat.tex
@@ -16,6 +16,9 @@
% other_kchar=18 {cjk symbol codes}
% hangul=19 {hangul codes}
+\ifnum\jis"2121="3000
+% upTeX, UCS code
+
% separate in blocks
\write16{0x00C0::\the\kcatcode"00C0}% U+00C0 "Latin-1 Letters" in Latin-1 Supplement
\write16{§::\the\kcatcode"00A7}% U+00A7 Latin-1 Supplement
@@ -48,8 +51,6 @@
\write16{丽::\the\kcatcode"2F800}% U+2F800 CJK Compatibility Ideographs Supplement
\write16{𰀀::\the\kcatcode"30000}% U+30000 CJK Unified Ideographs Extension G
\write16{𱍐::\the\kcatcode"31350}% U+31350 CJK Unified Ideographs Extension H
-\write16{逸︀::\the\kcatcode"409038}% U+9038 U+FE00 Standardized Variation Sequence
-\write16{逸󠄀::\the\kcatcode"809038}% U+9038 U+E0100 Ideographic Variation Sequence
% kana=17 {hiragana, katakana}
\write16{あ::\the\kcatcode"3042}% U+3042 Hiragana
@@ -59,8 +60,6 @@
\write16{𛀀::\the\kcatcode"1B000}% U+1B000 Kana Supplement
\write16{𛄀::\the\kcatcode"1B100}% U+1B100 Kana Extended-A
\write16{𛅐::\the\kcatcode"1B150}% U+1B150 Small Kana Extension
-\write16{あ゙::\the\kcatcode"223042}% U+3042 U+3099 Kana with Voiced Sound Mark
-\write16{か゚::\the\kcatcode"24304B}% U+304B U+309A Kana with Semi-Voiced Sound Mark
% other_kchar=18 {cjk symbol codes}
\write16{※::\the\kcatcode"203B}% U+203B General Punctuation
@@ -75,9 +74,6 @@
\write16{〠::\the\kcatcode"3020}% U+3020 CJK Symbols and Punctuation
\write16{㋐::\the\kcatcode"32D0}% U+32D0 Enclosed CJK Letters and Months
\write16{㍿::\the\kcatcode"337F}% U+337F CJK Compatibility
-\write16{🇯🇵::\the\kcatcode"25EFF5}% U+1F1EF U+1F1F5 Emoji Flag Sequence
-\write16{👶🏽::\the\kcatcode"2BF476}% U+1F476 U+1F3FD Emoji with Modifier Fitzpatrick
-\write16{0x800030::\the\kcatcode"800030}% U+0030 U+FE0F U+20E3 Emoji Keycap Sequence
% hangul=19 {hangul codes}
\write16{ᄀ::\the\kcatcode"1100}% U+1100 Hangul Jamo
@@ -94,4 +90,68 @@
\write16{︀::\the\kcatcode"FE00}% U+FE00 Variation Selector
\write16{󠄀::\the\kcatcode"E0100}% U+E0100 Variation Selector
+\else
+% pTeX-compatible, EUC / Shift_JIS code, 1..94ku
+
+\write16{1区::\the\expandafter\kcatcode\jis"2121}
+\write16{2区::\the\expandafter\kcatcode\jis"2221}
+\write16{3区::\the\expandafter\kcatcode\jis"2321}
+\write16{4区::\the\expandafter\kcatcode\jis"2421}
+\write16{5区::\the\expandafter\kcatcode\jis"2521}
+\write16{6区::\the\expandafter\kcatcode\jis"2621}
+\write16{7区::\the\expandafter\kcatcode\jis"2721}
+\write16{8区::\the\expandafter\kcatcode\jis"2821}
+\write16{9区::\the\expandafter\kcatcode\jis"2921}
+\write16{10区::\the\expandafter\kcatcode\jis"2A21}
+\write16{11区::\the\expandafter\kcatcode\jis"2B21}
+\write16{12区::\the\expandafter\kcatcode\jis"2C21}
+\write16{13区::\the\expandafter\kcatcode\jis"2D21}
+\write16{14区::\the\expandafter\kcatcode\jis"2E21}
+\write16{15区::\the\expandafter\kcatcode\jis"2F21}
+\write16{16区::\the\expandafter\kcatcode\jis"3021}
+\write16{17区::\the\expandafter\kcatcode\jis"3121}
+\write16{18区::\the\expandafter\kcatcode\jis"3221}
+\write16{19区::\the\expandafter\kcatcode\jis"3321}
+\write16{20区::\the\expandafter\kcatcode\jis"3421}
+\write16{21区::\the\expandafter\kcatcode\jis"3521}
+\write16{22区::\the\expandafter\kcatcode\jis"3621}
+\write16{23区::\the\expandafter\kcatcode\jis"3721}
+\write16{24区::\the\expandafter\kcatcode\jis"3821}
+\write16{80区::\the\expandafter\kcatcode\jis"7021}
+\write16{81区::\the\expandafter\kcatcode\jis"7121}
+\write16{82区::\the\expandafter\kcatcode\jis"7221}
+\write16{83区::\the\expandafter\kcatcode\jis"7321}
+\write16{84区::\the\expandafter\kcatcode\jis"7421}
+\write16{90区::\the\expandafter\kcatcode\jis"7A21}
+\write16{91区::\the\expandafter\kcatcode\jis"7B21}
+\write16{92区::\the\expandafter\kcatcode\jis"7C21}
+\write16{93区::\the\expandafter\kcatcode\jis"7D21}
+\write16{94区::\the\expandafter\kcatcode\jis"7E21}
+\ifnum\jis"2121="8140
+% extended Shift_JIS code, 95..120ku
+\write16{95区(ext)::\the\expandafter\kcatcode\sjis"F040}
+\write16{96区(ext)::\the\expandafter\kcatcode\sjis"F09F}
+\write16{97区(ext)::\the\expandafter\kcatcode\sjis"F140}
+\write16{98区(ext)::\the\expandafter\kcatcode\sjis"F19F}
+\write16{117区(ext)::\the\expandafter\kcatcode\sjis"FB40}
+\write16{118区(ext)::\the\expandafter\kcatcode\sjis"FB9F}
+\write16{119区(ext)::\the\expandafter\kcatcode\sjis"FC40}
+\write16{120区(ext)::\the\expandafter\kcatcode\sjis"FC9F}
+\fi
+\fi
+
+% upTeX internal encoding
+
+\write16{0x110000::\the\kcatcode"110000}% japanese-otf-uptex
+\write16{0x120000::\the\kcatcode"120000}% japanese-otf-uptex
+\write16{0x130000::\the\kcatcode"130000}% japanese-otf-uptex
+\write16{0x140000::\the\kcatcode"140000}% japanese-otf-uptex
+\write16{あ゙::\the\kcatcode"223042}% U+3042 U+3099 Kana with Voiced Sound Mark
+\write16{か゚::\the\kcatcode"24304B}% U+304B U+309A Kana with Semi-Voiced Sound Mark
+\write16{🇯🇵::\the\kcatcode"25EFF5}% U+1F1EF U+1F1F5 Emoji Flag Sequence
+\write16{👶🏽::\the\kcatcode"2BF476}% U+1F476 U+1F3FD Emoji with Modifier Fitzpatrick
+\write16{0x800030::\the\kcatcode"800030}% U+0030 U+FE0F U+20E3 Emoji Keycap Sequence
+\write16{逸︀::\the\kcatcode"409038}% U+9038 U+FE00 Standardized Variation Sequence
+\write16{逸󠄀::\the\kcatcode"809038}% U+9038 U+E0100 Ideographic Variation Sequence
+
\relax\end
diff --git a/Build/source/texk/web2c/uptexdir/tests/up-jchwidow.log b/Build/source/texk/web2c/uptexdir/tests/up-jchwidow.log
new file mode 100644
index 00000000000..98a7eafe4fc
--- /dev/null
+++ b/Build/source/texk/web2c/uptexdir/tests/up-jchwidow.log
@@ -0,0 +1,817 @@
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+**up-jchwidow
+(./up-jchwidow.tex TEST
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 378.1154fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\jpy す
+..\glue(refer from jfm) 4.58203 minus 2.291
+..\jpy 「
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.19 \TEST{す{\kcatcode`す=18 す}「。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.20 \TEST{\CR。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.28 \TEST{す。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.29 \TEST{す\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.31 \TEST{す\kchar\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.34 \TEST{\char\kuten"0419。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.35 \TEST{\char\kuten"0419\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.37 \TEST{\char\kuten"0419\kchar\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.40 \TEST{\KR。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.41 \TEST{\kchar\kuten"0419。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.42 \TEST{\kchar\kuten"0419\char\kuten"0103}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.84087fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy す
+..\kern-0.48114
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.43 \TEST{\kchar\kuten"0419\kchar\kuten"0103}
+
+
+KCHAR"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.50 \TEST{い\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.51 \TEST{\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.52 \TEST{\relax\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.53 \TEST{\vrule\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.54 \TEST{b\kchar"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.55 \TEST{い\S。}
+
+
+CHAR"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.60 \TEST{い\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.61 \TEST{\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.62 \TEST{\relax\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.63 \TEST{\vrule\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.64 \TEST{b\char"03B1。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.65 \TEST{い\S。}
+
+
+KCHARDEF"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.70 \TEST{い\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.71 \TEST{\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.72 \TEST{\relax\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.73 \TEST{\vrule\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.74 \TEST{b\KA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.75 \TEST{い\S。}
+
+
+CHARDEF"3B1, kcatcode=15
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 387.73756fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy い
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.80 \TEST{い\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.81 \TEST{\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 397.35973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.82 \TEST{\relax\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 396.95973fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\rule(*+*)x0.4
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.83 \TEST{\vrule\CA 。}
+
+
+> \box0=
+\vbox(7.77588+1.38855)x469.75499, yoko direction
+.\hbox(7.77588+1.38855)x469.75499, glue set 391.80415fil
+..\displace 0.0
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\jpy あ
+..\glue(\xkanjiskip) 0.0
+..\cmr b
+..\glue(\xkanjiskip) 0.0
+..\jpy α
+..\jpy 。
+..\penalty 10000
+..\glue(\parfillskip) 0.0 plus 1.0fil
+..\glue(\rightskip) 0.0
+
+! OK.
+<to be read again>
+ }
+l.84 \TEST{b\CA 。}
+
+
+ )
+No pages of output.
diff --git a/Build/source/texk/web2c/uptexdir/tests/upkcat-e.txt b/Build/source/texk/web2c/uptexdir/tests/upkcat-e.txt
new file mode 100644
index 00000000000..5dd028a1469
--- /dev/null
+++ b/Build/source/texk/web2c/uptexdir/tests/upkcat-e.txt
@@ -0,0 +1,45 @@
+1区::18
+2区::18
+3区::17
+4区::17
+5区::17
+6区::17
+7区::18
+8区::18
+9区::18
+10区::18
+11区::18
+12区::18
+13区::18
+14区::16
+15区::16
+16区::16
+17区::16
+18区::16
+19区::16
+20区::16
+21区::16
+22区::16
+23区::16
+24区::16
+80区::16
+81区::16
+82区::16
+83区::16
+84区::16
+90区::16
+91区::16
+92区::16
+93区::16
+94区::16
+0x110000::16
+0x120000::16
+0x130000::16
+0x140000::16
+あ^^e3^^82^^99::17
+か^^e3^^82^^9a::17
+^^f0^^9f^^87^^af^^f0^^9f^^87^^b5::18
+^^f0^^9f^^91^^b6^^f0^^9f^^8f^^bd::18
+0x800030::18
+逸^^ef^^b8^^80::16
+逸^^f3^^a0^^84^^80::16
diff --git a/Build/source/texk/web2c/uptexdir/tests/upkcat-s.txt b/Build/source/texk/web2c/uptexdir/tests/upkcat-s.txt
new file mode 100644
index 00000000000..1179027f3b1
--- /dev/null
+++ b/Build/source/texk/web2c/uptexdir/tests/upkcat-s.txt
@@ -0,0 +1,53 @@
+1区::18
+2区::18
+3区::17
+4区::17
+5区::17
+6区::17
+7区::18
+8区::18
+9区::18
+10区::18
+11区::18
+12区::18
+13区::18
+14区::16
+15区::16
+16区::16
+17区::16
+18区::16
+19区::16
+20区::16
+21区::16
+22区::16
+23区::16
+24区::16
+80区::16
+81区::16
+82区::16
+83区::16
+84区::16
+90区::16
+91区::16
+92区::16
+93区::16
+94区::16
+95区(ext)::16
+96区(ext)::16
+97区(ext)::16
+98区(ext)::16
+117区(ext)::16
+118区(ext)::16
+119区(ext)::16
+120区(ext)::16
+0x110000::16
+0x120000::16
+0x130000::16
+0x140000::16
+あ^^e3^^82^^99::17
+か^^e3^^82^^9a::17
+^^f0^^9f^^87^^af^^f0^^9f^^87^^b5::18
+^^f0^^9f^^91^^b6^^f0^^9f^^8f^^bd::18
+0x800030::18
+逸^^ef^^b8^^80::16
+逸^^f3^^a0^^84^^80::16
diff --git a/Build/source/texk/web2c/uptexdir/tests/upkcat.txt b/Build/source/texk/web2c/uptexdir/tests/upkcat.txt
index d4da0a6dfb4..c117c68d1b7 100644
--- a/Build/source/texk/web2c/uptexdir/tests/upkcat.txt
+++ b/Build/source/texk/web2c/uptexdir/tests/upkcat.txt
@@ -25,8 +25,6 @@ A::15
丽::16
𰀀::16
𱍐::16
-逸︀::16
-逸󠄀::16
あ::17
ア::17
ㇰ::17
@@ -34,8 +32,6 @@ A::15
𛀀::17
𛄀::17
𛅐::17
-あ゙::17
-か゚::17
※::18
℃::18
Ⅻ::18
@@ -48,9 +44,6 @@ A::15
〠::18
㋐::18
㍿::18
-🇯🇵::18
-👶🏽::18
-0x800030::18
ᄀ::19
ㄱ::19
ꥠ::19
@@ -61,3 +54,14 @@ A::15
🏻::20
︀::20
󠄀::20
+0x110000::16
+0x120000::16
+0x130000::16
+0x140000::16
+あ゙::17
+か゚::17
+🇯🇵::18
+👶🏽::18
+0x800030::18
+逸︀::16
+逸󠄀::16
diff --git a/Build/source/texk/web2c/uptexdir/upkcat.test b/Build/source/texk/web2c/uptexdir/upkcat.test
index 195fb9c5be4..f5e0eeb2e8c 100755
--- a/Build/source/texk/web2c/uptexdir/upkcat.test
+++ b/Build/source/texk/web2c/uptexdir/upkcat.test
@@ -1,6 +1,6 @@
#! /bin/sh -vx
# $Id$
-# Copyright 2022 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+# Copyright 2022-2025 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
# You may freely use, modify and/or distribute this file.
BinDir=${BinDir:-.}
@@ -12,8 +12,18 @@ LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
TEXMFCNF=$srcdir/../kpathsea; export TEXMFCNF
TEXINPUTS="$srcdir/uptexdir/tests;."; export TEXINPUTS
+rm -f upkcat*log*.log
+
$_uptex -ini -interaction batchmode -jobname upkcat-log kcat.tex || exit 1
grep '::' upkcat-log.log > upkcat-log_ed.log \
&& diff upkcat-log_ed.log $srcdir/uptexdir/tests/upkcat.txt || exit 2
+$_uptex -ini -interaction batchmode -jobname upkcat-e-log -kanji-internal=euc kcat.tex || exit 3
+grep '::' upkcat-e-log.log > upkcat-e-log_ed.log \
+ && diff upkcat-e-log_ed.log $srcdir/uptexdir/tests/upkcat-e.txt || exit 4
+
+$_uptex -ini -interaction batchmode -jobname upkcat-s-log -kanji-internal=sjis kcat.tex || exit 5
+grep '::' upkcat-s-log.log > upkcat-s-log_ed.log \
+ && diff upkcat-s-log_ed.log $srcdir/uptexdir/tests/upkcat-s.txt || exit 6
+
exit 0
diff --git a/Build/source/texk/web2c/uptexdir/uptex-m.ch b/Build/source/texk/web2c/uptexdir/uptex-m.ch
index 5df4aee9012..ea23e60bdc1 100644
--- a/Build/source/texk/web2c/uptexdir/uptex-m.ch
+++ b/Build/source/texk/web2c/uptexdir/uptex-m.ch
@@ -50,6 +50,7 @@
% (2023-09-16) TTK upTeX u1.30
% (2024-09-30) TTK upTeX u1.35
% (2024-10-20) TTK upTeX u2.00
+% (2025-01-02) TTK Accept extended upTeX internal encoding also in pTeX-compatible EUC/SJIS mode.
@x
\def\pTeX{p\kern-.15em\TeX}
@@ -377,9 +378,6 @@ if (isinternalUPTEX) then begin
@+@t\1@>for k:=@"115 to @"118 do kcat_code(k):=kana; { Kana Extended-B .. Small Kana Extension }
@+@t\1@>for k:=@"145 to @"14F do kcat_code(k):=kanji; { CJK Unified Ideographs Extension B .. J }
@t\hskip10pt@>kcat_code(@"15B):=modifier; { Variation Selectors Supplement }
- @+@t\1@>for k:=@"170 to @"171 do kcat_code(k):=kana; { Kana with (Semi-)Voiced Sound Mark }
- @t\hskip10pt@>kcat_code(@"175):=kanji; { Standardized Variation Sequence }
- @+@t\1@>for k:=@"177 to @"178 do kcat_code(k):=kanji; { Ideographic Variation Sequence }
@+@t\1@>for k:=@"1F9 to @"1FC do kcat_code(k):=modifier;
{ Combining Katakana-Hiragana (Semi-)Voiced Sound Mark .. Emoji Modifier Fitzpatrick }
@t\hskip10pt@>kcat_code(@"1FD):=not_cjk; { Latin-1 Letters }
@@ -394,6 +392,10 @@ end else begin
{ $\.{@@"20}+|k| = |kcatcodekey|(|fromKUTEN|(|HILO|(k,1))$ }
@+@t\1@>for k:=16 to 94 do kcat_code(@"A0+k):=kanji; {2 men 16 ku ... 94 ku}
end;
+@+@t\1@>for k:=@"15F to @"162 do kcat_code(k):=kanji; { for japanese-otf, japanese-otf-uptex }
+@+@t\1@>for k:=@"170 to @"171 do kcat_code(k):=kana; { Kana with (Semi-)Voiced Sound Mark }
+@t\hskip10pt@>kcat_code(@"175):=kanji; { Standardized Variation Sequence }
+@+@t\1@>for k:=@"177 to @"178 do kcat_code(k):=kanji; { Ideographic Variation Sequence }
@z
@x
diff --git a/Build/source/texk/web2c/uptexdir/uptex-widow.test b/Build/source/texk/web2c/uptexdir/uptex-widow.test
new file mode 100755
index 00000000000..7db6ee20518
--- /dev/null
+++ b/Build/source/texk/web2c/uptexdir/uptex-widow.test
@@ -0,0 +1,32 @@
+#! /bin/sh -vx
+# Copyright 2025 Japanese TeX Development Community <issue@texjp.org>
+# You may freely use, modify and/or distribute this file.
+
+BinDir=${BinDir:-.}
+ExeExt=${ExeExt:-}
+_uptex=$BinDir/uptex$ExeExt
+
+LC_ALL=C; export LC_ALL; LANGUAGE=C; export LANGUAGE
+
+TEXMFCNF=$srcdir/../kpathsea;export TEXMFCNF
+TEXINPUTS=".;$srcdir/tests"; export TEXINPUTS
+TEXFONTS=".;$srcdir//tests"; export TEXFONTS
+TEXFORMATS=.; export TEXFORMATS
+
+# get same filename in log
+rm -f up-jchwidow.*
+$LN_S $srcdir/uptexdir/tests/jchwidow.tex ./up-jchwidow.tex
+
+if test ! -f ./up-basic.tex; then
+ cp $srcdir/tests/dump-basic.tex ./up-basic.tex
+fi
+if test ! -f ./up-basic.fmt; then
+ $_uptex -ini up-basic || exit 1
+fi
+
+$_uptex -fmt=up-basic -interaction=batchmode up-jchwidow || :
+
+sed 1d up-jchwidow.log >up-jchwidow.out
+
+diff $srcdir/uptexdir/tests/up-jchwidow.log up-jchwidow.out || exit 3
+