[Manuel]

As a consequence of the recent discussion on the correct bpd for inline areas I was looking at actually implementing it. Part of that is correct vertical positioning, i.e. baseline alignments, of those areas.

Am I correct in saying that the vertical-align property which is a shorthand for a combination of baseline related properties is not currently implemented as shorthand, that is the property system doesn't do the mapping to the corresponding properties (alignment-baseline, alignment-adjust, baseline-shift and dominant-baseline)?

Correct.

Also those 4 properties, while set on the various fo's, don't seem to have getters so are not available to the layout system.

So, the first step in moving away from vertical-align and to the four corresponding properties is to fix the property subsystem and the fo definitions.

Correct.

Finn, the property system already has a notion of corresponding properties, etc.. I haven't looked into it in any detail but can that be used for the mapping of vertical-align or do we need some custom mechanism in this case?

There is also explicit support shorthands. For the 4 properties the vertical-align must be specified as a shorthand:

m.addShorthand(s_generics[PR_VERTICAL_ALIGN]);

and a new custom ShorthandParser must be written and added to the vertical-align maker

m.setDatatypeParser(new VerticalAlignShorthandParser());

which consist of code to implement the rule in [7.29.22]:

if (property.getEnum() == EN_BASELINE)
    switch (propId) {
    case PR_ALIGNMENT_BASELINE:
        return new EnumProperty(EN_BASELINE)
    case PR_ALIGNMAENT_ADJUST:
        return new EnumProperty(EN_AUTO)
    case PR_BASELINE_SHIFT:
        return new EnumProperty(EN_BASELINE)
    case PR_DOMINENT_BASELINE:
        return new EnumProperty(EN_AUTO)
    }
} else property.getEnum() == EN_TOP) {
    switch (propId) {
    case PR_ALIGNMENT_BASELINE:
        return new EnumProperty(EN_BEFORE_EDGE)
    case PR_ALIGNMAENT_ADJUST:
        return new EnumProperty(EN_AUTO)
    case PR_BASELINE_SHIFT:
        return new EnumProperty(EN_BASELINE)
    case PR_DOMINENT_BASELINE:
        return new EnumProperty(EN_AUTO)
    }
....



As an aside, the FOP implementation deviates from the spec since shorthands should set values for other properties, but our system pulls the values out of the shorthand property with the help of a ShorthandParser.

regards,
finn

Reply via email to