Hi all, Thanks to you, I'm not at your level with Lua, but I'm learning thanks to you Hans, I compiled your code and I get an error message : lua error > lua error on line 50 in file ./table_1.tex: token call, syntax: [ctxlua]:11: unexpected symbol near '=' 13 \startluacode 14 function document.MyTable(specification) 15 16 local pattern = specification.pattern 17 local action = specification.action 18 local conversion = specification.conversion or "Characters" 19 20 local n = #pattern 21 22 -- context.startxtable { align = "middle,lohi", width = "0.8cm", 23 >> offset = "0.8ex", bodyfont = "9pt", framecolor = "cyan" } 24 context.startxtable { "MyTable" } 25 context.startxrow() 26 context.startxcell { frame = "off" } 27 context() 28 context.stopxcell() 29 for i=1,n do 30 context.startxcell() 31 context.convertnumber(conversion,i) 32 context.stopxcell() 33 end mtx-context | fatal error: return code: 256 TeX Output exited abnormally with code 1 at Thu Feb 18 16:13:29 Thank you very much Fabrice Le jeu. 18 févr. 2021 à 10:06, Hans Hagen a écrit : > On 2/18/2021 12:22 AM, Bruce Horrocks wrote: > > >> On 17 Feb 2021, at 17:40, Fabrice Couvreur > wrote: > >> > >> Hi, The code works, but is it possible to make it shorter ? > OK, here is my take, based on earlier posts, bringing together some > 'technologies': > > (1) make a document function which isolatees the code > (2) then call it where needed > (3) use the built in conversion code > (4) use so called unique mp graphics (smaller files, faster run) > (5) use symbols to get the baseline right > (6) use a little abstraction in the table setup > > watch how we can pass a table instead of a string, so > > context.startxtable { align = "middle,lohi", width = "0.8cm", offset = > "0.8ex", bodyfont = "9pt", framecolor = "cyan" } > > is ok, but anm abstraction is even better. Now, who will wikify it ... > > %%%%%%%%%%% code %%%%%%%%%%% > > \setupbodyfont[pagella] > > \starttext > > \definextable > [MyTable] > [align={middle,lohi}, > width=0.8cm, > offset=0.8ex, > bodyfont=9pt, > framecolor=cyan] > > \startluacode > function document.MyTable(specification) > > local pattern = specification.pattern > local action = specification.action > local conversion = specification.conversion or "Characters" > > local n = #pattern > > -- context.startxtable { align = "middle,lohi", width = "0.8cm", > offset = "0.8ex", bodyfont = "9pt", framecolor = "cyan" } > context.startxtable { "MyTable" } > context.startxrow() > context.startxcell { frame = "off" } > context() > context.stopxcell() > for i=1,n do > context.startxcell() > context.convertnumber(conversion,i) > context.stopxcell() > end > context.stopxrow() > for i=1,n do > context.startxrow() > context.startxcell() > context.convertnumber(conversion,i) > context.stopxcell() > for j=1,n do > context.startxcell { align = "middle" } > action(string.sub(pattern[i],j,j)) > context.stopxcell() > end > context.stopxrow() > end > context.stopxtable() > > end > \stopluacode > > \startuniqueMPgraphic{cross}{width,height,depth,color,line} > draw image ( > draw (\MPvar{depth},\MPvar{height}) -- (\MPvar{width},0) ; > draw (\MPvar{depth},0) -- (\MPvar{width},\MPvar{height}) ; > ) > withpen pencircle scaled \MPvar{line} > withcolor \MPvar{color} ; > \stopuniqueMPgraphic > > \definesymbol > [MyRedCross] > > > [\uniqueMPgraphic{cross}{width=1em,height=1ex,depth=.5ex,color=red,line=.2ex}] > > \definesymbol > [MyGreenCross] > > > [\uniqueMPgraphic{cross}{width=1em,height=1ex,depth=.5ex,color=green,line=.2ex}] > > \startluacode > document.MyTable { > action = function(value) > context(value == "X" and 1 or 0) > end, > conversion = "Characters", > pattern = { > ".XXX..XX", > "X...XXX.", > "X..X.XXX", > "X.X.X..X", > ".X.X.XX.", > ".XX.X...", > "XXX.X...", > "X.XX...." > } > } > \stopluacode > > \startluacode > document.MyTable { > action = function(value) > context(value == "X" and 1 or 0) > end, > conversion = "Greek", > pattern = { > ".XXX..XX", > "X...XXX.", > "X..X.XXX", > "X.X.X..X", > } > } > \stopluacode > > \startluacode > document.MyTable { > action = function(value) > if value == "X" then > context.symbol { "MyRedCross" } > end > end, > conversion = "Romannumerals", > pattern = { > ".XXX..XX", > "X...XXX.", > "X..X.XXX", > "X.X.X..X", > ".X.X.XX.", > ".XX.X...", > "XXX.X...", > "X.XX...." > } > } > \stopluacode > > \startluacode > document.MyTable { > action = function(value) > context.symbol { value == "X" and "MyRedCross" or > "MyGreenCross" } > end, > conversion = "Romannumerals", > pattern = { > "X.X.X..X", > ".X.X.XX.", > ".XX.X...", > "XXX.X...", > "X.XX...." > } > } > \stopluacode > > \stoptext > > > ----------------------------------------------------------------- > Hans Hagen | PRAGMA ADE > Ridderstraat 27 | 8061 GH Hasselt | The Netherlands > tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl > ----------------------------------------------------------------- > > ___________________________________________________________________________________ > If your question is of interest to others as well, please add an entry to > the Wiki! > > maillist : ntg-context@ntg.nl / > http://www.ntg.nl/mailman/listinfo/ntg-context > webpage : http://www.pragma-ade.nl / http://context.aanhet.net > archive : https://bitbucket.org/phg/context-mirror/commits/ > wiki : http://contextgarden.net > > ___________________________________________________________________________________ >