%D \module %D [ file=core-nte, %D version=2009.03.08, %D title=\CONTEXT\ Table Macros, %D subtitle=Natural Tables Extensions, %D author=Hans Hagen \& Wolfgang Schuster, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Table Module / Natural Tables Extensions} \unprotect %D This module is suggested by Wolfgang Schuster who also prototyped %D it and came up with the rationale: %D %D This module provides an easy way to use natural in a similiar %D way as the older table module (based on the \TABLE\ macros) and %D the newer tabulate module. %D %D You can see the advantage in the following table, once created %D with the new macros and once with the normal macros provided %D with the natural table module. %D %D Let us start with the original macros: %D %D \startbuffer %D \bTABLE %D \bTR %D \bTD Text 1 \eTD %D \bTD Text 2 \eTD %D \eTR %D \bTR %D \bTD Text 3 \eTD %D \bTD Text 4 \eTD %D \eTR %D \eTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D Watch how the new macros use less code: %D %D \startbuffer %D \startTABLE %D \NC Text 1 \NC Text 2 \NC\NR %D \NC Text 3 \NC Text 4 \NC\NR %D \stopTABLE %D \stopbuffer %D %D \typebuffer \getbuffer %D %D The actual code differs from the prototype that it does not need %D to collect whole rows and parse them but looks ahead instead. \newconditional\c_tabl_nte_in_nc \unexpanded\def\startTABLE {\dosingleempty\tabl_nte_start} \def\tabl_nte_start[#1]% {\bgroup \bTABLE[#1]% \let\NC\tabl_nte_start_nc \let\NR\tabl_nte_start_nr \let\bTR\relax \let\bTD\relax \let\bTH\relax \let\bTN\relax} \unexpanded\def\stopTABLE {\eTABLE \egroup} \unexpanded\def\tabl_nte_start_nr {\eTR \setfalse\c_tabl_nte_in_nc} \unexpanded\def\tabl_nte_start_nc {\futurelet\next\tabl_nte_start_nc_indeed} \def\tabl_nte_start_nc_indeed {\ifx\next\tabl_nte_start_nr \else \expandafter\tabl_nte_start_nc_finish \fi} \def\tabl_nte_start_nc_finish#1\NC {\ifconditional\c_tabl_nte_in_nc \else \settrue\c_tabl_nte_in_nc \dobTR[]% \fi \dobTD#1\eTD\NC} %D The related structure commands are also available: \unexpanded\def\startTABLEhead{\dosingleempty\tabl_nte_start_head} \let\stopTABLEhead\relax \unexpanded\def\startTABLEnext{\dosingleempty\tabl_nte_start_next} \let\stopTABLEnext\relax \unexpanded\def\startTABLEbody{\dosingleempty\tabl_nte_start_body} \let\stopTABLEbody\relax \unexpanded\def\startTABLEfoot{\dosingleempty\tabl_nte_start_foot} \let\stopTABLEfoot\relax \def\tabl_nte_start_head[#1]#2\stopTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head} \def\tabl_nte_start_next[#1]#2\stopTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next} \def\tabl_nte_start_body[#1]#2\stopTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body} \def\tabl_nte_start_foot[#1]#2\stopTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot} \protect \endinput