Sorry for not looking at your patch until now, but I've been on vacation
(a couple of weeks with the cellular turned off and no email access can
actually be quite satisfying!).

The mapping from char to glyph is moved to the PDFRenderer, so there
should be no need to map the chars again (only for calculating widths).
However, the leaders with space patterns was still rendered wrong. That's
because actual spaces was used, I changed it to use InlineSpace. Most
fonts doesn't contain an actual space glyph, but instead maps it to the
missing glyph which usually is just a square.


Tore


On Wed, 4 Jul 2001, Hin-Tak Leung wrote:

> Apply this patch to:
> xml-fop/src/org/apache/fop/layout/LineArea.java
>
> A bug was introduced between version 1.42 and 1.43 of LineArea
> which uses a lot of mapChar to cope with bug 1618 (CVS log has
> a typo error instead to "1681"), and forgot to change the
> leader calculation.
>
> This bug should have caused FOP to crash with any XSL:FO input
> that has a leader with dots or space with non-pdf-standard
> fonts. I wonder why nobody spotted it in release 0.19? My
> last CVS build was May 16 and it worked fine - the fatal bug
> was introduced on 12 June and went into release 0.19 and
> went unreported for nearly a month...
>
> Somebody please patch this into the CVS tree?
>
> =============================================================
> *** LineArea.java-bad   Tue Jun 12 12:37:42 2001
> --- LineArea.java       Wed Jul  4 00:44:44 2001
> ***************
> *** 751,769 ****
>           * creates a leader as String out of the given char and the leader
> length
>           * and wraps it in an InlineArea which is returned
>           */
> !     private InlineArea buildSimpleLeader(int charNumber, int leaderLength) {
> !               int width = this.currentFontState.width(charNumber);
>                  if (width == 0) {
> -                       char c = (char) charNumber;
>                          MessageHandler.errorln("char " + c + " has width
> 0. Using width 100 instead.");
>                          width = 100;
>                  }
>            int factor = (int) Math.floor (leaderLength /
>                                           width);
>            char [] leaderChars = new char [factor];
> -         char fillChar = (char) charNumber;
>            for (int i = 0; i < factor; i ++) {
> !             leaderChars[i] = fillChar;
>            }
>            WordArea leaderPatternArea =
>              new WordArea(currentFontState, this.red, this.green,
> --- 751,767 ----
>           * creates a leader as String out of the given char and the leader
> length
>           * and wraps it in an InlineArea which is returned
>           */
> !     private InlineArea buildSimpleLeader(char c, int leaderLength) {
> !               int width =
> this.currentFontState.width(currentFontState.mapChar(c));
>                  if (width == 0) {
>                          MessageHandler.errorln("char " + c + " has width
> 0. Using width 100 instead.");
>                          width = 100;
>                  }
>            int factor = (int) Math.floor (leaderLength /
>                                           width);
>            char [] leaderChars = new char [factor];
>            for (int i = 0; i < factor; i ++) {
> !             leaderChars[i] = c;
>            }
>            WordArea leaderPatternArea =
>              new WordArea(currentFontState, this.red, this.green,
> ==============================
>
>
> _________________________________________________________
> Do You Yahoo!?
> Get your free @yahoo.com address at http://mail.yahoo.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]
>
>


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

Reply via email to