# [NTG-context] Typing within doifmode leads to error

Sun Mar 21 03:40:47 CET 2021

```On Sun, 21 Mar 2021, Hans Hagen wrote:

> On 3/20/2021 10:03 PM, Aditya Mahajan wrote:
> > On Sat, 20 Mar 2021, Hans Hagen wrote:
> >
> > > >
> > > > I wonder if we could have an environment, say \startluatemplate ...
> > > > \stopluatemplate, which is evaluated on the fly rather than when loading
> > > > a
> > > > file.
> > >
> > > define 'evaluated on the fly'
> >
> > Consider the following example:
> >
> > \enablemode[A]
> > \starttext
> > \startluatemplate
> >    <?lua if tex.modes["A"] and not tex.modes["B"] then ?>
> >    \starttyping
> >    A and not B
> >    \stoptyping
> >    <?lua else ?>
> >    \starttyping
> >    not (A and not B)
> >    \stoptyping
> >    <?lua end ?>
> > \stopluatemplate
> > \stoptext
> >
> > What I am thinking is that \startluatemplate ... \stopluatemplate grabs the
> > content (like a buffer) and then processes it using the mkix conversion
> > mechanism. Thus, in terms of output, it should be equivalent to:
> >
> > \enablemode[A]
> > \starttext
> > \startbuffer[luatemplate]
> >    <?lua if tex.modes["A"] and not tex.modes["B"] then ?>
> >    \starttyping
> >    A and not B
> >    \stoptyping
> >    <?lua else ?>
> >    \starttyping
> >    not (A and not B)
> >    \stoptyping
> >    <?lua end ?>
> > \stopbuffer
> > \savebuffer[file={\jobname-luatemplate.mkix}, list={luatemplate}]
> > \input \jobname-luatemplate.mkix
> > \stoptext
> >
> > but without the need to save to an external file.
> this is just for the mode right? in that case we can also can provide
>
> <?lua tex.enablemode("A") ?>

:-)

I don't use templates too often, so I don't have other examples in mind where the \startluatemplate ... \stopluatemplate might be needed. So, just adding tex.enablemode at the lua will also work. We can see if another use case comes up in the future!