231 lines
7.2 KiB
PostScript
231 lines
7.2 KiB
PostScript
% $Header: /cvsroot/html2ps/postscript/height.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $
|
|
|
|
/hc-apply { % => Box RawHeight HC
|
|
dup /constant get /null ne {
|
|
1 index % => Box RawHeight HC RawHeight
|
|
3 index % => Box RawHeight HC RawHeight Box
|
|
2 index /constant get % => Box RawHeight HC RawHeight Box Constant
|
|
hc-fix-value % => Box RawHeight HC H
|
|
} {
|
|
2 index % => Box RawHeight HC Box
|
|
2 index % => Box RawHeight HC Box RawHeight
|
|
2 index % => Box RawHeight HC Box RawHeight HC
|
|
hc-apply-max % => Box RawHeight HC H0
|
|
|
|
3 index exch % => Box RawHeight HC Box H0
|
|
2 index
|
|
hc-apply-min % => Box RawHeight HC H1
|
|
} ifelse % => Box RawHeight HC H
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/hc-apply-max { % => Box Value HC
|
|
dup /max get /null eq {
|
|
1 index
|
|
} {
|
|
1 index
|
|
3 index % => Box Value HC Value Box
|
|
2 index /max get % => Box Value HC Value Box HC
|
|
hc-fix-value % => Box Value HC H
|
|
|
|
2 index min % => Box Value HC H
|
|
} ifelse % => Box Value HC H
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/hc-apply-min { % => Box Value HC
|
|
dup /min get /null eq {
|
|
1 index
|
|
} {
|
|
1 index
|
|
3 index % => Box Value HC Value Box
|
|
2 index /min get % => Box Value HC Value Box HC
|
|
hc-fix-value % => Box Value HC H
|
|
|
|
2 index max % => Box Value HC H
|
|
} ifelse % => Box Value HC H
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/hc-create { % => Max Min Constant
|
|
<< >>
|
|
dup /max 5 index put
|
|
dup /min 4 index put
|
|
dup /constant 3 index put
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/hc-fix-value { % => Default Box Value
|
|
% A percentage or immediate value?
|
|
dup /percentage get { % => Default Box Value
|
|
|
|
% CSS 2.1: The percentage is calculated with respect to the height of the generated box's containing block.
|
|
% If the height of the containing block is not specified explicitly (i.e., it depends on content height),
|
|
% and this element is not absolutely positioned, the value is interpreted like 'auto'.
|
|
|
|
% Check if parent exists
|
|
|
|
1 index get-parent dup
|
|
/null ne { % => Default Box Value Parent
|
|
dup get-height-constraint % => Default Box Value Parent ParentHC
|
|
3 index get-parent /box-table-cell is-a not
|
|
1 index /constant get /null eq and
|
|
1 index /min get /null eq and
|
|
1 index /max get /null eq and {
|
|
% if parent does not constrained height, return null - no height constraint can be applied
|
|
pop pop 2 index
|
|
} { % => Default Box Value Parent ParentHC
|
|
3 index get-parent /box-table-cell is-a {
|
|
3 index get-parent
|
|
/row get % => Default Box Value Parent ParentHC Row
|
|
|
|
% Note that unlike pure PHP DOM tree, we have box-table-row as a direct parent of the cell here
|
|
4 index get-parent
|
|
get-parent
|
|
get-parent % => Default Box Value Parent ParentHC Row Table
|
|
|
|
box-table-get-rhc % => Default Box Value Parent ParentHC RHC
|
|
|
|
dup hc-is-null {
|
|
pop 4 index
|
|
} {
|
|
4 index exch % => Default Box Value Parent ParentHC Box RHC
|
|
1 index get-parent
|
|
get-height exch % => Default Box Value Parent ParentHC Box BaseHeight RHC
|
|
hc-apply % => Default Box Value Parent ParentHC H
|
|
} ifelse
|
|
|
|
exch pop
|
|
exch pop % => Default Box Value H
|
|
} {
|
|
pop
|
|
get-height % => Default Box Value ParentH
|
|
1 index /value get
|
|
mul 100 div % => Default Box Value H
|
|
} ifelse
|
|
} ifelse
|
|
} { % => Default Box Value
|
|
/null
|
|
} ifelse % => Default Box Value H
|
|
} { % => Default Box Value
|
|
dup /value get
|
|
} ifelse % => Default Box Value H
|
|
|
|
exch pop
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/hc-is-constant { % => HC
|
|
/constant get /null ne
|
|
} def
|
|
|
|
/hc-is-null { % => HC
|
|
dup /min get /null eq
|
|
1 index /max get /null eq and
|
|
1 index /constant get /null eq and
|
|
exch pop
|
|
} def
|
|
|
|
/hc-is-percentage { % => HC
|
|
dup /min get /null ne {
|
|
dup /min get /percentage get not
|
|
} { true } ifelse
|
|
|
|
1 index /max get /null ne {
|
|
1 index /max get /percentage get not
|
|
} { true } ifelse and
|
|
|
|
1 index /constant get /null ne {
|
|
1 index /constant get /percentage get not
|
|
} { true } ifelse and
|
|
|
|
not
|
|
exch pop
|
|
} def
|
|
|
|
%%%%%%%%%%%%%
|
|
|
|
/is-height-constrained { % => Box
|
|
dup get-box-dict % => Box Dict
|
|
/Height get
|
|
dup /Constrained get % => Box HDict /Constrained
|
|
1 index /Min get 0 gt % => Box HDict /Constrained /ConstrainedMin
|
|
or
|
|
exch pop
|
|
exch pop
|
|
} def
|
|
|
|
/get-min-height {
|
|
dup get-box-dict % => Box Dict
|
|
/Height get
|
|
dup /MinPercentage get { % => Box HeightDict
|
|
% Percentage height can be applied only if parent's height is explicitly height to the constant length
|
|
1 index get-box-dict
|
|
/Parent get % => Box HeightDict Parent
|
|
get-box-dict
|
|
/Height get % => Box HeightDict ParentHeightDict
|
|
dup /Constrained get { % => Box HeightDict ParentHeightDict
|
|
/ConstraintPercentage
|
|
get not { % => Box HeightDict
|
|
/Min get
|
|
1 index exch
|
|
get-parent-height-fraction
|
|
} { % => Box HeightDict
|
|
pop 0
|
|
} ifelse
|
|
} { % => Box HeightDict ParentHeightDict
|
|
pop pop 0
|
|
} ifelse
|
|
} {
|
|
/Min get
|
|
} ifelse
|
|
|
|
exch pop
|
|
} def
|
|
|
|
/find-containing-block-height { % => Box
|
|
% Check if the parent box have constrained height
|
|
dup get-box-dict % => Box Dict
|
|
dup /Parent known {
|
|
/Parent get % => Box Parent
|
|
get-box-dict % => Box ParentDict
|
|
/Height get % => Box ParentHeightDict
|
|
dup /Constrained get % => Box ParentHeightDict ParentConstrained
|
|
exch % => Box ParentConstrained ParentHeightDict
|
|
/ConstraintPercentage get
|
|
not % => Box ParentConstrained !ParentPercentageConstrained
|
|
and
|
|
{
|
|
get-box-dict /Parent get
|
|
get-height
|
|
} {
|
|
% Box parent is not height-constrained, proceed to its parent
|
|
get-box-dict /Parent get
|
|
find-containing-block-height
|
|
} ifelse
|
|
} {
|
|
pop pop 0
|
|
} ifelse
|
|
} def
|
|
|
|
/calc-auto-height-margins { % => Box
|
|
dup get-real-height % => Box RH
|
|
1 index get-min-height % => Box RH MH
|
|
max % => Box H1
|
|
1 index get-max-height
|
|
min % => Box H
|
|
exch pop
|
|
} def |