Files
luos/gulliver/thirdparty/html2ps_pdf/postscript/text-align.ps

96 lines
3.7 KiB
PostScript
Executable File

% $Header: /cvsroot/html2ps/postscript/text-align.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $
% Constants
/max-justify-fraction {0.33} def
/line-length-delta { % Context Box
dup line-length % Context Box LineLength
% calculate length line to be expanded
2 index 2 index
box-container-get-available-width
exch sub % Context Box Delta
% Quick workaround - line delta should not be less than 0
0 max
exch pop
exch pop
} def
/text-align-left { % => LastLine Context Box
pop pop pop
} def
/text-align-center { % => LastLine Context Box
2 copy line-length-delta % => LastLine Context Box Delta
2 div % => LastLine Context Box Delta/2
1 index get-line % => LastLine Context Box Delta/2 Line
{ % => LastLine Context Box Delta/2 LineElement
0 exch
2 index exch % => LastLine Context Box Delta/2 0 Delta/2 LineElement
/offset call-method
} forall % => LastLine Context Box Delta/2
pop pop pop pop
} def
/text-align-right { % => LastLine Context Box
2 copy line-length-delta % => LastLine Context Box Delta
1 index get-line % => LastLine Context Box Delta Line
{ % => LastLine Context Box Delta LineElement
0 exch
2 index exch % => LastLine Context Box Delta/2 Delta/2 0 LineElement
/offset call-method
} forall % => LastLine Context Box Delta/2
pop pop pop pop
} def
/text-align-justify { % => LastLine Context Box
% last line is never justified
2 index not { % => LastLine Context Box
% If line box contains less that two items, no justification can be done, just return
dup get-line length 2 ge { % => LastLine Context Box
% Calculate extra space to be filled by this line
2 copy line-length-delta % => LastLine Context Box Delta
% note that if it is the very first line inside the container, 'text-indent' value
% should not be taken into account while calculating delta value
1 index
box-container-get-first
get-uid % => LastLine Context Box Delta FirstUID
2 index get-line
0 get get-uid % => LastLine Context Box Delta FirstUID FirstLineUID
eq { % => LastLine Context Box Delta
1 index box-generic-calc-text-indent
sub
} if % => LastLine Context Box Delta
% if line takes less that MAX_JUSTIFY_FRACTION of available space, no justtification should be done
1 index line-length
max-justify-fraction mul % => LastLine Context Box Delta LL*MJF
1 index ge { % => LastLine Context Box Delta
% Calculate offset for each box
dup
2 index get-line length
1 sub div % => LastLine Context Box Delta Offset
dup % => LastLine Context Box Delta Offset COffset
% Offset all boxes in current line box
3 index get-line { % => LastLine Context Box Delta Offset COffset Child
0 2 index 2 index
/offset call-method % => LastLine Context Box Delta Offset COffset Child
pop
1 index add % => LastLine Context Box Delta Offset COffset
} forall
pop pop % => LastLine Context Box Delta
} if
pop % => LastLine Context Box
} if
} if
pop pop pop
} def