154 lines
4.8 KiB
PostScript
154 lines
4.8 KiB
PostScript
% $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 |