237 lines
7.7 KiB
PostScript
Executable File
237 lines
7.7 KiB
PostScript
Executable File
/box-frame-create { % =>
|
|
box-container-create
|
|
dup box-frame-setup-methods
|
|
dup /box-frame add-type
|
|
} def
|
|
|
|
/box-frame-reflow { % => Context Parent This
|
|
% If frame contains no boxes (for example, the src link is broken)
|
|
% we just return - no further processing will be done
|
|
dup get-content length 0 gt {
|
|
|
|
% First box contained in a frame should always fill all its height
|
|
dup get-height
|
|
1 index get-content 0 get put-full-height
|
|
|
|
0 3 index context-push-collapsed-margin
|
|
dup get-uid 3 index context-push-container-uid
|
|
|
|
2 index 1 index
|
|
box-container-reflow-content
|
|
|
|
2 index context-pop-collapsed-margin
|
|
2 index context-pop-container-uid
|
|
} if
|
|
|
|
pop pop pop
|
|
} def
|
|
|
|
/box-frame-setup-methods { % => Box
|
|
dup /Methods get
|
|
dup /reflow {box-frame-reflow} put
|
|
pop pop
|
|
} def
|
|
|
|
/box-frameset-create {
|
|
box-container-create
|
|
dup box-frameset-setup-methods
|
|
dup /rows 1 put
|
|
dup /cols 1 put
|
|
dup /box-frameset add-type
|
|
} def
|
|
|
|
/box-frameset-guess-lengths { % => Height Lengths Frameset
|
|
% Initialization
|
|
[] % => Height Lengths Frameset Values
|
|
2 index { % => Height Lengths Frameset Values Length
|
|
pop 0 exch array-append % => Height Lengths Frameset Values'
|
|
} forall
|
|
|
|
% First pass: fixed-width columns
|
|
0 1 2 index length 1 sub { % => Height Lengths Frameset Values I
|
|
3 index 1 index get
|
|
dup /type get % => Height Lengths Frameset Values I Length Type
|
|
{
|
|
dup /percentage eq {
|
|
pop
|
|
/value get % => Height Lengths Frameset Values I Value
|
|
5 index mul
|
|
100 div % => Height Lengths Frameset Values I Value
|
|
|
|
2 index 2 index 2 index put
|
|
pop
|
|
|
|
exit
|
|
} if
|
|
|
|
dup /constant eq {
|
|
pop
|
|
|
|
/value get px % => Height Lengths Frameset Values I Value
|
|
2 index 2 index 2 index put
|
|
|
|
pop
|
|
exit
|
|
} if
|
|
|
|
pop pop exit
|
|
} loop % => Height Lengths Frameset Values I
|
|
pop % => Height Lengths Frameset Values
|
|
} for % => Height Lengths Frameset Values
|
|
|
|
% Second pass: relative-width columns
|
|
|
|
3 index 1 index sum sub % => Height Lengths Frameset Values Rest
|
|
|
|
0 % => Height Lengths Frameset Values Rest Parts
|
|
4 index
|
|
{ % => Height Lengths Frameset Values Rest Parts Value
|
|
dup /type get /fraction eq { % => Height Lengths Frameset Values Rest Parts Value
|
|
/value get add % => Height Lengths Frameset Values Rest Parts
|
|
} { % => Height Lengths Frameset Values Rest Parts Value
|
|
pop
|
|
} ifelse % => Height Lengths Frameset Values Rest Parts
|
|
} forall
|
|
|
|
dup 0 gt {
|
|
div % => Height Lengths Frameset Values PartSize
|
|
0 1 5 index length 1 sub { % => Height Lengths Frameset Values PartSize I
|
|
4 index 1 index get
|
|
dup /type get /fraction eq { % => Height Lengths Frameset Values PartSize I Length
|
|
/value get % => Height Lengths Frameset Values PartSize I Parts
|
|
2 index mul % => Height Lengths Frameset Values PartSize I Len
|
|
3 index exch
|
|
2 index exch put % => Height Lengths Frameset Values PartSize I
|
|
} {
|
|
pop
|
|
} ifelse % => Height Lengths Frameset Values PartSize I
|
|
pop
|
|
} for % => Height Lengths Frameset Values PartSize
|
|
pop
|
|
} { pop pop } ifelse % => Height Lengths Frameset Values
|
|
|
|
% Fix over/underconstrained framesets
|
|
dup sum % => Height Lengths Frameset Values Width
|
|
dup 0 gt {
|
|
4 index exch div % => Height Lengths Frameset Values Koeff
|
|
0 1 3 index length 1 sub { % => Height Lengths Frameset Values Koeff I
|
|
2 index 1 index get
|
|
2 index mul % => Height Lengths Frameset Values Koeff I Value'
|
|
3 index exch
|
|
2 index exch put % => Height Lengths Frameset Values Koeff I
|
|
pop
|
|
} for % => Height Lengths Frameset Values Koeff
|
|
pop
|
|
} {
|
|
pop
|
|
} ifelse
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/box-frameset-put-cols { % => Value Box
|
|
exch /cols exch put
|
|
} def
|
|
|
|
/box-frameset-put-rows {
|
|
exch /rows exch put
|
|
} def
|
|
|
|
/box-frameset-reflow { % => Context Parent Box
|
|
2 index context-get-viewport % => Context Parent Box Viewport
|
|
|
|
% Frameset always fill all available space in viewport
|
|
|
|
dup flow-viewport-get-left
|
|
2 index get-extra-left add
|
|
2 index put-left
|
|
|
|
dup flow-viewport-get-top
|
|
2 index get-extra-top sub
|
|
2 index put-top
|
|
|
|
dup flow-viewport-get-width
|
|
2 index put-full-width
|
|
|
|
dup flow-viewport-get-height
|
|
2 index put-full-height
|
|
|
|
pop % => Context Parent Box
|
|
|
|
% Parse layout-colntrol values
|
|
dup get-height
|
|
1 index /rows get
|
|
2 index
|
|
box-frameset-guess-lengths % => Context Parent Box RowSizes
|
|
|
|
1 index /get-width call-method
|
|
2 index /cols get
|
|
3 index
|
|
box-frameset-guess-lengths % => Context Parent Box RowSizes ColSizes
|
|
|
|
% Now reflow all frames in frameset
|
|
0 0 % => Context Parent Box RowSizes ColSizes CurCol CurRow
|
|
4 index get-content { % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
% Had we run out of cols/rows ?
|
|
1 index 5 index length ge {
|
|
pop
|
|
exit
|
|
} if % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
% Guess frame size and position
|
|
5 index get-left % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Left
|
|
4 index 0 % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Left ColsSizes 0
|
|
5 index getinterval sum % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Left ColOfs
|
|
add
|
|
1 index get-extra-left add % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Left
|
|
1 index put-left % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
5 index get-top % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Top
|
|
5 index 0
|
|
4 index getinterval sum % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Top RowOfs
|
|
sub
|
|
1 index get-extra-top sub
|
|
1 index put-top % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
3 index 3 index get
|
|
1 index put-full-width % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
dup /get-width call-method wc-create-constant
|
|
1 index put-width-constraint
|
|
|
|
4 index 2 index get
|
|
1 index put-full-height % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
% Reflow frame contents
|
|
dup flow-viewport-create % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame Viewport'
|
|
8 index context-push-viewport % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
7 index
|
|
6 index
|
|
2 index /reflow call-method % => Context Parent Box RowSizes ColSizes CurCol CurRow Frame
|
|
|
|
7 index context-pop-viewport
|
|
|
|
% Move to the nex frame position
|
|
3 2 roll 1 add 3 1 roll % => Context Parent Box RowSizes ColSizes CurCol' CurRow Frame
|
|
2 index 4 index length ge {
|
|
3 2 roll pop 0 3 1 roll
|
|
exch 1 add exch
|
|
} if
|
|
|
|
pop
|
|
} forall % => Context Parent Box RowSizes ColSizes CurCol CurRow
|
|
|
|
pop pop pop pop
|
|
pop pop pop
|
|
} def
|
|
|
|
/box-frameset-setup-methods {
|
|
dup /Methods get
|
|
dup /reflow {box-frameset-reflow} put
|
|
pop pop
|
|
} def
|
|
|