On 2011-02-23 <17:07:38>, Daniel Lyons wrote:
> Is there a convenient way to create TaBlE tables from Lua? If so,
> where can I read about it?

Good evening, Daniel!

[-1] Isn’t TaBlE deprecated?  <http://wiki.contextgarden.net/Tables_Overview>

[0] If you aim for convenience, wouldn’t you rather want to
    switch to \[start|stop]tabulate? Its syntax is very similar
    and there are a few examples to learn from in the context
    source code.

[1] I don’t know how your table structure looks like, but the
    example 1 can be a starting point, assuming a 2dimensional
    table where all rows have the same element count:

[2] Item example 2, but using the cld interface
    <http://wiki.contextgarden.net/cld>.

Put both files in the same directory and run “context” on
table.tex to build the examples.

Regards, Philipp

> 
> Thanks,
> 
> -- 
> Daniel
\registerctxluafile{table}{}

%%% Example 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\typesetatable{%
  \ctxlua{userdata.do_typesetatable(userdata.t)}%
}

%%% Example 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\typesetcldtable{%
  \ctxlua{userdata.do_typesetcldtable(userdata.t)}%
}

\starttext

%%% Demo 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\placetable[here]{Concatenation based}{\typesetatable}

%%% Demo 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\placetable[here]{CLD-based}{\typesetcldtable}

\stoptext \endinput
userdata = userdata or { }

userdata.t = {
    { 0, 0, 0, },
    { 0, 0, 1, },
    { 0, 1, 0, },
    { 0, 1, 1, },
    { 1, 0, 0, },
    { 1, 0, 1, },
    { 1, 1, 0, },
    { 1, 1, 1, },
}

--- Lua stuff 1 -------------------------------------------------
userdata.env = [[
\starttable[%s]
  \HL
%s
  \HL
\stoptable
]]

local fmt, rep, unpack = string.format, string.rep, table.unpack
userdata.do_typesetatable = function (t)
    local maxx, maxy, lines = #t[1], #t, { }
    local template = rep("\\NC %s", maxx)
    for n=1, maxy do
        local row = t[n]
        lines[n] = "  " .. fmt(template, unpack(row)) .. "\\AR"
    end
    context( fmt(userdata.env, "|" .. rep("c|", maxx), table.concat(lines, 
"\n")) )
end

--- Lua stuff 2 -------------------------------------------------
local AR, HL, NC = context.AR, context.HL, context.NC

userdata.do_typesetcldtable = function (t)
    local maxx, maxy = #t[1], #t
    context.starttable({ "|" .. rep("c|", maxx) })
    HL()
    for n=1, maxy do
        local row = t[n]
        for m=1, maxx do
            NC() context(row[m])
        end
        AR()
    end
    HL()
    context.stoptable()
end

Attachment: pgpt0IJu5TFFS.pgp
Description: PGP signature

___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to