Files
luos/thirdparty/html2ps_pdf/postscript/box.generic.inline.ps
Paula Quispe 9eb7d6cac2 HOR-2689
2017-08-03 17:00:30 -04:00

87 lines
3.3 KiB
PostScript

/box-generic-inline-create { % =>
box-container-create % => Box
dup box-generic-inline-setup-methods
dup /box-generic-inline add-type
} def % => Box
/box-generic-inline-setup-methods {% => Box
dup box-container-setup-methods
dup get-box-dict /Methods get % => Box Methods
dup /maybe-line-break {box-generic-inline-maybe-line-break} put
pop pop
} def
% Checks if current inline box should cause a line break inside the parent box
%
% @param $parent reference to a parent box
% @param $content flow context
% @return true if line break occurred; false otherwise
%
/box-generic-inline-maybe-line-break {
% => Context Parent This
1 index /line-break-allowed call-method {
% Calculate the x-coordinate of this box right edge
1 index get-current-x
1 index get-full-width
add % => Context Parent This RightX
false % => Context Parent This RightX NeedBreak
% Check for right-floating boxes
% If upper-right corner of this inline box is inside of some float, wrap the line
3 index get-current-y
2 index % => Context Parent This RightX NeedBreak CY X
6 index
context-point-in-floats
/null ne % => Context Parent This RightX NeedBreak NeedBreak'
or % => Context Parent This RightX NeedBreak
% No floats; check if we had run out the right edge of container
3 index get-right
rounding-epsilon add % => Context Parent This RightX NeedBreak $parent->get_right()+EPSILON
2 index le { % => Context Parent This RightX NeedBreak
% Now check if parent line box contains any other boxes;
% if not, we should draw this box unless we have a floating box to the left
3 index
box-container-get-first % => Context Parent This RightX NeedBreak First
4 index
box-generic-calc-text-indent % => Context Parent This RightX NeedBreak First IndentOffset
5 index get-current-x % => Context Parent This RightX NeedBreak First IndentOffset CX
6 index get-left % => Context Parent This RightX NeedBreak First IndentOffset CX L
2 index add
rounding-epsilon add % => Context Parent This RightX NeedBreak First IndentOffset CX X
gt % => Context Parent This RightX NeedBreak First IndentOffset CX>X
exch pop
exch pop % => Context Parent This RightX NeedBreak CX>X
or % => Context Parent This RightX NeedBreak'
} if % => Context Parent This RightX NeedBreak
% As close-line will not change the current-Y parent coordinate if no
% items were in the line box, we need to offset this explicitly in this case
3 index get-line length 0 eq
1 index and { % => Context Parent This RightX NeedBreak
3 index get-current-y
3 index get-height sub
5 index put-current-y
} if
dup {
4 index
4 index box-container-close-line
} if % => Context Pareht This RightX NeedBreak
exch pop
exch pop
exch pop
exch pop
} {
pop pop pop false
} ifelse
} def