You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by Apache Wiki <wi...@apache.org> on 2005/05/16 20:27:07 UTC

[Xmlgraphics-fop Wiki] Update of "TableLayout/KnuthElementsForTables/HfIntegrationInSteppingAlgorithm" by SimonPepping

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 SimonPepping:
http://wiki.apache.org/xmlgraphics-fop/TableLayout/KnuthElementsForTables/HfIntegrationInSteppingAlgorithm

New page:
== Integration of the header and footer in the stepping algorithm ==

It is possible to integrate the header and the footer in the
calculation of the step, remaining height and no-break height. It is
then no longer necessary to add penalties and boxes for the header and
footer. They are added automatically by the stepping algorithm. Note
that in the last step the header and footer appear automatically in
the box height. This is due to the fact that the duplicate header and
footer disappear and that therefore the remaining height reduces to
zero. The amount of reduction of the remaining height goes into the
last box (see TableLayout/KnuthElementsForTables/SteppingAlgorithmDerivation).

=== The example of the page TableLayout/KnuthElementsForTables/RowBorder2 ===

We demonstrate the integration on the example of the page
TableLayout/KnuthElementsForTables/RowBorder2.

Note that the box height can also be calculated as: previous remaining
height - remaining height (see
TableLayout/KnuthElementsForTables/SteppingAlgorithmDerivation); this is used below.

no-break:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 3*10 + (4/2) = 35, 35 - 23 = 12
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
no-break height: 17 + 51 + 17 = 85
}}}

step 1:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: 
col2: (6/2) + (6/2) = 6
col3: (8/2) + (8/2) = 8
height: 8
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 8 = 8
col2: 6 + 0 = 6
col3: 8 + 0 = 8
height: 8
row1+row2 height: 16
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 16 + 17 = 50

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row1+row2:
col1: (6/2) + 20 + (4/2) = 25, 25 - 23 = 2
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 51 + 17 = 85
}}}

Split the step height into box and penalty heights:{{{
box height     = previous remaining height - remaining height
penalty height = step height + remaining height - no-break height
box height: 85 - 85 = 0
penalty height: 50 + 85 - 85 = 50
}}}

Check consistency:{{{
step height    = previous box heights + box height + penalty height
step height 50 = 0 + (85 - 85) + (50 + 85 - 85)
}}}

step 2:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + (8/2) = 8
height: 21
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 21 = -5
col2: 0
col3: 0
height: 0
row1+row2 height: 21
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 21 + 17 = 55

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + (6/2) = 6
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 20 + (4/2) = 25, 25 - 23 = 2
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 51 + 17 = 85
box height: 85 - 85 = 0
penalty height: 55 + 85 - 85 = 55
step height 55 = 0 + (85 - 85) + (55 + 85 - 85)
}}}

step 3:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 23 = -7
col2: 0
col3: 0
height: 0
row1+row2 height: 23
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 23 + 17 = 57

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: no content
row2:
col1: (4/2) + 20 + (4/2) = 24, 24 - 0 = 24
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 28 + 17 = 62
box height: 85 - 62 = 23
penalty height: 57 + 62 - 85 = 34
step height 57 = 0 + (85 - 62) + (57 + 62 - 85)
}}}

step 4:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 20 + (6/2) = 26, 26 - 23 = 3
col2: 0
col3: 0
height: 3
row1+row2 height: 26
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 26 + 17 = 60

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: no content
row2:
col1: (4/2) + 10 + (4/2) = 24, 24 - 0 = 24
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 28 + 17 = 62
box height: 62 - 62 = 0
penalty height: 60 + 62 - 85 = 37
step height 60 = 23 + (62 - 62) + (60 + 62 - 85)
}}}

step 5:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 30 + (4/2) = 35, 35 - 23 = 12
col2: 0
col3: 0
height: 12
row1+row2 height: 35
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 35 + 17 = 69

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: no content
row2:
col1: (4/2) + (4/2) = 4, 4 - 0 = 4
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 28 + 17 = 62
box height: 62 - 62 = 0
penalty height: 69 + 62 - 85 = 46
step height 69 = 23 + (62 - 62) + (69 + 62 - 85)
}}}

step 6:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 30 + (4/2) = 35, 35 - 23 = 12
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + (8/2) = 8
height: 25
row1+row2 height: 48
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
step height: 17 + 48 + 17 = 82

header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: no content
row2:
col1: (4/2) + (4/2) = 4, 4 - 0 = 4
col2: (4/2) + (4/2) = 4
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 28 + 17 = 62
box height: 62 - 62 = 0
penalty height: 82 + 62 - 85 = 59
step height 82 = 23 + (62 - 62) + (82 + 62 - 85)
}}}

step 7 = no-break:{{{
step height: 85
remaining height: 0
box height: 62 - 0 = 62
penalty height: 85 + 0 - 85 = 0
step height 85 = 23 + (62 - 0) + (85 + 0 - 85)
}}}

End result:{{{
box( 0 +  0) + penalty(50), 50/85
box( 0 +  0) + penalty(55), 55/85
box( 0 + 23) + penalty(34), 57/62
box(23 +  0) + penalty(37), 60/62
box(23 +  0) + penalty(46), 69/62
box(23 +  0) + penalty(59), 82/62
box(23 + 62) + penalty( 0), 85/ 0
}}}

=== No header and footer at page break ===

A somewhat different situation occurs when the conditions
`table-omit-header-at-break` and `table-omit-footer-at-break` are set
to true. This situation is easily dealt with using the integrated
approach. Note that the box for the header appears automatically in
the first step. This is because the stepping algorithm puts table
height in a box when it can no longer appear after the page break (see
TableLayout/KnuthElementsForTables/SteppingAlgorithmDerivation). With
`table-omit-header-at-break` that is immediately true for the header.

We demonstrate this on the same example of the page
TableLayout/KnuthElementsForTables/RowBorder2, but now with
`table-omit-header-at-break="true"` and
`table-omit-footer-at-break="true"`.

no-break:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 3*10 + (4/2) = 35, 35 - 23 = 12
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
no-break height: 17 + 51 + 17 = 85
}}}

step 1:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1: 
col2: (6/2) + (6/2) = 6
col3: (8/2) + (8/2) = 8
height: 8
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 8 = 8
col2: 6 + 0 = 6
col3: 8 + 0 = 8
height: 8
row1+row2 height: 16
step height: 17 + 16 = 33

row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row1+row2:
col1: (6/2) + 20 + (4/2) = 25, 25 - 23 = 2
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 51 + 17 = 68
}}}

Split the step height into box and penalty heights:{{{
box height     = previous remaining height - remaining height
penalty height = step height + remaining height - no-break height
box height: 85 - 68 = 17
penalty height: 33 + 68 - 85 = 16
}}}

Check consistency:{{{
step height    = previous box heights + box height + penalty height
step height 33 = 0 + (85 - 68) + (33 + 68 - 85)
}}}

step 2:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + (8/2) = 8
height: 21
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 21 = -5
col2: 0
col3: 0
height: 0
row1+row2 height: 21
step height: 17 + 21 = 38

row1:
col2: (6/2) + (6/2) = 6
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 20 + (4/2) = 25, 25 - 23 = 2
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 51
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 51 + 17 = 68
box height: 68 - 68 = 0
penalty height: 38 + 68 - 85 = 21
step height 38 = 17 + (68 - 68) + (38 + 68 - 85)
}}}

step 3:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 10 + (6/2) = 16, 16 - 23 = -7
col2: 0
col3: 0
height: 0
row1+row2 height: 23
step height: 17 + 23 = 40

row1: no content
row2:
col1: (4/2) + 20 + (4/2) = 24, 24 - 0 = 24
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 17 + 28 = 45
box height: 68 - 45 = 23
penalty height: 40 + 45 - 85 = 0
step height 40 = 17 + (68 - 45) + (40 + 45 - 85)
}}}

step 4:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 20 + (6/2) = 26, 26 - 23 = 3
col2: 0
col3: 0
height: 3
row1+row2 height: 26
step height: 17 + 26 = 43

row1: no content
row2:
col1: (4/2) + 10 + (4/2) = 24, 24 - 0 = 24
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 28 + 17 = 45
box height: 45 - 45 = 0
penalty height: 43 + 45 - 85 = 3
step height 43 = 40 + (45 - 45) + (43 + 45 - 85)
}}}

step 5:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 30 + (4/2) = 35, 35 - 23 = 12
col2: 0
col3: 0
height: 12
row1+row2 height: 35
step height: 17 + 35 = 52

row1: no content
row2:
col1: (4/2) + (4/2) = 4, 4 - 0 = 4
col2: (4/2) + 20 + (4/2) = 24
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 28 + 17 = 45
box height: 45 - 45 = 0
penalty height: 52 + 45 - 85 = 12
step height 52 = 40 + (45 - 45) + (52 + 45 - 85)
}}}

step 6:{{{
header: col1+col2+col3: 5 + 8 + (8/2) = 17
row1:
col2: (6/2) + 15 + (6/2) = 21
col3: (8/2) + 15 + (8/2) = 23
height: 23
row2:
col1: (6/2) + 30 + (4/2) = 35, 35 - 23 = 12
col2: (6/2) + 20 + (4/2) = 25
col3: (8/2) + (8/2) = 8
height: 25
row1+row2 height: 48
step height: 17 + 48 = 65

row1: no content
row2:
col1: (4/2) + (4/2) = 4, 4 - 0 = 4
col2: (4/2) + (4/2) = 4
col3: (8/2) + 20 + (8/2) = 28
height: 28
row1+row2 height: 28
footer: col1+col2+col3: (8/2) + 8 + 5 = 17
remaining height: 28 + 17 = 45
box height: 45 - 45 = 0
penalty height: 65 + 45 - 85 = 25
step height 65 = 40 + (45 - 45) + (65 + 45 - 85)
}}}

step 7 = no-break:{{{
step height: 85
remaining height: 0
box height: 45 - 0 = 45
penalty height: 85 + 0 - 85 = 0
step height 85 = 40 + (45 - 0) + (85 + 0 - 85)
}}}

End result:{{{
box( 0 + 17) + penalty(16), 33/68
box(17 +  0) + penalty(21), 38/68
box(17 + 23) + penalty( 0), 40/45
box(40 +  0) + penalty( 3), 43/45
box(40 +  0) + penalty(12), 52/45
box(40 +  0) + penalty(25), 65/45
box(40 + 45) + penalty( 0), 85/ 0
}}}

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org