[OpenJDK 2D-Dev] Printing to Postscript doesn't support dieresis

Mario Torre neugens at redhat.com
Fri Dec 12 18:00:28 UTC 2014


On Wed, 2014-12-10 at 15:36 -0800, Phil Race wrote:
> > the character is encoded as <c3a4> (which is correct ihmo)
> > but then mapped to ISOLatin1Encoding.
> 
> \u00e4 (Umlaut) encoded as 8859 should just be "e4".
> What you have above is UTF-8, whereas the PS printing path is
> definitely expecting 8859-1. I looked and found that when I reviewed this change
> I commented it probably should be 8859-1 but didn't make a sufficient point of it :-(
> I thought that since we returned latin1 for the charset name we'd get the right encoding
> but apparently not, and I imagine what testing was done either didn't cover this range
> or the bug was overlooked.
> 
> The following is the quick fix I think we need since I think printing and ONLY printing
> ever uses this code when we are using fontconfig :-
> 
> diff --git a/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java b/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java
> --- a/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java
> +++ b/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java
> @@ -180,7 +180,7 @@
>           String[] componentFaceNames = cfi[idx].getComponentFaceNames();
>           FontDescriptor[] ret = new FontDescriptor[componentFaceNames.length];
>           for (int i = 0; i < componentFaceNames.length; i++) {
> -            ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.UTF_8.newEncoder(), new int[0]);
> +            ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.ISO_8859_1.newEncoder(), new int[0]);
>           }
>   
>           return ret;
> 

Hi Phil,

Thanks for the reply!

I thought it was something along the lines, but I wasn't confident
enough for the fix.

I applied your fix and (of course!) I can confirm it worked, and created
a bug report:

https://bugs.openjdk.java.net/browse/JDK-8067364

I also went ahead and tweaked the test case so that there's no need to
print anymore:

http://cr.openjdk.java.net/~neugens/8067364/webrev.00/

This webrev contains the updated test case based on the PrintSE test and
your fix. I will be happy to push the fix myself if you prefer.

Cheers,
Mario





More information about the 2d-dev mailing list