[NTG-context] \ctxlua and \startluacode ... \stopluacode

Rudolf Bahr quasi at quasi.de
Tue Oct 15 00:50:31 CEST 2019


On Mon, Oct 14, 2019 at 09:26:58PM +0200, Taco Hoekwater wrote:
> Hi,
> 
> > On 14 Oct 2019, at 21:08, Rudolf Bahr <quasi at quasi.de> wrote:
> > 
> > 
> > 2. But in the case of an not existing file (BBB.lua) the known error message comes up
> >   again:
> >   "token call, execute: [ctxlua]:8: /home/sam/context-tests/BBB.lua: No such file or 
> >    directory".
> >    This, of course, is true, but shouldn't be mentioned in an error message!
> 
> If you do not want the error message, don’t use assert(). You can just do 
> 
> f = io.open(...)
> If f then ... else ... end
> 
> Best wishes,
> Taco


Hi Taco!

Thank you again for your message!

My wish isn't to avoid error messages, if they are justified! In the case of my MWE
I want to have a decision in my \startluacode ... \stopluacode environment, whether
a certain file exists or not. With this decision I want to branch in my program and
with an error message I cannot do it.

Lua is a wonderfull programming language and I'm appreciative to get a way to exit
ConTeXt, run Lua code and enter the ConTeXt program at the same location again! On
the other side, in the last days I spent some time to eliminate errors in my
\startluacode ...\stopluacode program to change code which causes no error messages
in pure Lua.

Now to your suggestion not to use "assert ()". Indeed it's a solution! My program
works! I append again its output (again just for fun!). Did you really try it or
has it been just an idea? The MWE is now as follows:

=======================================================================================
\startluacode

userdata = userdata or {}

function userdata.file_exists (name)

   local name = name
   local f    = io.open ( name, "r" )

   if f then
      f:close ()
      context ( name )
      context ( "  exists!" )
   else
      context ( name )
      context ( "  doesn't exist!" )
   end
end

\stopluacode


\starttext

\def\lookupfile#1%
	{\ctxlua{userdata.file_exists([==[#1]==])}}

\lookupfile{/home/sam/context-tests/AAA.lua}	% "AAA.lua" intentionally does exist

\par

\lookupfile{/home/sam/context-tests/BBB.lua}	% "BBB.lua" intentionally doesn't exist

\stoptext
=======================================================================================

R. Ierusalimschy encourages the use of "assert()". But it is apparantly better not to
use it under certain circumstances as in \startluacode ... \stopluacode as I've learnt
now.
Can I avoid therefore Hans' prefix resolvers code?

Best wishes,
Rudolf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: is-file.pdf
Type: application/pdf
Size: 5954 bytes
Desc: not available
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20191015/555ab3c0/attachment-0001.pdf>


More information about the ntg-context mailing list