xmlgraphics-general mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeremias Maerki <...@jeremias-maerki.ch>
Subject Re: bug / patch for org.apache.xmlgraphics.ps.PSGenerator
Date Wed, 20 Jun 2007 14:33:51 GMT
Thanks for the problem report, Manuel. I couldn't do anything with the
code you posted. There's no EPSGraphics2D anywhere in the XML Graphics
Project. The only thing resembling that is PSGraphics2D or
EPSDocumentGraphics2D but there's no encode method. So I just fixed the
bug by hand and added a JUnit test case. Please check if it works for
you now.

http://svn.apache.org/viewvc?view=rev&rev=549118

On 06.06.2007 16:08:26 Manuel Polling wrote:
> Hi,
> I tried to find out how to submit a bug / patch for XML Graphics commons
> without checking out and commiting the source myself but I could not
> figure out how.
> 
> So here is a contribution by email. While using the PSGenerator
> (org.apache.xmlgraphics.ps.PSGenerator) I found that the current
> implementation of PSGenerator.escapeChar() is not working properly. Some
> of the issues: the escaped chars are still Java chars instead of bytes,
> when writing a char as an octal code it should have 3 digits, chars
> below 32 are not escaped.
> Below you find another method which does about the same task, it is not
> a drop-in replacement but it solves most problems. There is a call in
> this method to EPSGraphics2D.encode(), this one is intended to provide
> translations for Unicode code points above 255 if they are supported by
> the encoding vector of the font.
> I hope this will help to improve the XML Graphics commons.
> 
> Kind regards,
> Manuel Polling.
> 
> The code:
>     private static final char CHAR_BACKSPACE = '\b';
>     private static final char CHAR_CARRIAGE_RETURN = '\r';
>     private static final char CHAR_END_OF_LINE = '\n';
>     private static final char CHAR_ESCAPE = '\\';
>     private static final char CHAR_FORM_FEED = '\f';
>     private static final char CHAR_LEFT_PARENTHESIS = '(';
>     private static final char CHAR_RIGHT_PARENTHESIS = ')';
>     private static final char CHAR_TAB = '\t';
>     private static final char CHAR_SUBSTITUTE = '?';
> 
>     /**
>      * TODO make this work for non iso-latin1 chars not present in our
> own encoding (lookup chars in font),
>      * see org.apache.fop.render.ps.NativeTextHandler.
>      * @param text
>      * @param target
>      */
>     private byte[] escapeText(final String text) {
>         final ByteArrayOutputStream asciiBuffer = new ByteArrayOutputStream(
>             text.length() * 2);
> 
>         final int textLength = text.length();
>         for (int i = 0; i < textLength; i++) {
>         final char code = EPSGraphics2D.encode(text.charAt(i));
>         switch (code) {
>             case CHAR_LEFT_PARENTHESIS:
>             case CHAR_RIGHT_PARENTHESIS:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write(code);
>             break;
>             case CHAR_CARRIAGE_RETURN:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write('r');
>             break;
>             case CHAR_BACKSPACE:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write('b');
>             break;
>             case CHAR_FORM_FEED:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write('f');
>             break;
>             case CHAR_TAB:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write('t');
>             break;
>             case CHAR_END_OF_LINE:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write('n');
>             break;
>             case CHAR_ESCAPE:
>             asciiBuffer.write(CHAR_ESCAPE);
>             asciiBuffer.write(CHAR_ESCAPE);
>             break;
>             default:
>             if (code > 255) {
>                 asciiBuffer.write(CHAR_SUBSTITUTE);
>                 logger.warning(MessageFormat.format(
>                     "unable to write codepoint ''{0}'' (0x{1}),
> substituting ''{2}''.",
>                     code, Integer.toString(code, 16), CHAR_SUBSTITUTE));
>             }
>             else if (code < 32 || code > 127) {
>                 asciiBuffer.write(CHAR_ESCAPE);
>                 asciiBuffer.write('0' + code / 64);
>                 asciiBuffer.write('0' + (code / 8) % 8);
>                 asciiBuffer.write('0' + code % 8);
>             }
>             else
>                 asciiBuffer.write(code);
>             break;
>         }
> 
>         }
>         return asciiBuffer.toByteArray();
>     }
> 
> -- 
> drs. Manuel Polling
> Consultant/Software Engineer
> Edmond Research & Development B.V.
> /The Document Solutions Specialist/
> http://www.edmond.nl/
> 



Jeremias Maerki


---------------------------------------------------------------------
Apache XML Graphics Project URL: http://xmlgraphics.apache.org/
To unsubscribe, e-mail: general-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: general-help@xmlgraphics.apache.org


Mime
View raw message