\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