ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Philipp Gesang <pgesang@ix.urz.uni-heidelberg.de>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: TaBlE from Lua
Date: Thu, 24 Feb 2011 02:16:13 +0100	[thread overview]
Message-ID: <20110224011613.GA5149@orcus> (raw)
In-Reply-To: <20110223230738.GD9491@clanspum.net>


[-- Attachment #1.1.1: Type: text/plain, Size: 901 bytes --]

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

[-- Attachment #1.1.2: table.tex --]
[-- Type: text/x-tex, Size: 582 bytes --]

\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

[-- Attachment #1.1.3: table.lua --]
[-- Type: text/plain, Size: 1151 bytes --]

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 #1.2: Type: application/pgp-signature, Size: 198 bytes --]

[-- Attachment #2: Type: text/plain, Size: 486 bytes --]

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

  parent reply	other threads:[~2011-02-24  1:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-23 23:07 Daniel Lyons
2011-02-23 23:19 ` Wolfgang Schuster
2011-02-24  1:16 ` Philipp Gesang [this message]
2011-02-24  1:45   ` Daniel Lyons
2011-02-24  6:35     ` luigi scarso
2011-02-24  6:48       ` Daniel Lyons

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110224011613.GA5149@orcus \
    --to=pgesang@ix.urz.uni-heidelberg.de \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).