Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Xmlgraphics-fop Wiki" 
for change notification.

The following page has been changed by JeremiasMaerki:
http://wiki.apache.org/xmlgraphics-fop/SpaceResolution

The comment on the change is:
Collected notes on space resolution

New page:
This page analyzes aspects around the space-resolution rules defined in 4.3.1 
in the spec.

'''Legend:'''

 * lh = line height

= General pattern for the Knuth layout system =

{{{
glue - penalty - glue - box - PENALTY - glue
}}}

with:
 * glue #1 is the resolved space after block 1 if a break occurs
 * glue #2 is the resolved space before block 2 if a break occurs
 * penalty is a feasible break
 * PENALTY forbids a break
 * glue #2 is the difference between glue #1 + glue #3 and the resolved space 
if there is no break

= Examples =

== Example 0 ==

This is the one from the spec (in chapter 4.3.1).

{{{
<fo:block space-before="10pt">
  <fo:block space-before="4pt" space-before.conditionality="retain">
    <fo:block space-before="5pt">
      In olden times when wishing still helped one, there lived a king whose 
daughters
    </fo:block>
  </fo:block>
</fo:block>
}}}

The 10pt space is suppressed due to rule 1. It is conditional and begins a 
reference area.

The rest of the spaces are non-forcing, so rule 2 is skipped.

The 4pt space is suppressed under rule 3. It has the same precedence as the 5pt 
space but has a smaller optimum length. Since there will only be one resolved 
space it will be 5pt.

== Example 1 ==

A simple (conditional) space.

{{{
<fo:block>first block</fo:block>
<fo:block space-before="10pt">second block</fo:block>
}}}

'''Element list:'''

{{{
box w=lh for first block

penalty w=0 p=0 for the break possibility

aux glue w=10pt for the space in case there is no break

box w=lh for second block
}}}

== Example 2 ==

A non-conditional space.

{{{
<fo:block>first block</fo:block>
<fo:block space-before="10pt" space-before.conditionality="retain">second 
block</fo:block>
}}}

'''Element list:'''

{{{
box w=lh for first block

penalty w=0 p=0 for the break possibility

box w=0 //auxiliary element for the following penalty
penalty p=INF //conditionality=retain
aux glue for space-before

box w=lh for second block
}}}

== Example 3 ==

The collapsing of the adjacent conditional spaces according to rule 3.

{{{
<fo:block space-after="10pt">first block</fo:block>
<fo:block space-before="10pt">second block</fo:block>
}}}

'''Break between the blocks:'''

We have two S' which each contains one space specifier.

S'[1]: The space-after on the first block is suppressed because it is 
conditional and ends a reference-area. (rule 1)

S'[2]: The space-before on the second block is suppressed because it is 
conditional and begins a reference-area. (rule 1)

'''No break between the blocks:'''

S' consists of both space-specifiers in this example (Case 3a under 4.2.5. 
Stacking Constraints).

Rule 1 does not apply. No forcing space-specifiers (rule 2). Both non-forcing 
space-specifiers collapse to a single space with 10pt.

'''Element list:'''

{{{
box w=lh for first block

penalty w=0 p=0 for the break possibility

aux glue w=10pt for the space in case there is no break

box w=lh for second block
}}}

== Example 4 ==

{{{
<fo:block space-after="10pt" space-after.conditionality="retain">first 
block</fo:block>
<fo:block space-before="10pt">second block</fo:block>
}}}

'''Break between the blocks:'''

We have two S' which each contains one space specifier.

S'[1]: No space-specifiers are suppressed.

S'[2]: The space-before on the second block is suppressed because it is 
conditional and begins a reference-area. (rule 1)

'''No break between the blocks:'''

S' consists of both space-specifiers in this example (Case 3a under 4.2.5. 
Stacking Constraints).

Rule 1 does not apply. No forcing space-specifiers (rule 2). Both non-forcing 
space-specifiers collapse to a single space with 10pt.

'''Element list:'''

(10pt|0pt vs. 10pt)

{{{
box w=lh for first block

box w=0
penalty p=INF //conditionality=retain
aux glue w=10pt for space-after

penalty w=0 p=0 for the break possibility

box w=lh for second block
}}}

== Example 5 ==

{{{
<fo:block space-after="10pt" space-after.conditionality="retain">first 
block</fo:block>
<fo:block space-before="10pt" space-before.conditionality="retain">second 
block</fo:block>
}}}

'''Break between the blocks:'''

We have two S' which each contains one space specifier.

S'[1]: No space-specifiers are suppressed.

S'[2]: No space-specifiers are suppressed.

'''No break between the blocks:'''

S' consists of both space-specifiers in this example (Case 3a under 4.2.5. 
Stacking Constraints).

Rule 1 does not apply. No forcing space-specifiers (rule 2). Both non-forcing 
space-specifiers collapse to a single space with 10pt.

'''Element list:'''

(10pt|10pt vs. 10pt)

{{{
box w=lh for first block

box w=0
penalty p=INF //conditionality=retain
aux glue w=10pt for space-after

penalty w=0 p=0 for the break possibility

aux glue w=-10pt for the difference when no break occurs

box w=0
penalty p=INF 
aux glue w=10pt for space-before

box w=lh for second block
}}}

== Example 6 ==

{{{
<fo:block space-after="10pt" space-after.conditionality="retain">first 
line</fo:block>
<fo:block space-before="10pt" space-before.conditionality="retain">
  <fo:block space-before="6pt" space-before.precedence="force">second 
line</fo:block>
  third line
</fo:block>
}}}

'''Break at the first break possibility:'''

We have two S':

S'[1]: space-after is not suppressed.

S'[2]: non-conditional space-before="10pt" and a forcing space-before="6pt". 
The "10pt" space gets suppressed under rule 2.

'''No break between the blocks:'''

S' consists of all three space-specifiers in this example (similar to case 3b 
under 4.2.5. Stacking Constraints).

Rule 1 does not apply. "6pt" space is forcing, the other spaces are suppressed.

'''Element list:'''

(10pt|6pt vs. 6pt)

{{{
box w=lh for first block

box w=0
penalty p=INF //conditionality=retain
aux glue w=10pt for space-after

penalty w=0 p=0 for the break possibility

aux glue w=-10pt for the difference when no break occurs

box w=0
penalty p=INF 
aux glue w=6pt for space-before

box w=lh for second block
}}}

= Implementation =

Ideas for the implementation can be found here:
http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-dev/200509.mbox/[EMAIL 
PROTECTED]
http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-dev/200509.mbox/[EMAIL 
PROTECTED]
http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-dev/200509.mbox/[EMAIL 
PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to