% $Header: /cvsroot/html2ps/postscript/footer.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $
% As BODY generated box have zero calculated width at the very moment,
% and we need some box to use as a parameter to _calc_percentage_margins,
% we'll create a fake box having with equal to the viewport width.
% => BODY
dup /pre-reflow-images
call-method % => BODY
box-block-create % => BODY MediaBox
pagewidth
lmargin sub
rmargin sub % => BODY MediaBox PW
1 index put-width % => BODY MediaBox
% Calculate actual margin values
1 index box-generic-calc-percentage-margins
% => BODY
pagewidth
lmargin sub
rmargin sub
1 index get-hor-extra sub
1 index put-width % => BODY
pageheight
tmargin sub
bmargin sub
1 index get-vert-extra sub
1 index put-height
pageheight tmargin sub
1 index get-extra-top sub
1 index put-top
lmargin
1 index get-extra-left add
1 index put-left
% create the initial context
% => Box
context-create % => Box Context
1 index flow-viewport-create % => Box Context Viewport
1 index context-push-viewport % => Box Context
exch 1 index % => Context Box Context
/null % => Context Box Context FakeParent
2 index /reflow call-method % => Context Box
dup /reflow-inline call-method
% flow absolute-positioned boxes
1 index
context-get-absolute-positioned {% => Context Box AbsoluteBox
2 index context-push
2 index exch
/reflow-absolute call-method
1 index context-pop
} forall
% flow fixed-positioned boxes
1 index
context-get-fixed-positioned {% => Context Box AbsoluteBox
2 index context-push
2 index exch
box-block-reflow-fixed
1 index context-pop
} forall
% Make the top-level box competely fill the last page
/pages 1 index get-full-height real-page-height div ceiling 1 max def
% Note we cannot have less than 1 page in our doc; max() call
% is required as we, in general, CAN have the content height strictly equal to 0.
% In this case wi still render the very first page
pages real-page-height mul
1 index get-top
pageheight tmargin sub
sub
add % => Context Box H
dup 2 index put-height % => Context Box H
1 index get-content 0 get put-height
dup viewport-create % => Context Box Viewport
% generate a list of anchors
<< >> % => Context Box Viewport List
dup
2 index % => Context Box Viewport List List Viewport
4 index % => Context Box Viewport List List Viewport Box
/reflow-anchors
call-method % => Context Box Viewport Anchors
1 index viewport-put-anchors % => Context Box Viewport
exch % => Context Viewport Box
1 index /page-offset bmargin put
1 index /height real-page-height put
1 1 pages { % => Context Viewport Box I
0 0 moveto
2 index viewport-init-page
gsave
2 index viewport-setup-clip
2 index % => Context Viewport Box I Viewport
2 index /show call-method % => Context Viewport Box I
% Absolute positioned boxes should be shown after all other boxes, because
% they're placed higher in the stack-order
3 index
context-get-absolute-positioned {
% => Context Viewport Box I AbsoluteBox
dup /visibility get-css-value /visible eq {
3 index % => Context Viewport Box I AbsoluteBox Viewport
1 index % => Context Viewport Box I AbsoluteBox ViewportAbsoluteBox
/show call-method % => Context Viewport Box I AbsoluteBox
} if
pop
} forall % => Context Viewport Box I
grestore
3 index
context-get-fixed-positioned {
% => Context Viewport Box I AbsoluteBox
dup /visibility get-css-value /visible eq {
3 index % => Context Viewport Box I AbsoluteBox Viewport
1 index % => Context Viewport Box I AbsoluteBox ViewportAbsoluteBox
box-block-show-fixed
} if
pop
} forall % => Context Viewport Box I
setting-draw-page-border {
2 index viewport-draw-page-border
} if
% Add page if currently rendered page is not last
2 index viewport-next-page
showpage
pop
initpage
} for