[NTG-context] new lmtx upload
Hi, I uploaded a new version that mostly concerns documentation files (checking them for lmtx and so). I (partly) updated the primitives manual (for hans vd meer) and added followingup-expressions (for pablo). The expressions stuff (was already in previous uploads) is a side effect of finalizing some luametatex code. Part of it had been there in commented form as I had not yet made up my mind about how much is needed. In the end I decided to *not* integrate it in the \numexpr an d\dimexpr primitives because of potential compatibility issues (although that is unlikely given the way we use them in the core, I don't know to what extend users use these primitives). The long ago - one of the first things in luametatex - introtroduced integer division : probably went unnoticed (of course not by ws) which is an indication that this extension has been is rather safe. Anyway, more about expressions can be found in the mentioned documents. Think of (one can of course also use the usual tex variables): \starttext \the\dimexpression 2 * 10pt + 2pt \relax \the\dimexpression 2 * 10pt > 2pt \relax \number\dimexpression 2 * 10pt + 2pt \relax \number\dimexpression 2 * 10pt > 2pt \relax \ifboolean\dimexpression 2 * 10pt > 2pt \relax yes \else nop \fi \ifboolean\dimexpression 2 * 10sp > 2pt \relax yes \else nop \fi \ifdimexpression 2 * 10pt > 2pt \relax yes \else nop \fi \ifdimexpression 2 * 10sp > 2pt \relax yes \else nop \fi % alias \ifexpression : \ifnumexpression (2 * 10) + (3 << 4) > (4 & 5) \relax yes \else no \fi \stoptext Performance wise it is comparable to \dimexpr and \numexpr (these are a bit faster in luametatex than in luatex), the final \relax is mandate (so no lookahead side effects), and these don't suffer from some of the somewhat weird properties of their ancestors. The main difference is that they support comparison and bitwise operators. I can add more but it probably doesn't make sense. With \tracingexpressions1 \tracingonline1 you get info like this: 1:4: {dimenexpression rpn: 2 655360 * 131072 +} 1:4: {dimenexpression rpn: 2 655360 * 131072 >} 1:4: {dimenexpression rpn: 2 655360 * 131072 +} 1:4: {dimenexpression rpn: 2 655360 * 131072 >} 1:4: {dimenexpression rpn: 2 655360 * 131072 >} 1:4: {dimenexpression rpn: 2 2 * 131072 >} 1:4: {dimenexpression rpn: 2 655360 * 131072 >} 1:4: {dimenexpression rpn: 2 2 * 131072 >} 1:4: {numexpression rpn: 2 10 * 3 4 << + 4 5 band >} Of course (maybe for sure) there can be bugs but then, only a few will ever use this (I bet hvdm is one of them, as he also uses the other new \if* features). Other hidden 'pearls' (bachotex speak) will be revealed in due time, 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 ___
[NTG-context] new lmtx upload
Hi, I upgrsded lmtx. A few small things (emntioned already) at the tex end but Alan and I are now in metafun mode. I (finally) adpated lmtx to delegated mplib logging, so \startMPcode{doublefun} tracingall ; fill fullcircle scaled 3cm withcolor "darkmagenta" ; \stopMPcode should work. Just in case someone keeps an eye on the metafun code and wonders what 'records' are, here is an example: \starttext \startMPcode record FooA ; interim FooA := newrecord [ name = "FooA" index = 123 ] ; record FooB ; interim FooB := newrecord [ name = "FooB" index = 456 ] ; record FooC ; interim FooC := newrecord [ name = "FooC" index = 789, crap = [ more = "MORE" ] ] ; draw textext(getrecord(FooA).name) rotated -45 withcolor "darkred" ; draw textext(getrecord(FooB).name) rotated 0 withcolor "darkgreen" ; draw textext(getrecord(FooC).name) rotated 45 withcolor "darkblue" ; draw textext(getrecord(FooC).crap.more) rotated 90 withcolor "darkgray" ; begingroup; interim FooC := newrecord [ name = "FooC" index = 789, crap = [ more = "NESTED 1" ] ] ; draw textext(getrecord(FooC).crap.more) shifted (0,-1cm) withcolor "darkgray" ; draw textext(FooC) shifted (2cm,-1cm) withcolor "darkgray" ; begingroup; interim FooC := newrecord [ crap = [ more = "NESTED 2" ] ] ; draw textext(getrecord(FooC).index) shifted (4cm,-2cm) withcolor "darkgray" ; draw textext(getrecord(FooC).crap.more) shifted (0,-2cm) withcolor "darkgray" ; draw textext(FooC) shifted (2cm,-2cm) withcolor "darkgray" ; endgroup; endgroup; draw textext(getrecord(FooC).crap.more) shifted (0,-3cm) withcolor "darkgray" ; draw textext(FooC) shifted (2cm,-3cm) withcolor "darkgray" ; record FooD ; interim FooD := newrecord [ name = "FooD" list = { 11, 22, 33, 44 } ] ; for i=1 upto getrecord FooD.list[] : draw textext(getrecord(FooD).list[i]) shifted (i*cm,-5cm) withcolor "darkgray" ; endfor ; for i=1 upto getrecord FooD.#list : draw textext(getrecord(FooD).list[i]) shifted (5cm+i*cm,-5cm) withcolor "darkred" ; endfor ; numeric v ; for i=1 upto 1 : v := 0 ; for j=1 upto 4 : v := v + getrecord FooD.list[j] ; endfor ; endfor ; draw textext(v) shifted (12cm,-5cm) withcolor "darkgray" ; interim FooD := setrecord [ name = "FooD" tsil = { 44, 33, 22, 11 } ] ; for i=1 upto getrecord FooD.#list : draw textext(getrecord FooD.list[i]) shifted (5cm+i*cm,-6cm) withcolor "darkgreen" ; endfor ; for i=1 upto getrecord FooD.#tsil : draw textext(getrecord FooD.tsil[i]) shifted (5cm+i*cm,-7cm) withcolor "darkgray" ; endfor ; tracingall ; draw textext(getrecord FooD.list[2]) shifted (5cm,-8cm) withcolor "darkmagenta" ; \stopMPcode \startluacode inspect(metapost.getrecord("FooA")) inspect(metapost.getrecord("FooB")) inspect(metapost.getrecord("FooC")) inspect(metapost.getrecord("FooD")) \stopluacode \stoptext So, one can store structured data at the mp end, use it there, and access it also from lua (after all it's done in lua). It honors metapost grouping (which is what interim does with internals, and records use metapost internals as reference). 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 ___
Re: [NTG-context] new in upload
On 6/9/2021 9:46 PM, Floris van Manen wrote: On 09/06/2021 20:42, Hans Hagen wrote: \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 The fill works with multiple cells, but the draw does not: fill anchorspan (2,2) (3,5) withpen pencircle scaled 1pt withcolor draw anchorspan (2,2) (3,5) withpen pencircle scaled 1pt withcolor you forgot the color ___ 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 ___ -- - 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 ___
Re: [NTG-context] new in upload
On 09/06/2021 20:42, Hans Hagen wrote: \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 The fill works with multiple cells, but the draw does not: fill anchorspan (2,2) (3,5) withpen pencircle scaled 1pt withcolor draw anchorspan (2,2) (3,5) withpen pencircle scaled 1pt withcolor ___ 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 ___
[NTG-context] new in upload
\starttext \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 \stoptext -- - 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 ___
[NTG-context] new lmtx upload
Hi, The tex engine has at most 65K dimen and count registers and these can be local and global (although mixing these two models for the same variable can be inefficient). Anyway, in the current upload there is a mechanism for using way more variables, global ones, that are managed by lua: \luadimen test 100pt \scratchdimen = .25 \luadimen test \the\scratchdimen \the\luadimen test So, they act as normal dimensions and counters wrt assignment and serialization and such. There are also floats and booleans (in addition to integers and cardinals). Then, as another experiment, there are one/two dimensional arrays of variables. Think of: \newarray name whatever type integer nx 100 ny 500 \arrayvalue whatever 20 30 1024 \the\arrayvalue whatever 10 30 \the\arrayvalue whatever 20 30 \the\arrayvalue whatever 30 30 Some more info can be found in the last chapoter of the evenmore.pdf document. The question is: do we need this, and if so, do we need more of that. It's a bit chicken-egg case: we can have lua and can pipe back to tex, and we can stay at the tex end. This is a lmtx only feature. Just for the record: these are macros, not primitives, but they are rather efficient and have hardly any overhead. The floats can be in 1.23 format, 1.23e45 format and also in 0x12p34 format, while integers can be in 123 format and 0x123 format; the hex float format is lua's way of being roundtrip. Hopefully there are no side effects. 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 ___