From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/105272 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Rudolf Bahr Newsgroups: gmane.comp.tex.context Subject: Re: \ctxlua and \startluacode ... \stopluacode Date: Tue, 15 Oct 2019 00:50:31 +0200 Message-ID: <20191014225031.GA2472@nan> References: <20191014190712.GA14624@nan> <017004DC-6E05-4B4D-A8D7-75A97041FF44@elvenkind.com> Reply-To: ntg-context@ntg.nl Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="M9NhX3UHpAaciwkO" Content-Transfer-Encoding: 8bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="12837"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mutt/1.10.1 (2018-07-13) To: mailing list for ConTeXt users Original-X-From: ntg-context-bounces@ntg.nl Tue Oct 15 00:51:01 2019 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iK9B6-00039g-BY for gctc-ntg-context-518@m.gmane.org; Tue, 15 Oct 2019 00:51:00 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 2A466161C5E; Tue, 15 Oct 2019 00:50:37 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ylsXqQNUr-1p; Tue, 15 Oct 2019 00:50:36 +0200 (CEST) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 542AC161C60; Tue, 15 Oct 2019 00:50:36 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id D4618161C37 for ; Tue, 15 Oct 2019 00:50:34 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kFKQVXbMg1Wn for ; Tue, 15 Oct 2019 00:50:33 +0200 (CEST) Received-SPF: None (mailfrom) identity=mailfrom; client-ip=185.26.156.68; helo=brooks.uberspace.de; envelope-from=quasi@quasi.de; receiver= Original-Received: from brooks.uberspace.de (brooks.uberspace.de [185.26.156.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id A5EB81619D4 for ; Tue, 15 Oct 2019 00:50:33 +0200 (CEST) Original-Received: (qmail 25644 invoked from network); 14 Oct 2019 22:50:32 -0000 Original-Received: from unknown (HELO localhost) (5.83.181.74) by brooks.uberspace.de with SMTP; 14 Oct 2019 22:50:32 -0000 Content-Disposition: inline In-Reply-To: <017004DC-6E05-4B4D-A8D7-75A97041FF44@elvenkind.com> X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.org gmane.comp.tex.context:105272 Archived-At: --M9NhX3UHpAaciwkO Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit On Mon, Oct 14, 2019 at 09:26:58PM +0200, Taco Hoekwater wrote: > Hi, > > > On 14 Oct 2019, at 21:08, Rudolf Bahr 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 --M9NhX3UHpAaciwkO Content-Type: application/pdf Content-Disposition: attachment; filename="is-file.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjcKJcPPztTF2NTQxMYKNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAv TGVuZ3RoIDIwMCA+PgpzdHJlYW0KeF69TzGOAjEM7PcV/gC5sZM4iXTagttbJOp0iBYq/t/i 7JItEFBSWDNxZkYe0JVAhwEP3NfhZ2ZidiVG1kz1MrD9gJgkw0WvUE9J4TSkIkz1RqdfIMp4 pnrcxAkuawJgTJzPIUK7VhXws3kYCHvjsu7UkP/WXXuL4aKZRknNV1ZtCis32HbN2/iC5mXz 9onZtDY6tfxx50UtrSeFJ7eP75poTq5oKH5r/Y0mYtjndRNZLhh3S3SPCBN4bqeUT4V72f96 Bwv9aWkKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjw8IC9TdWJ0eXBlIC9YTUwgL1R5cGUg L01ldGFkYXRhIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNzkzID4+CnN0cmVhbQp4 Xp1WS27bMBC9iqAuC+pn2ZEEW0ERI2jaqAgaN82WJilHCEWqFAUrQW/WRY/UK5TUz5bihRHA hsmZ9x6Hw+HQy8u6gOiZSGNLdhlbmf/+/DWNDK/Mn/PESYor8pR9fhXk/vXbBr0+oxCbl/Gy juq8yImERp1TVkb1yoSYb0mkxtpsm/FS4DT6vr7uEGq2Mp+kLCLb3u/31n5mcbGz3TAMbcez PQ8oBChfmIQ1YOWHTmBNSiSyQmacGXoOt7ySK9PsVDEaRItK0EYSI5tQkhMmS9u1XB0KRlHK RQ5lDIuCZghqPbvA6VKhe5dGIUGg5KJd+578agc008tFFLLdyqwBJimsqDTteGkPOC00sNUY HwJvRT5RtcQZag1Oq40U1FxmkpLztOKsBGlGSatIs6l0J9UYjzJ8VspV1tRpd0lnpdWcu4V4 rvNZq4zPdMb1OLpZ94EYvw3PcUPgOsD1N94s8vzInX90vMhxlg1Rg1vWFWcb8iitL3zLYE4O eznpHXM2mTIdVjKalSbMBjOm/RA01kVZCLjLIYC42dCEp0Fj2n1VFFzIGHEmSS13UGDCLEbk hNnjxuwHIkqddB2u5TrqY7iBysqE3MPG5Ntk8xhrzgTd2Fuomg8ry2qn70YHPva02NsKauMQ kjUcy8Qzgl9XDOkygTSTL80+nAsvHBPHmBFd/fSyc6s/pbe+EeeOQqnva0wzVtVgMaEN7vfV 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 bmRzdHJlYW0KZW5kb2JqCjMgMCBvYmoKPDwgL0ZpcnN0IDU2IC9OIDkgL1R5cGUgL09ialN0 bSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDk1NyA+PgpzdHJlYW0KeF6NVF1v6kYQ fb+/Yt4u1RV4d+31RxQhJdAotJBGhKSpIh4WvFBLYCN7URKpP75nbAxWlaqVwJ6dPTtz5sys FQmKyU8oIRUmFFGgJUkKIzx9ikVMmmKtSAYkRRST1CSVkt/eyHsc35G3sB+OvMnebO3t6T06 vSe0BExF9EaRH1CQCFoSjDcKEx9m4MMMfM0mg3QQwNTi7NUMUJGCGbLJAF+FvAzPO3icTQ0z lgyILgFjyQGRvCEQx2d8wqYfM14KDtMgpOA4Ps6xnZwDSUSGLaOa5SXt8tv1NXm3prJ3RQ4x Hv+4fbmf/5jO5sXe5FL153Z73JmSvNFk/PRZObuf5JuC+NRvZWrLLN9Sb5La3GXu8yfygM8q V35S7yYtVhaep+PhsLN7INCu4ZA8zjS21brMDq4o0TZBc4at3OfB1okYscBCoEe1ryH3O7rN 2OGwZn1TrTloLEIcMod7m23/dBTGPnkcnvf6Mglweme2FbGBMLe3xQfK7wdKUV/FAqMCjJTo 9bJB3GU760O9hhd7HsweJP5dm4kzu2x9k293Foe8mXUmNc4g6qk2yPbCO5dqOgJ4ryfqgS/b 2v5PR5oiUwPGQFYoKqnToYyf83WRcmu8tjX9+47ErbbFc54BaHEtGqIdtU9ERsURC0ner1nK KXSbooE+4q5UF2zukI2lrqONyuLQqM1a6kQPVKQ15jQO5CCOk0jHHGlm08x8hRMY0TM0ihMG P5qSG4v7XaeY26o4lmtwYAI18drg70AzKjhSFusn66ipkT2LMtt/lfAfxC4lthVODY+7zTHW 5yaHDROGTc3K7hoqD8c9yyXqxROaxVMAUki/bFgBP2PtvefKPhT5Wcy2tCb7CCl2BRr5Yssq K3Ly5CDqCL6wr27wS7HKeUR7WdXfYHpBr92azhav1BMDKTpOvpJF6ai35o59uK3BVc4HuXUd 0CLjiErIpC9FH99Q5V+poAN4LnfUe39/HxxKs92bvkntYF3sO4iWcx0FFPAjGV9JzZjSGofN sXFIM75iiBQyUL4KpP4h1Hchvrc43JLrjd1shAjWGAstRCiF0AHesHUshBJC+Hgoizfb+Le+ eg28j5Gq7ejkx5oxatW8A2yGyBEiRjd2BLveT+EDFp9aocOv49f52ea4XbvFIJ5vTrbGHEzG 57bRX3SRe1HLDa0gxZXg7mFa/kssjHp6XNuSetOjQQv6alAfhXlpujtuB0W5ZXfmkPWkbMgX DlQVV4nqeB1C7ZBZLkpzONgUN8vsKkvD4d/MMfkNCmVuZHN0cmVhbQplbmRvYmoKMTYgMCBv YmoKPDwgL0lEIFsgPDQ0RkFDOTQyRkI1QkNCM0I0MkY0NTFEMTc2MEE2NDQyPiA8NDRGQUM5 NDJGQjVCQ0IzQjQyRjQ1MUQxNzYwQTY0NDI+IF0gL0luZm8gMTUgMCBSIC9Sb290IDE0IDAg UiAvU2l6ZSAxNyAvVHlwZSAvWFJlZiAvVyBbIDEgMiAxIF0gL0ZpbHRlciAvRmxhdGVEZWNv ZGUgL0xlbmd0aCA2MCA+PgpzdHJlYW0KeF5jAAImBmYWIGZgFPzHwMggCuKzMTKqgmhmIGYE YiZGliUMjLyRDIz8F0HirEDMDsQcjGIKDAB4WgPHCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4 cmVmCjU2NjQKJSVFT0Y= --M9NhX3UHpAaciwkO Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cDovL3d3dy5udGcubmwvbWFpbG1hbi9s aXN0aW5mby9udGctY29udGV4dAp3ZWJwYWdlICA6IGh0dHA6Ly93d3cucHJhZ21hLWFkZS5ubCAv IGh0dHA6Ly9jb250ZXh0LmFhbmhldC5uZXQKYXJjaGl2ZSAgOiBodHRwczovL2JpdGJ1Y2tldC5v cmcvcGhnL2NvbnRleHQtbWlycm9yL2NvbW1pdHMvCndpa2kgICAgIDogaHR0cDovL2NvbnRleHRn YXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --M9NhX3UHpAaciwkO--