summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/texk/bibtex-x/ChangeLog26
-rw-r--r--Build/source/texk/bibtex-x/Makefile.am51
-rw-r--r--Build/source/texk/bibtex-x/Makefile.in58
-rw-r--r--Build/source/texk/bibtex-x/bibtex-2.c311
-rw-r--r--Build/source/texk/bibtex-x/bibtex-3.c17
-rw-r--r--Build/source/texk/bibtex-x/bibtex-4.c135
-rw-r--r--Build/source/texk/bibtex-x/bibtex.h6
-rwxr-xr-xBuild/source/texk/bibtex-x/configure24
-rw-r--r--Build/source/texk/bibtex-x/configure.ac2
-rw-r--r--Build/source/texk/bibtex-x/gblprocs.h11
-rw-r--r--Build/source/texk/bibtex-x/gblvars.h2
-rwxr-xr-xBuild/source/texk/bibtex-x/tests/bibtex8-char.test43
-rwxr-xr-xBuild/source/texk/bibtex-x/tests/bibtex8-sort.test36
-rwxr-xr-xBuild/source/texk/bibtex-x/tests/bibtex8u-mem.test77
-rwxr-xr-xBuild/source/texk/bibtex-x/tests/bibtexu-char.test44
-rwxr-xr-xBuild/source/texk/bibtex-x/tests/bibtexu-sort.test36
-rw-r--r--Build/source/texk/bibtex-x/tests/casea.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/casea.bbl12
-rw-r--r--Build/source/texk/bibtex-x/tests/caseu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/caseu.bbl52
-rw-r--r--Build/source/texk/bibtex-x/tests/chara.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/chara.bbl20
-rw-r--r--Build/source/texk/bibtex-x/tests/charu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/charu.bbl53
-rw-r--r--Build/source/texk/bibtex-x/tests/perioda.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/perioda.bbl14
-rw-r--r--Build/source/texk/bibtex-x/tests/periodu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/periodu.bbl48
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu-az.bbl15
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu-da.bbl15
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu-en.bbl15
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu-fi.bbl15
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu-tr.bbl15
-rw-r--r--Build/source/texk/bibtex-x/tests/sortu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/substra.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/substra.bbl90
-rw-r--r--Build/source/texk/bibtex-x/tests/substru.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/substru.bbl305
-rw-r--r--Build/source/texk/bibtex-x/tests/testcase.bst40
-rw-r--r--Build/source/texk/bibtex-x/tests/testcasea.bib8
-rw-r--r--Build/source/texk/bibtex-x/tests/testcaseu.bib48
-rw-r--r--Build/source/texk/bibtex-x/tests/testchar.bst36
-rw-r--r--Build/source/texk/bibtex-x/tests/testchara.bib18
-rw-r--r--Build/source/texk/bibtex-x/tests/testcharu.bib56
-rw-r--r--Build/source/texk/bibtex-x/tests/testdatau.bib43
-rw-r--r--Build/source/texk/bibtex-x/tests/testperiod.bst36
-rw-r--r--Build/source/texk/bibtex-x/tests/testperioda.bib6
-rw-r--r--Build/source/texk/bibtex-x/tests/testperiodu.bib25
-rw-r--r--Build/source/texk/bibtex-x/tests/testsubstr.bst75
-rw-r--r--Build/source/texk/bibtex-x/tests/testsubstra.bib8
-rw-r--r--Build/source/texk/bibtex-x/tests/testsubstru.bib28
-rw-r--r--Build/source/texk/bibtex-x/tests/testtxtprfx.bst41
-rw-r--r--Build/source/texk/bibtex-x/tests/testwidth.bst34
-rw-r--r--Build/source/texk/bibtex-x/tests/testwidtha.bib151
-rw-r--r--Build/source/texk/bibtex-x/tests/testwidthu.bib348
-rw-r--r--Build/source/texk/bibtex-x/tests/txtprfxa.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/txtprfxa.bbl22
-rw-r--r--Build/source/texk/bibtex-x/tests/txtprfxu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/txtprfxu.bbl67
-rw-r--r--Build/source/texk/bibtex-x/tests/widtha.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/widtha.bbl151
-rw-r--r--Build/source/texk/bibtex-x/tests/widthu.aux4
-rw-r--r--Build/source/texk/bibtex-x/tests/widthu.bbl338
-rw-r--r--Build/source/texk/bibtex-x/version.h3
64 files changed, 3099 insertions, 83 deletions
diff --git a/Build/source/texk/bibtex-x/ChangeLog b/Build/source/texk/bibtex-x/ChangeLog
index ff0692e5384..2c9a33e3adb 100644
--- a/Build/source/texk/bibtex-x/ChangeLog
+++ b/Build/source/texk/bibtex-x/ChangeLog
@@ -1,3 +1,29 @@
+2022-04-16 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+
+ * configure.ac, version.h:
+ Bump version to 3.80 (16 apr 2022).
+ * bibtex-2.c, bibtex-4.c, bibtex.h, gblvars.h:
+ Support width$ for Latin-1 characters in bibtex8.
+ Support width$ for Latin-1, Latin Extended-A, CJK characters in bibtexu.
+ Note other character sets (Greek, Cyrillic, etc.) are not impremented yet.
+ * bibtex-2.c, bibtex-4.c, gblproc.h:
+ Support substring$ for characters on Unicode supplementary planes in bibtexu.
+ * bibtex-3.c:
+ Ignore add.period$ after Unicode punctuation marks ‼⁇⁈⁉‽!?。 . in bibtexu.
+ * bibtex-4.c:
+ Accept characters over ASCII by int.to.char$ in bibtex8 & bibtexu.
+ Accept multibyte characters by char.to.int$ in bibtexu.
+ * Makefile.am,
+ tests/bibtex8u-mem.test, tests/bibtex[8u]-{sort,char}.test,
+ tests/sortu.aux, tests/sortu-{az,da,en,fi,tr}.bbl, tests/testdatau.bib,
+ tests/txtprfx[au].{aux,bbl}, tests/testtxtprfx.bst,
+ tests/case[au].{aux,bbl}, tests/testcase[au].bib, tests/testcase.bst,
+ tests/char[au].{aux,bbl}, tests/testchar[au].bib, tests/testchar.bst,
+ tests/period[au].{aux,bbl}, tests/testperiod[au].bib, tests/testperiod.bst,
+ tests/substr[au].{aux,bbl}, tests/testsubstr[au].bib, tests/testsubstr.bst,
+ tests/width[au].{aux,bbl}, tests/testwidth[au].bib, tests/testwidth.bst:
+ Add new tests.
+
2022-02-05 Karl Berry <karl@freefriends.org>
* configure.ac,
diff --git a/Build/source/texk/bibtex-x/Makefile.am b/Build/source/texk/bibtex-x/Makefile.am
index 081783003c3..67e46b95377 100644
--- a/Build/source/texk/bibtex-x/Makefile.am
+++ b/Build/source/texk/bibtex-x/Makefile.am
@@ -75,9 +75,11 @@ dist_btdoc_DATA = \
## Tests.
##
-bibtex8_tests = tests/bibtex8.test tests/bibtex8-mem.test tests/sort.test
+bibtex8_tests = tests/bibtex8.test tests/bibtex8u-mem.test \
+ tests/bibtex8-sort.test tests/bibtex8-char.test
bibtexu_tests = tests/bibtexu.test tests/bibtexu-basic.test \
- tests/bibtexu-range.test tests/bibtexu-yannis.test
+ tests/bibtexu-range.test tests/bibtexu-yannis.test \
+ tests/bibtexu-sort.test tests/bibtexu-char.test
TESTS =
if BIBTEX8
@@ -95,15 +97,30 @@ DISTCLEANFILES =
## tests/bibtex8.test
DISTCLEANFILES += tests/xexampl.aux tests/xexampl.bbl tests/xexampl.blg
## tests/bibtexu.test
-## tests/sort.test
+##
+## tests/bibtex8u-mem.test
+DISTCLEANFILES += tests/memtest.bib tests/memtest?.* tests/memtestu?.*
+##
+## tests/bibtex8-sort.test
EXTRA_DIST += tests/sort.aux \
tests/sort1.bbl tests/sort2.bbl tests/sort3.bbl \
tests/sort1.csf tests/sort2.csf tests/sort3.csf \
- tests/testdata.bib tests/teststyle.bst
-DISTCLEANFILES += tests/xsort.aux tests/xsort.bbl tests/xsort.blg
+ tests/testdata.bib tests/teststyle.bst \
+ tests/sort1.bbl tests/sort2.bbl tests/sort3.bbl \
+ tests/casea.aux tests/casea.bbl tests/testcasea.bib tests/testcase.bst
+DISTCLEANFILES += tests/xsort[123].aux tests/xsort[123].bbl tests/xsort[123].blg \
+ tests/xcase[123].aux tests/xcase[123].bbl tests/xcase[123].blg
##
-## tests/bibtex8-mem.test
-DISTCLEANFILES += tests/memtest.bib tests/memtest?.*
+## tests/bibtex8-char.test
+EXTRA_DIST += tests/perioda.aux tests/perioda.bbl tests/testperioda.bib tests/testperiod.bst \
+ tests/substra.aux tests/substra.bbl tests/testsubstra.bib tests/testsubstr.bst \
+ tests/txtprfxa.aux tests/txtprfxa.bbl tests/testtxtprfx.bst \
+ tests/widtha.aux tests/widtha.bbl tests/testwidtha.bib tests/testwidth.bst \
+ tests/chara.aux tests/chara.bbl tests/testchara.bib tests/testchar.bst
+DISTCLEANFILES += tests/xsubstra.aux tests/xsubstra.bbl tests/xsubstra.blg \
+ tests/xtxtprfxa.aux tests/txtprfxa.bbl tests/xtxtprfxa.blg \
+ tests/xwidtha.aux tests/widtha.bbl tests/xwidtha.blg \
+ tests/xchara.aux tests/xchara.bbl tests/xchara.blg
##
## tests/bibtexu-basic.test
EXTRA_DIST += tests/ubasic.aux tests/ubasic.bbl tests/ubasic.bib
@@ -116,6 +133,26 @@ DISTCLEANFILES += tests/xurange.aux tests/xurange.bbl tests/xurange.blg
## tests/bibtexu-yannis.test
EXTRA_DIST += tests/yannis.aux tests/yannis.bbl tests/yannis.bib
DISTCLEANFILES += tests/xyannis.aux tests/xyannis.bbl tests/xyannis.blg
+##
+## tests/bibtexu-sort.test
+EXTRA_DIST += tests/sortu.aux \
+ tests/sortu-az.bbl tests/sortu-da.bbl tests/sortu-en.bbl \
+ tests/sortu-fi.bbl tests/sortu-tr.bbl tests/testdatau.bib \
+ tests/caseu.aux tests/caseu.bbl tests/testcaseu.bib
+DISTCLEANFILES += tests/xsortu-*.aux tests/xsortu-*.bbl tests/xsortu-*.blg \
+ tests/xcaseu.aux tests/xcaseu.bbl tests/xcaseu.blg
+##
+## tests/bibtexu-char.test
+EXTRA_DIST += tests/periodu.aux tests/periodu.bbl tests/testperiodu.bib \
+ tests/substru.aux tests/substru.bbl tests/testsubstru.bib \
+ tests/txtprfxu.aux tests/txtprfxu.bbl \
+ tests/widthu.aux tests/widthu.bbl tests/testwidthu.bib \
+ tests/charu.aux tests/charu.bbl tests/testcharu.bib
+DISTCLEANFILES += tests/xperiodu.aux tests/xperiodu.bbl tests/xperiodu.blg \
+ tests/xsubstru.aux tests/xsubstru.bbl tests/xsubstru.blg \
+ tests/xtxtprfxu.aux tests/txtprfxu.bbl tests/xtxtprfxu.blg \
+ tests/xwidthu.aux tests/widthu.bbl tests/xwidthu.blg \
+ tests/xcharu.aux tests/xcharu.bbl tests/xcharu.blg
## Not used
##
diff --git a/Build/source/texk/bibtex-x/Makefile.in b/Build/source/texk/bibtex-x/Makefile.in
index d1f8f2b9734..47768b284c7 100644
--- a/Build/source/texk/bibtex-x/Makefile.in
+++ b/Build/source/texk/bibtex-x/Makefile.in
@@ -652,26 +652,58 @@ dist_btdoc_DATA = \
csfile.txt \
file_id.diz
-bibtex8_tests = tests/bibtex8.test tests/bibtex8-mem.test tests/sort.test
+bibtex8_tests = tests/bibtex8.test tests/bibtex8u-mem.test \
+ tests/bibtex8-sort.test tests/bibtex8-char.test
+
bibtexu_tests = tests/bibtexu.test tests/bibtexu-basic.test \
- tests/bibtexu-range.test tests/bibtexu-yannis.test
+ tests/bibtexu-range.test tests/bibtexu-yannis.test \
+ tests/bibtexu-sort.test tests/bibtexu-char.test
TESTS = $(am__append_3) $(am__append_4)
EXTRA_DIST = $(bibtex8_tests) $(bibtexu_tests) tests/sort.aux \
tests/sort1.bbl tests/sort2.bbl tests/sort3.bbl \
tests/sort1.csf tests/sort2.csf tests/sort3.csf \
- tests/testdata.bib tests/teststyle.bst tests/ubasic.aux \
- tests/ubasic.bbl tests/ubasic.bib tests/urange.aux \
- tests/urange.bbl tests/urange.bib tests/yannis.aux \
- tests/yannis.bbl tests/yannis.bib bt371csf.zip dos-dj.mak \
- dos-emx.mak os2.mak unix.mak csf/00readme.txt csf/COPYING \
- csf/HISTORY csf/file_id.diz
+ tests/testdata.bib tests/teststyle.bst tests/sort1.bbl \
+ tests/sort2.bbl tests/sort3.bbl tests/casea.aux \
+ tests/casea.bbl tests/testcasea.bib tests/testcase.bst \
+ tests/perioda.aux tests/perioda.bbl tests/testperioda.bib \
+ tests/testperiod.bst tests/substra.aux tests/substra.bbl \
+ tests/testsubstra.bib tests/testsubstr.bst tests/txtprfxa.aux \
+ tests/txtprfxa.bbl tests/testtxtprfx.bst tests/widtha.aux \
+ tests/widtha.bbl tests/testwidtha.bib tests/testwidth.bst \
+ tests/chara.aux tests/chara.bbl tests/testchara.bib \
+ tests/testchar.bst tests/ubasic.aux tests/ubasic.bbl \
+ tests/ubasic.bib tests/urange.aux tests/urange.bbl \
+ tests/urange.bib tests/yannis.aux tests/yannis.bbl \
+ tests/yannis.bib tests/sortu.aux tests/sortu-az.bbl \
+ tests/sortu-da.bbl tests/sortu-en.bbl tests/sortu-fi.bbl \
+ tests/sortu-tr.bbl tests/testdatau.bib tests/caseu.aux \
+ tests/caseu.bbl tests/testcaseu.bib tests/periodu.aux \
+ tests/periodu.bbl tests/testperiodu.bib tests/substru.aux \
+ tests/substru.bbl tests/testsubstru.bib tests/txtprfxu.aux \
+ tests/txtprfxu.bbl tests/widthu.aux tests/widthu.bbl \
+ tests/testwidthu.bib tests/charu.aux tests/charu.bbl \
+ tests/testcharu.bib bt371csf.zip dos-dj.mak dos-emx.mak \
+ os2.mak unix.mak csf/00readme.txt csf/COPYING csf/HISTORY \
+ csf/file_id.diz
DISTCLEANFILES = tests/xexampl.aux tests/xexampl.bbl tests/xexampl.blg \
- tests/xsort.aux tests/xsort.bbl tests/xsort.blg \
- tests/memtest.bib tests/memtest?.* tests/xubasic.aux \
- tests/xubasic.bbl tests/xubasic.blg tests/xurange.aux \
- tests/xurange.bbl tests/xurange.blg tests/xyannis.aux \
- tests/xyannis.bbl tests/xyannis.blg
+ tests/memtest.bib tests/memtest?.* tests/memtestu?.* \
+ tests/xsort[123].aux tests/xsort[123].bbl tests/xsort[123].blg \
+ tests/xcase[123].aux tests/xcase[123].bbl tests/xcase[123].blg \
+ tests/xsubstra.aux tests/xsubstra.bbl tests/xsubstra.blg \
+ tests/xtxtprfxa.aux tests/txtprfxa.bbl tests/xtxtprfxa.blg \
+ tests/xwidtha.aux tests/widtha.bbl tests/xwidtha.blg \
+ tests/xchara.aux tests/xchara.bbl tests/xchara.blg \
+ tests/xubasic.aux tests/xubasic.bbl tests/xubasic.blg \
+ tests/xurange.aux tests/xurange.bbl tests/xurange.blg \
+ tests/xyannis.aux tests/xyannis.bbl tests/xyannis.blg \
+ tests/xsortu-*.aux tests/xsortu-*.bbl tests/xsortu-*.blg \
+ tests/xcaseu.aux tests/xcaseu.bbl tests/xcaseu.blg \
+ tests/xperiodu.aux tests/xperiodu.bbl tests/xperiodu.blg \
+ tests/xsubstru.aux tests/xsubstru.bbl tests/xsubstru.blg \
+ tests/xtxtprfxu.aux tests/txtprfxu.bbl tests/xtxtprfxu.blg \
+ tests/xwidthu.aux tests/widthu.bbl tests/xwidthu.blg \
+ tests/xcharu.aux tests/xcharu.bbl tests/xcharu.blg
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/Build/source/texk/bibtex-x/bibtex-2.c b/Build/source/texk/bibtex-x/bibtex-2.c
index 537ceb22986..3eacc70e16f 100644
--- a/Build/source/texk/bibtex-x/bibtex-2.c
+++ b/Build/source/texk/bibtex-x/bibtex-2.c
@@ -2550,7 +2550,7 @@ BEGIN
* $cmr10$~font and represent hundredths of a point (rounded), but since
* they're used only for relative comparisons, the units have no meaning.
***************************************************************************/
- for (i=0; i<=0177; i++)
+ for (i=0; i<=LAST_LATIN_CHAR; i++)
BEGIN
char_width[i] = 0;
END
@@ -2581,12 +2581,20 @@ BEGIN
char_width[0067] = 500;
char_width[0070] = 500;
char_width[0071] = 500;
- char_width[0072] = 278;
- char_width[0073] = 278;
- char_width[0074] = 278;
- char_width[0075] = 778;
- char_width[0076] = 472;
- char_width[0077] = 472;
+ char_width[0072] = 278; /* :, refer 0x3A in T1 ecrm1000.tfm */
+ char_width[0073] = 278; /* ;, refer 0x3B in T1 ecrm1000.tfm */
+#ifdef SUPPORT_8BIT
+ char_width[0074] = 472; /* <, refer 0x3C in T1 ecrm1000.tfm */
+#else
+ char_width[0074] = 278; /* ¡, refer 0x3C in OT1 cmr10.tfm */
+#endif
+ char_width[0075] = 778; /* =, refer 0x3D in T1 ecrm1000.tfm */
+#ifdef SUPPORT_8BIT
+ char_width[0076] = 472; /* >, refer 0x3E in T1 ecrm1000.tfm */
+#else
+ char_width[0076] = 472; /* ¿, refer 0x3E in OT1 cmr10.tfm */
+#endif
+ char_width[0077] = 472; /* ?, refer 0x3F in T1 ecrm1000.tfm */
char_width[0100] = 778;
char_width[0101] = 750;
char_width[0102] = 708;
@@ -2614,12 +2622,17 @@ BEGIN
char_width[0130] = 750;
char_width[0131] = 750;
char_width[0132] = 611;
- char_width[0133] = 278;
- char_width[0134] = 500;
- char_width[0135] = 278;
- char_width[0136] = 500;
- char_width[0137] = 278;
- char_width[0140] = 278;
+ char_width[0133] = 278; /* [, refer 0x5B in T1 ecrm1000.tfm */
+ char_width[0134] = 500; /* \, refer 0x5C in T1 ecrm1000.tfm */
+ char_width[0135] = 278; /* ], refer 0x5D in T1 ecrm1000.tfm */
+#ifdef SUPPORT_8BIT
+ char_width[0136] = 611; /* wide ^, refer 0x5E in T1 ecrm1000.tfm */
+ char_width[0137] = 778; /* wide _, refer 0x5F in T1 ecrm1000.tfm */
+#else
+ char_width[0136] = 500; /* ^, refer 0x5E in OT1 cmr10.tfm */
+ char_width[0137] = 278; /* dot above, refer 0x5F in OT1 cmr10.tfm */
+#endif
+ char_width[0140] = 278; /* `, refer 0x60 in T1 ecrm1000.tfm */
char_width[0141] = 500;
char_width[0142] = 556;
char_width[0143] = 444;
@@ -2646,10 +2659,220 @@ BEGIN
char_width[0170] = 528;
char_width[0171] = 528;
char_width[0172] = 444;
- char_width[0173] = 500;
- char_width[0174] = 1000;
- char_width[0175] = 500;
- char_width[0176] = 500;
+ char_width[0173] = 500; /* {, refer 0x7B in T1 ecrm1000.tfm */
+#ifdef SUPPORT_8BIT
+ char_width[0174] = 278; /* |, refer 0x7C in T1 ecrm1000.tfm */
+#else
+ char_width[0174] = 1000; /* em-dash, refer 0x7C in OT1 cmr10.tfm */
+#endif
+ char_width[0175] = 500; /* }, refer 0x7D in T1 ecrm1000.tfm */
+#ifdef SUPPORT_8BIT
+ char_width[0176] = 611; /* ~, refer 0x7E in T1 ecrm1000.tfm */
+#else
+ char_width[0176] = 500; /* ??? */
+#endif
+#ifdef SUPPORT_8BIT
+ char_width[0xA1] = 278; /* ¡, refer 0xBD in T1 ecrm1000.tfm */
+ char_width[0xA3] = 639; /* £, refer 0xBF in T1 ecrm1000.tfm */
+ char_width[0xA7] = 444; /* §, refer 0x9F in T1 ecrm1000.tfm */
+ char_width[0xAB] = 556; /* «, refer 0x13 in T1 ecrm1000.tfm */
+ char_width[0xBB] = 556; /* », refer 0x14 in T1 ecrm1000.tfm */
+ char_width[0xBF] = 472; /* ¿, refer 0xBE in T1 ecrm1000.tfm */
+ char_width[0xC0] = 750;
+ char_width[0xC1] = 750;
+ char_width[0xC2] = 750;
+ char_width[0xC3] = 750;
+ char_width[0xC4] = 750;
+ char_width[0xC5] = 750;
+ char_width[0xC6] = 903;
+ char_width[0xC7] = 722;
+ char_width[0xC8] = 681;
+ char_width[0xC9] = 681;
+ char_width[0xCA] = 681;
+ char_width[0xCB] = 681;
+ char_width[0xCC] = 361;
+ char_width[0xCD] = 361;
+ char_width[0xCE] = 361;
+ char_width[0xCF] = 361;
+ char_width[0xD0] = 764;
+ char_width[0xD1] = 750;
+ char_width[0xD2] = 778;
+ char_width[0xD3] = 778;
+ char_width[0xD4] = 778;
+ char_width[0xD5] = 778;
+ char_width[0xD6] = 778;
+ char_width[0xD7] = 778; /* expect "×" */
+ char_width[0xD8] = 778;
+ char_width[0xD9] = 750;
+ char_width[0xDA] = 750;
+ char_width[0xDB] = 750;
+ char_width[0xDC] = 750;
+ char_width[0xDD] = 750;
+ char_width[0xDE] = 625;
+ char_width[0xDF] = 500; /* ß, refer 0xFF in T1 ecrm1000.tfm */
+ char_width[0xE0] = 500;
+ char_width[0xE1] = 500;
+ char_width[0xE2] = 500;
+ char_width[0xE3] = 500;
+ char_width[0xE4] = 500;
+ char_width[0xE5] = 500;
+ char_width[0xE6] = 722;
+ char_width[0xE7] = 444;
+ char_width[0xE8] = 444;
+ char_width[0xE9] = 444;
+ char_width[0xEA] = 444;
+ char_width[0xEB] = 444;
+ char_width[0xEC] = 278;
+ char_width[0xED] = 278;
+ char_width[0xEE] = 278;
+ char_width[0xEF] = 333;
+ char_width[0xF0] = 500;
+ char_width[0xF1] = 556;
+ char_width[0xF2] = 500;
+ char_width[0xF3] = 500;
+ char_width[0xF4] = 500;
+ char_width[0xF5] = 500;
+ char_width[0xF6] = 500;
+ char_width[0xF7] = 778; /* expect "÷" */
+ char_width[0xF8] = 500;
+ char_width[0xF9] = 556;
+ char_width[0xFA] = 556;
+ char_width[0xFB] = 556;
+ char_width[0xFC] = 556;
+ char_width[0xFD] = 528;
+ char_width[0xFE] = 556;
+ char_width[0xFF] = 528; /* ÿ, refer 0xB8 in T1 ecrm1000.tfm */
+#endif
+#ifdef UTF_8
+ char_width[0x100] = 750;
+ char_width[0x101] = 500;
+ char_width[0x102] = 750;
+ char_width[0x103] = 500;
+ char_width[0x104] = 750;
+ char_width[0x105] = 500;
+ char_width[0x106] = 722;
+ char_width[0x107] = 444;
+ char_width[0x108] = 722;
+ char_width[0x109] = 444;
+ char_width[0x10A] = 722;
+ char_width[0x10B] = 444;
+ char_width[0x10C] = 722;
+ char_width[0x10D] = 444;
+ char_width[0x10E] = 764;
+ char_width[0x10F] = 556;
+ char_width[0x110] = 764;
+ char_width[0x111] = 556;
+ char_width[0x112] = 681;
+ char_width[0x113] = 444;
+ char_width[0x114] = 681;
+ char_width[0x115] = 444;
+ char_width[0x116] = 681;
+ char_width[0x117] = 444;
+ char_width[0x118] = 681;
+ char_width[0x119] = 444;
+ char_width[0x11A] = 681;
+ char_width[0x11B] = 444;
+ char_width[0x11C] = 785;
+ char_width[0x11D] = 500;
+ char_width[0x11E] = 785;
+ char_width[0x11F] = 500;
+ char_width[0x120] = 785;
+ char_width[0x121] = 500;
+ char_width[0x122] = 785;
+ char_width[0x123] = 500;
+ char_width[0x124] = 750;
+ char_width[0x125] = 556;
+ char_width[0x126] = 750;
+ char_width[0x127] = 556;
+ char_width[0x128] = 361;
+ char_width[0x129] = 278;
+ char_width[0x12A] = 361;
+ char_width[0x12B] = 278;
+ char_width[0x12C] = 361;
+ char_width[0x12D] = 278;
+ char_width[0x12E] = 361;
+ char_width[0x12F] = 278;
+ char_width[0x130] = 361;
+ char_width[0x131] = 278;
+ char_width[0x132] = 861; /* IJ, refer 0x9C in T1 ecrm1000.tfm */
+ char_width[0x133] = 583; /* ij, refer 0xBC in T1 ecrm1000.tfm */
+ char_width[0x134] = 541;
+ char_width[0x135] = 306;
+ char_width[0x136] = 778;
+ char_width[0x137] = 528;
+ char_width[0x138] = 556; /* ĸ, not found in T1 ecrm1000.tfm */
+ char_width[0x139] = 625;
+ char_width[0x13A] = 278;
+ char_width[0x13B] = 625;
+ char_width[0x13C] = 278;
+ char_width[0x13D] = 625;
+ char_width[0x13E] = 278;
+ char_width[0x13F] = 625;
+ char_width[0x140] = 278;
+ char_width[0x141] = 625;
+ char_width[0x142] = 278;
+ char_width[0x143] = 750;
+ char_width[0x144] = 556;
+ char_width[0x145] = 750;
+ char_width[0x146] = 556;
+ char_width[0x147] = 750;
+ char_width[0x148] = 556;
+ char_width[0x149] = 556;
+ char_width[0x14A] = 792; /* Ŋ, refer 0x8D in T1 ecrm1000.tfm */
+ char_width[0x14B] = 556; /* ŋ, refer 0xAD in T1 ecrm1000.tfm */
+ char_width[0x14C] = 778;
+ char_width[0x14D] = 500;
+ char_width[0x14E] = 778;
+ char_width[0x14F] = 500;
+ char_width[0x150] = 778;
+ char_width[0x151] = 500;
+ char_width[0x152] = 1014; /* Œ, refer 0xD7 in T1 ecrm1000.tfm */
+ char_width[0x153] = 778; /* œ, refer 0xF7 in T1 ecrm1000.tfm */
+ char_width[0x154] = 736;
+ char_width[0x155] = 392;
+ char_width[0x156] = 736;
+ char_width[0x157] = 392;
+ char_width[0x158] = 736;
+ char_width[0x159] = 392;
+ char_width[0x15A] = 556;
+ char_width[0x15B] = 394;
+ char_width[0x15C] = 556;
+ char_width[0x15D] = 394;
+ char_width[0x15E] = 556;
+ char_width[0x15F] = 394;
+ char_width[0x160] = 556;
+ char_width[0x161] = 394;
+ char_width[0x162] = 722;
+ char_width[0x163] = 389;
+ char_width[0x164] = 722;
+ char_width[0x165] = 389;
+ char_width[0x166] = 722;
+ char_width[0x167] = 389;
+ char_width[0x168] = 750;
+ char_width[0x169] = 556;
+ char_width[0x16A] = 750;
+ char_width[0x16B] = 556;
+ char_width[0x16C] = 750;
+ char_width[0x16D] = 556;
+ char_width[0x16E] = 750;
+ char_width[0x16F] = 556;
+ char_width[0x170] = 750;
+ char_width[0x171] = 556;
+ char_width[0x172] = 750;
+ char_width[0x173] = 556;
+ char_width[0x174] = 1028;
+ char_width[0x175] = 722;
+ char_width[0x176] = 750;
+ char_width[0x177] = 528;
+ char_width[0x178] = 750;
+ char_width[0x179] = 611;
+ char_width[0x17A] = 444;
+ char_width[0x17B] = 611;
+ char_width[0x17C] = 444;
+ char_width[0x17D] = 611;
+ char_width[0x17E] = 444;
+ char_width[0x17F] = 392; /* ſ, not found in T1 ecrm1000.tfm */
+#endif
/*^^^^^^^^^^^^^^^^^^^^^^^^^^ END OF SECTION 35 ^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
/***************************************************************************
@@ -3210,6 +3433,60 @@ BEGIN
return tblen;
END
+
+int32_t icu_toUChar32s(BufType_T buf, BufPointer_T bf_ptr,BufPointer_T len,UChar32 * target, int32_t tarcap, UChar * buf16)
+BEGIN
+ UErrorCode err1 = U_ZERO_ERROR;
+ int32_t tulen;
+
+ u_strFromUTF8WithSub(buf16, tarcap, &tulen, (char *)&buf[bf_ptr], len, 0xfffd, NULL, &err1);
+ if (!U_SUCCESS(err1))
+ BEGIN
+ printf("Error in icu_toUChar32s.\n");
+#ifdef TRACE
+ if (Flag_trace)
+ TRACE_PR_LN ("Error in icu_toUChar32s");
+#endif /* TRACE */
+ END
+ err1 = U_ZERO_ERROR;
+ u_strToUTF32WithSub(target, tarcap, &tulen, buf16, -1, 0xfffd, NULL, &err1);
+ if (!U_SUCCESS(err1))
+ BEGIN
+ printf("Error in icu_toUChar32s.\n");
+#ifdef TRACE
+ if (Flag_trace)
+ TRACE_PR_LN ("Error in icu_toUChar32s");
+#endif /* TRACE */
+ END
+ return tulen;
+END
+
+int32_t icu_fromUChar32s(unsigned char * dest, int32_t destcap, const UChar32 * src, int32_t srclen, UChar * buf16)
+BEGIN
+ UErrorCode err2 = U_ZERO_ERROR;
+ int32_t tblen;
+
+ u_strFromUTF32WithSub(buf16, destcap, &tblen, src, srclen, 0xfffd, NULL, &err2);
+ if (!U_SUCCESS(err2))
+ BEGIN
+ printf("Error in icu_fromUChar32s.\n");
+#ifdef TRACE
+ if (Flag_trace)
+ TRACE_PR_LN ("Error in icu_fromUChar32s");
+#endif /* TRACE */
+ END
+ err2 = U_ZERO_ERROR;
+ u_strToUTF8WithSub((char *)dest, destcap, &tblen, buf16, -1, 0xfffd, NULL, &err2);
+ if (!U_SUCCESS(err2))
+ BEGIN
+ printf("Error in icu_fromUChar32s.\n");
+#ifdef TRACE
+ if (Flag_trace)
+ TRACE_PR_LN ("Error in icu_fromUChar32s");
+#endif /* TRACE */
+ END
+ return tblen;
+END
#endif
/*^^^^^^^^^^^^^^^^^^^^^^^^^^ END OF SECTION 62 ^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
diff --git a/Build/source/texk/bibtex-x/bibtex-3.c b/Build/source/texk/bibtex-x/bibtex-3.c
index bccc9e9c9f4..877771976b8 100644
--- a/Build/source/texk/bibtex-x/bibtex-3.c
+++ b/Build/source/texk/bibtex-x/bibtex-3.c
@@ -3408,6 +3408,9 @@ BEGIN
* non|right_brace| characters, to see if we have to add the |period|.
***************************************************************************/
BEGIN
+#ifdef UTF_8
+ UChar ch;
+#endif
sp_ptr = str_start[pop_lit1 + 1];
sp_end = str_start[pop_lit1];
while (sp_ptr > sp_end)
@@ -3419,12 +3422,24 @@ BEGIN
END
END
Loop_Exit_Label:
+#ifdef UTF_8
+ ch = str_pool[sp_ptr];
+ if (utf8len(str_pool[sp_ptr]) != 1 && utf8len(str_pool[sp_ptr-1]) != 2 && utf8len(str_pool[sp_ptr-2]) == 3)
+ ch = ((str_pool[sp_ptr-2]&0x0f) <<12) | ((str_pool[sp_ptr-1]&0x3f) << 6) | (str_pool[sp_ptr]&0x3f);
+ switch (ch)
+#else
switch (str_pool[sp_ptr])
+#endif
BEGIN
case PERIOD:
case QUESTION_MARK:
case EXCLAMATION_MARK:
- REPUSH_STRING;
+#ifdef UTF_8
+ case 0x203C: case 0x203D: case 0x2047: /* ‼ ‽ ⁇ */
+ case 0x2048: case 0x2049: case 0x3002: /* ⁈ ⁉ 。 */
+ case 0xFF01: case 0xFF0E: case 0xFF1F: /* ! . ? */
+#endif
+ REPUSH_STRING;
break;
default:
diff --git a/Build/source/texk/bibtex-x/bibtex-4.c b/Build/source/texk/bibtex-x/bibtex-4.c
index 297007b9439..01a184420cb 100644
--- a/Build/source/texk/bibtex-x/bibtex-4.c
+++ b/Build/source/texk/bibtex-x/bibtex-4.c
@@ -547,7 +547,11 @@ BEGIN
print_wrong_stk_lit (pop_lit1, pop_typ1, STK_STR);
push_lit_stk (0, STK_INT);
END
+#ifdef UTF_8
+ else if (LENGTH (pop_lit1) != utf8len(str_pool[str_start[pop_lit1]]))
+#else
else if (LENGTH (pop_lit1) != 1)
+#endif
BEGIN
PRINT ("\"");
PRINT_POOL_STR (pop_lit1);
@@ -556,7 +560,13 @@ BEGIN
END
else
BEGIN
+#ifdef UTF_8
+ UChar32 ch;
+ U8_GET_OR_FFFD(&str_pool[str_start[pop_lit1]], 0, 0, -1, ch);
+ push_lit_stk (ch, STK_INT);
+#else
push_lit_stk (str_pool[str_start[pop_lit1]], STK_INT);
+#endif
END
END
/*^^^^^^^^^^^^^^^^^^^^^^^^^^ END OF SECTION 377 ^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
@@ -1503,15 +1513,40 @@ BEGIN
print_wrong_stk_lit (pop_lit1, pop_typ1, STK_INT);
push_lit_stk (s_null, STK_STR);
END
- else if ((pop_lit1 < 0) || (pop_lit1 > 127))
+#if UTF_8
+ else if ((pop_lit1 < 0) || (pop_lit1 > LAST_UCS_CHAR))
+#else
+ else if ((pop_lit1 < 0) || (pop_lit1 > LAST_ASCII_CHAR))
+#endif
BEGIN
- BST_EX_WARN2 ("%ld isn't valid ASCII", (long) pop_lit1);
+ BST_EX_WARN2 ("%ld isn't valid character code", (long) pop_lit1);
push_lit_stk (s_null, STK_STR);
END
else
BEGIN
STR_ROOM (1);
+#if UTF_8
+ BEGIN
+ UChar ch0[3] = {0};
+ unsigned char ch1[5] = {0}, *ch;
+ if (pop_lit1> 0xFFFF)
+ BEGIN
+ ch0[0] = U16_LEAD(pop_lit1);
+ ch0[1] = U16_TRAIL(pop_lit1);
+ END
+ else
+ ch0[0] = pop_lit1;
+ icu_fromUChars(ch1, 5, ch0, 3);
+ ch=ch1;
+ while(*ch)
+ BEGIN
+ APPEND_CHAR (*ch);
+ INCR (ch);
+ END
+ END
+#else
APPEND_CHAR (pop_lit1);
+#endif
push_lit_stk (make_string (), STK_STR);
END
END
@@ -2011,10 +2046,17 @@ We transform the character to Unicode and then get the substring, then
back to UTF-8. 23/sep/2009
*/
Integer_T str_length = LENGTH (pop_lit3);
- UChar uchs[BUF_SIZE+1];
+ UChar32 uchs[BUF_SIZE+1];
+ UChar uch16[BUF_SIZE+1];
int32_t utcap = BUF_SIZE+1;
- int32_t ulen = icu_toUChars(str_pool,str_start[pop_lit3],str_length,uchs, utcap);
-
+ int32_t ulen;
+ unsigned char frUch1[BUF_SIZE+1];
+ unsigned char frUch2[BUF_SIZE+1];
+ int32_t frUchCap = BUF_SIZE + 1;
+ int32_t lenfrUch;
+ int32_t ptrfrUch;
+
+ ulen = icu_toUChar32s(str_pool,str_start[pop_lit3],str_length,uchs,utcap,uch16);
sp_length = ulen;
#else
sp_length = LENGTH (pop_lit3);
@@ -2023,14 +2065,14 @@ back to UTF-8. 23/sep/2009
BEGIN
if ((pop_lit2 == 1) || (pop_lit2 == -1))
BEGIN
- REPUSH_STRING;
+ REPUSH_STRING;
goto Exit_Label;
END
END
if ((pop_lit1 <= 0) || (pop_lit2 == 0)
- || (pop_lit2 > (Integer_T) sp_length)
- || (pop_lit2 < -(Integer_T) sp_length))
+ || (pop_lit2 > (Integer_T) sp_length)
+ || (pop_lit2 < -(Integer_T) sp_length))
BEGIN
push_lit_stk (s_null, STK_STR);
goto Exit_Label;
@@ -2046,20 +2088,13 @@ back to UTF-8. 23/sep/2009
BEGIN
if (pop_lit2 > 0)
BEGIN
-#ifdef UTF_8
- unsigned char frUch1[BUF_SIZE+1];
- unsigned char frUch2[BUF_SIZE+1];
- int32_t frUchCap = BUF_SIZE + 1;
- int32_t lenfrUch;
- int32_t ptrfrUch;
-#endif
if (pop_lit1 > (sp_length - (pop_lit2 - 1)))
BEGIN
pop_lit1 = sp_length - (pop_lit2 - 1);
END
#ifdef UTF_8
- lenfrUch = icu_fromUChars(frUch1, frUchCap, &uchs[pop_lit2-1], pop_lit1);
- ptrfrUch = icu_fromUChars(frUch2, frUchCap, uchs, pop_lit2-1);
+ lenfrUch = icu_fromUChar32s(frUch1, frUchCap, &uchs[pop_lit2-1], pop_lit1, uch16);
+ ptrfrUch = icu_fromUChar32s(frUch2, frUchCap, uchs, pop_lit2-1, uch16);
sp_ptr = str_start[pop_lit3] + ptrfrUch;
sp_end = sp_ptr + lenfrUch;
#else
@@ -2071,7 +2106,7 @@ back to UTF-8. 23/sep/2009
if (pop_lit3 >= cmd_str_ptr)
BEGIN
str_start[pop_lit3 + 1] = sp_end;
- UNFLUSH_STRING;
+ UNFLUSH_STRING;
INCR (lit_stk_ptr);
goto Exit_Label;
END
@@ -2079,21 +2114,14 @@ back to UTF-8. 23/sep/2009
END
else
BEGIN
-#ifdef UTF_8
- unsigned char frUch1[BUF_SIZE+1];
- unsigned char frUch2[BUF_SIZE+1];
- int32_t frUchCap = BUF_SIZE + 1;
- int32_t lenfrUch;
- int32_t ptrfrUch;
-#endif
pop_lit2 = -pop_lit2;
if (pop_lit1 > (Integer_T) (sp_length - (pop_lit2 - 1)))
BEGIN
pop_lit1 = sp_length - (pop_lit2 - 1);
END
#ifdef UTF_8
- lenfrUch = icu_fromUChars(frUch1, frUchCap, &uchs[ulen - (pop_lit2-1) - pop_lit1], pop_lit1);
- ptrfrUch = icu_fromUChars(frUch2, frUchCap, &uchs[ulen - pop_lit2], pop_lit2-1);
+ lenfrUch = icu_fromUChar32s(frUch1, frUchCap, &uchs[ulen - (pop_lit2-1) - pop_lit1], pop_lit1, uch16);
+ ptrfrUch = icu_fromUChar32s(frUch2, frUchCap, &uchs[ulen - pop_lit2], pop_lit2-1, uch16);
sp_ptr = str_start[pop_lit3] + ptrfrUch;
sp_end = str_start[pop_lit3 + 1] - ptrfrUch;
sp_ptr = sp_end - lenfrUch;
@@ -2463,7 +2491,31 @@ BEGIN
END
/*^^^^^^^^^^^^^^^^^^^^^^^^^^ END OF SECTION 448 ^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
-
+#ifdef UTF_8
+Integer_T char_width_uni (ASCIICode_T * str)
+BEGIN
+ Integer_T ch;
+ U8_GET_OR_FFFD(str, 0, 0, -1, ch);
+ if (ch<=LAST_LATIN_CHAR)
+ return ( char_width[ch] );
+ else
+ BEGIN
+ switch ( u_getIntPropertyValue(ch, UCHAR_EAST_ASIAN_WIDTH) )
+ BEGIN
+ case U_EA_WIDE:
+ case U_EA_FULLWIDTH:
+ return ( 1000 );
+ case U_EA_HALFWIDTH:
+ return ( 500 );
+ case U_EA_NARROW:
+ case U_EA_NEUTRAL:
+ case U_EA_AMBIGUOUS:
+ default:
+ return ( 700 );
+ END
+ END
+END
+#endif
/***************************************************************************
* WEB section number: 450
@@ -2593,10 +2645,22 @@ BEGIN
END
else
BEGIN
+#if UTF_8
+ string_width = string_width
+ + char_width_uni(&ex_buf[ex_buf_ptr]);
+#else
string_width = string_width
- + char_width[ex_buf[ex_buf_ptr]];
+ + char_width[ex_buf[ex_buf_ptr]];
+#endif
END
+#if UTF_8
+ if (utf8len(ex_buf[ex_buf_ptr])>0)
+ ex_buf_ptr = ex_buf_ptr + utf8len(ex_buf[ex_buf_ptr]);
+ else
+ INCR (ex_buf_ptr);
+#else
INCR (ex_buf_ptr);
+#endif
END
END
DECR (ex_buf_ptr);
@@ -2607,7 +2671,7 @@ BEGIN
BEGIN
string_width = string_width + char_width[LEFT_BRACE];
END
- END
+ END
else
BEGIN
string_width = string_width + char_width[LEFT_BRACE];
@@ -2620,9 +2684,20 @@ BEGIN
END
else
BEGIN
+#if UTF_8
+ string_width = string_width + char_width_uni(&ex_buf[ex_buf_ptr]);
+#else
string_width = string_width + char_width[ex_buf[ex_buf_ptr]];
+#endif
END
+#if UTF_8
+ if (utf8len(ex_buf[ex_buf_ptr])>0)
+ ex_buf_ptr = ex_buf_ptr + utf8len(ex_buf[ex_buf_ptr]);
+ else
+ INCR (ex_buf_ptr);
+#else
INCR (ex_buf_ptr);
+#endif
END
check_brace_level (pop_lit1);
END
diff --git a/Build/source/texk/bibtex-x/bibtex.h b/Build/source/texk/bibtex-x/bibtex.h
index c1c65d4fc09..c896598c0e5 100644
--- a/Build/source/texk/bibtex-x/bibtex.h
+++ b/Build/source/texk/bibtex-x/bibtex.h
@@ -339,6 +339,12 @@
#else
#define LAST_ASCII_CHAR 127
#endif /* SUPPORT_8BIT */
+#ifdef UTF_8
+#define LAST_LATIN_CHAR 0x17F
+#define LAST_UCS_CHAR 0x10FFFF
+#else
+#define LAST_LATIN_CHAR LAST_ASCII_CHAR
+#endif
/***************************************************************************
diff --git a/Build/source/texk/bibtex-x/configure b/Build/source/texk/bibtex-x/configure
index 5d824798725..3afa900d763 100755
--- a/Build/source/texk/bibtex-x/configure
+++ b/Build/source/texk/bibtex-x/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for extended BibTeX (TeX Live) 3.72.
+# Generated by GNU Autoconf 2.71 for extended BibTeX (TeX Live) 3.80.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -629,8 +629,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='extended BibTeX (TeX Live)'
PACKAGE_TARNAME='extended-bibtex--tex-live-'
-PACKAGE_VERSION='3.72'
-PACKAGE_STRING='extended BibTeX (TeX Live) 3.72'
+PACKAGE_VERSION='3.80'
+PACKAGE_STRING='extended BibTeX (TeX Live) 3.80'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
@@ -1399,7 +1399,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures extended BibTeX (TeX Live) 3.72 to adapt to many kinds of systems.
+\`configure' configures extended BibTeX (TeX Live) 3.80 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1471,7 +1471,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of extended BibTeX (TeX Live) 3.72:";;
+ short | recursive ) echo "Configuration of extended BibTeX (TeX Live) 3.80:";;
esac
cat <<\_ACEOF
@@ -1598,7 +1598,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-extended BibTeX (TeX Live) configure 3.72
+extended BibTeX (TeX Live) configure 3.80
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2279,7 +2279,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by extended BibTeX (TeX Live) $as_me 3.72, which was
+It was created by extended BibTeX (TeX Live) $as_me 3.80, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -8817,7 +8817,7 @@ fi
# Define the identity of the package.
PACKAGE='extended-bibtex--tex-live-'
- VERSION='3.72'
+ VERSION='3.80'
# Some tools Automake needs.
@@ -14550,7 +14550,7 @@ ac_config_headers="$ac_config_headers config.h"
-printf "%s\n" "#define TL_VERSION \"TeX Live 2023/dev\"" >>confdefs.h
+printf "%s\n" "#define TL_VERSION \"TeX Live 2022\"" >>confdefs.h
@@ -19007,7 +19007,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
-extended BibTeX (TeX Live) config.lt 3.72
+extended BibTeX (TeX Live) config.lt 3.80
configured by $0, generated by GNU Autoconf 2.71.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -21205,7 +21205,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by extended BibTeX (TeX Live) $as_me 3.72, which was
+This file was extended by extended BibTeX (TeX Live) $as_me 3.80, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21273,7 +21273,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-extended BibTeX (TeX Live) config.status 3.72
+extended BibTeX (TeX Live) config.status 3.80
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/texk/bibtex-x/configure.ac b/Build/source/texk/bibtex-x/configure.ac
index bcbafda4f5e..28a2c0f6bb9 100644
--- a/Build/source/texk/bibtex-x/configure.ac
+++ b/Build/source/texk/bibtex-x/configure.ac
@@ -8,7 +8,7 @@ dnl This file is free software; the copyright holder
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl
-AC_INIT([extended BibTeX (TeX Live)], [3.72], [tex-k@tug.org])
+AC_INIT([extended BibTeX (TeX Live)], [3.80], [tex-k@tug.org])
AC_PREREQ([2.65])
AC_CONFIG_SRCDIR([bibtex-1.c])
AC_CONFIG_AUX_DIR([../../build-aux])
diff --git a/Build/source/texk/bibtex-x/gblprocs.h b/Build/source/texk/bibtex-x/gblprocs.h
index c3be6c9c5d1..6012949ba14 100644
--- a/Build/source/texk/bibtex-x/gblprocs.h
+++ b/Build/source/texk/bibtex-x/gblprocs.h
@@ -115,6 +115,17 @@ int32_t icu_strToUpper (UChar * tarup,
int32_t tucap,
UChar * target,
int32_t tarlen);
+int32_t icu_toUChar32s (BufType_T buf,
+ BufPointer_T bf_ptr,
+ BufPointer_T len,
+ UChar32 * target,
+ int32_t tarcap,
+ UChar * buf16);
+int32_t icu_fromUChar32s (unsigned char * dest,
+ int32_t destcap,
+ const UChar32 * src,
+ int32_t srclen,
+ UChar * buf16);
#define utf8len(a) ((a)<0x80 ? 1 : ((a)<0xc2 ? -2 : ((a)<0xe0 ? 2 : ((a)<0xf0 ? 3 : ((a)<0xf5 ? 4 : -1)))))
#endif
void a_close (const AlphaFile_T file_pointer);
diff --git a/Build/source/texk/bibtex-x/gblvars.h b/Build/source/texk/bibtex-x/gblvars.h
index 3f63b1af2b8..9d984b8bcda 100644
--- a/Build/source/texk/bibtex-x/gblvars.h
+++ b/Build/source/texk/bibtex-x/gblvars.h
@@ -349,7 +349,7 @@ __EXTERN__ Integer_T total_ex_count;
__EXTERN__ AlphaFile_T aux_file[AUX_STACK_SIZE + 1];
__EXTERN__ StrNumber_T aux_list[AUX_STACK_SIZE + 1];
__EXTERN__ Integer_T aux_ln_stack[AUX_STACK_SIZE + 1];
-__EXTERN__ Integer_T char_width[LAST_ASCII_CHAR + 1];
+__EXTERN__ Integer_T char_width[LAST_LATIN_CHAR + 1];
__EXTERN__ IDType_T id_class[LAST_ASCII_CHAR + 1];
__EXTERN__ LexType_T lex_class[LAST_ASCII_CHAR + 1];
__EXTERN__ unsigned char xchr[LAST_ASCII_CHAR + 1];
diff --git a/Build/source/texk/bibtex-x/tests/bibtex8-char.test b/Build/source/texk/bibtex-x/tests/bibtex8-char.test
new file mode 100755
index 00000000000..8da266856ec
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/bibtex8-char.test
@@ -0,0 +1,43 @@
+#! /bin/sh -vx
+#
+# Copyright 2022 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+# You may freely use, modify and/or distribute this file.
+
+test -d tests || mkdir -p tests
+
+rc=0
+
+TEXMFCNF=$srcdir/../kpathsea
+BSTINPUTS=$srcdir/tests
+BIBINPUTS=$srcdir/tests
+export TEXMFCNF BSTINPUTS BIBINPUTS
+
+
+## test for add.period$
+cp $srcdir/tests/perioda.aux tests/xperioda.aux
+./bibtex8 tests/xperioda || rc=3
+diff $srcdir/tests/perioda.bbl tests/xperioda.bbl || rc=4
+
+## test for substring$
+cp $srcdir/tests/substra.aux tests/xsubstra.aux
+./bibtex8 tests/xsubstra || rc=5
+diff $srcdir/tests/substra.bbl tests/xsubstra.bbl || rc=6
+
+## test for text.length$, text.prefix$
+cp $srcdir/tests/txtprfxa.aux tests/xtxtprfxa.aux
+./bibtex8 tests/xtxtprfxa || rc=7
+diff $srcdir/tests/txtprfxa.bbl tests/xtxtprfxa.bbl || rc=8
+
+## test for width$
+cp $srcdir/tests/widtha.aux tests/xwidtha.aux
+./bibtex8 --csfile sort1.csf tests/xwidtha || rc=9
+diff $srcdir/tests/widtha.bbl tests/xwidtha.bbl || rc=10
+
+## test for chr.to.int$, int.to.str$, int.to.chr$
+cp $srcdir/tests/chara.aux tests/xchara.aux
+./bibtex8 tests/xchara || rc=11
+diff $srcdir/tests/chara.bbl tests/xchara.bbl || rc=12
+
+
+exit $rc
+
diff --git a/Build/source/texk/bibtex-x/tests/bibtex8-sort.test b/Build/source/texk/bibtex-x/tests/bibtex8-sort.test
new file mode 100755
index 00000000000..9599b0a18f3
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/bibtex8-sort.test
@@ -0,0 +1,36 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+# Using test data from Philipp Lehman <lehman@gmx.net>
+
+test -d tests || mkdir -p tests
+
+rc=0
+
+TEXMFCNF=$srcdir/../kpathsea
+BSTINPUTS=$srcdir/tests
+BIBINPUTS=$srcdir/tests
+export TEXMFCNF BSTINPUTS BIBINPUTS
+
+rm -f tests/xsort[123].bbl tests/xcase[123].bbl
+
+for i in 1 2 3; do
+
+## test for sorting and change.case$
+cp $srcdir/tests/sort.aux tests/xsort$i.aux
+./bibtex8 --csfile sort$i.csf tests/xsort$i || rc=1
+diff $srcdir/tests/sort$i.bbl tests/xsort$i.bbl || rc=2
+
+## test for change.case$
+cp $srcdir/tests/casea.aux tests/xcase$i.aux
+./bibtex8 --csfile sort$i.csf tests/xcase$i || rc=3
+diff $srcdir/tests/casea.bbl tests/xcase$i.bbl || rc=4
+
+done
+
+
+exit $rc
+
diff --git a/Build/source/texk/bibtex-x/tests/bibtex8u-mem.test b/Build/source/texk/bibtex-x/tests/bibtex8u-mem.test
new file mode 100755
index 00000000000..1993251531a
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/bibtex8u-mem.test
@@ -0,0 +1,77 @@
+#! /bin/sh -vx
+# $Id$
+# Copyright 2017 Karl Berry <tex-live@tug.org>
+# Copyright 2010 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+# Using test data from Philipp Lehman <lehman@gmx.net>
+
+test -d tests || mkdir -p tests
+
+# Create bib data
+mk_bib () {
+ for i
+ do
+ for j in 0 1 2 3 4 5 6 7 8 9; do
+ for k in 0 1 2 3 4 5 6 7 8 9; do
+ for l in 0 1 2 3 4 5 6 7 8 9; do
+ cat <<EOF
+@Type{key$i$j$k$l,
+ field001 = {Value 001},
+ field002 = {Value 002},
+ field003 = {Value 003},
+ field004 = {Value 004},
+ field005 = {Value 005},
+ field006 = {Value 006},
+ field007 = {Value 007},
+ field008 = {Value 008},
+ field009 = {Value 009},
+ field010 = {Value 010}
+}
+
+EOF
+ done
+ done
+ done
+ done
+}
+
+# Create aux data
+mk_aux () {
+ cat <<EOF
+\relax
+\citation{*}
+\bibstyle{$1}
+\bibdata{memtest}
+EOF
+}
+
+for t in 1 2 3; do
+
+ mk_aux memdata$t >tests/memtest$t.aux
+
+ env=
+
+ case $t in
+ 1) mk_bib 0 >tests/memtest.bib;;
+ 2) mk_bib 1 >>tests/memtest.bib;;
+ 3) env='ent_str_size=2000 glob_str_size=2000';;
+ esac
+
+ echo "Running memtest$t ..."
+
+ eval $env \
+ TEXMFCNF=$srcdir/../kpathsea \
+ BSTINPUTS=$srcdir/../web2c/tests:$srcdir/csf \
+ BIBINPUTS=./tests \
+ ./bibtex8 tests/memtest$t || exit 1
+
+ cp -p tests/memtest$t.aux tests/memtestu$t.aux
+ eval $env \
+ TEXMFCNF=$srcdir/../kpathsea \
+ BSTINPUTS=$srcdir/../web2c/tests:$srcdir/csf \
+ BIBINPUTS=./tests \
+ ./bibtexu tests/memtestu$t || exit 2
+
+done
+
diff --git a/Build/source/texk/bibtex-x/tests/bibtexu-char.test b/Build/source/texk/bibtex-x/tests/bibtexu-char.test
new file mode 100755
index 00000000000..604226a1762
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/bibtexu-char.test
@@ -0,0 +1,44 @@
+#! /bin/sh -vx
+#
+# Copyright 2022 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+# You may freely use, modify and/or distribute this file.
+
+test -d tests || mkdir -p tests
+
+rc=0
+
+TEXMFCNF=$srcdir/../kpathsea
+BSTINPUTS=$srcdir/tests
+BIBINPUTS=$srcdir/tests
+export TEXMFCNF BSTINPUTS BIBINPUTS
+
+
+## test for add.period$
+cp $srcdir/tests/periodu.aux tests/xperiodu.aux
+./bibtexu tests/xperiodu || rc=3
+diff $srcdir/tests/periodu.bbl tests/xperiodu.bbl || rc=4
+
+## test for substring$
+cp $srcdir/tests/substru.aux tests/xsubstru.aux
+./bibtexu tests/xsubstru || rc=5
+diff $srcdir/tests/substru.bbl tests/xsubstru.bbl || rc=6
+
+## test for text.length$, text.prefix$
+cp $srcdir/tests/txtprfxu.aux tests/xtxtprfxu.aux
+./bibtexu tests/xtxtprfxu || rc=7
+diff $srcdir/tests/txtprfxu.bbl tests/xtxtprfxu.bbl || rc=8
+
+## test for width$
+## (FIXME) Greek, Cyrillic are not impremented yet
+cp $srcdir/tests/widthu.aux tests/xwidthu.aux
+./bibtexu tests/xwidthu || rc=9
+diff $srcdir/tests/widthu.bbl tests/xwidthu.bbl || rc=10
+
+## test for chr.to.int$, int.to.str$, int.to.chr$
+cp $srcdir/tests/charu.aux tests/xcharu.aux
+./bibtexu tests/xcharu || rc=11
+diff $srcdir/tests/charu.bbl tests/xcharu.bbl || rc=12
+
+
+exit $rc
+
diff --git a/Build/source/texk/bibtex-x/tests/bibtexu-sort.test b/Build/source/texk/bibtex-x/tests/bibtexu-sort.test
new file mode 100755
index 00000000000..8dc6d02078f
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/bibtexu-sort.test
@@ -0,0 +1,36 @@
+#! /bin/sh -vx
+#
+# Copyright 2022 TANAKA Takuji <ttk@t-lab.opal.ne.jp>
+# You may freely use, modify and/or distribute this file.
+
+test -d tests || mkdir -p tests
+
+rc=0
+
+TEXMFCNF=$srcdir/../kpathsea
+BSTINPUTS=$srcdir/tests
+BIBINPUTS=$srcdir/tests
+export TEXMFCNF BSTINPUTS BIBINPUTS
+
+rm -f tests/xsortu-*.bbl tests/xcaseu.bbl
+
+for loc in en az da fi tr; do
+
+## test for sorting and change.case$
+cp $srcdir/tests/sortu.aux tests/xsortu-$loc.aux
+./bibtexu -o $loc tests/xsortu-$loc || rc=1
+diff $srcdir/tests/sortu-$loc.bbl tests/xsortu-$loc.bbl || rc=2
+
+done
+
+
+## test for change.case$
+cp $srcdir/tests/caseu.aux tests/xcaseu.aux
+./bibtexu tests/xcaseu || rc=3
+diff $srcdir/tests/caseu.bbl tests/xcaseu.bbl || rc=4
+
+
+exit $rc
+
+
+
diff --git a/Build/source/texk/bibtex-x/tests/casea.aux b/Build/source/texk/bibtex-x/tests/casea.aux
new file mode 100644
index 00000000000..6c0ae9369ad
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/casea.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testcase}
+\bibdata{testcasea}
diff --git a/Build/source/texk/bibtex-x/tests/casea.bbl b/Build/source/texk/bibtex-x/tests/casea.bbl
new file mode 100644
index 00000000000..38573a40cc2
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/casea.bbl
@@ -0,0 +1,12 @@
+\section*{Test result}
+\begin{itemize}
+\item[~] ABC HIJ XYZ abc hij xyz
+\item[u] ABC HIJ XYZ ABC HIJ XYZ
+\item[l] abc hij xyz abc hij xyz
+\item[t] Abc hij xyz abc hij xyz
+\item[~]
+\item[u]
+\item[l]
+\item[t]
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/caseu.aux b/Build/source/texk/bibtex-x/tests/caseu.aux
new file mode 100644
index 00000000000..bd03d76dbb9
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/caseu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testcase}
+\bibdata{testcaseu}
diff --git a/Build/source/texk/bibtex-x/tests/caseu.bbl b/Build/source/texk/bibtex-x/tests/caseu.bbl
new file mode 100644
index 00000000000..0a0cf14263c
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/caseu.bbl
@@ -0,0 +1,52 @@
+\section*{Test result}
+\begin{itemize}
+\item[~] ÀÁÂ ÆÇÈ ÔÕÖ ØÙÚ ÜÝÞ àáâ æçè ôõö øùú üýþ
+\item[u] ÀÁÂ ÆÇÈ ÔÕÖ ØÙÚ ÜÝÞ ÀÁÂ ÆÇÈ ÔÕÖ ØÙÚ ÜÝÞ
+\item[l] àáâ æçè ôõö øùú üýþ àáâ æçè ôõö øùú üýþ
+\item[t] Àáâ æçè ôõö øùú üýþ àáâ æçè ôõö øùú üýþ
+\item[~] ĀĂĄ IJĴĶ ĹĻĽ ŃŅŇ āăą ijĵķ ĺļľ ńņň
+\item[u] ĀĂĄ IJĴĶ ĹĻĽ ŃŅŇ ĀĂĄ IJĴĶ ĹĻĽ ŃŅŇ
+\item[l] āăą ijĵķ ĺļľ ńņň āăą ijĵķ ĺļľ ńņň
+\item[t] Āăą ijĵķ ĺļľ ńņň āăą ijĵķ ĺļľ ńņň
+\item[~] ABC HIJ XYZ abc hij xyz
+\item[u] ABC HIJ XYZ ABC HIJ XYZ
+\item[l] abc hij xyz abc hij xyz
+\item[t] Abc hij xyz abc hij xyz
+\item[~] SS S ß s
+\item[u] SS S SS S
+\item[l] ss s ß s
+\item[t] Ss s ß s
+\item[~] ŊŌŎ ŲŴŶ Ÿ ŹŻŽ ŋōŏ ųŵŷ ÿ źżž
+\item[u] ŊŌŎ ŲŴŶ Ÿ ŹŻŽ ŊŌŎ ŲŴŶ Ÿ ŹŻŽ
+\item[l] ŋōŏ ųŵŷ ÿ źżž ŋōŏ ųŵŷ ÿ źżž
+\item[t] Ŋōŏ ųŵŷ ÿ źżž ŋōŏ ųŵŷ ÿ źżž
+\item[~] ΑΒΓ ΠΡ ΣΤ ΧΨΩΪ αβγ πρ στ χψωϊ
+\item[u] ΑΒΓ ΠΡ ΣΤ ΧΨΩΪ ΑΒΓ ΠΡ ΣΤ ΧΨΩΪ
+\item[l] αβγ πρ στ χψωϊ αβγ πρ στ χψωϊ
+\item[t] Αβγ πρ στ χψωϊ αβγ πρ στ χψωϊ
+\item[~] ͰͲͶ ϘϚϜ ϪϬϮ Ϸ Ϻ ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ
+\item[u] ͰͲͶ ϘϚϜ ϪϬϮ Ϸ Ϻ ͰͲͶ ϘϚϜ ϪϬϮ Ϸ Ϻ
+\item[l] ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ
+\item[t] Ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ
+\item[~] ӐӒӔ ӺӼӾ ԀԂԄ ԪԬԮ ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ
+\item[u] ӐӒӔ ӺӼӾ ԀԂԄ ԪԬԮ ӐӒӔ ӺӼӾ ԀԂԄ ԪԬԮ
+\item[l] ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ
+\item[t] Ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ
+\item[~] АБВ ОП РС ЭЮЯ абв оп рс эюя
+\item[u] АБВ ОП РС ЭЮЯ АБВ ОП РС ЭЮЯ
+\item[l] абв оп рс эюя абв оп рс эюя
+\item[t] Абв оп рс эюя абв оп рс эюя
+\item[~] ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ ѐёђѓєѕіїјљњћќѝўџ
+\item[u] ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ
+\item[l] ѐёђѓєѕіїјљњћќѝўџ ѐёђѓєѕіїјљњћќѝўџ
+\item[t] Ѐёђѓєѕіїјљњћќѝўџ ѐёђѓєѕіїјљњћќѝўџ
+\item[~] ѠѢѤ ѼѾҀ ҊҌҎ ҺҼҾ ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ
+\item[u] ѠѢѤ ѼѾҀ ҊҌҎ ҺҼҾ ѠѢѤ ѼѾҀ ҊҌҎ ҺҼҾ
+\item[l] ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ
+\item[t] Ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ
+\item[~] Ӏ ӁӃӅ ӉӋӍ ӏ ӂӄӆ ӊӌӎ
+\item[u] Ӏ ӁӃӅ ӉӋӍ Ӏ ӁӃӅ ӉӋӍ
+\item[l] ӏ ӂӄӆ ӊӌӎ ӏ ӂӄӆ ӊӌӎ
+\item[t] Ӏ ӂӄӆ ӊӌӎ ӏ ӂӄӆ ӊӌӎ
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/chara.aux b/Build/source/texk/bibtex-x/tests/chara.aux
new file mode 100644
index 00000000000..218274582d9
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/chara.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testchar}
+\bibdata{testchara}
diff --git a/Build/source/texk/bibtex-x/tests/chara.bbl b/Build/source/texk/bibtex-x/tests/chara.bbl
new file mode 100644
index 00000000000..f9702804425
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/chara.bbl
@@ -0,0 +1,20 @@
+\section*{Test result}
+\begin{itemize}
+\item A i2str: 65 i2chr: A
+\item C i2str: 67 i2chr: C
+\item D i2str: 68 i2chr: D
+\item E i2str: 69 i2chr: E
+\item i i2str: 105 i2chr: i
+\item o i2str: 111 i2chr: o
+\item u i2str: 117 i2chr: u
+\item y i2str: 121 i2chr: y
+\item i2str: 197 i2chr:
+\item i2str: 199 i2chr:
+\item i2str: 208 i2chr:
+\item i2str: 200 i2chr:
+\item i2str: 238 i2chr:
+\item i2str: 248 i2chr:
+\item i2str: 252 i2chr:
+\item i2str: 253 i2chr:
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/charu.aux b/Build/source/texk/bibtex-x/tests/charu.aux
new file mode 100644
index 00000000000..76f1a5c09e4
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/charu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testchar}
+\bibdata{testcharu}
diff --git a/Build/source/texk/bibtex-x/tests/charu.bbl b/Build/source/texk/bibtex-x/tests/charu.bbl
new file mode 100644
index 00000000000..b268af5eb98
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/charu.bbl
@@ -0,0 +1,53 @@
+\section*{Test result}
+\begin{itemize}
+\item   i2str: 12288 i2chr:  
+\item A i2str: 65 i2chr: A
+\item Å i2str: 197 i2chr: Å
+\item C i2str: 67 i2chr: C
+\item Ç i2str: 199 i2chr: Ç
+\item D i2str: 68 i2chr: D
+\item E i2str: 69 i2chr: E
+\item È i2str: 200 i2chr: È
+\item i i2str: 105 i2chr: i
+\item î i2str: 238 i2chr: î
+\item o i2str: 111 i2chr: o
+\item u i2str: 117 i2chr: u
+\item ü i2str: 252 i2chr: ü
+\item y i2str: 121 i2chr: y
+\item ý i2str: 253 i2chr: ý
+\item Ð i2str: 208 i2chr: Ð
+\item ø i2str: 248 i2chr: ø
+\item Α i2str: 913 i2chr: Α
+\item Β i2str: 914 i2chr: Β
+\item Γ i2str: 915 i2chr: Γ
+\item χ i2str: 967 i2chr: χ
+\item ψ i2str: 968 i2chr: ψ
+\item ω i2str: 969 i2chr: ω
+\item А i2str: 1040 i2chr: А
+\item Б i2str: 1041 i2chr: Б
+\item В i2str: 1042 i2chr: В
+\item э i2str: 1101 i2chr: э
+\item ю i2str: 1102 i2chr: ю
+\item я i2str: 1103 i2chr: я
+\item 가 i2str: 44032 i2chr: 가
+\item 글 i2str: 44544 i2chr: 글
+\item 나 i2str: 45208 i2chr: 나
+\item 다 i2str: 45796 i2chr: 다
+\item 텍 i2str: 53581 i2chr: 텍
+\item 한 i2str: 54620 i2chr: 한
+\item あ i2str: 12354 i2chr: あ
+\item い i2str: 12356 i2chr: い
+\item う i2str: 12358 i2chr: う
+\item ヱ i2str: 12529 i2chr: ヱ
+\item ヲ i2str: 12530 i2chr: ヲ
+\item ン i2str: 12531 i2chr: ン
+\item 一 i2str: 19968 i2chr: 一
+\item 三 i2str: 19977 i2chr: 三
+\item 二 i2str: 20108 i2chr: 二
+\item 𠮟 i2str: 134047 i2chr: 𠮟
+\item 拾 i2str: 25342 i2chr: 拾
+\item 捌 i2str: 25420 i2chr: 捌
+\item 玖 i2str: 29590 i2chr: 玖
+\item 𥝱 i2str: 153457 i2chr: 𥝱
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/perioda.aux b/Build/source/texk/bibtex-x/tests/perioda.aux
new file mode 100644
index 00000000000..a2d909eb7f2
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/perioda.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testperiod}
+\bibdata{testperioda}
diff --git a/Build/source/texk/bibtex-x/tests/perioda.bbl b/Build/source/texk/bibtex-x/tests/perioda.bbl
new file mode 100644
index 00000000000..86a530cd233
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/perioda.bbl
@@ -0,0 +1,14 @@
+\section*{Test result}
+\begin{itemize}
+\item[~~] ABC xyz
+\item[ap] ABC xyz.
+\item[~~] ABC xyz.
+\item[ap] ABC xyz.
+\item[~~] ABC xyz!
+\item[ap] ABC xyz!
+\item[~~] ABC xyz?
+\item[ap] ABC xyz?
+\item[~~] ABC xyz,
+\item[ap] ABC xyz,.
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/periodu.aux b/Build/source/texk/bibtex-x/tests/periodu.aux
new file mode 100644
index 00000000000..53780573202
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/periodu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testperiod}
+\bibdata{testperiodu}
diff --git a/Build/source/texk/bibtex-x/tests/periodu.bbl b/Build/source/texk/bibtex-x/tests/periodu.bbl
new file mode 100644
index 00000000000..65bf03f6383
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/periodu.bbl
@@ -0,0 +1,48 @@
+\section*{Test result}
+\begin{itemize}
+\item[~~] ABC xyz
+\item[ap] ABC xyz.
+\item[~~] ABC xyz!
+\item[ap] ABC xyz!
+\item[~~] ABC xyz,
+\item[ap] ABC xyz,.
+\item[~~] ABC xyz.
+\item[ap] ABC xyz.
+\item[~~] ABC xyz?
+\item[ap] ABC xyz?
+\item[~~] АБВ эюя
+\item[ap] АБВ эюя.
+\item[~~] АБВ эюя!
+\item[ap] АБВ эюя!
+\item[~~] АБВ эюя,
+\item[ap] АБВ эюя,.
+\item[~~] АБВ эюя.
+\item[ap] АБВ эюя.
+\item[~~] АБВ эюя?
+\item[ap] АБВ эюя?
+\item[~~] あいうわおん
+\item[ap] あいうわおん.
+\item[~~] あいうわおん,
+\item[ap] あいうわおん,.
+\item[~~] あいうわおん、
+\item[ap] あいうわおん、.
+\item[~~] あいうわおん!
+\item[ap] あいうわおん!
+\item[~~] あいうわおん‼
+\item[ap] あいうわおん‼
+\item[~~] あいうわおん⁉
+\item[ap] あいうわおん⁉
+\item[~~] あいうわおん?
+\item[ap] あいうわおん?
+\item[~~] あいうわおん⁈
+\item[ap] あいうわおん⁈
+\item[~~] あいうわおん⁇
+\item[ap] あいうわおん⁇
+\item[~~] あいうわおん‽
+\item[ap] あいうわおん‽
+\item[~~] あいうわおん.
+\item[ap] あいうわおん.
+\item[~~] あいうわおん。
+\item[ap] あいうわおん。
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu-az.bbl b/Build/source/texk/bibtex-x/tests/sortu-az.bbl
new file mode 100644
index 00000000000..58a526aecbb
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu-az.bbl
@@ -0,0 +1,15 @@
+\section*{Test result}
+\begin{itemize}
+\item Aa AA aa
+\item Åå ÅÅ åå
+\item Ää ÄÄ ää
+\item Bb BB bb
+\item Cc CC cc
+\item Xx XX xx
+\item Oo OO oo
+\item Øø ØØ øø
+\item Öö ÖÖ öö
+\item Yy YY yy
+\item Zz ZZ zz
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu-da.bbl b/Build/source/texk/bibtex-x/tests/sortu-da.bbl
new file mode 100644
index 00000000000..faa1b9f351c
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu-da.bbl
@@ -0,0 +1,15 @@
+\section*{Test result}
+\begin{itemize}
+\item Bb BB bb
+\item Cc CC cc
+\item Oo OO oo
+\item Xx XX xx
+\item Yy YY yy
+\item Zz ZZ zz
+\item Ää ÄÄ ää
+\item Øø ØØ øø
+\item Öö ÖÖ öö
+\item Aa AA aa
+\item Åå ÅÅ åå
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu-en.bbl b/Build/source/texk/bibtex-x/tests/sortu-en.bbl
new file mode 100644
index 00000000000..68d35c1a1e6
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu-en.bbl
@@ -0,0 +1,15 @@
+\section*{Test result}
+\begin{itemize}
+\item Aa AA aa
+\item Åå ÅÅ åå
+\item Ää ÄÄ ää
+\item Bb BB bb
+\item Cc CC cc
+\item Oo OO oo
+\item Öö ÖÖ öö
+\item Øø ØØ øø
+\item Xx XX xx
+\item Yy YY yy
+\item Zz ZZ zz
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu-fi.bbl b/Build/source/texk/bibtex-x/tests/sortu-fi.bbl
new file mode 100644
index 00000000000..40adb287ce0
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu-fi.bbl
@@ -0,0 +1,15 @@
+\section*{Test result}
+\begin{itemize}
+\item Aa AA aa
+\item Bb BB bb
+\item Cc CC cc
+\item Oo OO oo
+\item Xx XX xx
+\item Yy YY yy
+\item Zz ZZ zz
+\item Åå ÅÅ åå
+\item Ää ÄÄ ää
+\item Öö ÖÖ öö
+\item Øø ØØ øø
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu-tr.bbl b/Build/source/texk/bibtex-x/tests/sortu-tr.bbl
new file mode 100644
index 00000000000..4d874b184e0
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu-tr.bbl
@@ -0,0 +1,15 @@
+\section*{Test result}
+\begin{itemize}
+\item Aa AA aa
+\item Åå ÅÅ åå
+\item Ää ÄÄ ää
+\item Bb BB bb
+\item Cc CC cc
+\item Oo OO oo
+\item Øø ØØ øø
+\item Öö ÖÖ öö
+\item Xx XX xx
+\item Yy YY yy
+\item Zz ZZ zz
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/sortu.aux b/Build/source/texk/bibtex-x/tests/sortu.aux
new file mode 100644
index 00000000000..24dd5d4b090
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/sortu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{teststyle}
+\bibdata{testdatau}
diff --git a/Build/source/texk/bibtex-x/tests/substra.aux b/Build/source/texk/bibtex-x/tests/substra.aux
new file mode 100644
index 00000000000..19ee643a1f2
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/substra.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testsubstr}
+\bibdata{testsubstra}
diff --git a/Build/source/texk/bibtex-x/tests/substra.bbl b/Build/source/texk/bibtex-x/tests/substra.bbl
new file mode 100644
index 00000000000..4767b583627
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/substra.bbl
@@ -0,0 +1,90 @@
+\section*{Test result}
+\begin{itemize}
+\item[orig] ABCDEFG tuvwxyz
+\item[1 1] A
+\item[1 2] AB
+\item[1 3] ABC
+\item[1 4] ABCD
+\item[1 5] ABCDE
+\item[1 6] ABCDEF
+\item[1 7] ABCDEFG
+\item[1 1] A
+\item[2 1] B
+\item[3 1] C
+\item[4 1] D
+\item[5 1] E
+\item[6 1] F
+\item[7 1] G
+\item[-1 1] z
+\item[-1 2] yz
+\item[-1 3] xyz
+\item[-1 4] wxyz
+\item[-1 5] vwxyz
+\item[-1 6] uvwxyz
+\item[-1 7] tuvwxyz
+\item[-2 7] tuvwxy
+\item[-3 7] G tuvwx
+\item[-4 7] FG tuvw
+\item[-5 7] EFG tuv
+\item[-6 7] DEFG tu
+\item[-7 7] CDEFG t
+\item[-1 7] tuvwxyz
+\item[-2 6] tuvwxy
+\item[-3 5] tuvwx
+\item[-4 4] tuvw
+\item[-5 3] tuv
+\item[-6 2] tu
+\item[-7 1] t
+\item[-1 8] tuvwxyz
+\item[-2 7] tuvwxy
+\item[-3 6] tuvwx
+\item[-4 5] tuvw
+\item[-5 4] tuv
+\item[-6 3] tu
+\item[-7 2] t
+\item[-8 1] t
+\item[orig]
+\item[1 1]
+\item[1 2]
+\item[1 3]
+\item[1 4]
+\item[1 5]
+\item[1 6]
+\item[1 7]
+\item[1 1]
+\item[2 1]
+\item[3 1]
+\item[4 1]
+\item[5 1]
+\item[6 1]
+\item[7 1]
+\item[-1 1]
+\item[-1 2]
+\item[-1 3]
+\item[-1 4]
+\item[-1 5]
+\item[-1 6]
+\item[-1 7]
+\item[-2 7]
+\item[-3 7]
+\item[-4 7]
+\item[-5 7]
+\item[-6 7]
+\item[-7 7]
+\item[-1 7]
+\item[-2 6]
+\item[-3 5]
+\item[-4 4]
+\item[-5 3]
+\item[-6 2]
+\item[-7 1]
+\item[-1 8]
+\item[-2 7]
+\item[-3 6]
+\item[-4 5]
+\item[-5 4]
+\item[-6 3]
+\item[-7 2]
+\item[-8 1]
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/substru.aux b/Build/source/texk/bibtex-x/tests/substru.aux
new file mode 100644
index 00000000000..79098b209de
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/substru.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testsubstr}
+\bibdata{testsubstru}
diff --git a/Build/source/texk/bibtex-x/tests/substru.bbl b/Build/source/texk/bibtex-x/tests/substru.bbl
new file mode 100644
index 00000000000..742d8dcf456
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/substru.bbl
@@ -0,0 +1,305 @@
+\section*{Test result}
+\begin{itemize}
+\item[orig] ABCDEFG tuvwxyz
+\item[1 1] A
+\item[1 2] AB
+\item[1 3] ABC
+\item[1 4] ABCD
+\item[1 5] ABCDE
+\item[1 6] ABCDEF
+\item[1 7] ABCDEFG
+\item[1 1] A
+\item[2 1] B
+\item[3 1] C
+\item[4 1] D
+\item[5 1] E
+\item[6 1] F
+\item[7 1] G
+\item[-1 1] z
+\item[-1 2] yz
+\item[-1 3] xyz
+\item[-1 4] wxyz
+\item[-1 5] vwxyz
+\item[-1 6] uvwxyz
+\item[-1 7] tuvwxyz
+\item[-2 7] tuvwxy
+\item[-3 7] G tuvwx
+\item[-4 7] FG tuvw
+\item[-5 7] EFG tuv
+\item[-6 7] DEFG tu
+\item[-7 7] CDEFG t
+\item[-1 7] tuvwxyz
+\item[-2 6] tuvwxy
+\item[-3 5] tuvwx
+\item[-4 4] tuvw
+\item[-5 3] tuv
+\item[-6 2] tu
+\item[-7 1] t
+\item[-1 8] tuvwxyz
+\item[-2 7] tuvwxy
+\item[-3 6] tuvwx
+\item[-4 5] tuvw
+\item[-5 4] tuv
+\item[-6 3] tu
+\item[-7 2] t
+\item[-8 1] t
+\item[orig] ÅÇÈÎØÜÝ åçèîøüý
+\item[1 1] Å
+\item[1 2] ÅÇ
+\item[1 3] ÅÇÈ
+\item[1 4] ÅÇÈÎ
+\item[1 5] ÅÇÈÎØ
+\item[1 6] ÅÇÈÎØÜ
+\item[1 7] ÅÇÈÎØÜÝ
+\item[1 1] Å
+\item[2 1] Ç
+\item[3 1] È
+\item[4 1] Î
+\item[5 1] Ø
+\item[6 1] Ü
+\item[7 1] Ý
+\item[-1 1] ý
+\item[-1 2] üý
+\item[-1 3] øüý
+\item[-1 4] îøüý
+\item[-1 5] èîøüý
+\item[-1 6] çèîøüý
+\item[-1 7] åçèîøüý
+\item[-2 7] åçèîøü
+\item[-3 7] Ý åçèîø
+\item[-4 7] ÜÝ åçèî
+\item[-5 7] ØÜÝ åçè
+\item[-6 7] ÎØÜÝ åç
+\item[-7 7] ÈÎØÜÝ å
+\item[-1 7] åçèîøüý
+\item[-2 6] åçèîøü
+\item[-3 5] åçèîø
+\item[-4 4] åçèî
+\item[-5 3] åçè
+\item[-6 2] åç
+\item[-7 1] å
+\item[-1 8] åçèîøüý
+\item[-2 7] åçèîøü
+\item[-3 6] åçèîø
+\item[-4 5] åçèî
+\item[-5 4] åçè
+\item[-6 3] åç
+\item[-7 2] å
+\item[-8 1] å
+\item[orig] ΑΒΓΔΕΖΗ στυφχψω
+\item[1 1] Α
+\item[1 2] ΑΒ
+\item[1 3] ΑΒΓ
+\item[1 4] ΑΒΓΔ
+\item[1 5] ΑΒΓΔΕ
+\item[1 6] ΑΒΓΔΕΖ
+\item[1 7] ΑΒΓΔΕΖΗ
+\item[1 1] Α
+\item[2 1] Β
+\item[3 1] Γ
+\item[4 1] Δ
+\item[5 1] Ε
+\item[6 1] Ζ
+\item[7 1] Η
+\item[-1 1] ω
+\item[-1 2] ψω
+\item[-1 3] χψω
+\item[-1 4] φχψω
+\item[-1 5] υφχψω
+\item[-1 6] τυφχψω
+\item[-1 7] στυφχψω
+\item[-2 7] στυφχψ
+\item[-3 7] Η στυφχ
+\item[-4 7] ΖΗ στυφ
+\item[-5 7] ΕΖΗ στυ
+\item[-6 7] ΔΕΖΗ στ
+\item[-7 7] ΓΔΕΖΗ σ
+\item[-1 7] στυφχψω
+\item[-2 6] στυφχψ
+\item[-3 5] στυφχ
+\item[-4 4] στυφ
+\item[-5 3] στυ
+\item[-6 2] στ
+\item[-7 1] σ
+\item[-1 8] στυφχψω
+\item[-2 7] στυφχψ
+\item[-3 6] στυφχ
+\item[-4 5] στυφ
+\item[-5 4] στυ
+\item[-6 3] στ
+\item[-7 2] σ
+\item[-8 1] σ
+\item[orig] АБВГДЕЖ щъыьэюя
+\item[1 1] А
+\item[1 2] АБ
+\item[1 3] АБВ
+\item[1 4] АБВГ
+\item[1 5] АБВГД
+\item[1 6] АБВГДЕ
+\item[1 7] АБВГДЕЖ
+\item[1 1] А
+\item[2 1] Б
+\item[3 1] В
+\item[4 1] Г
+\item[5 1] Д
+\item[6 1] Е
+\item[7 1] Ж
+\item[-1 1] я
+\item[-1 2] юя
+\item[-1 3] эюя
+\item[-1 4] ьэюя
+\item[-1 5] ыьэюя
+\item[-1 6] ъыьэюя
+\item[-1 7] щъыьэюя
+\item[-2 7] щъыьэю
+\item[-3 7] Ж щъыьэ
+\item[-4 7] ЕЖ щъыь
+\item[-5 7] ДЕЖ щъы
+\item[-6 7] ГДЕЖ щъ
+\item[-7 7] ВГДЕЖ щ
+\item[-1 7] щъыьэюя
+\item[-2 6] щъыьэю
+\item[-3 5] щъыьэ
+\item[-4 4] щъыь
+\item[-5 3] щъы
+\item[-6 2] щъ
+\item[-7 1] щ
+\item[-1 8] щъыьэюя
+\item[-2 7] щъыьэю
+\item[-3 6] щъыьэ
+\item[-4 5] щъыь
+\item[-5 4] щъы
+\item[-6 3] щъ
+\item[-7 2] щ
+\item[-8 1] щ
+\item[orig] あいうえおかき ユヨワヰヱヲン
+\item[1 1] あ
+\item[1 2] あい
+\item[1 3] あいう
+\item[1 4] あいうえ
+\item[1 5] あいうえお
+\item[1 6] あいうえおか
+\item[1 7] あいうえおかき
+\item[1 1] あ
+\item[2 1] い
+\item[3 1] う
+\item[4 1] え
+\item[5 1] お
+\item[6 1] か
+\item[7 1] き
+\item[-1 1] ン
+\item[-1 2] ヲン
+\item[-1 3] ヱヲン
+\item[-1 4] ヰヱヲン
+\item[-1 5] ワヰヱヲン
+\item[-1 6] ヨワヰヱヲン
+\item[-1 7] ユヨワヰヱヲン
+\item[-2 7]  ユヨワヰヱヲ
+\item[-3 7] き ユヨワヰヱ
+\item[-4 7] かき ユヨワヰ
+\item[-5 7] おかき ユヨワ
+\item[-6 7] えおかき ユヨ
+\item[-7 7] うえおかき ユ
+\item[-1 7] ユヨワヰヱヲン
+\item[-2 6] ユヨワヰヱヲ
+\item[-3 5] ユヨワヰヱ
+\item[-4 4] ユヨワヰ
+\item[-5 3] ユヨワ
+\item[-6 2] ユヨ
+\item[-7 1] ユ
+\item[-1 8]  ユヨワヰヱヲン
+\item[-2 7]  ユヨワヰヱヲ
+\item[-3 6]  ユヨワヰヱ
+\item[-4 5]  ユヨワヰ
+\item[-5 4]  ユヨワ
+\item[-6 3]  ユヨ
+\item[-7 2]  ユ
+\item[-8 1] ユ
+\item[orig] 一二三四五六七 肆伍陸漆捌玖拾
+\item[1 1] 一
+\item[1 2] 一二
+\item[1 3] 一二三
+\item[1 4] 一二三四
+\item[1 5] 一二三四五
+\item[1 6] 一二三四五六
+\item[1 7] 一二三四五六七
+\item[1 1] 一
+\item[2 1] 二
+\item[3 1] 三
+\item[4 1] 四
+\item[5 1] 五
+\item[6 1] 六
+\item[7 1] 七
+\item[-1 1] 拾
+\item[-1 2] 玖拾
+\item[-1 3] 捌玖拾
+\item[-1 4] 漆捌玖拾
+\item[-1 5] 陸漆捌玖拾
+\item[-1 6] 伍陸漆捌玖拾
+\item[-1 7] 肆伍陸漆捌玖拾
+\item[-2 7]  肆伍陸漆捌玖
+\item[-3 7] 七 肆伍陸漆捌
+\item[-4 7] 六七 肆伍陸漆
+\item[-5 7] 五六七 肆伍陸
+\item[-6 7] 四五六七 肆伍
+\item[-7 7] 三四五六七 肆
+\item[-1 7] 肆伍陸漆捌玖拾
+\item[-2 6] 肆伍陸漆捌玖
+\item[-3 5] 肆伍陸漆捌
+\item[-4 4] 肆伍陸漆
+\item[-5 3] 肆伍陸
+\item[-6 2] 肆伍
+\item[-7 1] 肆
+\item[-1 8]  肆伍陸漆捌玖拾
+\item[-2 7]  肆伍陸漆捌玖
+\item[-3 6]  肆伍陸漆捌
+\item[-4 5]  肆伍陸漆
+\item[-5 4]  肆伍陸
+\item[-6 3]  肆伍
+\item[-7 2]  肆
+\item[-8 1] 肆
+\item[orig] 櫛杓屠冤𦥑𠮟𠀋𡈽𥝱𨦇𡚴𠷡𧘕𧘔𩸽
+\item[1 1] 櫛
+\item[1 2] 櫛杓
+\item[1 3] 櫛杓屠
+\item[1 4] 櫛杓屠冤
+\item[1 5] 櫛杓屠冤𦥑
+\item[1 6] 櫛杓屠冤𦥑𠮟
+\item[1 7] 櫛杓屠冤𦥑𠮟𠀋
+\item[1 1] 櫛
+\item[2 1] 杓
+\item[3 1] 屠
+\item[4 1] 冤
+\item[5 1] 𦥑
+\item[6 1] 𠮟
+\item[7 1] 𠀋
+\item[-1 1] 𩸽
+\item[-1 2] 𧘔𩸽
+\item[-1 3] 𧘕𧘔𩸽
+\item[-1 4] 𠷡𧘕𧘔𩸽
+\item[-1 5] 𡚴𠷡𧘕𧘔𩸽
+\item[-1 6] 𨦇𡚴𠷡𧘕𧘔𩸽
+\item[-1 7] 𥝱𨦇𡚴𠷡𧘕𧘔𩸽
+\item[-2 7] 𡈽𥝱𨦇𡚴𠷡𧘕𧘔
+\item[-3 7] 𠀋𡈽𥝱𨦇𡚴𠷡𧘕
+\item[-4 7] 𠮟𠀋𡈽𥝱𨦇𡚴𠷡
+\item[-5 7] 𦥑𠮟𠀋𡈽𥝱𨦇𡚴
+\item[-6 7] 冤𦥑𠮟𠀋𡈽𥝱𨦇
+\item[-7 7] 屠冤𦥑𠮟𠀋𡈽𥝱
+\item[-1 7] 𥝱𨦇𡚴𠷡𧘕𧘔𩸽
+\item[-2 6] 𥝱𨦇𡚴𠷡𧘕𧘔
+\item[-3 5] 𥝱𨦇𡚴𠷡𧘕
+\item[-4 4] 𥝱𨦇𡚴𠷡
+\item[-5 3] 𥝱𨦇𡚴
+\item[-6 2] 𥝱𨦇
+\item[-7 1] 𥝱
+\item[-1 8] 𡈽𥝱𨦇𡚴𠷡𧘕𧘔𩸽
+\item[-2 7] 𡈽𥝱𨦇𡚴𠷡𧘕𧘔
+\item[-3 6] 𡈽𥝱𨦇𡚴𠷡𧘕
+\item[-4 5] 𡈽𥝱𨦇𡚴𠷡
+\item[-5 4] 𡈽𥝱𨦇𡚴
+\item[-6 3] 𡈽𥝱𨦇
+\item[-7 2] 𡈽𥝱
+\item[-8 1] 𥝱
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/testcase.bst b/Build/source/texk/bibtex-x/tests/testcase.bst
new file mode 100644
index 00000000000..e6e1fe0d2cb
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testcase.bst
@@ -0,0 +1,40 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item[~] " field *
+ write$ newline$
+ "\item[u] " field "u" change.case$ *
+ write$ newline$
+ "\item[l] " field "l" change.case$ *
+ write$ newline$
+ "\item[t] " field "t" change.case$ *
+ write$ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testcasea.bib b/Build/source/texk/bibtex-x/tests/testcasea.bib
new file mode 100644
index 00000000000..0892d7daa8f
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testcasea.bib
@@ -0,0 +1,8 @@
+@Type{ascii,
+ field = {ABC HIJ XYZ abc hij xyz},
+}
+
+@Type{latin1,
+ field = { },
+}
+
diff --git a/Build/source/texk/bibtex-x/tests/testcaseu.bib b/Build/source/texk/bibtex-x/tests/testcaseu.bib
new file mode 100644
index 00000000000..5fba9ca43bc
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testcaseu.bib
@@ -0,0 +1,48 @@
+@Type{ascii,
+ field = {ABC HIJ XYZ abc hij xyz},
+}
+
+@Type{latin1,
+ field = {ÀÁÂ ÆÇÈ ÔÕÖ ØÙÚ ÜÝÞ àáâ æçè ôõö øùú üýþ},
+}
+
+@Type{latin-extA1,
+ field = {ĀĂĄ IJĴĶ ĹĻĽ ŃŅŇ āăą ijĵķ ĺļľ ńņň},
+}
+
+@Type{latin-extA2,
+ field = {ŊŌŎ ŲŴŶ Ÿ ŹŻŽ ŋōŏ ųŵŷ ÿ źżž},
+}
+
+@Type{latin-SharpS,
+ field = {SS S ß s},
+}
+
+@Type{greek1,
+ field = {ΑΒΓ ΠΡ ΣΤ ΧΨΩΪ αβγ πρ στ χψωϊ},
+}
+
+@Type{greek2,
+ field = {ͰͲͶ ϘϚϜ ϪϬϮ Ϸ Ϻ ͱͳͷ ϙϛϝ ϫϭϯ ϸ ϻ},
+}
+
+@Type{cyrillic1,
+ field = {АБВ ОП РС ЭЮЯ абв оп рс эюя},
+}
+
+@Type{cyrillic2,
+ field = {ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ ѐёђѓєѕіїјљњћќѝўџ},
+}
+
+@Type{cyrillic3,
+ field = {ѠѢѤ ѼѾҀ ҊҌҎ ҺҼҾ ѡѣѥ ѽѿҁ ҋҍҏ һҽҿ},
+}
+
+@Type{cyrillic4,
+ field = {Ӏ ӁӃӅ ӉӋӍ ӏ ӂӄӆ ӊӌӎ},
+}
+
+@Type{cyrillic5,
+ field = {ӐӒӔ ӺӼӾ ԀԂԄ ԪԬԮ ӑӓӕ ӻӽӿ ԁԃԅ ԫԭԯ},
+}
+
diff --git a/Build/source/texk/bibtex-x/tests/testchar.bst b/Build/source/texk/bibtex-x/tests/testchar.bst
new file mode 100644
index 00000000000..9d5ce6e0011
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testchar.bst
@@ -0,0 +1,36 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item " field * write$
+ " i2str: " field chr.to.int$ int.to.str$ * write$
+ " i2chr: " field chr.to.int$ int.to.chr$ * write$
+ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testchara.bib b/Build/source/texk/bibtex-x/tests/testchara.bib
new file mode 100644
index 00000000000..20acd2737ec
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testchara.bib
@@ -0,0 +1,18 @@
+@Type{ascii-000, field = {A}, }
+@Type{ascii-001, field = {C}, }
+@Type{ascii-002, field = {D}, }
+@Type{ascii-003, field = {E}, }
+@Type{ascii-005, field = {i}, }
+@Type{ascii-006, field = {o}, }
+@Type{ascii-007, field = {u}, }
+@Type{ascii-008, field = {y}, }
+
+@Type{latin1-000, field = {}, }
+@Type{latin1-001, field = {}, }
+@Type{latin1-002, field = {}, }
+@Type{latin1-003, field = {}, }
+@Type{latin1-005, field = {}, }
+@Type{latin1-006, field = {}, }
+@Type{latin1-007, field = {}, }
+@Type{latin1-008, field = {}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/testcharu.bib b/Build/source/texk/bibtex-x/tests/testcharu.bib
new file mode 100644
index 00000000000..e4f7b9b987b
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testcharu.bib
@@ -0,0 +1,56 @@
+@Type{ascii-000, field = {A}, }
+@Type{ascii-001, field = {C}, }
+@Type{ascii-002, field = {D}, }
+@Type{ascii-003, field = {E}, }
+@Type{ascii-005, field = {i}, }
+@Type{ascii-006, field = {o}, }
+@Type{ascii-007, field = {u}, }
+@Type{ascii-008, field = {y}, }
+
+@Type{latin1-000, field = {Å}, }
+@Type{latin1-001, field = {Ç}, }
+@Type{latin1-002, field = {Ð}, }
+@Type{latin1-003, field = {È}, }
+@Type{latin1-005, field = {î}, }
+@Type{latin1-006, field = {ø}, }
+@Type{latin1-007, field = {ü}, }
+@Type{latin1-008, field = {ý}, }
+
+@Type{greek-000, field = {Α}, }
+@Type{greek-001, field = {Β}, }
+@Type{greek-002, field = {Γ}, }
+@Type{greek-003, field = {χ}, }
+@Type{greek-004, field = {ψ}, }
+@Type{greek-005, field = {ω}, }
+
+@Type{cyrillic-001, field = {А}, }
+@Type{cyrillic-002, field = {Б}, }
+@Type{cyrillic-003, field = {В}, }
+@Type{cyrillic-004, field = {э}, }
+@Type{cyrillic-005, field = {ю}, }
+@Type{cyrillic-006, field = {я}, }
+
+@Type{kana-001, field = {あ}, }
+@Type{kana-002, field = {い}, }
+@Type{kana-003, field = {う}, }
+@Type{kana-004, field = { }, }
+@Type{kana-005, field = {ヱ}, }
+@Type{kana-006, field = {ヲ}, }
+@Type{kana-007, field = {ン}, }
+
+@Type{hanzi-001, field = {一}, }
+@Type{hanzi-002, field = {二}, }
+@Type{hanzi-003, field = {三}, }
+@Type{hanzi-005, field = {捌}, }
+@Type{hanzi-006, field = {玖}, }
+@Type{hanzi-007, field = {拾}, }
+@Type{hanzi-011, field = {𠮟}, }
+@Type{hanzi-012, field = {𥝱}, }
+
+@Type{hangul-001, field = {가}, }
+@Type{hangul-002, field = {나}, }
+@Type{hangul-003, field = {다}, }
+@Type{hangul-005, field = {한}, }
+@Type{hangul-006, field = {글}, }
+@Type{hangul-007, field = {텍}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/testdatau.bib b/Build/source/texk/bibtex-x/tests/testdatau.bib
new file mode 100644
index 00000000000..d31a115bb7a
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testdatau.bib
@@ -0,0 +1,43 @@
+@Type{8bit-1,
+ field = {Øø},
+}
+
+@Type{8bit-2,
+ field = {Åå},
+}
+
+@Type{8bit-3,
+ field = {Ää},
+}
+
+@Type{8bit-4,
+ field = {Öö},
+}
+
+@Type{aa,
+ field = {Aa},
+}
+
+@Type{bb,
+ field = {Bb},
+}
+
+@Type{cc,
+ field = {Cc},
+}
+
+@Type{oo,
+ field = {Oo},
+}
+
+@Type{xx,
+ field = {Xx},
+}
+
+@Type{yy,
+ field = {Yy},
+}
+
+@Type{zz,
+ field = {Zz},
+}
diff --git a/Build/source/texk/bibtex-x/tests/testperiod.bst b/Build/source/texk/bibtex-x/tests/testperiod.bst
new file mode 100644
index 00000000000..3b58e98ae54
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testperiod.bst
@@ -0,0 +1,36 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item[~~] " field *
+ write$ newline$
+ "\item[ap] " field add.period$ *
+ write$ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testperioda.bib b/Build/source/texk/bibtex-x/tests/testperioda.bib
new file mode 100644
index 00000000000..61212461f4b
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testperioda.bib
@@ -0,0 +1,6 @@
+@Type{abc0, field = {ABC xyz}, }
+@Type{abc1, field = {ABC xyz.}, }
+@Type{abc2, field = {ABC xyz!}, }
+@Type{abc3, field = {ABC xyz?}, }
+@Type{abc4, field = {ABC xyz,}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/testperiodu.bib b/Build/source/texk/bibtex-x/tests/testperiodu.bib
new file mode 100644
index 00000000000..0f63becfb6f
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testperiodu.bib
@@ -0,0 +1,25 @@
+@Type{abc0, field = {ABC xyz}, }
+@Type{abc1, field = {ABC xyz.}, }
+@Type{abc2, field = {ABC xyz!}, }
+@Type{abc3, field = {ABC xyz?}, }
+@Type{abc4, field = {ABC xyz,}, }
+
+@Type{cyrillic0, field = {АБВ эюя}, }
+@Type{cyrillic1, field = {АБВ эюя.}, }
+@Type{cyrillic2, field = {АБВ эюя!}, }
+@Type{cyrillic3, field = {АБВ эюя?}, }
+@Type{cyrillic4, field = {АБВ эюя,}, }
+
+@Type{aiu0, field = {あいうわおん}, }
+@Type{aiu1, field = {あいうわおん。}, }
+@Type{aiu2, field = {あいうわおん.}, }
+@Type{aiu3, field = {あいうわおん!}, }
+@Type{aiu4, field = {あいうわおん?}, }
+@Type{aiu5, field = {あいうわおん‼}, }
+@Type{aiu6, field = {あいうわおん⁇}, }
+@Type{aiu7, field = {あいうわおん⁈}, }
+@Type{aiu8, field = {あいうわおん⁉}, }
+@Type{aiu9, field = {あいうわおん‽}, }
+@Type{aiuA, field = {あいうわおん、}, }
+@Type{aiuB, field = {あいうわおん,}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/testsubstr.bst b/Build/source/texk/bibtex-x/tests/testsubstr.bst
new file mode 100644
index 00000000000..565fe85ea3a
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testsubstr.bst
@@ -0,0 +1,75 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item[orig] " field * write$ newline$
+ "\item[1 1] " field #1 #1 substring$ * write$ newline$
+ "\item[1 2] " field #1 #2 substring$ * write$ newline$
+ "\item[1 3] " field #1 #3 substring$ * write$ newline$
+ "\item[1 4] " field #1 #4 substring$ * write$ newline$
+ "\item[1 5] " field #1 #5 substring$ * write$ newline$
+ "\item[1 6] " field #1 #6 substring$ * write$ newline$
+ "\item[1 7] " field #1 #7 substring$ * write$ newline$
+ "\item[1 1] " field #1 #1 substring$ * write$ newline$
+ "\item[2 1] " field #2 #1 substring$ * write$ newline$
+ "\item[3 1] " field #3 #1 substring$ * write$ newline$
+ "\item[4 1] " field #4 #1 substring$ * write$ newline$
+ "\item[5 1] " field #5 #1 substring$ * write$ newline$
+ "\item[6 1] " field #6 #1 substring$ * write$ newline$
+ "\item[7 1] " field #7 #1 substring$ * write$ newline$
+ "\item[-1 1] " field #-1 #1 substring$ * write$ newline$
+ "\item[-1 2] " field #-1 #2 substring$ * write$ newline$
+ "\item[-1 3] " field #-1 #3 substring$ * write$ newline$
+ "\item[-1 4] " field #-1 #4 substring$ * write$ newline$
+ "\item[-1 5] " field #-1 #5 substring$ * write$ newline$
+ "\item[-1 6] " field #-1 #6 substring$ * write$ newline$
+ "\item[-1 7] " field #-1 #7 substring$ * write$ newline$
+ "\item[-2 7] " field #-2 #7 substring$ * write$ newline$
+ "\item[-3 7] " field #-3 #7 substring$ * write$ newline$
+ "\item[-4 7] " field #-4 #7 substring$ * write$ newline$
+ "\item[-5 7] " field #-5 #7 substring$ * write$ newline$
+ "\item[-6 7] " field #-6 #7 substring$ * write$ newline$
+ "\item[-7 7] " field #-7 #7 substring$ * write$ newline$
+ "\item[-1 7] " field #-1 #7 substring$ * write$ newline$
+ "\item[-2 6] " field #-2 #6 substring$ * write$ newline$
+ "\item[-3 5] " field #-3 #5 substring$ * write$ newline$
+ "\item[-4 4] " field #-4 #4 substring$ * write$ newline$
+ "\item[-5 3] " field #-5 #3 substring$ * write$ newline$
+ "\item[-6 2] " field #-6 #2 substring$ * write$ newline$
+ "\item[-7 1] " field #-7 #1 substring$ * write$ newline$
+ "\item[-1 8] " field #-1 #8 substring$ * write$ newline$
+ "\item[-2 7] " field #-2 #7 substring$ * write$ newline$
+ "\item[-3 6] " field #-3 #6 substring$ * write$ newline$
+ "\item[-4 5] " field #-4 #5 substring$ * write$ newline$
+ "\item[-5 4] " field #-5 #4 substring$ * write$ newline$
+ "\item[-6 3] " field #-6 #3 substring$ * write$ newline$
+ "\item[-7 2] " field #-7 #2 substring$ * write$ newline$
+ "\item[-8 1] " field #-7 #1 substring$ * write$ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testsubstra.bib b/Build/source/texk/bibtex-x/tests/testsubstra.bib
new file mode 100644
index 00000000000..482de2068ef
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testsubstra.bib
@@ -0,0 +1,8 @@
+@Type{ascii,
+ field = {ABCDEFG tuvwxyz},
+}
+
+@Type{latin1,
+ field = { },
+}
+
diff --git a/Build/source/texk/bibtex-x/tests/testsubstru.bib b/Build/source/texk/bibtex-x/tests/testsubstru.bib
new file mode 100644
index 00000000000..17065563f73
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testsubstru.bib
@@ -0,0 +1,28 @@
+@Type{ascii,
+ field = {ABCDEFG tuvwxyz},
+}
+
+@Type{latin1,
+ field = {ÅÇÈÎØÜÝ åçèîøüý},
+}
+
+@Type{greek,
+ field = {ΑΒΓΔΕΖΗ στυφχψω},
+}
+
+@Type{cyrillic,
+ field = {АБВГДЕЖ щъыьэюя},
+}
+
+@Type{kana,
+ field = {あいうえおかき ユヨワヰヱヲン},
+}
+
+@Type{hanzi,
+ field = {一二三四五六七 肆伍陸漆捌玖拾},
+}
+
+@Type{hanzi2,
+ field = {櫛杓屠冤𦥑𠮟𠀋𡈽𥝱𨦇𡚴𠷡𧘕𧘔𩸽},
+}
+
diff --git a/Build/source/texk/bibtex-x/tests/testtxtprfx.bst b/Build/source/texk/bibtex-x/tests/testtxtprfx.bst
new file mode 100644
index 00000000000..d09c8ebc2fe
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testtxtprfx.bst
@@ -0,0 +1,41 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item[orig] " field * write$ newline$
+ "\item[len] " field text.length$ int.to.str$ * write$ newline$
+ "\item[1] " field #1 text.prefix$ * write$ newline$
+ "\item[2] " field #2 text.prefix$ * write$ newline$
+ "\item[3] " field #3 text.prefix$ * write$ newline$
+ "\item[4] " field #4 text.prefix$ * write$ newline$
+ "\item[5] " field #5 text.prefix$ * write$ newline$
+ "\item[6] " field #6 text.prefix$ * write$ newline$
+ "\item[7] " field #7 text.prefix$ * write$ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testwidth.bst b/Build/source/texk/bibtex-x/tests/testwidth.bst
new file mode 100644
index 00000000000..600ff28a74d
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testwidth.bst
@@ -0,0 +1,34 @@
+ENTRY {field}{}{}
+
+FUNCTION {output_entry} {
+ "\item " field width$ int.to.str$ * write$
+ " " field * write$ newline$
+}
+
+FUNCTION {type} {output_entry}
+
+READ
+
+FUNCTION {set_sortkey} {
+ field 'sort.key$ :=
+}
+
+ITERATE {set_sortkey}
+
+SORT
+
+FUNCTION {output_beg} {
+ "\section*{Test result}" write$ newline$
+ "\begin{itemize}" write$ newline$
+}
+
+FUNCTION {output_end} {
+ "\end{itemize}" write$ newline$
+ "\endinput" write$ newline$
+}
+
+EXECUTE {output_beg}
+
+ITERATE {call.type$}
+
+EXECUTE {output_end}
diff --git a/Build/source/texk/bibtex-x/tests/testwidtha.bib b/Build/source/texk/bibtex-x/tests/testwidtha.bib
new file mode 100644
index 00000000000..58ebae66192
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testwidtha.bib
@@ -0,0 +1,151 @@
+@Type{ascii-1000, field = {ACDE iouy}, }
+
+@Type{latin1-1000, field = { }, }
+
+@Type{ascii-021, field = {!}, }
+@Type{ascii-022, field = {"}, }
+@Type{ascii-023, field = {#}, }
+@Type{ascii-024, field = {$}, }
+@Type{ascii-025, field = {%}, }
+@Type{ascii-026, field = {&}, }
+@Type{ascii-02A, field = {*}, }
+@Type{ascii-02B, field = {+}, }
+@Type{ascii-03C, field = {<}, }
+@Type{ascii-03D, field = {=}, }
+@Type{ascii-03E, field = {>}, }
+@Type{ascii-03F, field = {?}, }
+@Type{ascii-040, field = {@}, }
+@Type{ascii-041, field = {A}, }
+@Type{ascii-042, field = {B}, }
+@Type{ascii-043, field = {C}, }
+@Type{ascii-044, field = {D}, }
+@Type{ascii-045, field = {E}, }
+@Type{ascii-046, field = {F}, }
+@Type{ascii-047, field = {G}, }
+@Type{ascii-048, field = {H}, }
+@Type{ascii-049, field = {I}, }
+@Type{ascii-04A, field = {J}, }
+@Type{ascii-04B, field = {K}, }
+@Type{ascii-04C, field = {L}, }
+@Type{ascii-04D, field = {M}, }
+@Type{ascii-04E, field = {N}, }
+@Type{ascii-04F, field = {O}, }
+@Type{ascii-050, field = {P}, }
+@Type{ascii-051, field = {Q}, }
+@Type{ascii-052, field = {R}, }
+@Type{ascii-053, field = {S}, }
+@Type{ascii-054, field = {T}, }
+@Type{ascii-055, field = {U}, }
+@Type{ascii-056, field = {V}, }
+@Type{ascii-057, field = {W}, }
+@Type{ascii-058, field = {X}, }
+@Type{ascii-059, field = {Y}, }
+@Type{ascii-05A, field = {Z}, }
+@Type{ascii-061, field = {a}, }
+@Type{ascii-062, field = {b}, }
+@Type{ascii-063, field = {c}, }
+@Type{ascii-064, field = {d}, }
+@Type{ascii-065, field = {e}, }
+@Type{ascii-066, field = {f}, }
+@Type{ascii-067, field = {g}, }
+@Type{ascii-068, field = {h}, }
+@Type{ascii-069, field = {i}, }
+@Type{ascii-06A, field = {j}, }
+@Type{ascii-06B, field = {k}, }
+@Type{ascii-06C, field = {l}, }
+@Type{ascii-06D, field = {m}, }
+@Type{ascii-06E, field = {n}, }
+@Type{ascii-06F, field = {o}, }
+@Type{ascii-070, field = {p}, }
+@Type{ascii-071, field = {q}, }
+@Type{ascii-072, field = {r}, }
+@Type{ascii-073, field = {s}, }
+@Type{ascii-074, field = {t}, }
+@Type{ascii-075, field = {u}, }
+@Type{ascii-076, field = {v}, }
+@Type{ascii-077, field = {w}, }
+@Type{ascii-078, field = {x}, }
+@Type{ascii-079, field = {y}, }
+@Type{ascii-07A, field = {z}, }
+@Type{ascii-000, field = {0}, }
+@Type{ascii-001, field = {1}, }
+@Type{ascii-002, field = {2}, }
+@Type{ascii-003, field = {3}, }
+@Type{ascii-004, field = {4}, }
+@Type{ascii-005, field = {5}, }
+@Type{ascii-006, field = {6}, }
+@Type{ascii-007, field = {7}, }
+@Type{ascii-008, field = {8}, }
+@Type{ascii-009, field = {9}, }
+
+@Type{latin1-0A1, field = {}, }
+@Type{latin1-0A3, field = {}, }
+@Type{latin1-0A7, field = {}, }
+@Type{latin1-0AB, field = {}, }
+@Type{latin1-0BB, field = {}, }
+@Type{latin1-0BF, field = {}, }
+@Type{latin1-0C0, field = {}, }
+@Type{latin1-0C1, field = {}, }
+@Type{latin1-0C2, field = {}, }
+@Type{latin1-0C3, field = {}, }
+@Type{latin1-0C4, field = {}, }
+@Type{latin1-0C5, field = {}, }
+@Type{latin1-0C6, field = {}, }
+@Type{latin1-0C7, field = {}, }
+@Type{latin1-0C8, field = {}, }
+@Type{latin1-0C9, field = {}, }
+@Type{latin1-0CA, field = {}, }
+@Type{latin1-0CB, field = {}, }
+@Type{latin1-0CC, field = {}, }
+@Type{latin1-0CD, field = {}, }
+@Type{latin1-0CE, field = {}, }
+@Type{latin1-0CF, field = {}, }
+@Type{latin1-0D0, field = {}, }
+@Type{latin1-0D1, field = {}, }
+@Type{latin1-0D2, field = {}, }
+@Type{latin1-0D3, field = {}, }
+@Type{latin1-0D4, field = {}, }
+@Type{latin1-0D5, field = {}, }
+@Type{latin1-0D6, field = {}, }
+@Type{latin1-0D7, field = {}, }
+@Type{latin1-0D8, field = {}, }
+@Type{latin1-0D9, field = {}, }
+@Type{latin1-0DA, field = {}, }
+@Type{latin1-0DB, field = {}, }
+@Type{latin1-0DC, field = {}, }
+@Type{latin1-0DD, field = {}, }
+@Type{latin1-0DE, field = {}, }
+@Type{latin1-0DF, field = {}, }
+@Type{latin1-0E0, field = {}, }
+@Type{latin1-0E1, field = {}, }
+@Type{latin1-0E2, field = {}, }
+@Type{latin1-0E3, field = {}, }
+@Type{latin1-0E4, field = {}, }
+@Type{latin1-0E5, field = {}, }
+@Type{latin1-0E6, field = {}, }
+@Type{latin1-0E7, field = {}, }
+@Type{latin1-0E8, field = {}, }
+@Type{latin1-0E9, field = {}, }
+@Type{latin1-0EA, field = {}, }
+@Type{latin1-0EB, field = {}, }
+@Type{latin1-0EC, field = {}, }
+@Type{latin1-0ED, field = {}, }
+@Type{latin1-0EE, field = {}, }
+@Type{latin1-0EF, field = {}, }
+@Type{latin1-0F0, field = {}, }
+@Type{latin1-0F1, field = {}, }
+@Type{latin1-0F2, field = {}, }
+@Type{latin1-0F3, field = {}, }
+@Type{latin1-0F4, field = {}, }
+@Type{latin1-0F5, field = {}, }
+@Type{latin1-0F6, field = {}, }
+@Type{latin1-0F7, field = {}, }
+@Type{latin1-0F8, field = {}, }
+@Type{latin1-0F9, field = {}, }
+@Type{latin1-0FA, field = {}, }
+@Type{latin1-0FB, field = {}, }
+@Type{latin1-0FC, field = {}, }
+@Type{latin1-0FD, field = {}, }
+@Type{latin1-0FE, field = {}, }
+@Type{latin1-0FF, field = {}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/testwidthu.bib b/Build/source/texk/bibtex-x/tests/testwidthu.bib
new file mode 100644
index 00000000000..d3a84553d0c
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/testwidthu.bib
@@ -0,0 +1,348 @@
+@Type{ascii-1000, field = {ACDE iouy}, }
+
+@Type{latin1-1000, field = {ÅÇÐÈ îøüý}, }
+
+@Type{latinExtA-1000, field = {ĂĆĎĘ ĭőůŷ}, }
+
+@Type{ascii-021, field = {!}, }
+@Type{ascii-022, field = {"}, }
+@Type{ascii-023, field = {#}, }
+@Type{ascii-024, field = {$}, }
+@Type{ascii-025, field = {%}, }
+@Type{ascii-026, field = {&}, }
+@Type{ascii-02A, field = {*}, }
+@Type{ascii-02B, field = {+}, }
+@Type{ascii-03C, field = {<}, }
+@Type{ascii-03D, field = {=}, }
+@Type{ascii-03E, field = {>}, }
+@Type{ascii-03F, field = {?}, }
+@Type{ascii-040, field = {@}, }
+@Type{ascii-041, field = {A}, }
+@Type{ascii-042, field = {B}, }
+@Type{ascii-043, field = {C}, }
+@Type{ascii-044, field = {D}, }
+@Type{ascii-045, field = {E}, }
+@Type{ascii-046, field = {F}, }
+@Type{ascii-047, field = {G}, }
+@Type{ascii-048, field = {H}, }
+@Type{ascii-049, field = {I}, }
+@Type{ascii-04A, field = {J}, }
+@Type{ascii-04B, field = {K}, }
+@Type{ascii-04C, field = {L}, }
+@Type{ascii-04D, field = {M}, }
+@Type{ascii-04E, field = {N}, }
+@Type{ascii-04F, field = {O}, }
+@Type{ascii-050, field = {P}, }
+@Type{ascii-051, field = {Q}, }
+@Type{ascii-052, field = {R}, }
+@Type{ascii-053, field = {S}, }
+@Type{ascii-054, field = {T}, }
+@Type{ascii-055, field = {U}, }
+@Type{ascii-056, field = {V}, }
+@Type{ascii-057, field = {W}, }
+@Type{ascii-058, field = {X}, }
+@Type{ascii-059, field = {Y}, }
+@Type{ascii-05A, field = {Z}, }
+@Type{ascii-061, field = {a}, }
+@Type{ascii-062, field = {b}, }
+@Type{ascii-063, field = {c}, }
+@Type{ascii-064, field = {d}, }
+@Type{ascii-065, field = {e}, }
+@Type{ascii-066, field = {f}, }
+@Type{ascii-067, field = {g}, }
+@Type{ascii-068, field = {h}, }
+@Type{ascii-069, field = {i}, }
+@Type{ascii-06A, field = {j}, }
+@Type{ascii-06B, field = {k}, }
+@Type{ascii-06C, field = {l}, }
+@Type{ascii-06D, field = {m}, }
+@Type{ascii-06E, field = {n}, }
+@Type{ascii-06F, field = {o}, }
+@Type{ascii-070, field = {p}, }
+@Type{ascii-071, field = {q}, }
+@Type{ascii-072, field = {r}, }
+@Type{ascii-073, field = {s}, }
+@Type{ascii-074, field = {t}, }
+@Type{ascii-075, field = {u}, }
+@Type{ascii-076, field = {v}, }
+@Type{ascii-077, field = {w}, }
+@Type{ascii-078, field = {x}, }
+@Type{ascii-079, field = {y}, }
+@Type{ascii-07A, field = {z}, }
+@Type{ascii-000, field = {0}, }
+@Type{ascii-001, field = {1}, }
+@Type{ascii-002, field = {2}, }
+@Type{ascii-003, field = {3}, }
+@Type{ascii-004, field = {4}, }
+@Type{ascii-005, field = {5}, }
+@Type{ascii-006, field = {6}, }
+@Type{ascii-007, field = {7}, }
+@Type{ascii-008, field = {8}, }
+@Type{ascii-009, field = {9}, }
+
+@Type{latin1-0A1, field = {¡}, }
+@Type{latin1-0A3, field = {£}, }
+@Type{latin1-0A7, field = {§}, }
+@Type{latin1-0AB, field = {«}, }
+@Type{latin1-0BB, field = {»}, }
+@Type{latin1-0BF, field = {¿}, }
+@Type{latin1-0C0, field = {À}, }
+@Type{latin1-0C1, field = {Á}, }
+@Type{latin1-0C2, field = {Â}, }
+@Type{latin1-0C3, field = {Ã}, }
+@Type{latin1-0C4, field = {Ä}, }
+@Type{latin1-0C5, field = {Å}, }
+@Type{latin1-0C6, field = {Æ}, }
+@Type{latin1-0C7, field = {Ç}, }
+@Type{latin1-0C8, field = {È}, }
+@Type{latin1-0C9, field = {É}, }
+@Type{latin1-0CA, field = {Ê}, }
+@Type{latin1-0CB, field = {Ë}, }
+@Type{latin1-0CC, field = {Ì}, }
+@Type{latin1-0CD, field = {Í}, }
+@Type{latin1-0CE, field = {Î}, }
+@Type{latin1-0CF, field = {Ï}, }
+@Type{latin1-0D0, field = {Ð}, }
+@Type{latin1-0D1, field = {Ñ}, }
+@Type{latin1-0D2, field = {Ò}, }
+@Type{latin1-0D3, field = {Ó}, }
+@Type{latin1-0D4, field = {Ô}, }
+@Type{latin1-0D5, field = {Õ}, }
+@Type{latin1-0D6, field = {Ö}, }
+@Type{latin1-0D7, field = {×}, }
+@Type{latin1-0D8, field = {Ø}, }
+@Type{latin1-0D9, field = {Ù}, }
+@Type{latin1-0DA, field = {Ú}, }
+@Type{latin1-0DB, field = {Û}, }
+@Type{latin1-0DC, field = {Ü}, }
+@Type{latin1-0DD, field = {Ý}, }
+@Type{latin1-0DE, field = {Þ}, }
+@Type{latin1-0DF, field = {ß}, }
+@Type{latin1-0E0, field = {à}, }
+@Type{latin1-0E1, field = {á}, }
+@Type{latin1-0E2, field = {â}, }
+@Type{latin1-0E3, field = {ã}, }
+@Type{latin1-0E4, field = {ä}, }
+@Type{latin1-0E5, field = {å}, }
+@Type{latin1-0E6, field = {æ}, }
+@Type{latin1-0E7, field = {ç}, }
+@Type{latin1-0E8, field = {è}, }
+@Type{latin1-0E9, field = {é}, }
+@Type{latin1-0EA, field = {ê}, }
+@Type{latin1-0EB, field = {ë}, }
+@Type{latin1-0EC, field = {ì}, }
+@Type{latin1-0ED, field = {í}, }
+@Type{latin1-0EE, field = {î}, }
+@Type{latin1-0EF, field = {ï}, }
+@Type{latin1-0F0, field = {ð}, }
+@Type{latin1-0F1, field = {ñ}, }
+@Type{latin1-0F2, field = {ò}, }
+@Type{latin1-0F3, field = {ó}, }
+@Type{latin1-0F4, field = {ô}, }
+@Type{latin1-0F5, field = {õ}, }
+@Type{latin1-0F6, field = {ö}, }
+@Type{latin1-0F7, field = {÷}, }
+@Type{latin1-0F8, field = {ø}, }
+@Type{latin1-0F9, field = {ù}, }
+@Type{latin1-0FA, field = {ú}, }
+@Type{latin1-0FB, field = {û}, }
+@Type{latin1-0FC, field = {ü}, }
+@Type{latin1-0FD, field = {ý}, }
+@Type{latin1-0FE, field = {þ}, }
+@Type{latin1-0FF, field = {ÿ}, }
+
+@Type{greek-000, field = {Α}, }
+@Type{greek-001, field = {Β}, }
+@Type{greek-002, field = {Γ}, }
+@Type{greek-003, field = {χ}, }
+@Type{greek-004, field = {ψ}, }
+@Type{greek-005, field = {ω}, }
+@Type{greek-100, field = {ΑΒΓ χψω}, }
+
+@Type{cyrillic-001, field = {А}, }
+@Type{cyrillic-002, field = {Б}, }
+@Type{cyrillic-003, field = {В}, }
+@Type{cyrillic-004, field = {э}, }
+@Type{cyrillic-005, field = {ю}, }
+@Type{cyrillic-006, field = {я}, }
+@Type{cyrillic-100, field = {АБВ эюя}, }
+
+@Type{kana-001, field = {あ}, }
+@Type{kana-002, field = {い}, }
+@Type{kana-003, field = {う}, }
+@Type{kana-004, field = { }, }
+@Type{kana-005, field = {ヱ}, }
+@Type{kana-006, field = {ヲ}, }
+@Type{kana-007, field = {ン}, }
+@Type{kana-100, field = {あいう ヱヲン}, }
+
+@Type{hanzi-001, field = {一}, }
+@Type{hanzi-002, field = {二}, }
+@Type{hanzi-003, field = {三}, }
+@Type{hanzi-005, field = {捌}, }
+@Type{hanzi-006, field = {玖}, }
+@Type{hanzi-007, field = {拾}, }
+@Type{hanzi-011, field = {𠮟}, }
+@Type{hanzi-012, field = {𥝱}, }
+@Type{hanzi-100, field = {一二三 捌玖拾}, }
+
+@Type{hangul-001, field = {가}, }
+@Type{hangul-002, field = {나}, }
+@Type{hangul-003, field = {다}, }
+@Type{hangul-005, field = {한}, }
+@Type{hangul-006, field = {글}, }
+@Type{hangul-007, field = {텍}, }
+@Type{hangul-100, field = {가나다한글텍}, }
+
+@Type{latinExtA-100, field = {Ā}, }
+@Type{latinExtA-101, field = {ā}, }
+@Type{latinExtA-102, field = {Ă}, }
+@Type{latinExtA-103, field = {ă}, }
+@Type{latinExtA-104, field = {Ą}, }
+@Type{latinExtA-105, field = {ą}, }
+@Type{latinExtA-106, field = {Ć}, }
+@Type{latinExtA-107, field = {ć}, }
+@Type{latinExtA-108, field = {Ĉ}, }
+@Type{latinExtA-109, field = {ĉ}, }
+@Type{latinExtA-10A, field = {Ċ}, }
+@Type{latinExtA-10B, field = {ċ}, }
+@Type{latinExtA-10C, field = {Č}, }
+@Type{latinExtA-10D, field = {č}, }
+@Type{latinExtA-10E, field = {Ď}, }
+@Type{latinExtA-10F, field = {ď}, }
+@Type{latinExtA-110, field = {Đ}, }
+@Type{latinExtA-111, field = {đ}, }
+@Type{latinExtA-112, field = {Ē}, }
+@Type{latinExtA-113, field = {ē}, }
+@Type{latinExtA-114, field = {Ĕ}, }
+@Type{latinExtA-115, field = {ĕ}, }
+@Type{latinExtA-116, field = {Ė}, }
+@Type{latinExtA-117, field = {ė}, }
+@Type{latinExtA-118, field = {Ę}, }
+@Type{latinExtA-119, field = {ę}, }
+@Type{latinExtA-11A, field = {Ě}, }
+@Type{latinExtA-11B, field = {ě}, }
+@Type{latinExtA-11C, field = {Ĝ}, }
+@Type{latinExtA-11D, field = {ĝ}, }
+@Type{latinExtA-11E, field = {Ğ}, }
+@Type{latinExtA-11F, field = {ğ}, }
+@Type{latinExtA-120, field = {Ġ}, }
+@Type{latinExtA-121, field = {ġ}, }
+@Type{latinExtA-122, field = {Ģ}, }
+@Type{latinExtA-123, field = {ģ}, }
+@Type{latinExtA-124, field = {Ĥ}, }
+@Type{latinExtA-125, field = {ĥ}, }
+@Type{latinExtA-126, field = {Ħ}, }
+@Type{latinExtA-127, field = {ħ}, }
+@Type{latinExtA-128, field = {Ĩ}, }
+@Type{latinExtA-129, field = {ĩ}, }
+@Type{latinExtA-12A, field = {Ī}, }
+@Type{latinExtA-12B, field = {ī}, }
+@Type{latinExtA-12C, field = {Ĭ}, }
+@Type{latinExtA-12D, field = {ĭ}, }
+@Type{latinExtA-12E, field = {Į}, }
+@Type{latinExtA-12F, field = {į}, }
+@Type{latinExtA-130, field = {İ}, }
+@Type{latinExtA-131, field = {ı}, }
+@Type{latinExtA-132, field = {IJ}, }
+@Type{latinExtA-133, field = {ij}, }
+@Type{latinExtA-134, field = {Ĵ}, }
+@Type{latinExtA-135, field = {ĵ}, }
+@Type{latinExtA-136, field = {Ķ}, }
+@Type{latinExtA-137, field = {ķ}, }
+@Type{latinExtA-138, field = {ĸ}, }
+@Type{latinExtA-139, field = {Ĺ}, }
+@Type{latinExtA-13A, field = {ĺ}, }
+@Type{latinExtA-13B, field = {Ļ}, }
+@Type{latinExtA-13C, field = {ļ}, }
+@Type{latinExtA-13D, field = {Ľ}, }
+@Type{latinExtA-13E, field = {ľ}, }
+@Type{latinExtA-13F, field = {Ŀ}, }
+@Type{latinExtA-140, field = {ŀ}, }
+@Type{latinExtA-141, field = {Ł}, }
+@Type{latinExtA-142, field = {ł}, }
+@Type{latinExtA-143, field = {Ń}, }
+@Type{latinExtA-144, field = {ń}, }
+@Type{latinExtA-145, field = {Ņ}, }
+@Type{latinExtA-146, field = {ņ}, }
+@Type{latinExtA-147, field = {Ň}, }
+@Type{latinExtA-148, field = {ň}, }
+@Type{latinExtA-149, field = {ʼn}, }
+@Type{latinExtA-14A, field = {Ŋ}, }
+@Type{latinExtA-14B, field = {ŋ}, }
+@Type{latinExtA-14C, field = {Ō}, }
+@Type{latinExtA-14D, field = {ō}, }
+@Type{latinExtA-14E, field = {Ŏ}, }
+@Type{latinExtA-14F, field = {ŏ}, }
+@Type{latinExtA-150, field = {Ő}, }
+@Type{latinExtA-151, field = {ő}, }
+@Type{latinExtA-152, field = {Œ}, }
+@Type{latinExtA-153, field = {œ}, }
+@Type{latinExtA-154, field = {Ŕ}, }
+@Type{latinExtA-155, field = {ŕ}, }
+@Type{latinExtA-156, field = {Ŗ}, }
+@Type{latinExtA-157, field = {ŗ}, }
+@Type{latinExtA-158, field = {Ř}, }
+@Type{latinExtA-159, field = {ř}, }
+@Type{latinExtA-15A, field = {Ś}, }
+@Type{latinExtA-15B, field = {ś}, }
+@Type{latinExtA-15C, field = {Ŝ}, }
+@Type{latinExtA-15D, field = {ŝ}, }
+@Type{latinExtA-15E, field = {Ş}, }
+@Type{latinExtA-15F, field = {ş}, }
+@Type{latinExtA-160, field = {Š}, }
+@Type{latinExtA-161, field = {š}, }
+@Type{latinExtA-162, field = {Ţ}, }
+@Type{latinExtA-163, field = {ţ}, }
+@Type{latinExtA-164, field = {Ť}, }
+@Type{latinExtA-165, field = {ť}, }
+@Type{latinExtA-166, field = {Ŧ}, }
+@Type{latinExtA-167, field = {ŧ}, }
+@Type{latinExtA-168, field = {Ũ}, }
+@Type{latinExtA-169, field = {ũ}, }
+@Type{latinExtA-16A, field = {Ū}, }
+@Type{latinExtA-16B, field = {ū}, }
+@Type{latinExtA-16C, field = {Ŭ}, }
+@Type{latinExtA-16D, field = {ŭ}, }
+@Type{latinExtA-16E, field = {Ů}, }
+@Type{latinExtA-16F, field = {ů}, }
+@Type{latinExtA-170, field = {Ű}, }
+@Type{latinExtA-171, field = {ű}, }
+@Type{latinExtA-172, field = {Ų}, }
+@Type{latinExtA-173, field = {ų}, }
+@Type{latinExtA-174, field = {Ŵ}, }
+@Type{latinExtA-175, field = {ŵ}, }
+@Type{latinExtA-176, field = {Ŷ}, }
+@Type{latinExtA-177, field = {ŷ}, }
+@Type{latinExtA-178, field = {Ÿ}, }
+@Type{latinExtA-179, field = {Ź}, }
+@Type{latinExtA-17A, field = {ź}, }
+@Type{latinExtA-17B, field = {Ż}, }
+@Type{latinExtA-17C, field = {ż}, }
+@Type{latinExtA-17D, field = {Ž}, }
+@Type{latinExtA-17E, field = {ž}, }
+@Type{latinExtA-17F, field = {ſ}, }
+
+@Type{fullw-001, field = {#}, }
+@Type{fullw-002, field = {@}, }
+@Type{fullw-003, field = {A}, }
+@Type{fullw-004, field = {z}, }
+@Type{fullw-005, field = {£}, }
+@Type{fullw-006, field = {₩}, }
+
+@Type{kana-101, field = {ア}, }
+@Type{kana-102, field = {イ}, }
+@Type{kana-103, field = {ウ}, }
+@Type{kana-105, field = {ワ}, }
+@Type{kana-106, field = {ヲ}, }
+@Type{kana-107, field = {ン}, }
+
+@Type{symbol-101, field = {☀}, }
+@Type{symbol-102, field = {☁}, }
+@Type{symbol-103, field = {☂}, }
+@Type{symbol-104, field = {☃}, }
+@Type{symbol-105, field = {●}, }
+@Type{symbol-106, field = {△}, }
+@Type{symbol-107, field = {■}, }
+@Type{symbol-108, field = {◇}, }
+
diff --git a/Build/source/texk/bibtex-x/tests/txtprfxa.aux b/Build/source/texk/bibtex-x/tests/txtprfxa.aux
new file mode 100644
index 00000000000..bb228501147
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/txtprfxa.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testtxtprfx}
+\bibdata{testsubstra}
diff --git a/Build/source/texk/bibtex-x/tests/txtprfxa.bbl b/Build/source/texk/bibtex-x/tests/txtprfxa.bbl
new file mode 100644
index 00000000000..48fde96b5f9
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/txtprfxa.bbl
@@ -0,0 +1,22 @@
+\section*{Test result}
+\begin{itemize}
+\item[orig] ABCDEFG tuvwxyz
+\item[len] 15
+\item[1] A
+\item[2] AB
+\item[3] ABC
+\item[4] ABCD
+\item[5] ABCDE
+\item[6] ABCDEF
+\item[7] ABCDEFG
+\item[orig]
+\item[len] 15
+\item[1]
+\item[2]
+\item[3]
+\item[4]
+\item[5]
+\item[6]
+\item[7]
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/txtprfxu.aux b/Build/source/texk/bibtex-x/tests/txtprfxu.aux
new file mode 100644
index 00000000000..8b09ddceadc
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/txtprfxu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testtxtprfx}
+\bibdata{testsubstru}
diff --git a/Build/source/texk/bibtex-x/tests/txtprfxu.bbl b/Build/source/texk/bibtex-x/tests/txtprfxu.bbl
new file mode 100644
index 00000000000..17cb2096e77
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/txtprfxu.bbl
@@ -0,0 +1,67 @@
+\section*{Test result}
+\begin{itemize}
+\item[orig] ABCDEFG tuvwxyz
+\item[len] 15
+\item[1] A
+\item[2] AB
+\item[3] ABC
+\item[4] ABCD
+\item[5] ABCDE
+\item[6] ABCDEF
+\item[7] ABCDEFG
+\item[orig] ÅÇÈÎØÜÝ åçèîøüý
+\item[len] 15
+\item[1] Å
+\item[2] ÅÇ
+\item[3] ÅÇÈ
+\item[4] ÅÇÈÎ
+\item[5] ÅÇÈÎØ
+\item[6] ÅÇÈÎØÜ
+\item[7] ÅÇÈÎØÜÝ
+\item[orig] ΑΒΓΔΕΖΗ στυφχψω
+\item[len] 15
+\item[1] Α
+\item[2] ΑΒ
+\item[3] ΑΒΓ
+\item[4] ΑΒΓΔ
+\item[5] ΑΒΓΔΕ
+\item[6] ΑΒΓΔΕΖ
+\item[7] ΑΒΓΔΕΖΗ
+\item[orig] АБВГДЕЖ щъыьэюя
+\item[len] 15
+\item[1] А
+\item[2] АБ
+\item[3] АБВ
+\item[4] АБВГ
+\item[5] АБВГД
+\item[6] АБВГДЕ
+\item[7] АБВГДЕЖ
+\item[orig] あいうえおかき ユヨワヰヱヲン
+\item[len] 15
+\item[1] あ
+\item[2] あい
+\item[3] あいう
+\item[4] あいうえ
+\item[5] あいうえお
+\item[6] あいうえおか
+\item[7] あいうえおかき
+\item[orig] 一二三四五六七 肆伍陸漆捌玖拾
+\item[len] 15
+\item[1] 一
+\item[2] 一二
+\item[3] 一二三
+\item[4] 一二三四
+\item[5] 一二三四五
+\item[6] 一二三四五六
+\item[7] 一二三四五六七
+\item[orig] 櫛杓屠冤𦥑𠮟𠀋𡈽𥝱𨦇𡚴𠷡𧘕𧘔𩸽
+\item[len] 15
+\item[1] 櫛
+\item[2] 櫛杓
+\item[3] 櫛杓屠
+\item[4] 櫛杓屠冤
+\item[5] 櫛杓屠冤𦥑
+\item[6] 櫛杓屠冤𦥑𠮟
+\item[7] 櫛杓屠冤𦥑𠮟𠀋
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/widtha.aux b/Build/source/texk/bibtex-x/tests/widtha.aux
new file mode 100644
index 00000000000..745b8adc93b
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/widtha.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testwidth}
+\bibdata{testwidtha}
diff --git a/Build/source/texk/bibtex-x/tests/widtha.bbl b/Build/source/texk/bibtex-x/tests/widtha.bbl
new file mode 100644
index 00000000000..0f49d0834fb
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/widtha.bbl
@@ -0,0 +1,151 @@
+\section*{Test result}
+\begin{itemize}
+\item 500 0
+\item 500 1
+\item 500 2
+\item 500 3
+\item 500 4
+\item 500 5
+\item 500 6
+\item 500 7
+\item 500 8
+\item 500 9
+\item 750 A
+\item 5057 ACDE iouy
+\item 750
+\item 750
+\item 750
+\item 750
+\item 750
+\item 750
+\item 903
+\item 5057
+\item 500 a
+\item 500
+\item 500
+\item 500
+\item 500
+\item 500
+\item 500
+\item 722
+\item 708 B
+\item 556 b
+\item 722 C
+\item 722
+\item 444 c
+\item 444
+\item 764 D
+\item 764
+\item 556 d
+\item 500
+\item 681 E
+\item 681
+\item 681
+\item 681
+\item 681
+\item 444 e
+\item 444
+\item 444
+\item 444
+\item 444
+\item 653 F
+\item 306 f
+\item 785 G
+\item 500 g
+\item 750 H
+\item 556 h
+\item 361 I
+\item 361
+\item 361
+\item 361
+\item 361
+\item 278 i
+\item 278
+\item 278
+\item 278
+\item 333
+\item 514 J
+\item 306 j
+\item 778 K
+\item 528 k
+\item 625 L
+\item 278 l
+\item 917 M
+\item 833 m
+\item 750 N
+\item 750
+\item 556 n
+\item 556
+\item 778 O
+\item 778
+\item 778
+\item 778
+\item 778
+\item 778
+\item 778
+\item 500 o
+\item 500
+\item 500
+\item 500
+\item 500
+\item 500
+\item 500
+\item 681 P
+\item 556 p
+\item 778 Q
+\item 528 q
+\item 736 R
+\item 392 r
+\item 556 S
+\item 394 s
+\item 500
+\item 722 T
+\item 625
+\item 389 t
+\item 556
+\item 750 U
+\item 750
+\item 750
+\item 750
+\item 750
+\item 556 u
+\item 556
+\item 556
+\item 556
+\item 556
+\item 750 V
+\item 528 v
+\item 1028 W
+\item 722 w
+\item 750 X
+\item 528 x
+\item 750 Y
+\item 750
+\item 528 y
+\item 528
+\item 528
+\item 611 Z
+\item 444 z
+\item 278 !
+\item 500 "
+\item 833 #
+\item 500 $
+\item 833 %
+\item 778 &
+\item 500 *
+\item 778 +
+\item 472 <
+\item 778 =
+\item 472 >
+\item 472 ?
+\item 778 @
+\item 278
+\item 639
+\item 444
+\item 556
+\item 556
+\item 472
+\item 778
+\item 778
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/tests/widthu.aux b/Build/source/texk/bibtex-x/tests/widthu.aux
new file mode 100644
index 00000000000..02fee3bf62e
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/widthu.aux
@@ -0,0 +1,4 @@
+\relax
+\citation{*}
+\bibstyle{testwidth}
+\bibdata{testwidthu}
diff --git a/Build/source/texk/bibtex-x/tests/widthu.bbl b/Build/source/texk/bibtex-x/tests/widthu.bbl
new file mode 100644
index 00000000000..3e06ed472a7
--- /dev/null
+++ b/Build/source/texk/bibtex-x/tests/widthu.bbl
@@ -0,0 +1,338 @@
+\section*{Test result}
+\begin{itemize}
+\item 1000  
+\item 278 ¡
+\item 472 ¿
+\item 556 «
+\item 556 »
+\item 444 §
+\item 1000 @
+\item 1000 #
+\item 778 ÷
+\item 778 ×
+\item 700 ■
+\item 700 △
+\item 700 ◇
+\item 700 ●
+\item 700 ☀
+\item 700 ☁
+\item 700 ☂
+\item 700 ☃
+\item 639 £
+\item 1000 £
+\item 1000 ₩
+\item 1000 A
+\item 722 æ
+\item 903 Æ
+\item 278 !
+\item 500 "
+\item 833 #
+\item 500 $
+\item 833 %
+\item 778 &
+\item 500 *
+\item 778 +
+\item 500 0
+\item 500 1
+\item 500 2
+\item 500 3
+\item 500 4
+\item 500 5
+\item 500 6
+\item 500 7
+\item 500 8
+\item 500 9
+\item 472 <
+\item 778 =
+\item 472 >
+\item 472 ?
+\item 778 @
+\item 750 A
+\item 750 Á
+\item 750 À
+\item 750 Ă
+\item 750 Â
+\item 750 Å
+\item 750 Ä
+\item 750 Ã
+\item 750 Ą
+\item 750 Ā
+\item 5057 ACDE iouy
+\item 5057 ĂĆĎĘ ĭőůŷ
+\item 5057 ÅÇÐÈ îøüý
+\item 708 B
+\item 722 C
+\item 722 Ć
+\item 722 Ĉ
+\item 722 Č
+\item 722 Ċ
+\item 722 Ç
+\item 764 D
+\item 764 Ď
+\item 681 E
+\item 681 É
+\item 681 È
+\item 681 Ĕ
+\item 681 Ê
+\item 681 Ě
+\item 681 Ë
+\item 681 Ė
+\item 681 Ę
+\item 681 Ē
+\item 653 F
+\item 785 G
+\item 785 Ğ
+\item 785 Ĝ
+\item 785 Ġ
+\item 785 Ģ
+\item 750 H
+\item 750 Ĥ
+\item 361 I
+\item 361 Í
+\item 361 Ì
+\item 361 Ĭ
+\item 361 Î
+\item 361 Ï
+\item 361 Ĩ
+\item 361 İ
+\item 361 Į
+\item 361 Ī
+\item 514 J
+\item 541 Ĵ
+\item 778 K
+\item 778 Ķ
+\item 625 L
+\item 625 Ĺ
+\item 625 Ľ
+\item 625 Ļ
+\item 917 M
+\item 750 N
+\item 750 Ń
+\item 750 Ň
+\item 750 Ñ
+\item 750 Ņ
+\item 778 O
+\item 778 Ó
+\item 778 Ò
+\item 778 Ŏ
+\item 778 Ô
+\item 778 Ö
+\item 778 Ő
+\item 778 Õ
+\item 778 Ō
+\item 681 P
+\item 778 Q
+\item 736 R
+\item 736 Ŕ
+\item 736 Ř
+\item 736 Ŗ
+\item 556 S
+\item 556 Ś
+\item 556 Ŝ
+\item 556 Š
+\item 556 Ş
+\item 722 T
+\item 722 Ť
+\item 722 Ţ
+\item 750 U
+\item 750 Ú
+\item 750 Ù
+\item 750 Ŭ
+\item 750 Û
+\item 750 Ů
+\item 750 Ü
+\item 750 Ű
+\item 750 Ũ
+\item 750 Ų
+\item 750 Ū
+\item 750 V
+\item 1028 W
+\item 1028 Ŵ
+\item 750 X
+\item 750 Y
+\item 750 Ý
+\item 750 Ŷ
+\item 750 Ÿ
+\item 611 Z
+\item 611 Ź
+\item 611 Ž
+\item 611 Ż
+\item 500 a
+\item 500 á
+\item 500 à
+\item 500 ă
+\item 500 â
+\item 500 å
+\item 500 ä
+\item 500 ã
+\item 500 ą
+\item 500 ā
+\item 556 b
+\item 444 c
+\item 444 ć
+\item 444 ĉ
+\item 444 č
+\item 444 ċ
+\item 444 ç
+\item 556 d
+\item 556 ď
+\item 444 e
+\item 444 é
+\item 444 è
+\item 444 ĕ
+\item 444 ê
+\item 444 ě
+\item 444 ë
+\item 444 ė
+\item 444 ę
+\item 444 ē
+\item 306 f
+\item 500 g
+\item 500 ğ
+\item 500 ĝ
+\item 500 ġ
+\item 500 ģ
+\item 556 h
+\item 556 ĥ
+\item 278 i
+\item 278 í
+\item 278 ì
+\item 278 ĭ
+\item 278 î
+\item 333 ï
+\item 278 ĩ
+\item 278 į
+\item 278 ī
+\item 306 j
+\item 306 ĵ
+\item 528 k
+\item 528 ķ
+\item 278 l
+\item 278 ĺ
+\item 278 ľ
+\item 278 ļ
+\item 833 m
+\item 556 n
+\item 556 ń
+\item 556 ň
+\item 556 ñ
+\item 556 ņ
+\item 500 o
+\item 500 ó
+\item 500 ò
+\item 500 ŏ
+\item 500 ô
+\item 500 ö
+\item 500 ő
+\item 500 õ
+\item 500 ō
+\item 556 p
+\item 528 q
+\item 392 r
+\item 392 ŕ
+\item 392 ř
+\item 392 ŗ
+\item 394 s
+\item 394 ś
+\item 394 ŝ
+\item 394 š
+\item 394 ş
+\item 389 t
+\item 389 ť
+\item 389 ţ
+\item 556 u
+\item 556 ú
+\item 556 ù
+\item 556 ŭ
+\item 556 û
+\item 556 ů
+\item 556 ü
+\item 556 ű
+\item 556 ũ
+\item 556 ų
+\item 556 ū
+\item 528 v
+\item 722 w
+\item 722 ŵ
+\item 528 x
+\item 528 y
+\item 528 ý
+\item 528 ŷ
+\item 528 ÿ
+\item 444 z
+\item 444 ź
+\item 444 ž
+\item 444 ż
+\item 556 đ
+\item 764 Đ
+\item 500 ð
+\item 764 Ð
+\item 556 ħ
+\item 750 Ħ
+\item 583 ij
+\item 861 IJ
+\item 278 ı
+\item 278 ł
+\item 625 Ł
+\item 278 ŀ
+\item 625 Ŀ
+\item 556 ŋ
+\item 792 Ŋ
+\item 500 ø
+\item 778 Ø
+\item 778 œ
+\item 1014 Œ
+\item 556 ĸ
+\item 392 ſ
+\item 500 ß
+\item 389 ŧ
+\item 722 Ŧ
+\item 1000 z
+\item 556 þ
+\item 625 Þ
+\item 556 ʼn
+\item 700 Α
+\item 4478 ΑΒΓ χψω
+\item 700 Β
+\item 700 Γ
+\item 700 χ
+\item 700 ψ
+\item 700 ω
+\item 700 А
+\item 4478 АБВ эюя
+\item 700 Б
+\item 700 В
+\item 700 э
+\item 700 ю
+\item 700 я
+\item 1000 가
+\item 6000 가나다한글텍
+\item 1000 글
+\item 1000 나
+\item 1000 다
+\item 1000 텍
+\item 1000 한
+\item 1000 あ
+\item 500 ア
+\item 7000 あいう ヱヲン
+\item 1000 い
+\item 500 イ
+\item 1000 う
+\item 500 ウ
+\item 500 ワ
+\item 1000 ヱ
+\item 1000 ヲ
+\item 500 ヲ
+\item 1000 ン
+\item 500 ン
+\item 1000 一
+\item 7000 一二三 捌玖拾
+\item 1000 三
+\item 1000 二
+\item 1000 𠮟
+\item 1000 拾
+\item 1000 捌
+\item 1000 玖
+\item 1000 𥝱
+\end{itemize}
+\endinput
diff --git a/Build/source/texk/bibtex-x/version.h b/Build/source/texk/bibtex-x/version.h
index 555a9970faa..9942f8a43fc 100644
--- a/Build/source/texk/bibtex-x/version.h
+++ b/Build/source/texk/bibtex-x/version.h
@@ -91,6 +91,7 @@
*/
#ifndef __VERSION_H__
# define __VERSION_H__ 1
-# define VERSION "3.72 (05 feb 2022)"
+# define PACKAGE_DATE "(16 apr 2022)"
+# define VERSION PACKAGE_VERSION " " PACKAGE_DATE
#endif /* __VERSION_H__ */