summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2021-06-11 00:21:44 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2021-06-11 00:21:44 +0200
commit78aafeff01160ce000074e88a1eaf2cd4b7fbce6 (patch)
tree6dde9616aa2b99705e780aa3c22777494786ec33
parentc558f97f6e47f6d2604fdea3bcd808794a6e41a7 (diff)
downloadcontext-78aafeff01160ce000074e88a1eaf2cd4b7fbce6.tar.gz
2021-06-10 23:11:00
-rw-r--r--doc/context/sources/general/manuals/followingup/followingup-formats.tex272
-rw-r--r--doc/context/sources/general/manuals/followingup/followingup.tex1
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin23931 -> 23949 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin230130 -> 230146 bytes
-rw-r--r--tex/context/base/mkiv/strc-syn.lua10
-rw-r--r--tex/context/base/mkiv/type-set.mkiv154
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/core-con.mkxl7
-rw-r--r--tex/context/base/mkxl/math-del.mkxl7
-rw-r--r--tex/context/base/mkxl/math-fen.mkxl61
-rw-r--r--tex/context/base/mkxl/math-int.mkxl10
-rw-r--r--tex/context/base/mkxl/page-txt.mklx2
-rw-r--r--tex/context/base/mkxl/strc-syn.mkxl19
-rw-r--r--tex/context/base/mkxl/tabl-tbl.mkxl17
-rw-r--r--tex/context/base/mkxl/type-set.mkxl154
-rw-r--r--tex/context/fonts/mkiv/type-imp-dejavu.mkiv7
-rw-r--r--tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv93
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
23 files changed, 626 insertions, 202 deletions
diff --git a/doc/context/sources/general/manuals/followingup/followingup-formats.tex b/doc/context/sources/general/manuals/followingup/followingup-formats.tex
new file mode 100644
index 000000000..fb8700a51
--- /dev/null
+++ b/doc/context/sources/general/manuals/followingup/followingup-formats.tex
@@ -0,0 +1,272 @@
+% language=us
+
+\environment followingup-style
+
+\startcomponent followingup-format
+
+\startchapter[title={The format file}]
+
+It is interesting when someone compares macro package and uses parameters like
+the size of a format file, the output of \type {\tracingall}, or startup time to
+make some point. The point I want to make here is that unless you know exactly
+what goes in a run that involves a real document, which can itself involve
+multiple runs, such a comparison is rather pointless.
+
+For instance, when you load few fonts, typeset one page and don't do anything
+that demands any processing or multiple runs, you basically don't measure
+anything. More interesting are the differences between 10 or 500 pages, a few
+font calls or tens of thousands, no color of extensive usage of color and other
+properties, interfacing, including inheritance of document constructs, etc. And
+even then, when comparing macro packages, it is kind of tricky to deduce much
+from what you observe. You really need to know what is going on inside and also
+how that relates to for instance adaptive font scaling. You can have a fast start
+up but if a users needs one tikz picture, loading that package alone will make
+you forget the initial startup time. You always pay a price for advanced features
+and integration. And we didn't even talk about the operating system caching
+files, running on a network share, sharing processors among virtual machines,
+etc.
+
+Pointless comparing is also true for looking at the log file when enabling \type
+{\tracingall}. When a macro package loads stuff at startup you can be sure that
+the log file is larger. When the first a font or language is loaded the first
+time, or maybe when math is set up there can be plenty of lines dumped. And, when
+a box is shown the configured depth and breadth really matter, and it might also
+be that the engine provides much more (verbose) detail. So, a comparison is again
+pointless.
+
+That brings us to the format file. When you make a \CONTEXT\ format with the
+English user interface, with interfacing being a feature that itself introduces
+overhead, the \LUATEX\ engine will show this at the end:
+
+\starttyping
+Beginning to dump on file cont-en.fmt
+ (format=cont-en 2021.6.9)
+48605 strings using 784307 bytes
+1050637 memory locations dumped; current usage is 414&523763
+44974 multiletter control sequences
+\font\nullfont=nullfont
+0 preloaded fonts
+\stoptyping
+
+The file itself is quite large: 11,129,903 bytes. However, it is actually much
+larger because the format file is compressed! The real size is 19.399.216. Not
+taking that into account when comparing the size of format files is kind of bad
+because compression directly relates to what resources a format uses and how
+usage is distributed over the available memory blobs. The \LUATEX\ engine does
+some optimizations and saves the data sparse but the more holes you create, the
+worse it gets. For instance, the large character vectors are compartmentalized in
+order to handle \UNICODE\ efficiently so the used memory relates to what you
+define: do you set up all catcodes or just a subset. Maybe you delay some
+initialization to after the format is loaded, in which case a smaller format file
+gets compensated by more memory usage and initializaton time afterwards. Maybe
+your temporary macros create holes in the token array. The memory that is
+configured in the configuration files also matter. Some memory blobs are saved at
+their configured size, others dismiss the top part that is not used when saving
+the format but allocate the lot when the format is loaded. That means that memory
+usage in for instance \LUATEX\ can be much larger than a format file suggests
+(keep in mind that a format file is basically a memory dump).
+
+Now, how does \LUAMETATEX\ compare to \LUATEX. Again we will look at the size of
+the format file, but you need to keep in mind that for various reasons the \LMTX\
+macros are somewhat more efficient than the \MKIV\ ones, in the meantime some new
+mechanism were added, which adds more \TEX\ and \LUA\ code, but I still expect
+(at least for now) a smaller format file. However when we create the format we
+see this (reformatted):
+
+\starttyping
+Dumping format 'cont-en.fmt 2021.6.9' in file 'cont-en.fmt':
+tokenlist compacted from 489733 to 488204 entries,
+1437 potentially aliased lua call/value entries,
+max string length 69, 16 fingerprint
++ 16 engine + 28 preamble
++ 836326 stringpool
++ 10655 nodes + 3905660 tokens
++ 705300 equivalents
++ 23072 math codes + 493024 text codes
++ 38132 primitives + 497352 hashtable
++ 4 fonts + 10272 math + 1008 language + 180 insert
++ 10305643 bytecodes
++ 12 housekeeping = 16826700 total.
+\stoptyping
+
+This looks quite different from the \LUATEX\ output. Here we report more detail:
+for each blob we mention the number of bytes used. The final result is a file
+that takes 16.826.700 bytes. That number should be compared with the 19.399.216
+for \LUATEX. So, we need less indeed. But, when we compress the \LUAMETATEX\
+format we get this: 5,913,932 which is much less than the 11,129,903 compressed
+size that the \LUATEX\ engine makes of it. One reason for using level 3 zip
+compression compression in \LUATEX\ is that (definitely when we started) it loads
+faster. It adds to creating the dump but doesn't really influence loading,
+although that depends a bit on the compiler used. It is not easy to see from
+these numbers what goes on, but when you consider the fact that we mostly store
+32 bit numbers it will also be clear that many can be zero or have two or three
+zero bytes. There's a lot of repetition involved!
+
+So let's look at some of these numbers. The mentioning of token list compaction
+relates to getting rid of holes in memory. Each token takes 8 bytes, 4 for the
+token identifier, internally called a cmd and chr, and 4 for a value like an
+integer or dimension value, or a glue pointer, or a pointer to a next token, etc.
+In our case compaction doesn't save that much.
+
+The mentioning of potentially aliased \LUA\ call|/|value entries is more a warning.
+Because the \LUA\ engine starts fresh each run, you cannot store its \quote
+{pointers} and because hashes are randomized this means that you need to delay
+initialization to startup time, definitely for function tokens.
+
+Strings in \TEX\ can be pretty long but in practice they aren't. In \CONTEXT\ the
+maximum string length is 69. This makes it possible to use one byte for
+registering the string length instead of four which saves quite a bit. Of course
+one large string will spoil this game.
+
+The fingerprint, engine, preamble and later housekeeping bytes can be neglected
+but the string pool not. These are the bytes that make up the strings. The bytes
+are stored in format but when loaded become dynamically allocated. The \LUATEX\
+engine and its successor don't really have a pool.
+
+Now comes a confusing number. There are not tens of thousands of nodes allocated.
+A node is just a pointer into a large array so actually node references are just
+indices. Their size varies from 2 slots to 25; the largest are par nodes, while
+shape nodes are allocated dynamically. So what gets reported are the number of
+bytes that a node takes. each node slot takes 8 bytes, so a glyph node of 12
+bytes takes 96 bytes, while a glue spec node (think skip registers) takes 5 slots
+or 40 bytes. These are amounts of memory that were not realistic when \TEX\ was
+written. For the record: in \LUATEX\ glue spec nodes are not shared, so we have
+many more.
+
+The majority of \TEX\ related dump data is for tokens, and here we need 3905660
+which means 488K tokens (each reported value also includes some overhead). The
+memory used for the table of equivalents makes for some 88K of them. This table
+relates to macros (their names and content). Keep in mind that (math) character
+references are also macros.
+
+The next sections that get loaded are math and text codes. These are the
+mentioned compartimized character properties. The number of math codes is not
+that large (because we delay much of math) but the text codes are plenty, think
+of lc, uc, sf, hj, catcodes, etc. Compared to \LUATEX\ we have more categories
+but use less space because we have an more granular storage model. Optimizing
+that bit really payed off.
+
+The way primitives and macro names get resolved is pretty much the same in all
+engines but by using the fact that we operate in 32 bit I could actually get rid
+of some parallel tables that handle saving and restore. Some optimizations relate
+to the fact that the register ranges are part of the game so basically we have
+some holes in there when they are not used. I guess this is why \ETEX\ uses a
+sparse model for the registers above 255. What also saved a lot is that we don't
+need to store font names, because these are available in another way; even in
+\LUATEX\ that takes a large, basically useless, chunk. The memory that a macro
+without parameters consumes is 8 bytes smaller and in \CONTEXT\ we have lots of
+these.
+We don't really store fonts, so that section is small, but we do store the math
+parameters, and there is not much we can save there. We also have more such
+parameters in \LUAMETATEX\ so there we might actually use more storage. The
+information related to languages is also minimal because patterns and exceptions
+are loaded at runtime. A new category (compared to \LUATEX) is inserts because in
+\LUAMETATEX\ we can use an alternative (not register based) variant. As you can
+see from the 180 bytes uses, indeed \CONTEXT\ uses that variant.
+
+That leaves a large block of more than 10 million bytes that relates to \LUA\
+bytecode. A large part of that is the huge \LUA\ character table that \CONTEXT\
+uses. The implementation of font handling also takes quite a bit and we're not
+even talking of all the auxiliary \LUA\ modules, \XML\ processing, etc. When
+\CONTEXT\ would load that on demand which is nearly always the format file would
+be much smaller but one would pay for it later. Loading the (some 600) \LUA\ byte
+code chunks takes of course some time as does initialization but not much.
+
+All that said, the reason why we have a large format file can be understood well
+if one considers what goes in there. The \CONTEXT\ format files for \PDFTEX\ and
+\XETEX\ are 3.3 and 4.7 MB each which is smaller but not that much when you
+consider the fact that there is no \LUA\ code stored and that there are less
+character tables and an \ETEX\ register model used. But a format file is not the
+whole story. Runtime memory usage also comes at a price.
+
+The current memory settings of \CONTEXT\ are as follows; these values get
+reported when a format has been generated and can be queried at runtime an any
+moment:
+
+\starttabulate[|l|r|r|r|r|]
+\BC \BC max \BC min \BC set \BC stp \BC \NR
+\HL
+\BC string \NC 2097152 \NC 150000 \NC 500000 \NC 100000 \NC \NR
+\BC pool \NC 100000000 \NC 10000000 \NC 20000000 \NC 1000000 \NC \NR
+\BC hash \NC 2097152 \NC 150000 \NC 250000 \NC 100000 \NC \NR
+\BC lookup \NC 2097152 \NC 150000 \NC 250000 \NC 100000 \NC \NR
+\BC node \NC 50000000 \NC 1000000 \NC 5000000 \NC 500000 \NC \NR
+\BC token \NC 10000000 \NC 1000000 \NC 10000000 \NC 250000 \NC \NR
+\BC buffer \NC 100000000 \NC 1000000 \NC 10000000 \NC 1000000 \NC \NR
+\BC input \NC 100000 \NC 10000 \NC 100000 \NC 10000 \NC \NR
+\BC file \NC 2000 \NC 500 \NC 2000 \NC 250 \NC \NR
+\BC nest \NC 10000 \NC 1000 \NC 10000 \NC 1000 \NC \NR
+\BC parameter \NC 100000 \NC 20000 \NC 100000 \NC 10000 \NC \NR
+\BC save \NC 500000 \NC 100000 \NC 500000 \NC 10000 \NC \NR
+\BC font \NC 100000 \NC 250 \NC 250 \NC 250 \NC \NR
+\BC language \NC 10000 \NC 250 \NC 250 \NC 250 \NC \NR
+\BC mark \NC 10000 \NC 50 \NC 50 \NC 50 \NC \NR
+\BC insert \NC 500 \NC 10 \NC 10 \NC 10 \NC \NR
+\stoptabulate
+
+The maxima is what can be used at most. Apart from the magic number 2097152 all
+these maxima can be bumped at compile time but if you need more, you might wonder
+of your approach to rendering makes sense. The minima are what always gets
+allocated, and again these are hard coded defaults. The size can be configured
+and is normally the same as the minima but we use larger values in \CONTEXT. The
+step is how much an initial memory blob will grow when more is needed than is
+currently available. The last four entries show that we don't start out with many
+fonts (especially when we use the \CONTEXT\ compact font model not that many are
+needed) and because \CONTEXT\ implements marks in a different way we actually
+don't need them. We do use the new insert properties storage model and for now
+the set sizes are enough for what we need.
+
+In practice a \LUAMETATEX\ run uses less memory than a \LUATEX\ one, not only
+because memory allocation is more dynamic, but also because of other
+optimizations. When the compact font model is used (something \CONTEXT) even less
+memory is needed. Even this claim should me made with care. Whenever I discuss
+the use of resources one needs to limit the conclusions to \CONTEXT. I can't
+speak for other macro packages simply because I don't know the internals and the
+design decisions made and their impact on the statistics. As a teaser I show the
+impact of some definitions:
+
+\starttyping
+\chardef \MyFooA1234
+\Umathchardef\MyFooB"1 "0 "1234
+\Umathcode 1 2 3 4
+\def \MyFooC{ABC}
+\def \MyFooD#1{A#1C}
+\def \MyFooE{\directlua{print("some lua")}}
+\stoptyping
+
+The stringpool grows because we store the names (here they are oq equal length).
+Only symbolic definitions bump the hashtable and equivalents. And with
+definitions that have text inside the number of bytes taken by tokens grows fast
+because every character in that linked list takes 8 bytes, 4 for the character
+with its catcode state and 4 for the link to the next token.
+
+\starttabulate[|l||||||]
+\BC \BC stringpool \BC tokens \BC equivalents \BC hashtable \BC total \NC \NR
+\HL
+\NC \NC 836408 \NC 3906124 \NC 705316 \NC 497396 \NC 16828987 \NC \NR
+\NC \type {\chardef} \NC 836415 \NC 3906116 \NC 705324 \NC 497408 \NC 16829006 \NC \NR
+\NC \type {\Umathchardef} \NC 836422 \NC 3906116 \NC 705324 \NC 497420 \NC 16829025 \NC \NR
+\NC \type {\Umathcode} \NC 836422 \NC 3906124 \NC 705324 \NC 497420 \NC 16829033 \NC \NR
+\NC \type {\def} (no arg) \NC 836429 \NC 3906148 \NC 705332 \NC 497428 \NC 16829080 \NC \NR
+\NC \type {\def} (arg) \NC 836436 \NC 3906196 \NC 705340 \NC 497440 \NC 16829155 \NC \NR
+\NC \type {\def} (text) \NC 836443 \NC 3906372 \NC 705348 \NC 497452 \NC 16829358 \NC \NR
+\stoptabulate
+
+So, every time a user wants some feature (some extra checking, a warning, color
+or font support for some element) that results in a trivial extension to the
+core, it can bump the size fo the format file more than you think. Of course when
+it leads to some overhaul sharing code can actually make the format shrink too. I
+hope it is clear now that there really is not much to deduce from the bare
+numbers. Just try to imagine what:
+
+\starttyping
+\definefilesynonym
+ [type-imp-newcomputermodern-book.mkiv]
+ [type-imp-newcomputermodern.mkiv]
+\stoptyping
+
+adds to the format. Convenience has a price.
+
+\stopchapter
+
+\stopcomponent
diff --git a/doc/context/sources/general/manuals/followingup/followingup.tex b/doc/context/sources/general/manuals/followingup/followingup.tex
index 996673a36..417cafcbd 100644
--- a/doc/context/sources/general/manuals/followingup/followingup.tex
+++ b/doc/context/sources/general/manuals/followingup/followingup.tex
@@ -30,6 +30,7 @@
\component followingup-retrospect
\component followingup-fonts
\component followingup-memory
+ \component followingup-formats
\stopbodymatter
\stopdocument
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index b2394098d..90e3723f7 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2021.06.09 20:31}
+\newcontextversion{2021.06.10 23:09}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index f87187c45..15405b852 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2021.06.09 20:31}
+\edef\contextversion{2021.06.10 23:09}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 9ef4d9f95..69e142b5f 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2021.06.09 20:31}
+\newcontextversion{2021.06.10 23:09}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 776d85c8b..0eaaf8682 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -45,7 +45,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2021.06.09 20:31}
+\edef\contextversion{2021.06.10 23:09}
%D Kind of special:
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 4363c067a..f1d723687 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 1f3016ff8..a8c81db5d 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-syn.lua b/tex/context/base/mkiv/strc-syn.lua
index c0ebb556c..6b50da4ac 100644
--- a/tex/context/base/mkiv/strc-syn.lua
+++ b/tex/context/base/mkiv/strc-syn.lua
@@ -193,9 +193,12 @@ function synonyms.prepare(data)
local entry = result[i]
local definition = entry.definition
if definition then
- local tag = definition.tag
- local key = tag ~= "" and tag or definition.synonym
- entry.split = splitter(strip(key))
+ local srt = definition.sortkey or ""
+ local tag = definition.tag or ""
+ local key = (srt ~= "" and srt) or (tag ~= "" and tag) or definition.synonym
+ if key then
+ entry.split = splitter(strip(key))
+ end
end
end
end
@@ -310,6 +313,7 @@ implement {
{ "tag" },
{ "synonym" },
{ "meaning" },
+ { "sortkey" },
{ "used", "boolean" }
}
}
diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv
index 68cd939d7..c7910ac62 100644
--- a/tex/context/base/mkiv/type-set.mkiv
+++ b/tex/context/base/mkiv/type-set.mkiv
@@ -59,81 +59,83 @@
\fi
-\definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv]
-\definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv]
-
-\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
-\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
-\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
-
-\definefilesynonym [type-imp-dejavu-condensed.mkiv] [type-imp-dejavu.mkiv]
-
-\definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-avantgarde.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-helvetica.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-chancery.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-bookman.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-schoolbook.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-times.mkiv] [type-imp-texgyre.mkiv]
-
-\definefilesynonym [type-imp-cursor.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-adventor.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-heros.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-chorus.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-bonum.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-schola.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-pagella.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-termes.mkiv] [type-imp-texgyre.mkiv]
-
-\definefilesynonym [type-imp-mscoretimes.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscorearial.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscorecourier.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscoreverdana.mkiv] [type-imp-mscore.mkiv]
-
-\definefilesynonym [type-imp-candara.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-consolas.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-constantia.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-corbel.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-calibri.mkiv] [type-imp-cleartype.mkiv]
-
-\definefilesynonym [type-imp-antykwa-poltawskiego.mkiv] [type-imp-antykwapoltawskiego.mkiv]
-
-%definefilesynonym [type-imp-mac.mkiv] [type-imp-osx.mkiv]
-%definefilesynonym [type-imp-win.mkiv] [type-imp-mscore.mkiv]
-
-\definefilesynonym [type-imp-eulernovum.mkiv] [type-imp-euler.mkiv]
-\definefilesynonym [type-imp-eulernova.mkiv] [type-imp-euler.mkiv]
-
-\definefilesynonym [type-imp-euler-with-pagella.mkiv] [type-imp-euler.mkiv]
-\definefilesynonym [type-imp-pagella-with-euler.mkiv] [type-imp-euler.mkiv]
-
-\definefilesynonym [type-imp-mdbch.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdugm.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdput.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdici.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdpgd.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdpus.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-mathdesignch.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngm.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignut.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignci.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngd.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignus.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-mathdesigncharter.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngaramond.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignutopia.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-cows.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-sheep.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-coloredcows.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
-
-\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
-
-\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
+\definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv]
+\definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv]
+
+\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
+\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
+\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
+
+\definefilesynonym [type-imp-dejavu-condensed.mkiv] [type-imp-dejavu.mkiv]
+
+\definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-avantgarde.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-helvetica.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-chancery.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-bookman.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-schoolbook.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-times.mkiv] [type-imp-texgyre.mkiv]
+
+\definefilesynonym [type-imp-cursor.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-adventor.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-heros.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-chorus.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-bonum.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-schola.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-pagella.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-termes.mkiv] [type-imp-texgyre.mkiv]
+
+\definefilesynonym [type-imp-mscoretimes.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscorearial.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscorecourier.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscoreverdana.mkiv] [type-imp-mscore.mkiv]
+
+\definefilesynonym [type-imp-candara.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-consolas.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-constantia.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-corbel.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-calibri.mkiv] [type-imp-cleartype.mkiv]
+
+\definefilesynonym [type-imp-antykwa-poltawskiego.mkiv] [type-imp-antykwapoltawskiego.mkiv]
+
+%definefilesynonym [type-imp-mac.mkiv] [type-imp-osx.mkiv]
+%definefilesynonym [type-imp-win.mkiv] [type-imp-mscore.mkiv]
+
+\definefilesynonym [type-imp-eulernovum.mkiv] [type-imp-euler.mkiv]
+\definefilesynonym [type-imp-eulernova.mkiv] [type-imp-euler.mkiv]
+
+\definefilesynonym [type-imp-euler-with-pagella.mkiv] [type-imp-euler.mkiv]
+\definefilesynonym [type-imp-pagella-with-euler.mkiv] [type-imp-euler.mkiv]
+
+\definefilesynonym [type-imp-mdbch.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdugm.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdput.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdici.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdpgd.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdpus.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-mathdesignch.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngm.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignut.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignci.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngd.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignus.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-mathdesigncharter.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngaramond.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignutopia.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-cows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-sheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredcows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
+
+\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
+
+\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
+
+\definefilesynonym [type-imp-newcomputermodern-book.mkiv] [type-imp-newcomputermodern.mkiv]
\protect \endinput
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 25b2101ef..017357e88 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2021.06.09 20:31}
+\newcontextversion{2021.06.10 23:09}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index d6ec56778..1eb9519c2 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2021.06.09 20:31}
+\immutable\edef\contextversion{2021.06.10 23:09}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/core-con.mkxl b/tex/context/base/mkxl/core-con.mkxl
index 223afa1a1..33dc921b7 100644
--- a/tex/context/base/mkxl/core-con.mkxl
+++ b/tex/context/base/mkxl/core-con.mkxl
@@ -180,12 +180,7 @@
%D
%D The last part of this module is dedicated to converting dates. Because we want to
%D use as meaningful commands as possible, and because \TEX\ already uses up some of
-%D those, we save the original meanings.
-
-% \savenormalmeaning\time
-% \savenormalmeaning\year
-% \savenormalmeaning\month
-% \savenormalmeaning\day
+%D those, we save the original meanings. The above are defined already.
%D \macros
%D {month,MONTH}
diff --git a/tex/context/base/mkxl/math-del.mkxl b/tex/context/base/mkxl/math-del.mkxl
index 07e6d7948..538883bfc 100644
--- a/tex/context/base/mkxl/math-del.mkxl
+++ b/tex/context/base/mkxl/math-del.mkxl
@@ -85,11 +85,12 @@
\appendtoks
\ifcstok{\mathdelimiterparameter\c!define}\v!yes
+ % we can intercept auto here
\frozen\instance\setuevalue\currentmathdelimiter{\mathdelimiter[\currentmathdelimiter]}%
\fi
\to \everydefinemathdelimiter
-\permanent\tolerant\protected\def\mathdelimiter[#1]#*[#2]%
+\permanent\tolerant\protected\def\mathdelimiter[#1]#*[#2]% so not really used (for now)
{\mathop
{\edef\currentmathdelimiter{#1}%
\iftok{#2}\emptytoks
@@ -118,7 +119,9 @@
\mskip\p_rightoffset
\fi}}
-\definemathdelimiter[integral][\c!symbol="222B]
+% \definemathdelimiter[integral][\c!symbol="222B]
+
+\permanent\protected\def\integral{\int\Umathadaptsize}
% \setupmathdelimiter[integral][rightoffset=-3mu,exact=yes,factor=2]
%
diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl
index 8aa0e62a8..cfefb4e2e 100644
--- a/tex/context/base/mkxl/math-fen.mkxl
+++ b/tex/context/base/mkxl/math-fen.mkxl
@@ -15,6 +15,10 @@
\unprotect
+% ignore missign right message, so we can have left extensibles (int or so)
+%
+% \mathdelimitersmode"20 (todo: flipbit)
+
% maybe always "method=auto" for:
%
% \switchtobodyfont[cambria]
@@ -87,10 +91,10 @@
\installcorenamespace {mathfencesize}
-\setvalue{\??mathfencesize big}{1}
-\setvalue{\??mathfencesize Big}{2}
-\setvalue{\??mathfencesize bigg}{3}
-\setvalue{\??mathfencesize Bigg}{4}
+\defcsname\??mathfencesize big\endcsname{1}
+\defcsname\??mathfencesize Big\endcsname{2}
+\defcsname\??mathfencesize bigg\endcsname{3}
+\defcsname\??mathfencesize Bigg\endcsname{4}
\def\math_fenced_force_size#1#2%
{\c_attr_mathsize\numexpr
@@ -268,6 +272,25 @@
\enforced\let\fenced\math_fenced_fenced
\to \everymathematics
+% integral experiment (but no scripts)
+%
+% \protected\def\math_fenced_fenced_simple#1%
+% {\pushmacro\currentmathfence
+% \edef\currentmathfence{#1}%
+% \math_fenced_fenced_common
+% \math_fenced_left
+% \popmacro\currentmathfence
+% \stopusemathstyleparameter}
+%
+% \immutable\protected\def\integral {\math_fenced_fenced_simple{integral}}
+%
+% let's keep this weird hack:
+%
+% \mathdelimitersmode"20
+% \startformula
+% x = \integral {\vrule height 20mm depth 18mm width 5mm}^^{2\,}__{2\,}
+% \stopformula
+
% todo: | in mathmode letter
%
% \appendtoks
@@ -399,20 +422,20 @@
\newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown
\permanent\protected\def\installmathfencepair#1#2#3#4%
- {\letcsname\??mathleft \normalmeaning#1\endcsname#2%
- \letcsname\??mathright\normalmeaning#3\endcsname#4}
+ {\letcsname\??mathleft \normalmeaningless#1\endcsname#2%
+ \letcsname\??mathright\normalmeaningless#3\endcsname#4}
\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi}
\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi}
\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi}
-\letvalue{\??mathleft \s!unknown}\math_unknown_left
-\letvalue{\??mathright \s!unknown}\math_unknown_right
-\letvalue{\??mathmiddle\s!unknown}\math_unknown_middle
+\letcsname\??mathleft \s!unknown\endcsname\math_unknown_left
+\letcsname\??mathright \s!unknown\endcsname\math_unknown_right
+\letcsname\??mathmiddle\s!unknown\endcsname\math_unknown_middle
\def\math_left
{\settrue\c_math_fenced_done
- \ifcsname\??mathleft\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_left
@@ -420,7 +443,7 @@
\def\math_right
{\settrue\c_math_fenced_done
- \ifcsname\??mathright\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathright\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_right
@@ -428,7 +451,7 @@
\def\math_middle
{\settrue\c_math_fenced_done
- \ifcsname\??mathmiddle\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_middle
@@ -437,7 +460,7 @@
\permanent\protected\def\lfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathleft\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_left
@@ -446,7 +469,7 @@
\permanent\protected\def\rfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathright\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathright\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_right
@@ -455,7 +478,7 @@
\permanent\protected\def\mfence#1%
{\settrue\c_math_fenced_done
\let\nexttoken#1%
- \ifcsname\??mathmiddle\normalmeaning\nexttoken\endcsname
+ \ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname
\expandafter\lastnamedcs
\else
\expandafter\math_unknown_middle
@@ -623,10 +646,10 @@
\installcorenamespace{mathbig}
-\setvalue{\??mathbig1}{0.85}
-\setvalue{\??mathbig2}{1.15}
-\setvalue{\??mathbig3}{1.45}
-\setvalue{\??mathbig4}{1.75}
+\defcsname\??mathbig1\endcsname{0.85}
+\defcsname\??mathbig2\endcsname{1.15}
+\defcsname\??mathbig3\endcsname{1.45}
+\defcsname\??mathbig4\endcsname{1.75}
\permanent\protected\def\choosemathbig#1#2% so we accept \big{||} as well
{{\naturalhbox\bgroup
diff --git a/tex/context/base/mkxl/math-int.mkxl b/tex/context/base/mkxl/math-int.mkxl
index a8dcd3c95..462c6587b 100644
--- a/tex/context/base/mkxl/math-int.mkxl
+++ b/tex/context/base/mkxl/math-int.mkxl
@@ -57,11 +57,11 @@
% none
\fi}
-\letvalue{\??mathintegral nolimits}\zerocount
-\letvalue{\??mathintegral displaylimits}\plusone
-\letvalue{\??mathintegral limits}\plustwo
-\letvalue{\??mathintegral autolimits}\plusthree
-\letvalue{\??mathintegral none}\plusfour
+\letcsname\??mathintegral nolimits\endcsname\zerocount
+\letcsname\??mathintegral displaylimits\endcsname\plusone
+\letcsname\??mathintegral limits\endcsname\plustwo
+\letcsname\??mathintegral autolimits\endcsname\plusthree
+\letcsname\??mathintegral none\endcsname\plusfour
\appendtoks
\mathintlimitmode\executeifdefined{\??mathintegral\mathematicsparameter\s!integral}\zerocount
diff --git a/tex/context/base/mkxl/page-txt.mklx b/tex/context/base/mkxl/page-txt.mklx
index b03d704c8..ed7fbbd80 100644
--- a/tex/context/base/mkxl/page-txt.mklx
+++ b/tex/context/base/mkxl/page-txt.mklx
@@ -766,7 +766,7 @@
% this can be done better now, no meaning hackery needed
\edef\currentlayoutelement{\m_page_layouts_page_number_location_v:\m_page_layouts_page_number_location_h}%
\edef\tempstring{\detokenizedlayoutelementparameter\m_page_layouts_page_number_location_x}%
- \doif{\meaning\tempstring}{\meaning\page_layouts_place_page_number}
+ \doif{\normalmeaningless\tempstring}{\normalmeaningless\page_layouts_place_page_number}
{\resetlayoutelementparameter\m_page_layouts_page_number_location_x}%
\fi}
diff --git a/tex/context/base/mkxl/strc-syn.mkxl b/tex/context/base/mkxl/strc-syn.mkxl
index df573a7e9..c6a62e607 100644
--- a/tex/context/base/mkxl/strc-syn.mkxl
+++ b/tex/context/base/mkxl/strc-syn.mkxl
@@ -274,13 +274,29 @@
\frozen\instance\protected\defcsname\e!complete\e!listof#2\endcsname{\completelistofsynonyms[#1]}%
\fi}
-\permanent\tolerant\protected\def\definesynonym[#1]#*[#2]#*[#3]%
+% \abbreviation[XXX][321]{321}{Three, Two, One} : optional sort key
+
+\permanent\tolerant\protected\def\definesynonym[#1]#*[#2]#*[#3]#*[#4]% [yes][abbreviation][FOO]{foo}{foo me}
{\begingroup
\edef\currentsynonymoption{#1}%
\edef\currentsynonym{#2}%
\edef\currentsynonymtag{#3}%
+ \edef\currentsynonymsortkey{#4}%
\strc_synonyms_define_entry}
+% \installcorenamespace {synonymentry}
+%
+% \installsetuponlycommandhandler \??synonymentry {synonymentry}
+%
+% \permanent\tolerant\protected\def\setsynonym[#1]#*[#2]%
+% {\begingroup
+% \setupsynonymentry[#2]%
+% \edef\currentsynonym {#1}%
+% \edef\currentsynonymoption {\synonymentryparameter\c!option}%
+% \edef\currentsynonymtag {\synonymentryparameter\c!tag}%
+% \edef\currentsynonymsortkey{\synonymentryparameter\c!sortkey}%
+% \strc_synonyms_define_entry{\synonymentryparameter\c!text}{\synonymentryparameter\c!meaning}}
+
\def\strc_synonyms_define_entry#1#2%
{\let\currentsimplelist\currentsynonym
\ifempty\currentsynonymtag
@@ -305,6 +321,7 @@
}%
definition {%
tag {\currentsynonymtag}%
+ sortkey {\currentsynonymsortkey}%
synonym {\m_synonyms_text}%
meaning {\m_synonyms_meaning}%
% used false
diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl
index 08f2ee4ad..a1601c23e 100644
--- a/tex/context/base/mkxl/tabl-tbl.mkxl
+++ b/tex/context/base/mkxl/tabl-tbl.mkxl
@@ -2162,6 +2162,23 @@
% \ruledvbox{\starttabulate[|k8|] \NC xxx \NC \NR \stoptabulate}
% \ruledvbox{\starttabulate[|l|l|] \NC xxx \NC xxx \NC \NR \stoptabulate}
+% \enabletrackers[localanchor]
+%
+% \startoverlayMPgraphic{mp:whatever-6}
+% draw anchorcell (1,1) withpen pencircle scaled 1pt withcolor "blue" ;
+% fill anchorspan (2,2) (3,5) withpen pencircle scaled 1pt withcolor "yellow" ;
+% draw anchorcell (2,2) withpen pencircle scaled 1pt withcolor "green" ;
+% draw anchorcell (3,3) withpen pencircle scaled 1pt withcolor "red" ;
+% \stopoverlayMPgraphic
+%
+% \starttabulate[synchronize=background,background=mp:whatever-6,format={|l|c|r|}]
+% \NC test \NC test \NC test \NC \NR
+% \NC test \NC test test \NC test \NC \NR
+% \NC test test \NC test \NC test \NC \NR
+% \NC test \NC test \NC test \NC \NR
+% \NC test \NC test \NC test test \NC \NR
+% \stoptabulate
+
\protected\def\tabl_tabulate_anchor_indeed
{\edef\xanchor{\number\c_tabl_tabulate_column}%
\edef\yanchor{\number\c_tabl_tabulate_nofrealrows}%
diff --git a/tex/context/base/mkxl/type-set.mkxl b/tex/context/base/mkxl/type-set.mkxl
index 4a22b59a5..ed282a140 100644
--- a/tex/context/base/mkxl/type-set.mkxl
+++ b/tex/context/base/mkxl/type-set.mkxl
@@ -59,81 +59,83 @@
\fi
-\definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv]
-\definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv]
-
-\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
-\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
-\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
-
-\definefilesynonym [type-imp-dejavu-condensed.mkiv] [type-imp-dejavu.mkiv]
-
-\definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-avantgarde.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-helvetica.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-chancery.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-bookman.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-schoolbook.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-times.mkiv] [type-imp-texgyre.mkiv]
-
-\definefilesynonym [type-imp-cursor.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-adventor.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-heros.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-chorus.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-bonum.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-schola.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-pagella.mkiv] [type-imp-texgyre.mkiv]
-\definefilesynonym [type-imp-termes.mkiv] [type-imp-texgyre.mkiv]
-
-\definefilesynonym [type-imp-mscoretimes.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscorearial.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscorecourier.mkiv] [type-imp-mscore.mkiv]
-\definefilesynonym [type-imp-mscoreverdana.mkiv] [type-imp-mscore.mkiv]
-
-\definefilesynonym [type-imp-candara.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-consolas.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-constantia.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-corbel.mkiv] [type-imp-cleartype.mkiv]
-\definefilesynonym [type-imp-calibri.mkiv] [type-imp-cleartype.mkiv]
-
-\definefilesynonym [type-imp-antykwa-poltawskiego.mkiv] [type-imp-antykwapoltawskiego.mkiv]
-
-%definefilesynonym [type-imp-mac.mkiv] [type-imp-osx.mkiv]
-%definefilesynonym [type-imp-win.mkiv] [type-imp-mscore.mkiv]
-
-\definefilesynonym [type-imp-eulernovum.mkiv] [type-imp-euler.mkiv]
-\definefilesynonym [type-imp-eulernova.mkiv] [type-imp-euler.mkiv]
-
-\definefilesynonym [type-imp-euler-with-pagella.mkiv] [type-imp-euler.mkiv]
-\definefilesynonym [type-imp-pagella-with-euler.mkiv] [type-imp-euler.mkiv]
-
-\definefilesynonym [type-imp-mdbch.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdugm.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdput.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdici.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdpgd.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mdpus.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-mathdesignch.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngm.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignut.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignci.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngd.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignus.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-mathdesigncharter.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesigngaramond.mkiv] [type-imp-mathdesign.mkiv]
-\definefilesynonym [type-imp-mathdesignutopia.mkiv] [type-imp-mathdesign.mkiv]
-
-\definefilesynonym [type-imp-cows.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-sheep.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-coloredcows.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
-\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
-
-\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
-
-\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
+\definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv]
+\definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv]
+
+\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
+\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
+\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
+
+\definefilesynonym [type-imp-dejavu-condensed.mkiv] [type-imp-dejavu.mkiv]
+
+\definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-avantgarde.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-helvetica.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-chancery.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-bookman.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-schoolbook.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-times.mkiv] [type-imp-texgyre.mkiv]
+
+\definefilesynonym [type-imp-cursor.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-adventor.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-heros.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-chorus.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-bonum.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-schola.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-pagella.mkiv] [type-imp-texgyre.mkiv]
+\definefilesynonym [type-imp-termes.mkiv] [type-imp-texgyre.mkiv]
+
+\definefilesynonym [type-imp-mscoretimes.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscorearial.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscorecourier.mkiv] [type-imp-mscore.mkiv]
+\definefilesynonym [type-imp-mscoreverdana.mkiv] [type-imp-mscore.mkiv]
+
+\definefilesynonym [type-imp-candara.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-consolas.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-constantia.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-corbel.mkiv] [type-imp-cleartype.mkiv]
+\definefilesynonym [type-imp-calibri.mkiv] [type-imp-cleartype.mkiv]
+
+\definefilesynonym [type-imp-antykwa-poltawskiego.mkiv] [type-imp-antykwapoltawskiego.mkiv]
+
+%definefilesynonym [type-imp-mac.mkiv] [type-imp-osx.mkiv]
+%definefilesynonym [type-imp-win.mkiv] [type-imp-mscore.mkiv]
+
+\definefilesynonym [type-imp-eulernovum.mkiv] [type-imp-euler.mkiv]
+\definefilesynonym [type-imp-eulernova.mkiv] [type-imp-euler.mkiv]
+
+\definefilesynonym [type-imp-euler-with-pagella.mkiv] [type-imp-euler.mkiv]
+\definefilesynonym [type-imp-pagella-with-euler.mkiv] [type-imp-euler.mkiv]
+
+\definefilesynonym [type-imp-mdbch.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdugm.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdput.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdici.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdpgd.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mdpus.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-mathdesignch.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngm.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignut.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignci.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngd.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignus.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-mathdesigncharter.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesigngaramond.mkiv] [type-imp-mathdesign.mkiv]
+\definefilesynonym [type-imp-mathdesignutopia.mkiv] [type-imp-mathdesign.mkiv]
+
+\definefilesynonym [type-imp-cows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-sheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredcows.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
+
+\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
+
+\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
+
+\definefilesynonym [type-imp-newcomputermodern-book.mkiv] [type-imp-newcomputermodern.mkiv]
\protect \endinput
diff --git a/tex/context/fonts/mkiv/type-imp-dejavu.mkiv b/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
index 6da2daa89..092e1fde6 100644
--- a/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
@@ -44,7 +44,7 @@
\definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldoblique] [\s!features=\s!none,\s!fallbacks=\s!MonoBoldItalic]
\stoptypescript
- \starttypescript [\s!math][dejavu][\s!name]
+ \starttypescript [\s!math][dejavu] [\s!name]
\loadfontgoodies[dejavu-math]
\definefontsynonym[\s!MathRoman] [\s!file:texgyredejavu-math][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=dejavu-math]
\definefontsynonym[\s!MathRomanBold][\s!file:texgyredejavu-math][\s!features={\s!math\mathsizesuffix,dejavu-math-bold,mathextra},\s!goodies=dejavu-math]
@@ -83,10 +83,6 @@
\starttypescript [\s!mono] [dejavu-condensed] [\s!name]
\setups[\s!font:\s!fallback:\s!mono]
- % \definefontsynonym [\s!Mono] [\s!name:dejavusansmonocondensed] [\s!features=\s!none]
- % \definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonoboldcondensed] [\s!features=\s!none]
- % \definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonoobliquecondensed] [\s!features=\s!none]
- % \definefontsynonym [\s!MonoBoldItalic] [\s!name:dejavusansmonoboldobliquecondensed] [\s!features=\s!none]
\definefontsynonym [\s!Mono] [\s!name:dejavusansmono] [\s!features=dejavu-condensed-mono]
\definefontsynonym [\s!MonoBold] [\s!name:dejavusansmonobold] [\s!features=dejavu-condensed-mono]
\definefontsynonym [\s!MonoItalic] [\s!name:dejavusansmonooblique] [\s!features=dejavu-condensed-mono]
@@ -105,7 +101,6 @@
\definetypeface [dejavu-condensed] [\s!rm] [\s!serif] [dejavu-condensed] [\s!default]
\definetypeface [dejavu-condensed] [\s!ss] [\s!sans] [dejavu-condensed] [\s!default]
\definetypeface [dejavu-condensed] [\s!tt] [\s!mono] [dejavu-condensed] [\s!default]
- % \definetypeface [dejavu-condensed] [\s!mm] [\s!math] [xits] [\s!default] [\s!rscale=1.2]
\definetypeface [dejavu-condensed] [\s!mm] [\s!math] [dejavu] [\s!default]
\stoptypescript
diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv
new file mode 100644
index 000000000..536c90ede
--- /dev/null
+++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv
@@ -0,0 +1,93 @@
+%D \module
+%D [ file=type-imp-newcomputermodern,
+%D version=2021.06.08,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=NewComputerModern,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D There is something fishy with the books fonts. The otf files are twice as large
+%D as the normal ones but the tma's we filter from it are pretty close (mostly
+%D boundingbox differences). The streams are also of similar size so there must be
+%D something extra in there.
+
+% \definefontfallback[Serif] [file:notoserif-regular.ttf] [0x0000-0xFFFF] [check=yes,rscale=1.02]
+% \definefontfallback[SerifBold][file:notoserif-bold.ttf] [0x0000-0xFFFF] [check=yes,rscale=1.02]
+
+\starttypescriptcollection[newcomputermodern]
+
+ \doifunknownfontfeature {newcomputermodern-math-bold} {\definefontfeature[newcomputermodern-math-bold][boldened]}
+
+ \starttypescript [\s!serif] [newcomputermodern] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:newcm10-regular.otf] [\s!features=\s!default,\s!fallbacks=\s!Serif]
+ \definefontsynonym [\s!SerifBold] [\s!file:newcm10-bold.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifBold]
+ \definefontsynonym [\s!SerifItalic] [\s!file:newcm10-italic.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifItalic]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:newcm10-bolditalic.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [newcomputermodern] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:newcmsans10-regular.otf] [\s!features=\s!default,\s!fallbacks=\s!Sans]
+ \definefontsynonym [\s!SansBold] [\s!file:newcmsans10-bold.otf] [\s!features=\s!default,\s!fallbacks=\s!SansBold]
+ \definefontsynonym [\s!SansItalic] [\s!file:newcmsans10-oblique.otf] [\s!features=\s!default,\s!fallbacks=\s!SansItalic]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:newcmsans10-boldoblique.otf] [\s!features=\s!default,\s!fallbacks=\s!SansBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [newcomputermodern] [\s!name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [\s!file:newcmmono10-regular.otf] [\s!features=\s!none,\s!fallbacks=\s!Mono]
+ \definefontsynonym [\s!MonoBold] [\s!file:newcmmono10-bold.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoBold]
+ \definefontsynonym [\s!MonoItalic] [\s!file:newcmmono10-italic.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoItalic]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:newcmmono10-bolditalic.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!math][newcomputermodern] [\s!name]
+ % \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math
+ \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra}]
+ \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}]
+ \stoptypescript
+
+ \starttypescript [\s!serif] [newcomputermodern-book] [\s!name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:newcm10-book.otf] [\s!features=\s!default,\s!fallbacks=\s!Serif]
+ \definefontsynonym [\s!SerifBold] [\s!file:newcm10-bold.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifBold]
+ \definefontsynonym [\s!SerifItalic] [\s!file:newcm10-bookitalic.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifItalic]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:newcm10-bolditalic.otf] [\s!features=\s!default,\s!fallbacks=\s!SerifBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!sans] [newcomputermodern-book] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:newcmsans10-book.otf] [\s!features=\s!default,\s!fallbacks=\s!Sans]
+ \definefontsynonym [\s!SansBold] [\s!file:newcmsans10-bold.otf] [\s!features=\s!default,\s!fallbacks=\s!SansBold]
+ \definefontsynonym [\s!SansItalic] [\s!file:newcmsans10-bookoblique.otf] [\s!features=\s!default,\s!fallbacks=\s!SansItalic]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:newcmsans10-boldoblique.otf] [\s!features=\s!default,\s!fallbacks=\s!SansBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!mono] [newcomputermodern-book] [\s!name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [\s!file:newcmmono10-book.otf] [\s!features=\s!none,\s!fallbacks=\s!Mono]
+ \definefontsynonym [\s!MonoBold] [\s!file:newcmmono10-bold.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoBold]
+ \definefontsynonym [\s!MonoItalic] [\s!file:newcmmono10-bookitalic.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoItalic]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:newcmmono10-bolditalic.otf] [\s!features=\s!none,\s!fallbacks=\s!MonoBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!math][newcomputermodern-book] [\s!name]
+ % \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math
+ \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-book][\s!features={\s!math\mathsizesuffix,mathextra}]
+ \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-book][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}]
+ \stoptypescript
+
+ \starttypescript[newcomputermodern,newcomputermodern-book]
+ \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default]
+ \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default]
+ \definetypeface [\typescriptone] [\s!tt] [\s!mono] [\typescriptone] [\s!default]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default]
+ \stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 0f2a28228..5dc6b3f44 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 2021-06-09 20:31
+-- merge date : 2021-06-10 23:09
do -- begin closure to overcome local limits and interference