On Tue, 30 Aug 2005 08:27 am, Manuel Mall wrote:
> Finn,
>
> thanks a lot for looking at this.
>
> On Tue, 30 Aug 2005 03:19 am, Finn Bock wrote:
> > [Jeremias Maerki on ]
<snip/>
> > I'm hardly a specialist on the layout system, and that is where a
> > good sized part of Manuels patch is, but in the property system I
> > do not like the hack to LineHeightPropertyMaker and
> > FontSizePropertyMaker that test for a PercentLength since it will
> > not work for expressions. I assume that a FixedLength is returned
> > because somebody
> > (BlockLM.createLineManager?) tries to resolve line-height before a
> > context is available. The solution is to delay resolution of
> > line-height, by passing the Length into the LineLM.
>
> Agree, and I have a solution for that ready to go.
>
I think this deserves some further comment / discussion. One, IMO
important, reason I want to do the evaluation during the FO parsing
stage is that once we are in the LMs we lost the property inheritance
information. That is something like:
<fo:block font-size="120%">
<fo:block>Text</fo:block>
</fo:block>
looks to the LM like:
<fo:block font-size="120%">
<fo:block font-size="120%">Text</fo:block>
</fo:block>
but that is clearly incorrect as we should inherit the calculated value
not the specified value.
If we do the resolution at FO parsing time the LM see:
<!-- assuming we have a 12pt base font-->
<fo:block font-size="14.4pt">
<fo:block font-size="14.4pt">Text</fo:block>
</fo:block>
and all is fine.
The same applies to line-height. Luckily the vast majority of properties
which allow percentage specification don't inherit by default
(exceptions are: provisional-label-separation and
provisional-distance-between-starts). However, most properties allow
the "inherit" keyword. This will currently give wrong results, e.g.:
<fo:block margin="10%" padding="5pt">
<fo:block margin="inherit">Text</fo:block>
</fo:block>
would be seen by the LM as:
<fo:block margin="10%" padding="5pt">
<fo:block margin="10%">Text</fo:block>
</fo:block>
resulting in the wrong margin being applied to the inner block.
This is a pretty hard problem to solve I think given that we have lost
the information if a value is specified or inherited at the LM stage.
However, it may(?) not occur very often in practice so I am tempted to
ignore it for the time being.
Manuel
PS: I can imagine Victor smiling now :-) : "I told you so that not
leaving all property resolution to the LM stage is going to cause
trouble".
<snip/>
> > regards,
> > finn
Manuel