A (long) question on implementing fo:retrieve-table-marker

2008-09-02 Thread Jean-François El Fouly

I take as reference: http://www.w3.org/TR/xsl/

To begin with, I've built a simple example / test case related to my 
customer's needs but fairly based on the one in 6.13.1.1.2: 
http://www.w3.org/TR/xsl/#d0e14681
This example looks good and though not trivial to understand at first 
sight, it is a common-sense use of fo:retrieve-table-marker.
It has a sort of conditional row that is displayed (or not) in the 
table footer and is defined just after table-body:


*fo:marker marker-class-name=continued
 fo:table-row
   fo:table-cell
 fo:blockTable continued.../fo:block
   /fo:table-cell
 /fo:table-row
   /fo:marker
*

Now if I run my test case against the trunk of FOP I get this error message:

*GRAVE: Exception
javax.xml.transform.TransformerException: 
org.apache.fop.fo.ValidationException:
file:/D:/Java/fop-0.95beta/test-rtm.fo:533:112: Error(533/112): 
fo:retrieve-tab

le-marker is not a valid child element of fo:table-header.
*
For the sake of clarity only let's call this a bug since 
*fo-retrieve-table-marker* /is/ a valid child element of 
*fo:table-header:* http://www.w3.org/TR/xsl/#fo_retrieve-table-marker
So let's read the full stack trace and fix this by adding one more 
condition in *org.apache.fop.fo.flow.table.TablePart.validateChildNode()*.
The next step is where I'm puzzled and don't know how to proceed since 
the W3C recommendation and the example they give seem inconsistent with 
each other, while the error message FOP returns seems consistent with 
the recommendation:


*GRAVE: Exception
javax.xml.transform.TransformerException: 
org.apache.fop.fo.ValidationException:
{http://www.w3.org/1999/XSL/Format}table-row; is not a valid child of 
fo:mark

er! (See position 557:21)
*
This error is consistent with the W3C TR: 
http://www.w3.org/TR/xsl/#fo_marker

that says that the fo:marker contents is:

(#PCDATA|%inline; http://www.w3.org/TR/xsl/#inline.fo.list|%block; 
http://www.w3.org/TR/xsl/#block.fo.list)*

but it makes the example they give useless (indeed, neither inline nor 
block allow directly or indirectly table-row).
And so I don't quite know where I'm allowed to go from here. (If I 
change a behaviour in 
*org.apache.fop.fo.flow.Marker.validateChildNode()* I may end up with 
something that works and fits the bill but is inconsistent with the TR).


Any comment appreciated !

Jean-Francois El Fouly



Re: A (long) question on implementing fo:retrieve-table-marker

2008-09-02 Thread Andreas Delmelle

On Sep 2, 2008, at 11:21, Jean-François El Fouly wrote:

Just another hint I thought of:

To begin with, I've built a simple example / test case related to  
my customer's needs but fairly based on the one in 6.13.1.1.2:  
http://www.w3.org/TR/xsl/#d0e14681
This example looks good and though not trivial to understand at  
first sight, it is a common-sense use of fo:retrieve-table-marker.
It has a sort of conditional row that is displayed (or not) in  
the table footer and is defined just after table-body:


*fo:marker marker-class-name=continued
 fo:table-row
   fo:table-cell
 fo:blockTable continued.../fo:block
   /fo:table-cell
 /fo:table-row
   /fo:marker
*


Due to the problems you ran into so far, I'd advise first trying to  
get the retrieval of a simple fo:block into the header/footer  
working. That would already help most people out who need this, I think.


Once that works, extending the approach to also work with entire  
table-parts should prove a relatively simple exercise.



Cheers

Andreas



Re: A (long) question on implementing fo:retrieve-table-marker

2008-09-02 Thread Andreas Delmelle

On Sep 2, 2008, at 11:21, Jean-François El Fouly wrote:

... and another detail, to facilitate studying the process through  
debugging:


snip /
file:/D:/Java/fop-0.95beta/test-rtm.fo:533:112: Error(533/112):  
fo:retrieve-tab

 ^^^
For your own convenience, trim that testcase down! ;-)

Seriously, try to generate extra space by means of space-before and/ 
or -after to generate multiple pages.
Use an extra small page-size to limit the amount of needed content to  
trigger page-breaks...
Generating dummy content, leading to a FO of 500+ lines, will not  
make the job any easier.


Something I've also found helpful, in case you're unaware of it:  
specify ids on the FOs to easily track the corresponding FObj and  
their related LayoutManager in a debugger.



Andreas