summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/omegafonts
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-07-09 11:29:23 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-07-09 11:29:23 +0000
commit0c0900f8ae6d770b54d9d5602af9e2c7f398bac5 (patch)
tree0e5f3a9f6bb34b55481b595c864193bb81b02f97 /Build/source/texk/web2c/omegafonts
parentd5143b40000d0fac9135af33ea084189e99e733e (diff)
texk/web2c: Drop configure option '--disable-omfonts'
omegaware: Always build wofm2opl&Co, more tests omegafonts: Allow char codes from Supplementary Unicode Planes git-svn-id: svn://tug.org/texlive/trunk@34555 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/omegafonts')
-rw-r--r--Build/source/texk/web2c/omegafonts/ChangeLog9
-rw-r--r--Build/source/texk/web2c/omegafonts/Makefile.am24
-rw-r--r--Build/source/texk/web2c/omegafonts/Makefile.in51
-rw-r--r--Build/source/texk/web2c/omegafonts/char_routines.c118
-rw-r--r--Build/source/texk/web2c/omegafonts/ligkern_routines.c24
-rwxr-xr-xBuild/source/texk/web2c/omegafonts/ofonts.test56
-rwxr-xr-xBuild/source/texk/web2c/omegafonts/overbmp.test53
-rw-r--r--Build/source/texk/web2c/omegafonts/parse_ofm.c2
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/inbmp.opl18
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/level1.opl5
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr0.pl47
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr1.pl27
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr1.vpl40
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr2.opl29
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr2.ovp42
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr3.opl29
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontr3.ovp42
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv4.pl47
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv4.vpl88
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv5.opl49
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv5.ovp90
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv6.opl49
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/ofontv6.ovp90
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/overbmp.opl22
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/overbmp.ovp49
-rw-r--r--Build/source/texk/web2c/omegafonts/tests/repeat.opl2
26 files changed, 1024 insertions, 78 deletions
diff --git a/Build/source/texk/web2c/omegafonts/ChangeLog b/Build/source/texk/web2c/omegafonts/ChangeLog
index 8c2af72d2df..9583e665f1c 100644
--- a/Build/source/texk/web2c/omegafonts/ChangeLog
+++ b/Build/source/texk/web2c/omegafonts/ChangeLog
@@ -1,3 +1,12 @@
+2014-07-09 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * Makefile.am: Drop Automake conditional OMFONTS.
+ * ofonts.test, overbmp.test, tests/ofont*, tests/inbmp.opl,
+ tests/overbmp.* (new): Shell scripts and data for new tests.
+
+ * char_routines.c, ligkern_routines.c, parse_ofm.c: Allow char
+ codes from Supplementary Unicode Planes (<=10FFFF).
+
2013-12-06 Peter Breitenlohner <peb@mppmu.mpg.de>
* omfonts.c (main): Use make_suffix() for implied ofm_name.
diff --git a/Build/source/texk/web2c/omegafonts/Makefile.am b/Build/source/texk/web2c/omegafonts/Makefile.am
index bc3fda25aaa..4c5bfd00405 100644
--- a/Build/source/texk/web2c/omegafonts/Makefile.am
+++ b/Build/source/texk/web2c/omegafonts/Makefile.am
@@ -1,6 +1,6 @@
## Makefile.am for the TeX Live subdirectory texk/web2c/omegafonts/
##
-## Copyright (C) 2009-2013 Peter Breitenlohner <tex-live@tug.org>
+## Copyright (C) 2009-2014 Peter Breitenlohner <tex-live@tug.org>
## You may freely use, modify and/or distribute this file.
##
AM_CPPFLAGS = -I$(top_builddir)/.. -I$(top_srcdir) $(KPATHSEA_INCLUDES) -DNOT_WEB2C
@@ -18,12 +18,10 @@ $(proglib): ${top_srcdir}/lib/*.c
bin_PROGRAMS =
if OTANGLE
-if OMFONTS
bin_PROGRAMS += omfonts
if WIN32
noinst_PROGRAMS = call_omfonts
endif WIN32
-endif OMFONTS
endif OTANGLE
EXTRA_PROGRAMS = omfonts
@@ -82,7 +80,6 @@ bin_links = \
include $(top_srcdir)/../../am/bin_links.am
if OTANGLE
-if OMFONTS
install-exec-hook: install-bin-links
if WIN32
for f in $(linked_programs); do \
@@ -95,17 +92,14 @@ if WIN32
rm -f $(DESTDIR)$(bindir)/$$f$(EXEEXT); \
done
endif WIN32
-endif OMFONTS
endif OTANGLE
## Tests
##
-OMFONTS_tests = charwd.test level1.test omfonts.test realnum.test \
- repeat.test selectfont.test specialhex.test
+OMFONTS_tests = charwd.test level1.test ofonts.test omfonts.test overbmp.test \
+ realnum.test repeat.test selectfont.test specialhex.test
if OTANGLE
-if OMFONTS
TESTS = $(OMFONTS_tests)
-endif OMFONTS
endif OTANGLE
EXTRA_DIST = $(OMFONTS_tests)
@@ -116,11 +110,23 @@ DISTCLEANFILES += tests/charwdr.* tests/charwdv.*
## level1.test
EXTRA_DIST += tests/level1.opl
DISTCLEANFILES += tests/xlevel1.ofm tests/xlevel1.opl
+## ofonts.test
+EXTRA_DIST += tests/ofontr0.pl \
+ tests/ofontr1.pl tests/ofontr1.vpl \
+ tests/ofontr2.opl tests/ofontr2.ovp \
+ tests/ofontr3.opl tests/ofontr3.ovp \
+ tests/ofontv4.pl tests/ofontv4.vpl \
+ tests/ofontv5.opl tests/ofontv5.ovp \
+ tests/ofontv6.opl tests/ofontv6.ovp
+DISTCLEANFILES += tests/xofont*
## omfonts.test
EXTRA_DIST += tests/Cherokee.pl tests/OCherokee.ovp
DISTCLEANFILES += tests/Cherokee.tfm tests/OCherokee.ofm \
tests/OCherokee.opl tests/OCherokee.ovf \
tests/xCherokee.* tests/xOCherokee.*
+## overbmp.test
+EXTRA_DIST += tests/inbmp.opl tests/overbmp.opl tests/overbmp.ovp
+DISTCLEANFILES += tests/xinbmp* tests/xoverbmp*
## realnum.test
EXTRA_DIST += tests/realnum.opl tests/realnum.out
DISTCLEANFILES += tests/realnum.*
diff --git a/Build/source/texk/web2c/omegafonts/Makefile.in b/Build/source/texk/web2c/omegafonts/Makefile.in
index 185cc7e480f..01f690fa300 100644
--- a/Build/source/texk/web2c/omegafonts/Makefile.in
+++ b/Build/source/texk/web2c/omegafonts/Makefile.in
@@ -79,9 +79,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = $(am__EXEEXT_1)
-@OMFONTS_TRUE@@OTANGLE_TRUE@am__append_1 = omfonts
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@noinst_PROGRAMS = \
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ call_omfonts$(EXEEXT)
+@OTANGLE_TRUE@am__append_1 = omfonts
+@OTANGLE_TRUE@@WIN32_TRUE@noinst_PROGRAMS = call_omfonts$(EXEEXT)
EXTRA_PROGRAMS = omfonts$(EXEEXT)
DIST_COMMON = $(top_srcdir)/../../am/bin_links.am \
$(srcdir)/Makefile.in $(srcdir)/Makefile.am pl-parser.h \
@@ -138,7 +137,7 @@ CONFIG_HEADER = $(top_builddir)/w2c/c-auto.h \
$(top_builddir)/ff-config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-@OMFONTS_TRUE@@OTANGLE_TRUE@am__EXEEXT_1 = omfonts$(EXEEXT)
+@OTANGLE_TRUE@am__EXEEXT_1 = omfonts$(EXEEXT)
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
@@ -706,9 +705,10 @@ call_omfonts_CPPFLAGS = -DEXEPROG=\"omfonts.exe\"
nodist_call_omfonts_SOURCES = ../callexe.c
call_omfonts_LDADD =
DISTCLEANFILES = pl-parser.output tests/charwdr.* tests/charwdv.* \
- tests/xlevel1.ofm tests/xlevel1.opl tests/Cherokee.tfm \
- tests/OCherokee.ofm tests/OCherokee.opl tests/OCherokee.ovf \
- tests/xCherokee.* tests/xOCherokee.* tests/realnum.* \
+ tests/xlevel1.ofm tests/xlevel1.opl tests/xofont* \
+ tests/Cherokee.tfm tests/OCherokee.ofm tests/OCherokee.opl \
+ tests/OCherokee.ovf tests/xCherokee.* tests/xOCherokee.* \
+ tests/xinbmp* tests/xoverbmp* tests/realnum.* \
tests/xrepeated.* tests/sample*.ofm tests/sample*.ovf \
tests/sample1-h.opl tests/xsample*.out tests/specialhex.ofm \
tests/specialhex.opl tests/specialhex.ovf tests/xspecialhex.*
@@ -719,15 +719,20 @@ bin_links = \
omfonts$(EXEEXT):ovf2ovp \
omfonts$(EXEEXT):ovp2ovf
-OMFONTS_tests = charwd.test level1.test omfonts.test realnum.test \
- repeat.test selectfont.test specialhex.test
+OMFONTS_tests = charwd.test level1.test ofonts.test omfonts.test overbmp.test \
+ realnum.test repeat.test selectfont.test specialhex.test
-@OMFONTS_TRUE@@OTANGLE_TRUE@TESTS = $(OMFONTS_tests)
+@OTANGLE_TRUE@TESTS = $(OMFONTS_tests)
EXTRA_DIST = $(OMFONTS_tests) tests/charwd-r.pl tests/charwd-v.vpl \
- tests/level1.opl tests/Cherokee.pl tests/OCherokee.ovp \
- tests/realnum.opl tests/realnum.out tests/repeat.opl \
- tests/repeated.opl tests/sample.out tests/sample.ovp \
- tests/sample0-h.opl tests/specialhex.ovp
+ tests/level1.opl tests/ofontr0.pl tests/ofontr1.pl \
+ tests/ofontr1.vpl tests/ofontr2.opl tests/ofontr2.ovp \
+ tests/ofontr3.opl tests/ofontr3.ovp tests/ofontv4.pl \
+ tests/ofontv4.vpl tests/ofontv5.opl tests/ofontv5.ovp \
+ tests/ofontv6.opl tests/ofontv6.ovp tests/Cherokee.pl \
+ tests/OCherokee.ovp tests/inbmp.opl tests/overbmp.opl \
+ tests/overbmp.ovp tests/realnum.opl tests/realnum.out \
+ tests/repeat.opl tests/repeated.opl tests/sample.out \
+ tests/sample.ovp tests/sample0-h.opl tests/specialhex.ovp
all: all-am
.SUFFIXES:
@@ -1201,9 +1206,7 @@ maintainer-clean-generic:
-rm -f pl-lexer.c
-rm -f pl-parser.c
-rm -f pl-parser.h
-@OMFONTS_FALSE@install-exec-hook:
@OTANGLE_FALSE@install-exec-hook:
-@OMFONTS_FALSE@uninstall-hook:
@OTANGLE_FALSE@uninstall-hook:
clean: clean-am
@@ -1320,14 +1323,14 @@ uninstall-bin-links:
@WIN32_FALSE@ rm -f $(DESTDIR)$(bindir)/$$link; \
@WIN32_FALSE@ done
-@OMFONTS_TRUE@@OTANGLE_TRUE@install-exec-hook: install-bin-links
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ for f in $(linked_programs); do \
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ $(INSTALL_PROGRAM) call_omfonts$(EXEEXT) $(DESTDIR)$(bindir)/$$f$(EXEEXT) || exit 1; \
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ done
-@OMFONTS_TRUE@@OTANGLE_TRUE@uninstall-hook: uninstall-bin-links
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ for f in $(linked_programs); do \
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ rm -f $(DESTDIR)$(bindir)/$$f$(EXEEXT); \
-@OMFONTS_TRUE@@OTANGLE_TRUE@@WIN32_TRUE@ done
+@OTANGLE_TRUE@install-exec-hook: install-bin-links
+@OTANGLE_TRUE@@WIN32_TRUE@ for f in $(linked_programs); do \
+@OTANGLE_TRUE@@WIN32_TRUE@ $(INSTALL_PROGRAM) call_omfonts$(EXEEXT) $(DESTDIR)$(bindir)/$$f$(EXEEXT) || exit 1; \
+@OTANGLE_TRUE@@WIN32_TRUE@ done
+@OTANGLE_TRUE@uninstall-hook: uninstall-bin-links
+@OTANGLE_TRUE@@WIN32_TRUE@ for f in $(linked_programs); do \
+@OTANGLE_TRUE@@WIN32_TRUE@ rm -f $(DESTDIR)$(bindir)/$$f$(EXEEXT); \
+@OTANGLE_TRUE@@WIN32_TRUE@ done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/Build/source/texk/web2c/omegafonts/char_routines.c b/Build/source/texk/web2c/omegafonts/char_routines.c
index 772edb5dd9a..b7e65d2377c 100644
--- a/Build/source/texk/web2c/omegafonts/char_routines.c
+++ b/Build/source/texk/web2c/omegafonts/char_routines.c
@@ -38,6 +38,7 @@ along with Omega; if not, write to the Free Software Foundation, Inc.,
#include "dvi.h"
#define PLANE 0x10000
+#define INDEX_MAX (PLANE-1)
#define HALFPLANE 0x08000
#define MAX_START_OFM 65535
@@ -61,9 +62,9 @@ along with Omega; if not, write to the Free Software Foundation, Inc.,
* or when the character is referenced in a charlist cycle, an extensible
* piece or in a ligature/kerning table. In the latter case, ensure_existence
* is called, and it sets the defined field of the character to be FALSE;
- *
+ *
* init_character also sets current_character to the character entry;
- *
+ *
*/
unsigned bc=0x7fffffff;
@@ -247,7 +248,7 @@ check_existence_all_character_fields(void)
char_entry *entry;
unsigned *exten;
unsigned j;
-
+
FOR_ALL_EXISTING_CHARACTERS(
unsigned c = plane*PLANE + index;
if (entry->indices[C_WD] == NULL) {
@@ -264,22 +265,33 @@ check_existence_all_character_fields(void)
check_existence_and_safety(c, entry->remainder, "",
"%sCharacter (H %X) NEXTLARGER than (H %X) "
"has no CHARACTER spec");
+ if (entry->remainder > 0xffff) {
+ fprintf(stderr, "Character (H %X) NEXTLARGER than (H %X) "
+ "exceeds ffff\n", entry->remainder, c);
+ exit(2);
+ }
break;
}
case TAG_EXT:{
exten = entry->extens;
for (j=E_MIN; j<=E_MAX; j++) {
- if (exten[j]!=0)
+ if (exten[j]!=0) {
check_existence_and_safety(c, exten[j],
extensible_pieces[j],
"%s piece (H %X) of character (H %X) "
"has no CHARACTER spec");
+ if (exten[j] > 0xfff) {
+ fprintf(stderr, "%s piece (H %X) of character (H %X) "
+ "exceeds ffff\n", extensible_pieces[j], exten[j], c);
+ exit(2);
+ }
+ }
}
break;
}
}
)
-}
+}
void
clear_ligature_entries(void)
@@ -368,7 +380,7 @@ print_characters(boolean read_ovf)
lentry = lig_kern_table + entry->remainder;
if (lentry->entries[0] > STOP_FLAG) {
lentry = lig_kern_table +
- (256*lentry->entries[2]+lentry->entries[3]);
+ (256*lentry->entries[2]+lentry->entries[3]);
}
do {
print_one_lig_kern_entry(lentry, FALSE);
@@ -460,7 +472,7 @@ print_packet(unsigned char *packet_start, unsigned packet_length)
arg = ovf_get_arg(&packet, cmd - DVI_SET_1 + 1, FALSE);
print_set_char(arg);
break;
- case DVI_NOP:
+ case DVI_NOP:
packet++;
break;
case DVI_PUSH:
@@ -860,66 +872,88 @@ unsigned num_char_info, words_per_entry;
void
compute_ofm_character_info(void)
{
+ unsigned c;
unsigned plane, index;
char_entry *entry;
bc = 0x7fffffff; ec=0;
FOR_ALL_EXISTING_CHARACTERS(
- unsigned c = plane*PLANE + index;
+ c = plane*PLANE + index;
if (c < bc) bc = c;
if (c > ec) ec = c;
)
if (bc > ec) bc = 1;
+
+ /* fill gaps */
+ for (plane = 0; plane < plane_max; plane++) {
+ if (planes[plane] == NULL) {
+ planes[plane] = (char_entry **)xmalloc(PLANE * sizeof(char_entry *));
+ char_max[plane] = 0;
+ planes[plane][0] = NULL;
+ }
+ for (index = char_max[plane]+1; index <= INDEX_MAX; index++) {
+ planes[plane][index] = NULL;
+ }
+ char_max[plane] = INDEX_MAX;
+ }
+
switch (ofm_level) {
case OFM_TFM: {
- if (ec>255)
+ if (ec>0xff)
fatal_error_1(
"Char (%x) too big for TFM (max ff); use OFM file",ec);
break;
}
case OFM_LEVEL0: {
- if (ec>65535)
+ if (ec>0x10ffff)
fatal_error_1(
- "Char (%x) too big for OFM level-0 (max ffff); use level-2",
+ "Char (%x) too big for OFM level-0 (max 10ffff); use level-2",
ec);
break;
}
case OFM_LEVEL1: {
- if (ec>65535)
+ if (ec>0x10ffff)
fatal_error_1(
- "Char (%x) too big for OFM level-1 (max ffff); use level-2",
+ "Char (%x) too big for OFM level-1 (max 10ffff); use level-2",
ec);
- /* Level 1 only uses plane 0. Take advantage of this fact. */
num_char_info = 0;
- for (index = bc; index <=ec; index++) {
- unsigned saved_index = index;
+ for (c = bc; c <= ec; c++) {
+ unsigned saved_c = c;
char_entry *next;
- entry = planes[0][index];
+ plane = c / PLANE;
+ index = c % PLANE;
+ entry = planes[plane][index];
if ((entry != NULL) && (WD_ENTRY != 0)) {
unsigned wd = WD_ENTRY, ht = HT_ENTRY, dp = DP_ENTRY, ic = IC_ENTRY;
- index += entry->copies;
- for (; index < ec; index++) {
- next = planes[0][index+1];
+ c += entry->copies;
+ for (; (c < ec) && (c-saved_c < 0xffff); c++) {
+ plane = (c+1) / PLANE;
+ index = (c+1) % PLANE;
+ next = planes[plane][index];
if ((WD_NEXT != wd) || (HT_NEXT != ht) ||
(DP_NEXT != dp) || (IC_NEXT != ic) ||
(RM_NEXT != entry->remainder) || (TG_NEXT != entry->tag))
break;
- planes[0][index+1] = entry;
+ planes[plane][index] = entry;
}
} else {
- planes[0][index] = NULL;
- init_character(index, NULL);
+ plane = c / PLANE;
+ index = c % PLANE;
+ planes[plane][index] = NULL;
+ init_character(c, NULL);
entry = current_character;
- for (; index < ec; index++) {
- next = planes[0][index+1];
+ for (; (c < ec) && (c-saved_c < 0xffff); c++) {
+ plane = (c+1) / PLANE;
+ index = (c+1) % PLANE;
+ next = planes[plane][index];
if (WD_NEXT != 0)
break;
- planes[0][index+1] = entry;
+ planes[plane][index] = entry;
}
}
- entry->copies = index - saved_index;
+ entry->copies = c - saved_c;
num_char_info++;
}
break;
@@ -937,9 +971,9 @@ output_ofm_character_info(void)
switch (ofm_level) {
case OFM_TFM: {
plane=0;
- for (index = bc; index <=ec; index++) {
- entry = planes[plane][index];
- if (entry == NULL) {
+ for (index = bc; index <= ec; index++) {
+ entry = planes[plane][index];
+ if (entry == NULL) {
out_ofm_4(0);
} else {
out_ofm(WD_ENTRY);
@@ -951,10 +985,13 @@ output_ofm_character_info(void)
break;
}
case OFM_LEVEL0: {
- plane=0;
- for (index = bc; index <=ec; index++) {
- entry = planes[plane][index];
- if (entry == NULL) {
+ unsigned c;
+
+ for (c = bc; c <= ec; c++) {
+ plane = c / PLANE;
+ index = c % PLANE;
+ entry = planes[plane][index];
+ if (entry == NULL) {
out_ofm_4(0); out_ofm_4(0);
} else {
out_ofm_2(WD_ENTRY);
@@ -969,10 +1006,13 @@ output_ofm_character_info(void)
}
case OFM_LEVEL1: {
unsigned i;
- plane=0;
- for (index = bc; index <=ec; index++) {
- entry = planes[plane][index];
- if (entry == NULL) {
+ unsigned c;
+
+ for (c = bc; c <= ec; c++) {
+ plane = c / PLANE;
+ index = c % PLANE;
+ entry = planes[plane][index];
+ if (entry == NULL) {
for (i=0; i<words_per_entry; i++)
out_ofm_4(0);
} else {
@@ -992,7 +1032,7 @@ output_ofm_character_info(void)
/* padding */
if (0 == npc % 2)
out_ofm_2(0);
- index += copies;
+ c += copies;
}
}
break;
diff --git a/Build/source/texk/web2c/omegafonts/ligkern_routines.c b/Build/source/texk/web2c/omegafonts/ligkern_routines.c
index 5302466dfde..6291b9cfb76 100644
--- a/Build/source/texk/web2c/omegafonts/ligkern_routines.c
+++ b/Build/source/texk/web2c/omegafonts/ligkern_routines.c
@@ -82,7 +82,7 @@ void
set_stop_command(void)
{
if (lk_step_ended == TRUE) {
- lig_kern_table[nl-1].entries[0] =
+ lig_kern_table[nl-1].entries[0] =
lig_kern_table[nl-1].entries[0] / 256 * 256 + STOP_FLAG;
} else {
warning_0("STOP must follow LIG or KRN; ignored");
@@ -316,7 +316,7 @@ int
l_eval(unsigned x, unsigned y)
{
hash_list h;
-
+
if ((x==CHAR_ERROR) || (y==CHAR_ERROR)) return CHAR_ERROR;
h = l_hash_lookup(x, y);
if (h == NULL) return y;
@@ -427,22 +427,38 @@ check_ligature_program(unsigned c, unsigned lab)
entry = lig_kern_table+lig_ptr;
if (l_hash_input(lig_ptr,c)) {
if (entry->entries[2] < KERN_FLAG) {
- if (entry->entries[1] != bchar)
+ if (entry->entries[1] != bchar) {
check_existence_and_safety(c, entry->entries[1],
ligature_commands[entry->entries[2]],
"%s character examined by (H %X)");
+ if (entry->entries[1] > 0xffff) {
+ fprintf(stderr, "%s character (H %X) examined by (H %X) "
+ "exceeds ffff\n", ligature_commands[entry->entries[2]], entry->entries[1], c);
+ exit(2);
+ }
+ }
if (entry->entries[3] >= 128)
/* Needs fixing */
if ((c < 128) || (c == -1))
if ((entry->entries[1] < 128) ||
- (entry->entries[1] == bchar))
+ (entry->entries[1] == bchar))
seven_bit_calculated = 0;
check_existence_and_safety(c, entry->entries[3],
ligature_commands[entry->entries[2]],
"%s character generated by (H %X)");
+ if (entry->entries[3] >0xffff) {
+ fprintf(stderr, "%s character (H %X) generated by (H %X) "
+ "exceeds ffff\n", ligature_commands[entry->entries[2]], entry->entries[3], c);
+ exit(2);
+ }
} else {
check_existence_and_safety(c, entry->entries[1],
"KRN", "%s character examined by (H %X)");
+ if (entry->entries[1] > 0xffff) {
+ fprintf(stderr, "KRN character (H %X) examined by (H %X) "
+ "exceeds ffff\n", entry->entries[1], c);
+ exit(2);
+ }
}
}
if (entry->entries[0] >= STOP_FLAG) lig_ptr = nl;
diff --git a/Build/source/texk/web2c/omegafonts/ofonts.test b/Build/source/texk/web2c/omegafonts/ofonts.test
new file mode 100755
index 00000000000..16a5bee25b5
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/ofonts.test
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+# Copyright (C) 2009-2014 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d tests || mkdir -p tests
+
+VPL='ofontr1 ofontv4'
+OVP='ofontr2 ofontr3 ofontv5 ofontv6'
+
+TEXMFCNF=$srcdir/../../kpathsea
+OFMFONTS=.:$srcdir/tests
+export TEXMFCNF OFMFONTS
+
+exit 77
+set -x
+
+for f in $VPL; do
+ ./omfonts -opl2ofm $srcdir/tests/$f.pl tests/x$f.tfm || exit 1
+ ./omfonts -ofm2opl tests/x$f.tfm tests/x$f.pl || exit 1
+ diff $srcdir/tests/$f.pl tests/x$f.pl || exit 1
+done
+
+for f in $OVP; do
+ ./omfonts -opl2ofm $srcdir/tests/$f tests/x$f || exit 1
+ ./omfonts -ofm2opl tests/x$f tests/x$f || exit 1
+ diff $srcdir/tests/$f.opl tests/x$f.opl || exit 1
+done
+
+rm -rf tests/xofont*
+
+for f in ofontr0; do
+ ./omfonts -opl2ofm $srcdir/tests/$f.pl tests/x$f.tfm || exit 1
+ ./omfonts -ofm2opl tests/x$f.tfm tests/x$f.pl || exit 1
+ diff $srcdir/tests/$f.pl tests/x$f.pl || exit 1
+done
+
+for f in $VPL; do
+ ./omfonts -ovp2ovf $srcdir/tests/$f.vpl tests/x$f.vf tests/x$f.tfm || exit 1
+ ./omfonts -ofm2opl tests/x$f.tfm tests/x$f.pl || exit 1
+ diff $srcdir/tests/$f.pl tests/x$f.pl || exit 1
+ ./omfonts -ovf2ovp tests/x$f.vf tests/x$f.tfm tests/x$f.vpl || exit 1
+ diff $srcdir/tests/$f.vpl tests/x$f.vpl || exit 1
+done
+
+for f in $OVP; do
+ ./omfonts -ovp2ovf $srcdir/tests/$f tests/x$f tests/x$f || exit 1
+ ./omfonts -ofm2opl tests/x$f tests/x$f || exit 1
+ diff $srcdir/tests/$f.opl tests/x$f.opl || exit 1
+ ./omfonts -ovf2ovp tests/x$f tests/x$f tests/x$f || exit 1
+ diff $srcdir/tests/$f.ovp tests/x$f.ovp || exit 1
+done
+
+exit 0
+
+
diff --git a/Build/source/texk/web2c/omegafonts/overbmp.test b/Build/source/texk/web2c/omegafonts/overbmp.test
new file mode 100755
index 00000000000..fc3771c73c2
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/overbmp.test
@@ -0,0 +1,53 @@
+#! /bin/sh
+
+# Copyright (C) 2013, 2014 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+test -d tests || mkdir -p tests
+
+TEXMFCNF=$srcdir/../../kpathsea
+OFMFONTS=./tests
+export TEXMFCNF OFMFONTS
+
+exit 77
+set -x
+
+./omfonts -opl2ofm $srcdir/tests/inbmp tests/xinbmp || exit 1
+
+./omfonts -ofm2opl xinbmp tests/xinbmp || exit 1
+
+diff $srcdir/tests/inbmp.opl tests/xinbmp.opl || exit 1
+
+./omfonts -ovp2ovf $srcdir/tests/overbmp.ovp tests/xoverbmp || exit 1
+
+./omfonts -ofm2opl xoverbmp tests/xoverbmp || exit 1
+
+diff $srcdir/tests/overbmp.opl tests/xoverbmp.opl || exit 1
+
+./omfonts -ovf2ovp tests/xoverbmp xoverbmp tests/xoverbmp.ovp || exit 1
+
+diff $srcdir/tests/overbmp.ovp tests/xoverbmp.ovp || exit 1
+
+sed -e '/OFMLEVEL/s/H 0/H 1/' tests/xinbmp.opl >tests/xinbmp1.opl
+
+./omfonts -opl2ofm tests/xinbmp1 tests/xinbmp1 || exit 1
+
+./omfonts -ofm2opl xinbmp1 tests/xinbmp2 || exit 1
+
+diff tests/xinbmp1.opl tests/xinbmp1.opl || exit 1
+
+sed -e '/OFMLEVEL/s/H 1/H 0/' -e 's/xinbmp)/xinbmp1)/;s/xoverbmp)/xoverbmp1)/' \
+ tests/xoverbmp.ovp >tests/xoverbmp1.ovp
+
+./omfonts -ovp2ovf tests/xoverbmp1.ovp tests/xoverbmp1 || exit 1
+
+sed -e '/OFMLEVEL/s/H 1/H 0/' tests/xoverbmp.opl >tests/xoverbmp1.opl
+
+./omfonts -ofm2opl xoverbmp1 tests/xoverbmp2 || exit 1
+
+diff tests/xoverbmp1.opl tests/xoverbmp2.opl || exit 1
+
+./omfonts -ovf2ovp tests/xoverbmp1 xoverbmp1 tests/xoverbmp2 || exit 1
+
+diff tests/xoverbmp1.ovp tests/xoverbmp2.ovp || exit 1
+
diff --git a/Build/source/texk/web2c/omegafonts/parse_ofm.c b/Build/source/texk/web2c/omegafonts/parse_ofm.c
index fc22024233b..823d68209a2 100644
--- a/Build/source/texk/web2c/omegafonts/parse_ofm.c
+++ b/Build/source/texk/web2c/omegafonts/parse_ofm.c
@@ -183,7 +183,7 @@ ofm_organize(void)
eval_four_bytes(&ne);
eval_four_bytes(&np);
eval_four_bytes(&font_dir);
- top_char = 65535;
+ top_char = 0x10ffff;
top_width = 65535;
top_height = 255;
top_depth = 255;
diff --git a/Build/source/texk/web2c/omegafonts/tests/inbmp.opl b/Build/source/texk/web2c/omegafonts/tests/inbmp.opl
new file mode 100644
index 00000000000..aef0f847fbf
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/inbmp.opl
@@ -0,0 +1,18 @@
+(OFMLEVEL D 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H AA6297E0)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ )
+(CHARACTER H 4E00
+ (CHARWD R 1.0)
+ )
+(CHARACTER H 53F1
+ (CHARWD R 1.0)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/level1.opl b/Build/source/texk/web2c/omegafonts/tests/level1.opl
index 2a700e7ada0..048e6b14f0e 100644
--- a/Build/source/texk/web2c/omegafonts/tests/level1.opl
+++ b/Build/source/texk/web2c/omegafonts/tests/level1.opl
@@ -37,3 +37,8 @@
(CHARHT R 0.9)
(CHARDP R 0.1)
)
+(CHARREPEAT H 20001 H FFFE
+ (CHARWD R 1.0)
+ (CHARHT R 0.9)
+ (CHARDP R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr0.pl b/Build/source/texk/web2c/omegafonts/tests/ofontr0.pl
new file mode 100644
index 00000000000..0cf4c883ccb
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr0.pl
@@ -0,0 +1,47 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H BB0E7BF)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 41
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 42
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 43
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 44
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 45
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 46
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr1.pl b/Build/source/texk/web2c/omegafonts/tests/ofontr1.pl
new file mode 100644
index 00000000000..fb77c215a38
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr1.pl
@@ -0,0 +1,27 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9748D64)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 7F
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 80
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr1.vpl b/Build/source/texk/web2c/omegafonts/tests/ofontr1.vpl
new file mode 100644
index 00000000000..9e043344a21
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr1.vpl
@@ -0,0 +1,40 @@
+(VTITLE Mapping ofontr1 to ofontr0)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9748D64)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 7F
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 41)
+ )
+ )
+(CHARACTER H 80
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 42)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr2.opl b/Build/source/texk/web2c/omegafonts/tests/ofontr2.opl
new file mode 100644
index 00000000000..1e0b5b44b4e
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr2.opl
@@ -0,0 +1,29 @@
+(OFMLEVEL D 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 6415BA2B)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 17F
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 180
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr2.ovp b/Build/source/texk/web2c/omegafonts/tests/ofontr2.ovp
new file mode 100644
index 00000000000..2b953d253e3
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr2.ovp
@@ -0,0 +1,42 @@
+(VTITLE Mapping ofontr2 to ofontr0)
+(OFMLEVEL D 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 6415BA2B)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 17F
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SETCHAR H 43)
+ )
+ )
+(CHARACTER H 180
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 44)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr3.opl b/Build/source/texk/web2c/omegafonts/tests/ofontr3.opl
new file mode 100644
index 00000000000..5a005f10f05
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr3.opl
@@ -0,0 +1,29 @@
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9141B113)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 27F
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 280
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontr3.ovp b/Build/source/texk/web2c/omegafonts/tests/ofontr3.ovp
new file mode 100644
index 00000000000..608376df9ab
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontr3.ovp
@@ -0,0 +1,42 @@
+(VTITLE Mapping ofontr3 to ofontr0)
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 9141B113)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr0)
+ (FONTCHECKSUM H BB0E7BF)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 27F
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 45)
+ )
+ )
+(CHARACTER H 280
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SETCHAR H 46)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv4.pl b/Build/source/texk/web2c/omegafonts/tests/ofontv4.pl
new file mode 100644
index 00000000000..c3f18f3e40d
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv4.pl
@@ -0,0 +1,47 @@
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H C1668DBB)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 7C
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 7D
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 7E
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 81
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 82
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 83
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv4.vpl b/Build/source/texk/web2c/omegafonts/tests/ofontv4.vpl
new file mode 100644
index 00000000000..c77d8be3d94
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv4.vpl
@@ -0,0 +1,88 @@
+(VTITLE Mapping ofontv4 to ofontr1+ofontr2+ofontr3)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H C1668DBB)
+(SEVENBITSAFEFLAG TRUE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 7C
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 7D
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 7E
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 81
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 80)
+ )
+ )
+(CHARACTER H 82
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 180)
+ )
+ )
+(CHARACTER H 83
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 280)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv5.opl b/Build/source/texk/web2c/omegafonts/tests/ofontv5.opl
new file mode 100644
index 00000000000..19aac187c26
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv5.opl
@@ -0,0 +1,49 @@
+(OFMLEVEL D 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 4A681BA5)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 17C
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 17D
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 17E
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 181
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 182
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
+(CHARACTER H 183
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv5.ovp b/Build/source/texk/web2c/omegafonts/tests/ofontv5.ovp
new file mode 100644
index 00000000000..f01e8b7797a
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv5.ovp
@@ -0,0 +1,90 @@
+(VTITLE Mapping ofontv5 to ofontr2+ofontr3+ofontr1)
+(OFMLEVEL D 0)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 4A681BA5)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 17C
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 17D
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 17E
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 181
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SETCHAR H 180)
+ )
+ )
+(CHARACTER H 182
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 280)
+ )
+ )
+(CHARACTER H 183
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 80)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv6.opl b/Build/source/texk/web2c/omegafonts/tests/ofontv6.opl
new file mode 100644
index 00000000000..8a7b6b7027b
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv6.opl
@@ -0,0 +1,49 @@
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 2DCEE34A)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(CHARACTER H 27C
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 27D
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ )
+(CHARACTER H 27E
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ )
+(CHARACTER H 281
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ )
+(CHARACTER H 282
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
+(CHARACTER H 283
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/ofontv6.ovp b/Build/source/texk/web2c/omegafonts/tests/ofontv6.ovp
new file mode 100644
index 00000000000..babf355c922
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/ofontv6.ovp
@@ -0,0 +1,90 @@
+(VTITLE Mapping ofontv6 to ofontr3+ofontr1+ofontr2)
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H 2DCEE34A)
+(SEVENBITSAFEFLAG FALSE)
+(FONTDIMEN
+ (SLANT R 0.0)
+ (SPACE R 0.25)
+ (STRETCH R 0.2)
+ (SHRINK R 0.1)
+ (XHEIGHT R 0.45)
+ (QUAD R 1.0)
+ (EXTRASPACE R 0.111)
+ )
+(MAPFONT D 0
+ (FONTNAME ofontr3)
+ (FONTCHECKSUM H 9141B113)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME ofontr1)
+ (FONTCHECKSUM H 9748D64)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 2
+ (FONTNAME ofontr2)
+ (FONTCHECKSUM H 6415BA2B)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 27C
+ (CHARWD R 0.6)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SETCHAR H 27F)
+ )
+ )
+(CHARACTER H 27D
+ (CHARWD R 0.8)
+ (CHARHT R 1.1)
+ (CHARDP R 0.1)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 7F)
+ )
+ )
+(CHARACTER H 27E
+ (CHARWD R 0.8)
+ (CHARHT R 1.2)
+ (CHARDP R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 17F)
+ )
+ )
+(CHARACTER H 281
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.1)
+ (MAP
+ (SETCHAR H 280)
+ )
+ )
+(CHARACTER H 282
+ (CHARWD R 0.9)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 80)
+ )
+ )
+(CHARACTER H 283
+ (CHARWD R 0.7)
+ (CHARHT R 0.9)
+ (CHARIC R 0.2)
+ (MAP
+ (SELECTFONT D 2)
+ (SETCHAR H 180)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/overbmp.opl b/Build/source/texk/web2c/omegafonts/tests/overbmp.opl
new file mode 100644
index 00000000000..7cc4615c3ff
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/overbmp.opl
@@ -0,0 +1,22 @@
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H DD8C3992)
+(SEVENBITSAFEFLAG FALSE)
+(CHARACTER H 4E00
+ (CHARWD R 1.0)
+ )
+(CHARACTER H 53F1
+ (CHARWD R 1.0)
+ )
+(CHARACTER H 20B9F
+ (CHARWD R 1.0)
+ )
+(CHARACTER H 20BB7
+ (CHARWD R 1.0)
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/overbmp.ovp b/Build/source/texk/web2c/omegafonts/tests/overbmp.ovp
new file mode 100644
index 00000000000..06886a456a9
--- /dev/null
+++ b/Build/source/texk/web2c/omegafonts/tests/overbmp.ovp
@@ -0,0 +1,49 @@
+(VTITLE JVF with characters above the Basic Multilingual Plane)
+(OFMLEVEL D 1)
+(FONTDIR TL)
+(FAMILY UNSPECIFIED)
+(FACE F MRR)
+(CODINGSCHEME UNSPECIFIED)
+(DESIGNSIZE R 10.0)
+(COMMENT DESIGNSIZE IS IN POINTS)
+(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
+(CHECKSUM H DD8C3992)
+(SEVENBITSAFEFLAG FALSE)
+(MAPFONT D 0
+ (FONTNAME xinbmp)
+ (FONTCHECKSUM H AA6297E0)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(MAPFONT D 1
+ (FONTNAME xoverbmp)
+ (FONTCHECKSUM H DD8C3992)
+ (FONTAT R 1.0)
+ (FONTDSIZE R 10.0)
+ )
+(CHARACTER H 4E00
+ (CHARWD R 1.0)
+ (MAP
+ (SETCHAR H 4E00)
+ )
+ )
+(CHARACTER H 53F1
+ (CHARWD R 1.0)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 20B9F)
+ )
+ )
+(CHARACTER H 20B9F
+ (CHARWD R 1.0)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR H 20BB7)
+ )
+ )
+(CHARACTER H 20BB7
+ (CHARWD R 1.0)
+ (MAP
+ (SETCHAR H 53F1)
+ )
+ )
diff --git a/Build/source/texk/web2c/omegafonts/tests/repeat.opl b/Build/source/texk/web2c/omegafonts/tests/repeat.opl
index 8cf09282d2f..09099826e4b 100644
--- a/Build/source/texk/web2c/omegafonts/tests/repeat.opl
+++ b/Build/source/texk/web2c/omegafonts/tests/repeat.opl
@@ -1,4 +1,4 @@
-(OFMLEVEL H 1)
+(OFMLEVEL D 1)
(FONTDIR TL)
(FAMILY UNSPECIFIED)
(FACE F MRR)