From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/107158 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Hans Hagen Newsgroups: gmane.comp.tex.context Subject: Re: supp-ran.lua makes code unable to work in ConTeXt Date: Fri, 1 May 2020 15:21:43 +0200 Message-ID: <6c7d66fc-848b-4c24-b78d-13932d052c41@xs4all.nl> References: Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------EA52CE964F00E46F3446A122" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="128647"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 To: mailing list for ConTeXt users , "Jairo A. del Rio" Original-X-From: ntg-context-bounces@ntg.nl Fri May 01 15:22:57 2020 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jUVd2-000XJL-Mh for gctc-ntg-context-518@m.gmane-mx.org; Fri, 01 May 2020 15:22:56 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id E3E701836B3; Fri, 1 May 2020 15:21:57 +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 vgU4w-Avh3Xr; Fri, 1 May 2020 15:21:53 +0200 (CEST) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 20BFC183752; Fri, 1 May 2020 15:21:53 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 9DE22190220 for ; Fri, 1 May 2020 15:21:51 +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 L0CpamlTEgaD for ; Fri, 1 May 2020 15:21:46 +0200 (CEST) Received-SPF: Softfail (mailfrom) identity=mailfrom; client-ip=213.125.29.162; helo=smtp.ziggozakelijk.nl; envelope-from=j.hagen@xs4all.nl; receiver= Original-Received: from smtp.ziggozakelijk.nl (D57D1DA2.static.ziggozakelijk.nl [213.125.29.162]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id DE9DF104F for ; Fri, 1 May 2020 15:21:46 +0200 (CEST) X-Default-Received-SPF: pass (skip=loggedin (res=PASS)) x-ip-name=10.100.1.103; envelope-from=; Original-Received: from [10.100.1.103] (unverified [10.100.1.103]) by smtp.ziggozakelijk.nl (SurgeMail 7.4a) with ESMTP (TLS) id 10932-1713362 for multiple; Fri, 01 May 2020 15:21:45 +0200 In-Reply-To: Content-Language: en-US X-Authenticated-User: hagen@controller-9 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.io gmane.comp.tex.context:107158 Archived-At: This is a multi-part message in MIME format. --------------EA52CE964F00E46F3446A122 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 5/1/2020 6:12 AM, Jairo A. del Rio wrote: > I've adapted the following code to make mazes in LuaLaTeX and ConTeXt: > https://www.rosettacode.org/wiki/Maze_generation#Lua > > I defined a modified version to make content visible to TeX and I saved > in a file named maze.lua: > > function make_maze_tex(w, h, m) >   w = w or 16 >   h = h or 8 > >   local map = initialize_grid(w*2+1, h*2+1) > >   function walk(x, y) >     map[y][x] = false > >     local d = { 1, 2, 3, 4 } >     shuffle(d) >     for i, dirnum in ipairs(d) do >       local xx = x + dirs[dirnum].x >       local yy = y + dirs[dirnum].y >       if map[yy] and map[yy][xx] then >         map[avg(y, yy)][avg(x, xx)] = false >         walk(xx, yy) >       end >     end >   end > >   walk(math.random(1, w)*2, math.random(1, h)*2) > >  tex.print([[\bgroup]]) >  tex.print([[\baselineskip ]]..m) >   local s = {} >   for i = 1, h*2+1 do >     --table.insert(s, [[\hbox{]]) >     tex.print([[\hbox{]]) >     for j = 1, w*2+1 do >      -- table.insert(s, [[\hbox{]]) >       if (j == 1 and i == 2) or (j == 2*w + 1 and i == 2*h) then >         tex.print([[\hskip ]]..m) >       elseif map[i][j] then >         --table.insert(s, [[\vrule width ]]..m..[[ height ]]..m) >         tex.print([[\vrule width ]]..m..[[ height ]]..m) >       else >         --table.insert(s, [[\hskip ]]..m) >         tex.print([[\hskip ]]..m) >       end >     --  table.insert(s, [[}]].."\n") >     end >     --table.insert(s, [[}]]) >   tex.print([[}]]) >   end >  --tex.print(table.concat(s)) >  tex.print([[\egroup]]) > end > > And I executed the folowing in LuaLaTeX and ConTeXt: > > %\documentclass{article} > %\usepackage{luacode} > %\begin{document} > \starttext > %\begin{luacode*} > \startluacode > mz = dofile("maze.lua") > local count = 0 > for i=10,109 do > count = count + 1 > tex.print([[\subject{Laberinto ]]..count..[[}]]) > mz.make_maze_tex(i, i, [[\dimexpr\textwidth/]]..(2*i+1)..[[\relax]]) > tex.print([[\pagebreak]]) > end > %\end{luacode*} > \stopluacode > %\end{document} > \stoptext > > Whereas it works very fast in LuaLaTeX it crashes on ConTeXt and outputs > the following: btw, fast is relative ... no problem making the code twice as fast it is actually a nice example for the cld manual ... attached some output from a first 'improvement' (that version runs some 50-60% faster so you have a challenge ... actually, it could be a nice challenge for others on this list: how to make this one contextish and so, maybe we should have a challenge every few weeks) > token call, execute: > ...ext/tex/texmf-context/tex/context/base/mkiv/supp-ran.lua:30: C stack > overflow > > Why does it happen? I guess it has something to do with math.randomseed, > but I don't know how to avoid this error message. no, it's just lua running out of stack space so it depends on the binary (and als the initial random value) luatex 1.13 uses lua 5.3 which has a large stack but depending on the compiler/linker settings and platform (it's 1000000 but depending on the situatation you get a message or crash when that doesn't work out) luajittex has a limited stack of 8000 so it will also crash luametatex uses lua 5.4 which uses a bit different stack model and can't go that high (it has a default of 2000 but i will bnump that to 6000 which still seems to work ok, that way i get upto a 120 maze) (new lmtx upload later this weekend) 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 ----------------------------------------------------------------- --------------EA52CE964F00E46F3446A122 Content-Type: application/pdf; name="mazecontext.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mazecontext.pdf" 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 YgRNWxVF4+32lSZpV4hEqhQFK0H/rA/7SfsLHVKXSG52N9sHAzR5zpnh4XCozaumJPSOa+fA T5nYun//+Mt1MrZ1/4xTlJZX/Gv25kHx24cPe/pwR9fMfZVsGtwUZcE1cZoiFxVuti5h8sAx jM104CYbxY740+66Q8C/rftV6xIHwfl89s8zX6pTEK7X6wBFQRR5gPCqe6FJ44nqRSew4xVV WakzKRwjSA6y1lvX7VQZHUTLWuVWktGA57zgQldB6IcmFUbxUaqC6ISUZZ5RYvSCkh03gO6X DIoqTrRUbfK3/Fs7yDMTDudEnLZu4zF+JHWu3SDZBAPOCA1sGLPHxFuR17l+lprFGbWJAvzX mc7587SSgjxwKoXmjW5zzLMu2UG+k7OrI5fbAP9hOzgHJ96dpqh8e/Y+lYXxtAHXZ8Z1M8Y3 u3EyzncnQhHyUOyhcB/GOFzgKHyJIozQxpINoWVeSbHnX7T/Vh4EKfh0T08iprx9BqTHaI6N 1gXptS1mSvtD5Ykp0FKRU0E8wuzGLngGNKXd1mUplU46109EMS58wcH/Sa49bsr+zFUFJWnT 9dHcnyEnDHEYX5B72JT8Pt1/SZAf9g72m7PzLRSM9PvIuj6Ze9JJj1da7PuamMkhJR/1aVys TODXtaDmVpE80/d2H2gerbogHXGKmdAB0QeM/fmUNlqbcD7mRJtrnZwzsbjgDGtt+f/fAofu 9nR9N6SE8kamvAGDr0y/4Dv4jSrtl7q+QD4ypdpLmSetPU4ETtvrYZxzXjrdOTrp3c1nOz+t jEG1U7GyqWTZ8f45CY2QLRPaNiOaPIs7xv6ew1Bq/9hBRg0Ev+P3Z6lYBc0WKPijkqymXHWe ecYzWy2PKxa3V9DpOUuuSV7xFtBP/V6+YFGa/ntNFEVXFmmKd5LW5gmCblbXGcOz5WwRU7L0 5uv5wTSVyEMUIe8455QuF+hAV1DBNsiYa04GZm5EpYmgvFeLVyE7Hpfcmx9Wa28Vx7E3X8bM iw4oRItowckSNv0L94md29sBrzS8DsObnmyGbwIu4EPgDC/+T15Rv9cKZW5kc3RyZWFtCmVu ZG9iagoxMiAwIG9iago8PCAvU3VidHlwZSAvQ0lERm9udFR5cGUwQyAvRmlsdGVyIC9GbGF0 ZURlY29kZSAvTGVuZ3RoIDUxNiA+PgpzdHJlYW0KeF5jZGBhYWBkZJQI9nf3CPDQ9vH1zc/L NzTSDUpNL81JLALJJfyQ/6HQzSP3nY9H6YcM8w9Zph9yLH8Cfp/+Gf+rn7WHh7Gbh+l3DA/z TR6WXh42OS4G+e5uCMnD3s3DIcvAwPBcEETe4AeSTCo8KiDOfR7VBSAuvxADOyMjG5+ciqah h5GegYEJzA3obvHLL8pNzHFMyU9K9UxJzSvJLKnE5Wqg+UEM2QyVzAyMQCYDCwMLE5DFxBDK cJFRhu/H9O6jP0SPfucrZ/zefIb5h+sK0RUF3bVyxj8WsM3qXppX1dpU1ypXkZAVFtbOUdNV 1lkoVTW1fuHhbVt7++T+OBqz1xZ05+Ut654p/72Vbeay7hXyECP7jwrtu5N8pvvOd5Mzwm9+ JG8RXcA+t3tRdlZ3WbHc71a278HfzVhnTv/w8Duz1Hc23du/BX9z2JmYywkLJK7rmCgnnDN3 4cxl81omtvXLH5i5c91R6QfXokxsA/xDY+R/F/wOZm1o6uiolxKeArJa7vtHtoUTu+fPkgLa XX/0x+yjjHvPfN8A9E3K96Oi3/00vkv8ZvjNqPlb6rf3b793vyW+M3xnfPtd6ru3nNc00d8a Pr/5bGx8vvN+1/yueeH9lSsX1H9ryvF1i3SL1k//4Tz9u83Mvh62bh7Obh5uUBrg+aHIowaN LwBPKNZhCmVuZHN0cmVhbQplbmRvYmoKMTMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNv ZGUgL0xlbmd0aCA1NjUgPj4Kc3RyZWFtCnhefVNdb9owFH3nV1xlL5u0OB9QaQRIpdGyrQM2 Fbru1UmcxCKxM9tpAn9tD/tJ+wtzwEA7pklRbF+fe3yufc/4uq1wvCEKIpJRNrF+//ylPwto MrEerxbuopqSnH7cCbLaLdfxbhMPE+s67AGM26Atq5IoDG1ZMBm0EwsnPCKBnndhx+pgGiiS NLi/mRmYXk2sXKkqcJymaVDTR1xkjjccDh3Xd3zf1ghbbpnCrc3kK8NieG6IjAWtFOUMOl4c 8VpNLMuQV0mqZRh2JtFeEIp56XQ7jof6nareuFsFNaM/akKT0EeuOxg9fH5cjuaLBWfc8+17 ktUFFuN94hlqUp+IkFpC+O0wwoHh68pMcq5izp7AQy4aDEcl3hCuUlTQSAORN3h31TfERyLD G/NqK2iWq3B6nIHvuv233X8I7xHc6efijdxQwCyBOwQLBEve6CiF11pJRHJcpMBTWJPvUEst EDLB60q+QbDOqYSGiw3oUZCCYEkSqFlCBKicwIeH1RpmnCmY05gwScC2ASQhYK5U1dn+tVKN kU5xAEmny7NnX5Zre/5pertc3SLVKki5gEQ3Ai0kMuWe6zMFp7ikxTacL6C7d/B8AzRxg5J1 ZAIvn+UcN0C1rXgmcJXT+MiMFWWaXJfYDYybAy6RlxRnes+Hlyc/S78QkdZFwXBJdFX/bKbT vjmx4lIduvp/WX+hentvaVc4nQ2e2cKYbh/Wrttb1Tl5NeyNT5YnTJu80W7+A7VEX6EKZW5k c3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3Ro IDM5MCA+PgpzdHJlYW0KeF6FUk1rg0AQvfsrpodAcjCuhrY0iNAkTSM0H9RQejW7o13QXVn1 EOiP765fKTShCwu+9c2bmTczujtE9jOTJ7RnUwLvWMpaUbSX27iwRqOVpHWOotohMmT933IO ByVphBWMl+EqFLyaaHIoaFYz7FnXSQtMubhQTB4YH/HTjvavm8PGfttupZCuZ79jWmexsomR PvIqw/k/RNAycEMGyORb63ygKrkUc3CnhBD98CLYUuamxdJyul7A6btLuGCqswROpnILwPWA cVoNGNovmmvHoDlGKDqXFeahSGT3COD74OiueFmpc9PKBJy9Yqi4SGF8o3DNieqiyNDUCASC oNNjmAzptIm7OMchk2MMDZmO4NX5lrPXdY7n4qLj/eG4XbOSYVnEFFUs0gvf16aSAPy1Pn2d KBi9xp61SqeEfsXK0pH3no4kZOYGBj0sWuQ16PGpReSXahdpDDc5evvNRhkzgNZKaQeaWTnN nmnLuMBhoIU0A9OxlrnNLvSLadB+/QNnB+e/CmVuZHN0cmVhbQplbmRvYmoKMyAwIG9iago8 PCAvRmlyc3QgNjMgL04gMTAgL1R5cGUgL09ialN0bSAvRmlsdGVyIC9GbGF0ZURlY29kZSAv TGVuZ3RoIDg5OSA+PgpzdHJlYW0KeF7dVE1v4zYQve+vmNu6WFgiZX3YRhAgsZvGWzsbxM42 wCIHWmJUAbJoUDKSFP3xfUNZtopusT33IJEcvhm+eTNkQIKkoNGEpKRkTBMKYlgoxFxGFOPD P44oofEEGzFwsMmEZBCNP3wj/35+Q/5GvzXkL3Yq19fHcXYcF/QM2DigbxTB8xnHJed5IE/z 5w8XF+Rfq1rfmArR1l9+ub2//bRcrUxlZDB80PmhVJb82WK+fq8bvVtUL4bY6YvNtC2qnAaL TFdN0bz/RD7wRd3YdxpcZWarYVkf9vtS74BA1peX5PNBc12nttg3xiJ5QQ8M2zbve+0OYsQG C4Ecna3l9huLxuDLS8f6qk45agLV/Jna3+oi/72BepJ8js97wyAI4F6qvKawjXN9bd6Q/jAM QxqOuAAsrZATqOQAN0WpR1C65cWWO7UDiX+VZtGoskivqrzU8PFXulGZahTJ0TE1qPaVd87J 9PL3n47Ew5HsMvsP9WgzzBT4gmGNjJAKM0YWP1epybgyfleZ4W1P4U5a81gVAGqSYUu0J/ZR 4pk5QEVI+GuR8RmRAybdQa3DPRqw7qjPwAbKs9wu5syafas41y4MI28io3A0ojAOvVEShGNm vNJZob4HE5MzMplEqBnQ98pycVE3d8SDrs3BpuDAXeF6xU0krlTbLnCxJl1rTqWzbGyx+zGx c4b/SDD+nya4VHyndYW7e2rlcZsrV3qptrpspb477LgphFuscevwR1lY8OdWdeBX3GH+Y63v THVqlq50rbwz3JbSoF2/alsXpiJfeklP741+arzPZlvxPRzs1B865S57a0AR/ea2l6vNEw2E J0XPyG+PsQ0Njvhc4c2qvEr3PTcFRw1EIIYiGgp0TTSVcS/Koy1p8Pr66u2tyndqqDLtpWbX Q3S8XRRPoLHxasupjBhjtWqQ1Fw1OGY+ZYiIBB50GQfykwg+CvGxw+E9vHjRLy9ChKkQSSRE LIEOMWIejQU7ixF+gcbIc9g7m1tj4Ub+4OfWR79g22JDbMY4I0aMfuwEeLefYQ/YcIL9+Pvx T+ezD3NBTD7TcQFn96njGKEXFvO/lY7+pLPkGyf51MkxFVxBdM2PBMOVzg6ptjRYHhR6YBh4 ggXH1DsVvjnknrE5m4sG7/NR3ZgzBMMEDFnZuKcIq8C2BKolIZhvrNrvdYYXRZW1Rl/+BQua EkIKZW5kc3RyZWFtCmVuZG9iagoxOCAwIG9iago8PCAvSUQgWyA8NzM5ODEzN0RFQjVEQUIy RDYzQjUwMkFCNDNDQjZCQTk+IDw3Mzk4MTM3REVCNURBQjJENjNCNTAyQUI0M0NCNkJBOT4g XSAvSW5mbyAxNyAwIFIgL1Jvb3QgMTYgMCBSIC9TaXplIDE5IC9UeXBlIC9YUmVmIC9XIFsg MSAyIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDY2ID4+CnN0cmVhbQp4XhXI yw2AMBAD0XHC/x5pBYo40A9d0BKN0CDew9PIBijUwdD5IFruSVtkZ7U9W01WFB86AvU3/9EW W3Xd/GgWA3QKZW5kc3RyZWFtCmVuZG9iagpzdGFydHhyZWYKOTAzOAolJUVPRg== --------------EA52CE964F00E46F3446A122 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== --------------EA52CE964F00E46F3446A122--