Hello there,

after some research I found and fixed a bug in the PS renderer
that can be a real nuisance.

The problem is as follows: The ascii (and Unicode) minus
character is mapped to the hyphen character by the PDF
renderer. The PostScript renderer instead maps it tho the
minus character. This happens because the generated
PS code reencodes the fonts to ISO Latin 1 encoding, which
handles ascii code 45 differently from the standard PS font
encoding.

Typograpically, the character at 45 in ISOLatin1 is a real minus,
and the character at 45 in Standard Encoding is a hyphen, which
is about half as wide as the minus in your average font. The
difference in your PS output can be quite destructive, as FOP
always formats assuming the width of the hyphen character...

A "patch" follows. The reason I'm not yet submitting a real diff
to Bugzilla is that I am a) extremely overloaded right now and
b) this really needs to be discussed:

Some thoughts on this
(by 'FOP' I mean formatter+PDF renderer code):

1. Who's right and who's wrong?
Either FOP  - or - the PS renderer is right, but who?

2. If FOP is right, then the PS renderer must be
fixed. This can be done either by fixing the method
renderWordArea or by changing the PS procedures.
However, the latter would increase PS file size
(can't copy the ISO latin 1 enconding as opposed
to the standard encoding), so I opted for changing
renderWordArea.

3. If FOP is wrong, then probably someone else
must fix it - I suppose I won't find the right place
for the fix easily.

Personally I think the PS renderer is wrong, since
the original Adobe PS character encoding maps
ascii 45 to the hyphen character and Adobe usually
knows what they're doing. Still, at that point in time,
Unicode wasn't there yet, so...

This is an issue that we may possible want 
to solve before 0.20.5 goes final. Personally, I won't
have time before the weekend to check with
the Unicode and/or XSL spec.

Any comments/ideas?

--------------- temp fix that I use ---------------------------
PSRenderer, method renderWordArea:
        for (int i = 0; i < l; i++) {
            char ch = s.charAt(i);
            char mch = fs.mapChar(ch);

            // temp fix abe: map ascii '-' to ISO latin 1 hyphen char
            if (mch == '-') {
              sb = sb.append("\\" + Integer.toOctalString(173));
            } else /* fix ends */ if (mch > 127) {
                sb = sb.append("\\" + Integer.toOctalString(mch));
            } else {
                String escape = "\\()[]{}";
                if (escape.indexOf(mch) >= 0) {
                    sb.append("\\");
                }
                sb = sb.append(mch);
            }
        }
--
Cappelino Informationstechnologie GmbH
Arnd Beißner


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

Reply via email to