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
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
___________________________________________________________________________________