Hi Hans,
> > First, how do I get an insert's class/type from the "insert" nodes on
> > the page? With LuaTeX, the insert's class/type is the same as the
> > subtype of the "ins" nodes, but the subtype of the "insert" nodes is
> > always zero in LuaMetaTeX, so I'm not sure how to get the class/type.
After playing around, I found that this is stored in ".index". I'm able to write to this value just fine, but whenever I
read it I get an error.
This minimal example:
\starttext
\setbox999=\vbox{\hrule width 10pt height 10pt}
\startluacode
local insert = node.new("insert")
local rule = tex.box[999].list
insert.list = rule
insert.index = 4
node.write(insert)
\stopluacode
\stoptext
works perfectly, but this example:
\startluacode
local insert = node.new "insert"
insert.index = 4
print(insert.index)
\stopluacode
gives this error message:
In \insertmode 2 you can't use zero as index.
I suspect that this is a bug, but I may just be doing something wrong.
> Indeed, we don't use these boxes and registers because we run in
> \insertmode=2. This gives us more state info (i kept the old method
> around for now).
Inserts always felt a little hacky in TeX, so I think that the new
methods are a huge improvement.
> > Second, how do I get the head of the insert box from Lua? With LuaTeX,
> > from TeX you would use "\box" and from Lua you can use
> > "tex.box[]". With LuaMetaTeX, you use "\insertbox" from
> > TeX, but I'm not sure how to get at the insert box from Lua.
>
> tex.getinsertdistance
> tex.getinsertmultiplier
> tex.getinsertlimit
> tex.getinsertheight
> tex.getinsertdepth
> tex.getinsertwidth
> tex.getinsertcontent
> tex.setinsertdistance
> tex.setinsertmultiplier
> tex.setinsertlimit
> tex.setinsertcontent
Perfect! "tex.getinsertcontent" does exactly what I need.
Really minor, but I would expect that
tex.insertcontent[4] =
= tex.insertcontent[4]
would be exist and be equivalent to
= tex.getinsertcontent(4)
tex.setinsertcontent(4, )
> The insert (etc) handler is more clever and flexible. So, for instance
> we can bubble up inserts. I think you do a preroll so in that case you
> can set the migrations related parameter to not bubble up.
>
> \starttext
>
> \holdingmigrations\numexpr1+2+4\relax
>
> \setbox0\hbox{test \footnote{test} test}
>
> \setbox2\vbox{\unhcopy0}
>
> \holdingmigrations0
>
> \setbox4\vbox{\unhcopy0}
>
> \unhbox0
>
> \unvbox2
>
> \unvbox4
>
> \stoptext
>
> But I have no clue how all that will work out with (lua) code that
> manipulates these things. In list nodes you can consult the pre and post
> fields to what got migrated.
I don't think that that will work in this case. I'm doing most of the
work in "pre_output_filter", which is after all of the insert nodes have
been removed from the page and put into their respective boxes. And I
can't postpone setting any inserts until then because TeX needs to know
their height for when it breaks the page. I don't really like how I have
to move the footnotes, but I can't find any better way of doing things.
If you're curious, most of the insert code is in these two functions:
https://github.com/gucci-on-fleek/lua-widow-control/blob/2bca90/source/lua-widow-control.lua#L612-L669
https://github.com/gucci-on-fleek/lua-widow-control/blob/2bca90/source/lua-widow-control.lua#L843-L924
Thanks,
-- Max
___
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___