The problem with vertical spacing in \frac and \over is fixed. Many thanks, Hans!

Alan

On Wed, Jun 10, 2020 at 4:03 AM Hans Hagen <j.hagen@xs4all.nl> wrote:
Hi,

I uploaded a new version. There have been no changes to the typesetting
machinery although we're still in the process of finetuning some updated
low level macros. There was a fix in the font machinery (thanks to Kai)
but that will probably go unnoticed as the issue has been there for years.

Now, that doesn't mean that nothing has been changed. First of all there
is a new data related mechanism. After Wolfgang had updated the
definition files it became official. It was on the agenda for a while
but finally a nice solution surfaced.

The new thing is luatables that obey grouping. Normally what you do at
the lua end is kind of global, but there can be cases where you really
want it to behave like tex: obeying \bgroup/\egroup, { } etc. The
examples given below show that you can create them at the tex end and
access them in tex as well as lua.

\starttext

\dorecurse {100} {
     \setdatavalue{#1}{#1}
}

\start \tttf \darkred \raggedright \dorecurse {100} {
     #1=\scratchcounter\getdatavalue{#1}\the\scratchcounter
} \par \stop \blank

\start \tttf \darkgreen \raggedright \dorecurse {100} {
     #1=\thedatavalue{#1}%
} \par \stop \blank

\bgroup \tttf
     \newluatable\testtable
     \setluatable\testtable{ foo = 123, bar = "456", oof = "rab" }
   % \inspectluatable\testtable
     \darkblue
     foo = \getfromluatable\testtable{foo}\par
     bar = \getfromluatable\testtable{bar}\par
     oof = \getfromluatable\testtable{oof}\blank
     \bgroup
         \useluatable\testtable
         \setluatable\testtable{ foo = 123123, bar = "456456" }
       % \inspectluatable\testtable
         \darkmagenta
         foo = \getfromluatable\testtable{foo}\par
         bar = \getfromluatable\testtable{bar}\par
         oof = \getfromluatable\testtable{oof}\blank
         \startluacode
             local t = context.luatables.get("testtable")
             print(t.foo,t.bar,t.oof)
         \stopluacode
     \egroup
     \darkyellow
     foo = \getfromluatable\testtable{foo}\par
     bar = \getfromluatable\testtable{bar}\par
     oof = \getfromluatable\testtable{oof}\blank
     \startluacode
         local t = context.luatables.get("testtable")
         print(t.foo,t.bar,t.oof)
     \stopluacode
   % \inspectluatable\testtable
\egroup

\bgroup \tttf
     \newluatable\moretable
     \setluatable\moretable{ 1, "foo" }
     \darkblue
     [1] = \getfromluatable\moretable{1}\par
     [2] = \idxfromluatable\moretable 2 \blank
     \bgroup
         \useluatable\moretable
         \setluatable\moretable{ foo = 123123, bar = "456456" }
         \darkmagenta
         [1] = \getfromluatable\moretable{1}\par
         [2] = \idxfromluatable\moretable 2 \blank
         \startluacode
             local t = context.luatables.get("moretable")
             print(t[1],t[2])
         \stopluacode
     \egroup
     \darkyellow
     [1] = \getfromluatable\moretable{1}\par
     [2] = \idxfromluatable\moretable 2 \blank
     \startluacode
         local t = context.luatables.get("moretable")
         print(t[1],t[2])
     \stopluacode
\egroup

\stoptext

This is only available in lmtx (until i see a real reason to cook up an
alternative for mkiv, which is unlikely as no context code depends on
this being available, at least not now). The datavalue macro you see
there can be used to create massive amounts of numeric variable
independent of counters, not that we really need it, but it was very
cheap to implement.

At the engine level there also have been some changes but these should
not be visible for users. We just mention:

- extensions to the macro definition and expansion mechanisms (for
instance optional arguments, optional delimiters, and silent error
recovery; there will be some explanation in the evenmore document and at
some point - when stable - in the manual) .. this permits some cleaner
low level code; only things were done that had no impact on performance
(as macro definition and expansion is used a lot) and didn't make the
code messy (it actually became cleaner)

- some additional substring (ok, tex has no string, just tokens) parsing
capabilities with optional tokens, which again permits a bit cleaner low
level code

- a slightly reorganized handling of tokens (one of tex's basic data
structures) in the lua token interface so that we get a more meaningful
and robust subsystem (basically getting rid of funny numbers) ... this
also will be discussed in an evenmore chapter .. not that users need it
(i think)

- as a side effect (or necessity) some low level recoding (and
abstraction) had to happen but as far as we can see it works ok (i admit
it was a slow, tedious job with lots of intermediate testing on the
suite to make sure nothign was broken) .. in the end it was all doable
because most of the preparation was already done over the last years

- in the process we got rid of a traditional tex data structure that was
left over from the 32 bit times but no longer needed in our 64 bit
luatex/luametatex universe (i might backport that simplification to
luatex some day) ... it discards some checking and saves the same amount
of memory that we had on the early day pc's (where we ran whole tex jobs
in that amount)

Of course ... all kind of small improvenments ... hopefully for the best,

Hans


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________