Re: leader dot ends don't line up

2005-04-07 Thread J.Pietschmann
Green wrote:
Anyway, I had a small problem with dots leader, they did not line up 
at the end, and the gap is less than one dot. But still my client 
didn't like it. 
Well, there's nothing you can to to force a dot leader to be end
aligned, in general.
But why do you use a table? You should be able to just put the leader
and the page number citation in one justified line.
J.Pietschmann


Re: leader dot ends don't line up

2005-04-07 Thread Chris Bowditch
Green wrote:
Hi
I am new to this mailing list (also fop user mailing list too),
although I have been using FOP for about a year.
Anyway, I had a small problem with dots leader, they did not line up 
at the end, and the gap is less than one dot. But still my client 
didn't like it. (I am using FOP-0.20.5 July 15, 2003 build version)

My  stylesheet like this
xsl:template match=tableContents
fo:table table-layout=fixed
fo:table-column column-width=90mm/
fo:table-column column-width=10mm/
fo:table-body
fo:table-row
fo:table-cell
fo:block text-align-last=justify
 font-size=11.08pt font-family=Bell Gothic Bold
 font-weight=bold
Result 1
fo:leader leader-pattern=dots/
/fo:block
   /fo:table-cell
   fo:table-cell text-align=right margin-right=-1.3mm
fo:block font-size=11.08pt 
 font-family=Bell Gothic Bold font-weight=bold
fo:page-number-citation ref-id=R1 /
/fo:block
   /fo:table-cell
/fo:table-row
xsl:for-each select=AppendixPageContent
xsl:call-template name=addtionalTableContents/
/xsl:for-each

 more contents
/fo:table-body
/fo:table
/xsl:template
xsl:template name=addtionalTableContents
fo:table-row
fo:table-cell
fo:block text-align-last=justify font-size=11.08pt
 font-family=Bell Gothic Bold font-weight=bold 
 #160;#160;#160;#160;#160;xsl:value-of
 select=value/#160;fo:leader  leader-pattern=dots/
 /fo:block
/fo:table-cell
fo:table-cell
fo:block text-align=end font-size=11.08pt
font-family=Bell Gothic Bold font-weight=bold
xsl:value-of select=page//fo:block
/fo:table-cell
   /fo:table-row
/xsl:template
(margin-right for page-number-citation cell is to adjust with the other
page numbers from addtionalTableContents)
Some dots leader didn't reach to the table cell end, i.e.
they don't line up. If dots change to rule, it is fine.
So I look at the source code src.org.apache.fop.layout.LineArea.jave 
that generate leaders.
From line 205, it is generating leader.
LineArea.java is a nightmare in 0.20.5
snip/
factor is the number how many dots can be fit in the space.
and added it to children and add left space as space
So, the dot line end did not line up.
First I tried to replace the order InlineSpace and leaderPatterArea 
but it didn't work (nothing changed)

So, I generated additional WordArea using 1pt space and added before dot
leader. The source is like this.
The design of 0.20.5 was so bad that we decided a re-write was the best way 
forward. We have made some good progress with the re-write, so now we will no 
longer be making any changes to the old 0.20.5 code. If you want to contribute 
to FOP, perhaps you should download the new code and test your FO there.

snip/
Chris


leader dot ends don't line up

2005-04-06 Thread Green
Hi

I am new to this mailing list (also fop user mailing list too),
although I have been using FOP for about a year.

Anyway, I had a small problem with dots leader, they did not line up 
at the end, and the gap is less than one dot. But still my client 
didn't like it. (I am using FOP-0.20.5 July 15, 2003 build version)

My  stylesheet like this

xsl:template match=tableContents
fo:table table-layout=fixed
fo:table-column column-width=90mm/
fo:table-column column-width=10mm/
fo:table-body
fo:table-row
fo:table-cell
fo:block text-align-last=justify
 font-size=11.08pt font-family=Bell Gothic Bold
 font-weight=bold
Result 1
fo:leader leader-pattern=dots/
/fo:block
   /fo:table-cell
   fo:table-cell text-align=right margin-right=-1.3mm
fo:block font-size=11.08pt 
 font-family=Bell Gothic Bold font-weight=bold
fo:page-number-citation ref-id=R1 /
/fo:block
   /fo:table-cell
/fo:table-row
xsl:for-each select=AppendixPageContent
xsl:call-template name=addtionalTableContents/
/xsl:for-each

 more contents

/fo:table-body
/fo:table
/xsl:template

xsl:template name=addtionalTableContents
fo:table-row
fo:table-cell
fo:block text-align-last=justify font-size=11.08pt
 font-family=Bell Gothic Bold font-weight=bold 
 #160;#160;#160;#160;#160;xsl:value-of
 select=value/#160;fo:leader  leader-pattern=dots/
 /fo:block
/fo:table-cell
fo:table-cell
fo:block text-align=end font-size=11.08pt
font-family=Bell Gothic Bold font-weight=bold
xsl:value-of select=page//fo:block
/fo:table-cell
   /fo:table-row
/xsl:template


(margin-right for page-number-citation cell is to adjust with the other
page numbers from addtionalTableContents)

Some dots leader didn't reach to the table cell end, i.e.
they don't line up. If dots change to rule, it is fine.

So I look at the source code src.org.apache.fop.layout.LineArea.jave 
that generate leaders.
From line 205, it is generating leader.

+++  Original Source +++
int factor = (int)Math.floor(leaderLengthOptimum / dotWidth);
char[] leaderChars = new char[factor];
for (int i = 0; i  factor; i++) {
leaderChars[i] = dot;
}

String leaderWord = new String(leaderChars);
int leaderWordWidth = fontState.getWordWidth(leaderWord);
WordArea leaderPatternArea =
new WordArea(fontState, red, green, blue,
 leaderWord,leaderWordWidth);
leaderPatternArea.setYOffset(placementOffset);
children.add(idx, leaderPatternArea);
int spaceAfterLeader = leaderLengthOptimum
- leaderWordWidth;
if (spaceAfterLeader!=0) {
children.add(idx+1, new InlineSpace(spaceAfterLeader,false));

++ Original Source End +

factor is the number how many dots can be fit in the space.
and added it to children and add left space as space
So, the dot line end did not line up.
First I tried to replace the order InlineSpace and leaderPatterArea 
but it didn't work (nothing changed)

So, I generated additional WordArea using 1pt space and added before dot
leader. The source is like this.

+++  Changing Source +++

if (spaceAfterLeader  0) {
// create WordArea with 1pt space to fill space before leader
FontState newFontState = null;
try{
newFontState = new FontState(fontState.getFontInfo(),
   fontState.getFontFamily(), 
   fontState.getFontStyle(),
   fontState.getFontWeight(), 1000,
   fontState.getFontVariant());
   }
   catch(FOPException e)
   {  }
   
   int subSpaceWidth = newFontState.getCharWidth(space);
   int spaceFactor = (int)Math.floor((double)spaceAfterLeader 
/ (double)subSpaceWidth);
   char[] spaceLeaderChars = new char[spaceFactor];
   for (int i = 0; i  spaceFactor; i++) {
   spaceLeaderChars[i] = space;
   }
   String spaceLeaderWord = new String(spaceLeaderChars);
   WordArea spaceLeaderPatternArea =
   new WordArea(newFontState, red, green, blue,
   spaceLeaderWord,subSpaceWidth * spaceFactor);
   leaderPatternArea.setYOffset(placementOffset);

spaceLeaderPatternArea.setYOffset(placementOffset);
children.add(idx, spaceLeaderPatternArea);
idx++;
children.add(idx, leaderPatternArea);
idx++;

++ Changing Source End +



It solved the problem.
But