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]