165 lines
5.2 KiB
PostScript
165 lines
5.2 KiB
PostScript
/box-table-row-create { % =>
|
|
box-container-create % => Box
|
|
dup box-table-row-setup-methods % => Box
|
|
dup /box-table-row add-type % => Box
|
|
} def
|
|
|
|
/box-table-row-get-baseline { % => Row
|
|
{ box-table-cell-get-baseline max }
|
|
0
|
|
2 index get-content
|
|
reduce % => Row RowBaseline
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-get-colspans { % => RowIndex Row
|
|
[] 0 % => RowIndex Row Spans I
|
|
2 index get-content { % => RowIndex Row Spans I Cell
|
|
dup box-table-cell-get-colspan
|
|
1 gt {
|
|
4 index % => RowIndex Row Spans I Cell Row
|
|
2 index % => RowIndex Row Spans I Cell Row Col
|
|
2 index
|
|
box-table-cell-get-colspan % => RowIndex Row Spans I Cell Row Col Size
|
|
cellspan-create % => RowIndex Row Spans I Cell Span
|
|
|
|
exch pop % => RowIndex Row Spans I Span
|
|
3 2 roll
|
|
array-prepend
|
|
exch % => RowIndex Row Spans' I
|
|
} { pop } ifelse
|
|
|
|
1 add
|
|
} forall % => RowIndex Row Spans I
|
|
pop % => RowIndex Row Spans
|
|
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-get-rowspans { % => RowIndex Row
|
|
[] 0 % => RowIndex Row Spans I
|
|
2 index get-content { % => RowIndex Row Spans I Cell
|
|
dup box-table-cell-get-rowspan
|
|
1 gt {
|
|
4 index % => RowIndex Row Spans I Cell Row
|
|
2 index % => RowIndex Row Spans I Cell Row Col
|
|
2 index
|
|
box-table-cell-get-rowspan % => RowIndex Row Spans I Cell Row Col Size
|
|
cellspan-create % => RowIndex Row Spans I Cell Span
|
|
|
|
exch pop % => RowIndex Row Spans I Span
|
|
3 2 roll
|
|
array-prepend
|
|
exch % => RowIndex Row Spans' I
|
|
} { pop } ifelse
|
|
|
|
1 add
|
|
} forall % => RowIndex Row Spans I
|
|
pop % => RowIndex Row Spans
|
|
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-get-table-columns-max-widths {
|
|
2 copy /get-max-width box-table-row-get-table-columns-xxx-widths
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-get-table-columns-min-widths {
|
|
2 copy /get-min-width box-table-row-get-table-columns-xxx-widths
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-get-table-columns-xxx-widths { % => Context Row Method
|
|
[] % => Context Row Method Widths
|
|
2 index get-content { % => Context Row Method Widths Cell
|
|
dup box-table-cell-get-colspan
|
|
1 gt { % => Context Row Method Widths Cell
|
|
pop 0 % => Context Row Method Widths 0
|
|
} { % => Context Row Method Widths Cell
|
|
4 index exch % => Context Row Method Widths Context Cell
|
|
3 index call-method % => Context Row Method Widths W
|
|
} ifelse
|
|
|
|
exch array-prepend % => Context Row Method Widths'
|
|
} forall % => Context Row Method Widths'
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-height { % => Row
|
|
0
|
|
1 index get-content { % => Row Height Cell
|
|
dup box-table-cell-get-rowspan
|
|
1 le {
|
|
get-full-height
|
|
max % => Row Height
|
|
} {
|
|
pop
|
|
} ifelse
|
|
} forall % => Row Height
|
|
exch pop
|
|
} def
|
|
|
|
/box-table-row-resize { % => Top Height Row
|
|
% Do cell vertical-align
|
|
% Calculate row baseline
|
|
dup box-table-row-get-baseline % => Top Height Row Baseline
|
|
|
|
% Process cells contained in current row
|
|
1 index get-content { % => Top Height Row Baseline Cell
|
|
% Offset cell if needed
|
|
4 index
|
|
1 index get-top-margin sub
|
|
0
|
|
2 index /offset call-method % => Top Height Row Baseline Cell
|
|
|
|
% Vertical-align cell (do not apply to rowspans)
|
|
|
|
dup box-table-cell-get-rowspan 1 eq {
|
|
1 index
|
|
4 index
|
|
2 index % => Top Height Row Baseline Cell Baseline Height Cell
|
|
box-table-cell-apply-vertical-align
|
|
% => Top Height Row Baseline Cell
|
|
|
|
% Expand cell to full row height
|
|
3 index
|
|
1 index
|
|
put-full-height % => Top Height Row Baseline Cell
|
|
|
|
} if % => Top Height Row Baseline Cell
|
|
|
|
pop % => Top Height Row Baseline
|
|
} forall % => Top Height Row Baseline
|
|
|
|
pop pop pop pop
|
|
} def
|
|
|
|
/box-table-row-setup-methods { % => Box
|
|
dup /Methods get
|
|
dup /show {box-table-row-show} put
|
|
pop pop
|
|
} def
|
|
|
|
% Note that we SHOULD owerride the show method inherited from GenericContainerBox,
|
|
% as it MAY draw row background in case it was set via CSS rules. As row box
|
|
% is a "fake" box and will never have reasonable size and/or position in the layout,
|
|
% we should prevent this
|
|
/box-table-row-show { % => Viewport Box
|
|
dup get-content { % => Viewport Box Element
|
|
dup /visibility get-css-value
|
|
/visible eq {
|
|
2 index 1 index
|
|
/show call-method
|
|
} if % => Viewport Box Element
|
|
pop
|
|
} forall
|
|
pop pop
|
|
} def |