117 lines
3.2 KiB
PostScript
117 lines
3.2 KiB
PostScript
% $Header: /cvsroot/html2ps/postscript/flow.inline.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $
|
|
|
|
% Check if given point is inside some alredy-layout floating box
|
|
/maybe-line-break-1 { % => Parent Child
|
|
% Check for right-floating boxes
|
|
% If upper-right corner of this inline box is inside of some float, wrap the line
|
|
context-floats % => Parent Child Floats
|
|
1 index get-full-width
|
|
3 index get-current-x add % => Parent Child Floats X
|
|
3 index get-current-y % => Parent Child Floats X Y
|
|
point-in-floats % => Parent Child Float/false
|
|
false ne % => Parent Chils true/false
|
|
exch pop
|
|
exch pop
|
|
} def % => true/false
|
|
|
|
/maybe-line-break-2 { % => Parent Child
|
|
dup get-full-width
|
|
2 index get-current-x add % => Parent Child X
|
|
|
|
2 index get-right-internal
|
|
rounding-epsilon add % => Parent Child X R
|
|
|
|
3 index get-current-x % => Parent Child X R CX
|
|
4 index get-left-internal % => Parent Child X R CX Left
|
|
|
|
gt 3 1 roll gt and % => Parent Child (X>R)&&(CX>Left)
|
|
|
|
exch pop
|
|
exch pop % => true/false
|
|
} def
|
|
|
|
/maybe-line-break-in { % => Parent Child
|
|
2 copy maybe-line-break-1 {
|
|
pop pop true
|
|
} {
|
|
2 copy maybe-line-break-2 {
|
|
pop pop true
|
|
} {
|
|
pop pop false
|
|
} ifelse
|
|
} ifelse
|
|
} def
|
|
|
|
/maybe-line-break { % => Parent Child
|
|
2 copy maybe-line-break-in dup { % => Parent Child Break
|
|
% break is needed
|
|
% check if parent line box containg any boxes
|
|
2 index get-line length 0 eq {
|
|
1 index get-height
|
|
3 index get-current-y
|
|
exch sub % => Parent Child Break CY'
|
|
3 index put-current-y
|
|
} if % => Parent Child Break
|
|
|
|
2 index close-line
|
|
} if % => Parent Child Break
|
|
|
|
exch pop
|
|
exch pop % => Break
|
|
} def
|
|
|
|
/line-break-allowed { % => Box
|
|
dup get-box-dict /Display get
|
|
dup /-text ne
|
|
exch pop
|
|
exch pop
|
|
} def % => true/false
|
|
|
|
/flow-inline { % => Parent Child
|
|
1 index line-break-allowed {
|
|
{
|
|
2 copy maybe-line-break not
|
|
{ exit } if
|
|
} loop
|
|
} if
|
|
|
|
% set default baseline
|
|
dup get-default-baseline
|
|
1 index put-baseline
|
|
|
|
% Determine the baseline position and height of the text-box using line-height CSS property
|
|
dup get-box-dict
|
|
/Display get
|
|
/inline-text eq {
|
|
apply-line-height
|
|
} if
|
|
|
|
dup get-vertical-align exec
|
|
|
|
dup 2 index append-line
|
|
|
|
% Determine coordinates of upper-left corner
|
|
1 index get-current-x
|
|
2 index get-current-y % => Parent Child X Y
|
|
2 index
|
|
move-to-box % => Parent Child
|
|
|
|
% ???
|
|
dup
|
|
0 1 index get-margin-top
|
|
offset-box
|
|
|
|
% Offset parent current X value
|
|
1 index get-current-x % => Parent Child PCX
|
|
1 index get-full-width % => Parent Child PCX CW
|
|
add % => Parent Child PCX+CW
|
|
2 index put-current-x % => Parent Child
|
|
|
|
% extend parent's height
|
|
dup get-full-height
|
|
exch pop
|
|
extend-height % => Parent
|
|
|
|
pop
|
|
} def
|