jeremias    2003/06/02 12:55:09

  Modified:    src/org/apache/fop/render/ps Tag: fop-0_20_2-maintain
                        PSRenderer.java
  Log:
  Fix character set problems with Type 1 fonts
  Establish WinAnsiEncoding in PS interpreter
  Reencodes all fonts except Symbol and ZapfDingbats as WinAnsiEncoding
  Removes an ugly hack for hyphen characters
  Financed by: CTB/McGraw-Hill
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.15.2.18 +47 -14    xml-fop/src/org/apache/fop/render/ps/Attic/PSRenderer.java
  
  Index: PSRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/ps/Attic/PSRenderer.java,v
  retrieving revision 1.15.2.17
  retrieving revision 1.15.2.18
  diff -u -r1.15.2.17 -r1.15.2.18
  --- PSRenderer.java   15 May 2003 06:50:18 -0000      1.15.2.17
  +++ PSRenderer.java   2 Jun 2003 19:55:08 -0000       1.15.2.18
  @@ -61,6 +61,7 @@
   import org.apache.fop.layout.inline.*;
   import org.apache.fop.datatypes.*;
   import org.apache.fop.fo.properties.*;
  +import org.apache.fop.fonts.Glyphs;
   import org.apache.fop.render.pdf.Font;
   import org.apache.fop.image.*;
   import org.apache.fop.apps.FOPException;
  @@ -310,22 +311,58 @@
           }
           write("end def");
           write("%%EndResource");
  +        defineWinAnsiEncoding();
   
           //Rewrite font encodings
           enum = fonts.keySet().iterator();
           while (enum.hasNext()) {
               String key = (String)enum.next();
               Font fm = (Font)fonts.get(key);
  -            write("/" + fm.fontName() + " findfont");
  -            write("dup length dict begin");
  -            write("  {1 index /FID ne {def} {pop pop} ifelse} forall");
  -            write("  /Encoding ISOLatin1Encoding def");
  -            write("  currentdict");
  -            write("end");
  -            write("/" + fm.fontName() + " exch definefont pop");
  +            if (null == fm.encoding()) {
  +                //ignore (ZapfDingbats and Symbol run through here
  +                //TODO: ZapfDingbats and Symbol should get getEncoding() fixed!
  +            } else if ("WinAnsiEncoding".equals(fm.encoding())) {
  +                write("/" + fm.fontName() + " findfont");
  +                write("dup length dict begin");
  +                write("  {1 index /FID ne {def} {pop pop} ifelse} forall");
  +                write("  /Encoding " + fm.encoding() + " def");
  +                write("  currentdict");
  +                write("end");
  +                write("/" + fm.fontName() + " exch definefont pop");
  +            } else {
  +                log.warn("Only WinAnsiEncoding is supported. Font '"
  +                    + fm.fontName() + "' asks for: " + fm.encoding());
  +            }
           }
       }
   
  +    private void defineWinAnsiEncoding() {
  +        write("/WinAnsiEncoding [");
  +        StringBuffer sb = new StringBuffer();
  +        for (int i = 0; i < Glyphs.winAnsiEncoding.length; i++) {
  +            if (i > 0) {
  +                if ((i % 5) == 0) {
  +                    write(sb.toString());
  +                    sb.setLength(0);
  +                } else {
  +                    sb.append(" ");
  +                }
  +            }
  +            final char ch = Glyphs.winAnsiEncoding[i];
  +            final String glyphname = Glyphs.charToGlyphName(ch);
  +            if ("".equals(glyphname)) {
  +                sb.append("/" + Glyphs.notdef);
  +            } else {
  +                sb.append("/");
  +                sb.append(glyphname);
  +            }
  +        }
  +        write(sb.toString());
  +        write("] def");
  +    }
  +
  +
  +
       protected void movetoCurrPosition() {
           write(this.currentXPosition + " " + this.currentYPosition + " M");
       }
  @@ -457,7 +494,7 @@
           // and positive is down and to the right. (0,0) is where the
           // viewBox puts it.
           write(xOffset + " " + yOffset + " translate");
  -        write((at.getTranslateX() * 1000) + " " 
  +        write((at.getTranslateX() * 1000) + " "
               + (-at.getTranslateY() * 1000) + " translate");
           write(sx * at.getScaleX() + " " + sy * at.getScaleY() + " scale");
   
  @@ -740,11 +777,7 @@
               char ch = s.charAt(i);
               char mch = fs.mapChar(ch);
   
  -            /[EMAIL PROTECTED] Do this in a clean way */
  -            // 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) {
  +            if (mch > 127) {
                   sb = sb.append("\\" + Integer.toOctalString(mch));
               } else {
                   final String escape = "\\()[]{}";
  
  
  

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

Reply via email to