|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: C T
Length: 5966 (0x174e)
Types: TextFile
Names: »Cell2.tex«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z«
└─⟦036c765ac⟧
└─⟦this⟧ »TeX3.0/TeXcontrib/pittman/Cell2.tex«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
└─⟦this⟧ »./tex82/TeXcontrib/pittman/Cell2.tex«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦63303ae94⟧ »unix3.14/TeX3.14.tar.Z«
└─⟦c58930e5c⟧
└─⟦this⟧ »TeX3.14/TeXcontrib/pittman/Cell2.tex«
% File: TeX Inputs Cell2.tex
% Author: J E Pittman
% Bitnet: JEPTeX@TAMVenus
% Internet: JEPTeX@Venus.TAMU.EDU
% Date: November 8, 1988
%
% Prepare to scan the data, taking notes as to span sizes, row and
% column dimensions, et cetera.
%
\catcode`_=11 % Used to protect local control sequence names.
%
% The span info tokens contain sets of entries of the form \process
% {position}{number}{dimension}, where position is the terminal column
% or row, number is the number of columns or rows leading into the
% column or row, and dimension is the size of the information.
%
\declaretoks\column_span_info
\column_span_info={}%
\declaretoks\row_span_info
\row_span_info={}%
%
\let\process=\relax
%
\declarecount\column_number
\column_number=0
%
% Create a column information entry and put the user's specifications
% into it.
%
\def\column#1{\relax
\advance\column_number \by 1
\last_column=\column_number
\get_column_number_data
\add_column_number_data {#1}%
\ignorespaces
}%
%
\declarecount\row_number
\row_number=0
%
% Same as \column.
%
\def\row#1{\relax
\advance\row_number \by 1
\message{Scanning row \the\row_number.}%
\last_row=\row_number
\everyrow
\get_row_number_data
\add_row_number_data {#1}%
\column_number=0
\ignorespaces
}%
%
% \blank is used to generate a cell without a border or data. In this
% context, all it does is absorb merges.
%
\def\blank{\relax
\advance\column_number \by 1
\if\column_number>\last_column
\advance\column_number \by -1
\column{}%
\fi
\everycolumn
\get_column_number_data
\ifnum\merge_rows>1
\add_column_number_data {\merge_rows=0\relax}%
\fi
\merge_columns=0
}%
%
% \cell is used to generate a normal, ruled cell. In this context, it
% merely measures the cell and makes the appropriate notes.
%
\def\cell#1{\relax
\advance\column_number \by 1
\if\column_number>\last_column
\advance\column_number \by -1
\column{}%
\fi
\everycolumn
\get_column_number_data
%
% Typeset the information into temp box.
%
\setbox\temp_box=\vbox \bgroup
\begingroup
\ifnum\merge_rows>0
\advance\row_number \by -\merge_rows
\get_row_number_data
\fi
\vskip \topborderskip
\endgroup
\hbox \bgroup
\begingroup
\ifnum\merge_columns>0
\advance\column_number \by -\merge_columns
\get_column_number_data
\fi
\hskip \leftborderskip
\endgroup
#1\vphantom{)}%
\hskip \rightborderskip
\egroup
\vskip \bottomborderskip
\egroup
%
% If it is a row merger, record it for later processing.
%
\ifnum \merge_rows>0
\edef\temp{\process
{\the\merge_rows}{\the\ht\temp_box}{\the\row_number}%
\the\row_span_info
}%
\x_after\row_span_info\x_after=\x_after{\temp}%
% \message{\string\row_span_info=\the\row_span_info}% debug
\add_column_number_data {\merge_rows=0\relax}%
\else
%
% Not a merger, record the height if max.
%
\ifdim\ht\temp_box>\rowheight
\let\info=\relax
\edef\temp{\the\row_number>\info
{\rowheight=\the\ht\temp_box\relax}}%
\let\info=\row_info
\x_after \add_data \temp
% \message{\string\row_info=\the\row_info}% debug
\rowheight=\ht\temp_box
\fi
\fi
%
% Same as above for column merger and width.
%
\ifnum \merge_columns>0
\edef\temp{\process
{\the\merge_columns}{\the\wd\temp_box}{\the\column_number}%
\the\column_span_info
}%
\x_after\column_span_info\x_after=\x_after{\temp}%
% \message{\string\column_span_info=\the\column_span_info}% debug
\merge_columns=0
\else
\ifdim\wd\temp_box>\columnwidth
\let\info=\relax
\edef\temp{\the\column_number>\info
{\columnwidth=\the\wd\temp_box\relax}}%
\let\info=\column_info
\x_after \add_data \temp
% \message{\string\column_info=\the\column_info}% debug
\fi
\fi
}%
%
% \mergeright specifies that the corresponding position is to be
% merged with the cell to its right.
%
\def\mergeright{\relax
\advance\column_number \by 1
\if\column_number>\last_column
\advance\column_number \by -1
\column{}%
\fi
\everycolumn
\get_column_number_data
\advance\merge_columns \by 1
%
% Cancel a row merge, if present.
%
\ifnum\merge_rows>1
\add_column_number_data {\merge_rows=0\relax}%
\fi
}%
%
% Same as \mergeright, except down.
%
\def\mergedown{\relax
\advance\column_number \by 1
\if\column_number>\last_column
\advance\column_number \by -1
\column{}%
\fi
\everycolumn
\get_column_number_data
\add_column_number_data {\advance\merge_rows \by 1\relax}%
\merge_columns=0
}%
%
% The horizontal and vertical stretch macros allow the user to specify
% an explicit stretch that will subsequently be processed like a span.
% User-specified stretches are processed after span caused ones. The
% parameters are the starting column/row, the ending column/row, and
% the size of the stretch.
%
\def\horizontalstretch#1#2#3{\relax
\temp_count=#2\relax
\advance\temp_count \by -#1\relax
\edef\temp{\the\column_span_info\process{\the\temp_count}{#3}{#2}}%
\x_after \column_span_info\x_after=\x_after{\temp}%
% \message{\string\column_span_info=\the\column_span_info}% debug
\ignorespaces
}%
%
\def\verticalstretch#1#2#3{\relax
\temp_count=#2\relax
\advance\temp_count \by -#1\relax
\edef\temp{\the\row_span_info\process{\the\temp_count}{#3}{#2}}%
\x_after \row_span_info\x_after=\x_after{\temp}%
% \message{\string\row_span_info=\the\row_span_info}% debug
\ignorespaces
}%
%
\def\noalign#1{\ignorespaces}% don't do anything for the first pass
%
\catcode`_=8 % Return to normal.
%
\endinput