Spaces:
Sleeping
Sleeping
| /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 | |