xsl-list
[Top] [All Lists]

Re: And operator usage in XSL

2004-07-28 14:58:42
J.Pietschmann wrote:

Eliot Kimber wrote:

position= isn't an FO property (probably meant absolute-position=) but in any case only block-container can be absolutely positioned.


It's a shorthand (sect. 7.29.20).

Ah, I hadn't noticed this shorthand. But it is a shorthand that maps to either absolute-position or relative-position. As absolute-position only applies to block-container and relative-position explicitly does not apply to block-container, this must mean that position maps to relative-position when used on fo:block.

I can't find the restriction that
only block-containers may be absolutely positioned in the spec,
can you help me here?

The absolute-position property only applies to block-container. Section 7.5.1.

However, reading the description relative-position I'm not 100% clear what it means for blocks. My initial reading is that it has no effect but I also grant that the description is confusing at best.

Doing an experiment with XEP 3.77 and XSL Formatter 2.5 it appears that relative-position has no effect on blocks. My test instance is below. The first two blocks format the same with XSL Formatter. With XEP, the second block is only 2in wide (the 1.0 spec is ambiguous about whether width= is meaningful on fo:block). The second two blocks are formatted with identical positioning by both formatters.

<?xml version="1.0"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format";>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="mypage"
        page-height="11in"
        page-width="8.5in">
      <fo:region-body
          margin-left="20pt"
          margin-right="20pt"
          margin-top="20pt"
          margin-bottom="20pt"
          border-width="0.5pt"
          border-color="blue"
          border-style="solid"
      />
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="mypage">
    <fo:flow flow-name="xsl-region-body"
        font-family="sans-serif">
      <fo:block
        >Test of relative-position on blocks.</fo:block>
      <fo:block left="10pt"
          space-before="12pt"
          background-color="silver"
          border-width="1pt"
          border-color="red"
          border-style="solid"
      >Block with left=10pt</fo:block>

      <fo:block
          left="1in"
          width="2in"
          space-before="12pt"
          background-color="silver"
          border-width="1pt"
          border-color="red"
          border-style="solid"
          relative-position="relative"
>Block with width=2in left=1in and relative-position="relative"</fo:block>
      <fo:block
          left="1in"
          width="2in"
          margin-left="0.5in"
          space-before="12pt"
          background-color="silver"
          border-width="1pt"
          border-color="red"
          border-style="solid"
          relative-position="relative"
>Block with width=2in left=1in margin-start="0.5in" and relative-position="relative"</fo:block>
      <fo:block
          left="1in"
          width="2in"
          margin-left="0.5in"
          space-before="12pt"
          background-color="silver"
          border-width="1pt"
          border-color="red"
          border-style="solid"
          relative-position="static"
>Block with width=2in left=1in margin-start="0.5in" and relative-position="static"</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>


--
W. Eliot Kimber
Professional Services
Innodata Isogen
9030 Research Blvd, #410
Austin, TX 78758
(512) 372-8122

eliot(_at_)innodata-isogen(_dot_)com
www.innodata-isogen.com