I refined the proposal a little further to not having to overload xtables but only use one remaining internal macro of xtables. I also sent this version to Hans to be considered going to the ConTeXt core.
\unprotect %D xtable extensions \definextable[XTABLE] \unexpanded\def\startXTABLE {\bgroup \let\NC\tabl_xte_start_nc \let\NR\tabl_xte_start_nr \settrue\c_tabl_xte_first_nc \tabl_x_start_named{XTABLE}} \newconditional\c_tabl_xte_first_nc \unexpanded\def\tabl_xte_start_nr {\stopxcell\stopxrow \settrue\c_tabl_xte_first_nc} \unexpanded\def\tabl_xte_start_nc {\ifconditional\c_tabl_xte_first_nc \setfalse\c_tabl_xte_first_nc \expandafter\startxrow\expandafter\startxcell \else \expandafter\stopxcell\expandafter\startxcell \fi} %D The related structure commands are also available: \let\startXTABLEhead\startxtablehead \let\startXTABLEfoot\startxtablefoot \let\startXTABLEnext\startxtablenext \let\startXTABLEbody\startxtablebody \let\stopXTABLEhead\stopxtablehead \let\stopXTABLEfoot\stopxtablefoot \let\stopXTABLEnext\stopxtablenext \let\stopXTABLEbody\stopxtablebody \protect \starttext \startXTABLE[align={lohi,middle}] \startXTABLEhead \NC OSI-Schicht \NC[nx=6] Umsetzung \NR \stopXTABLEhead \startXTABLEbody \NC Anwendungsschicht \NC[nx=2,ny=3] SOME/I \NC[nx=2,ny=3] AVB/TSN \NC[nx=2,ny=3] DoIP \NR \NC Darstellungsschicht \NR \NC Sitzungsschicht \NR \NC Transportschicht \NC[nx=3] TCP \NC[nx=3] UDP \NR \NC Vermittlungsschicht \NC[nx=3] IPv4 \NC[nx=3] IPv6 \NR \NC Sicherungsschicht \NC[nx=6] Ethernet \NR \stopXTABLEbody \startXTABLEfoot \NC Bitübertragungsschicht \NC[nx=2] 100BASE-TX \NC[nx=2] 100BASE-T \NC[nx=2] 1000BASE-T \NR \stopXTABLEfoot \stopXTABLE \stoptext On 03/08/2017 04:49 PM, Henri Menke wrote: > Alternatively to my first proposal but still overloading the original xtables > I came up with another solution which does not have the \NC\NR but only \NR > and does not read the cell content as an argument. > > \unprotect > > % Overload tabl_x_start_table > \unexpanded\def\tabl_x_start_table[#settings]% maybe two arguments: > [tag][settings] | [tag] | [settings] > {\bgroup > \let\NC\tabl_xte_start_nc > \let\NR\tabl_xte_start_nr > \settrue\c_tabl_xte_first_nc > \tabl_x_prepare{#settings}% > \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% > > \buff_pickup{\tabl_x_current_buffer}{startxtable}{stopxtable}\relax\tabl_x_process\zerocount} > > % xtable extensions > \newconditional\c_tabl_xte_first_nc > > \unexpanded\def\tabl_xte_start_nr > {\stopxcell\stopxrow > \settrue\c_tabl_xte_first_nc} > > \unexpanded\def\tabl_xte_start_nc > {\ifconditional\c_tabl_xte_first_nc > \setfalse\c_tabl_xte_first_nc > \expandafter\startxrow\expandafter\startxcell > \else > \expandafter\stopxcell\expandafter\startxcell > \fi} > > \protect > > \starttext > > \startxtable[align={lohi,middle}] > \NC OSI-Schicht \NC[nx=6] Umsetzung \NR > \NC Anwendungsschicht \NC[nx=2,ny=3] SOME/I \NC[nx=2,ny=3] AVB/TSN > \NC[nx=2,ny=3] DoIP \NR > \NC Darstellungsschicht \NR > \NC Sitzungsschicht \NR > \NC Transportschicht \NC[nx=3] TCP \NC[nx=3] UDP \NR > \NC Vermittlungsschicht \NC[nx=3] IPv4 \NC[nx=3] IPv6 \NR > \NC Sicherungsschicht \NC[nx=6] Ethernet \NR > \NC Bitübertragungsschicht \NC[nx=2] 100BASE-TX \NC[nx=2] 100BASE-T > \NC[nx=2] 1000BASE-T \NR > \stopxtable > > \stoptext > > On 03/08/2017 04:39 PM, Henri Menke wrote: >> I quickly came up with something myself. Unfortunately, it involves >> overloading of the original xtables. Perhaps there is a better way but it >> works. I am happy to hear your opinions! >> >> \unprotect >> >> % Overload tabl_x_start_table >> \unexpanded\def\tabl_x_start_table[#settings]% maybe two arguments: >> [tag][settings] | [tag] | [settings] >> {\bgroup >> \let\NC\tabl_xte_start_nc >> \let\NR\tabl_xte_start_nr >> \tabl_x_prepare{#settings}% >> \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% >> >> \buff_pickup{\tabl_x_current_buffer}{startxtable}{stopxtable}\relax\tabl_x_process\zerocount} >> >> % xtable extensions >> \newconditional\c_tabl_xte_in_nc >> >> \unexpanded\def\tabl_xte_start_nr >> {\stopxrow >> \setfalse\c_tabl_xte_in_nc} >> >> \unexpanded\def\tabl_xte_start_nc >> {\futurelet\next\tabl_xte_start_nc_indeed} >> >> \def\tabl_xte_start_nc_indeed >> {\ifx\next\tabl_xte_start_nr \else >> \expandafter\tabl_xte_start_nc_finish >> \fi} >> >> \def\tabl_xte_start_nc_finish#1\NC >> {\ifconditional\c_tabl_xte_in_nc \else >> \settrue\c_tabl_xte_in_nc >> \startxrow[]% >> \fi >> \startxcell#1\stopxcell\NC} >> >> \protect >> >> \starttext >> >> \startxtable[align={lohi,middle}] >> \NC OSI-Schicht \NC[nx=6] Umsetzung \NC\NR >> \NC Anwendungsschicht \NC[nx=2,ny=3] SOME/I \NC[nx=2,ny=3] AVB/TSN >> \NC[nx=2,ny=3] DoIP \NC\NR >> \NC Darstellungsschicht \NC\NR >> \NC Sitzungsschicht \NC\NR >> \NC Transportschicht \NC[nx=3] TCP \NC[nx=3] UDP \NC\NR >> \NC Vermittlungsschicht \NC[nx=3] IPv4 \NC[nx=3] IPv6 \NC\NR >> \NC Sicherungsschicht \NC[nx=6] Ethernet \NC\NR >> \NC Bitübertragungsschicht \NC[nx=2] 100BASE-TX \NC[nx=2] 100BASE-T >> \NC[nx=2] 1000BASE-T \NC\NR >> \stopxtable >> >> \stoptext >> >> On 03/08/2017 04:29 PM, Henri Menke wrote: >>> Dear devs, >>> >>> Natural Tables are quite handy but their syntax is a little verbose. >>> >>> \bTABLE >>> \bTR >>> \bTD ... \eTD >>> \eTR >>> \eTABLE >>> >>> There exist nice extensions which make the format less verbose by mapping >>> >>> \startTABLE >>> \NC ... \NR\NR >>> \stopTABLE >>> >>> back to the original macros. >>> >>> The new method for tables, called xtables, is faster and seems to have less >>> problems than Natural Tables. However, the syntax is even more verbose >>> >>> \startxtable >>> \startxrow >>> \startxcell ... \stopxcell >>> \stopxrow >>> \stopxtable >>> >>> Can we have similar abbreviations as for Natural Tables? I am thinking of >>> something like >>> >>> \startXTABLE >>> \NC ... \NR\NR >>> \stopXTABLE >>> >>> I tried myself rewriting tabl-nte.mkiv for xtables but it is not >>> straightforward. >>> >>> What do you think of this proposal? >>> >>> Kind regards, >>> Henri >>> >> > ___________________________________________________________________________________ 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 ___________________________________________________________________________________