summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/cellular/cell3.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/contrib/cellular/cell3.tex')
-rw-r--r--macros/plain/contrib/cellular/cell3.tex132
1 files changed, 132 insertions, 0 deletions
diff --git a/macros/plain/contrib/cellular/cell3.tex b/macros/plain/contrib/cellular/cell3.tex
new file mode 100644
index 0000000000..1daa3b1746
--- /dev/null
+++ b/macros/plain/contrib/cellular/cell3.tex
@@ -0,0 +1,132 @@
+% File: TeX Inputs Cell3.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: October 11, 1988
+%
+% Process the column and row span info.
+%
+\declaredimen\expansion
+%
+\edef\everycolumn{\everycolumn\expansion=\zeropt\relax}%
+\edef\everyrow{\everyrow\expansion=\zeropt\relax}%
+%
+\catcode`_=11 % used to protect local control sequence names.
+%
+%\message{\string\row_span_info=\the\row_span_info}% debug
+%\message{\string\column_span_info=\the\column_span_info}% debug
+%
+\def\process#1#2#3{\relax
+ \last_cell=#3\relax
+ \first_cell=\last_cell
+ \advance \first_cell \by -#1\relax
+ \span_size=#2\relax
+%
+% Compute the gap between the size of the span and the total size of
+% the cells spanned.
+%
+ \gap=\span_size
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \advance \gap \by -\cell_size
+ \advance \gap \by -\expansion
+ \endfor \cell_number
+% \message{\string\first_cell=\the\first_cell}% debug
+% \message{\string\last_cell=\the\last_cell}% debug
+% \message{\string\span_size=\the\span_size}% debug
+% \message{\string\gap=\the\gap}% debug
+%
+% If the gap is 0pt or less, nothing needs to be done, else search for
+% the minimum expansion that can be applied to every cell with a
+% current expansion less than the expansion found such that the span
+% is properly accomadated.
+%
+ \ifdim \gap>\zeropt
+ \expandable_cells=#1\relax
+ \advance \expandable_cells \by 1
+ \trial_expansion=\zeropt
+ \whilenot\search \ifdim\gap=\zeropt do
+% \message{\string\gap=\the\gap}% debug
+ \ifnum \expandable_cells=0
+ \advance \trial_expansion \by \expansion
+ \else
+ \multiply \trial_expansion \by \expandable_cells
+ \advance \trial_expansion \by \gap
+ \divide \trial_expansion \by \expandable_cells
+ \expandable_cells=0
+ \fi
+ \gap=\span_size
+% \message{\string\trial_expansion=\the\trial_expansion}% debug
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \advance \gap \by -\cell_size
+ \ifdim \expansion>\trial_expansion
+ \advance \gap \by -\expansion
+ \else
+ \advance \gap \by -\trial_expansion
+ \advance \expandable_cells \by 1
+ \fi
+ \endfor \cell_number
+ \temp_dimen=1sp
+ \multiply \temp_dimen \by \expandable_cells
+ \ifdim \gap>-\temp_dimen
+ \ifdim \gap<\temp_dimen
+ \gap=\zeropt
+ \fi
+ \fi
+ \endwhilenot \search
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \ifdim \expansion<\trial_expansion
+ \let\info=\relax
+ \edef\temp{\the\cell_number>\info
+ {\expansion=\the\trial_expansion\relax}}%
+ \let\info=\cell_info
+ \x_after \add_data \temp
+ \ifnum\tracingexpansions>0
+ \message{Expanded \the\cell_number}%
+ \message{by \the\trial_expansion}%
+ \message{from \the\cell_size}%
+ \advance \cell_size \by \trial_expansion
+ \message{to \the\cell_size.}%
+ \fi
+ \fi
+ \endfor \cell_number
+ \fi
+ }%
+%
+\declarecount\first_cell
+\declarecount\last_cell
+\declaredimen\span_size
+\let\expandable_cells=\temp_count
+\declaredimen\trial_expansion
+\let\gap=\scratch_dimen
+%
+\let\cell_number=\row_number
+\let\everycell=\everyrow
+\let\get_cell_number_data=\get_row_number_data
+\let\cell_info=\row_info
+\let\cell_size=\rowheight
+\ifnum\tracingexpansions>0
+ \message{Checking row expansions.}%
+\fi
+\the\row_span_info
+%
+\let\cell_number=\column_number
+\let\everycell=\everycolumn
+\let\get_cell_number_data=\get_column_number_data
+\let\cell_info=\column_info
+\let\cell_size=\columnwidth
+\ifnum\tracingexpansions>0
+ \message{Checking column expansions.}%
+\fi
+\the\column_span_info
+%
+\let\process=\relax
+%
+\catcode`_=8 % back to normal
+%
+\endinput