xsl-foantenna-house

Antenna House Invalid property value: column-width="proportional-column-width(4%)"


I'm get the following warning from antenna house.

AHFCmd :WARNING: Error Level : 2
AHFCmd :WARNING: Error Code  : 10761 (2A09)
AHFCmd :WARNING: Invalid property value: column-width="proportional-column-width(4%)".

from the code

  <fo:table-column column-number="1" column-width="proportional-column-width(4%)"/>

The website seems to suggest that proportional-column-width is supported

Regards Conteh


Solution

  • proportional-column-width(4) would work. proportional-column-width(4%) will not.

    If you want the column to be 4% of the available width, use column-width="4%" (see https://www.w3.org/TR/xsl11/#column-width).


    I think that you are the first person that I have seen try to use a percentage rather than a number with proportional-column-width(), and you have just blown my mind.

    A strict reading of the XSL 1.1 definition of 'numeric' and of the proportional-column-width() function prototype in the XSL 1.1 Recommendation (https://www.w3.org/TR/xsl11/#d0e5961):

    numeric proportional-column-width(numeric)

    would indicate that a percentage is a valid value because a percentage is a relative numeric. Mind blown. Presumably every proportional-column-width() within the same table would need to be a relative numeric value so that they can all be added together. However, that could lead to nonsensical definitions such as:

    <fo:table layout="fixed" width="100%">
      <fo:table-column column=width="proportional-column-width(4%)" />
      <fo:table-column column=width="proportional-column-width(4%)" />
      <fo:table-body>...</fo:table-body>
    </fo:table>
    

    where the two '4%' columns each take 50% of the width.

    Fortunately for my sanity, the definition of proportional-column-width() includes:

    The difference between the table-width and the sum of the column widths is the available proportional width. One unit of proportional measure is the available proportional width divided by the sum of the proportional factors.

    If the proportional widths were all relative numerics (which are really lengths), then dividing the available proportional width by a length would yield a unit-less number. A unit-less number wouldn't work as the result of proportional-column-width(), so you're back to needing proportional-column-width() values being only numbers so that the function can return widths.