If an expression reference another expression in a parent fo, the parent fo expression must be evaluated against the LayoutContext that was in effect for the parent fo and *not* against the child fo LayoutContext.
<fo:block id="a" border-start-width="10%"> <fo:block id="b" border-start-width="inherit">
It must be the LayoutContex for 'a' that is used when we evaluate the 10% even when we call:
with the layout context for 'b'.
Well, I used to believe the 10% has been evaluated already, and the inherited property can grab the absolute value immediately.
If it is evaluated already where would the evaluated value be stored? In the propertyList (aka the FO tree)? And then the value should be reverted to the expression when the base value changes due to breaks.
Storing the resolved value would IMO remove all the benefits from passing in a context parameter to getValue().
Perhaps it can be done that way too, but it is very different from my proposal.