You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by bu...@apache.org on 2004/01/08 20:50:16 UTC
DO NOT REPLY [Bug 25997] New: -
[PATCH] Basic OpenType CFF Support for maintenance branch: 3 Patches
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25997>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25997
[PATCH] Basic OpenType CFF Support for maintenance branch: 3 Patches
Summary: [PATCH] Basic OpenType CFF Support for maintenance
branch: 3 Patches
Product: Fop
Version: 0.20.5
Platform: All
OS/Version: Other
Status: NEW
Severity: Enhancement
Priority: Other
Component: general
AssignedTo: fop-dev@xml.apache.org
ReportedBy: drmacro@yahoo.com
Index: TTFFile.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/fonts/Attic/TTFFile.java,v
retrieving revision 1.6.2.10
diff -w -u -r1.6.2.10 TTFFile.java
--- TTFFile.java 20 Sep 2003 21:48:18 -0000 1.6.2.10
+++ TTFFile.java 8 Jan 2004 19:32:42 -0000
@@ -51,10 +51,14 @@
package org.apache.fop.fonts;
import java.io.IOException;
+
import java.util.ArrayList;
+
import java.util.HashMap;
+
import java.util.Iterator;
+
/**
* Reads a TrueType file or a TrueType Collection.
* The TrueType spec can be found at the Microsoft
@@ -112,6 +116,7 @@
HashMap ansiIndex;
private TTFDirTabEntry currentDirTab;
+ private boolean isCFF = false;
/**
* Position inputstream to position indicated
@@ -431,16 +436,22 @@
initAnsiWidths();
readPostscript(in);
readOS2(in);
+ if (!isCFF) {
readIndexToLocation(in);
readGlyf(in);
+ }
readName(in);
readPCLT(in);
readCMAP(in); // Read cmap table and fill in ansiwidths
createCMaps(); // Create cmaps for bfentries
// print_max_min();
+ if (isCFF) {
+ // readGPOS(in); // GPOS is OpenType CFF analog of
TrueType kerning table.
+ } else {
readKerning(in);
}
+ }
private void createCMaps() {
cmaps = new ArrayList();
@@ -626,6 +637,10 @@
return is_embeddable;
}
+ public boolean isCFF() {
+ return isCFF;
+ }
+
/**
* Read Table Directory from the current position in the
@@ -634,7 +649,22 @@
* as value.
*/
protected void readDirTabs(FontFileReader in) throws IOException {
- in.skip(4); // TTF_FIXED_SIZE
+ byte[] verBytes = new byte[4];
+ verBytes[0] = in.readTTFByte();
+ verBytes[1] = in.readTTFByte();
+ verBytes[2] = in.readTTFByte();
+ verBytes[3] = in.readTTFByte();
+ String version = new String(verBytes, "ISO-8859-1");
+ if (verBytes[1] == 0x01) {
+ System.out.println("Font is TrueType TTF format");
+ } else if (version.equals("OTTO")) {
+ System.out.println("Font is OpenType CFF format");
+ isCFF = true;
+ } else {
+ String msg = "Font does not appear to be either
TrueType or OpenType";
+ throw new IOException(msg);
+ }
+
int ntabs = in.readTTFUShort();
in.skip(6); // 3xTTF_USHORT_SIZE
Index: TTFDirTabEntry.java
===================================================================
RCS file: /home/cvspublic/xml-
fop/src/org/apache/fop/fonts/Attic/TTFDirTabEntry.java,v
retrieving revision 1.4.2.2
diff -w -u -r1.4.2.2 TTFDirTabEntry.java
--- TTFDirTabEntry.java 20 Sep 2003 21:48:18 -0000 1.4.2.2
+++ TTFDirTabEntry.java 8 Jan 2004 19:32:01 -0000
@@ -50,7 +50,8 @@
*/
package org.apache.fop.fonts;
-import java.io.IOException;
+import java.io.IOException;
import java.io.UnsupportedEncodingException;
+
class TTFDirTabEntry {
byte[] tag;
@@ -85,7 +86,18 @@
* " length: " + length +
* " name: " + new String(tag));
*/
- return new String(tag, "ISO-8859-1");
+ String tagStr = new String(tag, "ISO-8859-1");
+ // System.err.println("tag='" + tagStr + "'");
+
+ //System.out.println(this.toString());
+ return tagStr;
}
+ public String getTagString() {
+ try {
+ return new String(tag, "ISO-8859-1");
+ } catch (UnsupportedEncodingException e) {
+ return this.toString(); // Should never happen.
+ }
+ }
}
Index: TTFReader.java
===================================================================
RCS file: /home/cvspublic/xml-
fop/src/org/apache/fop/fonts/apps/Attic/TTFReader.java,v
retrieving revision 1.4.2.5
diff -w -u -r1.4.2.5 TTFReader.java
--- TTFReader.java 20 Sep 2003 21:48:18 -0000 1.4.2.5
+++ TTFReader.java 8 Jan 2004 19:33:25 -0000
@@ -425,6 +425,9 @@
}
}
+ // TODO: Need to get equivalent info from GPOS table for
+ // CFF fonts.
+ if (!ttf.isCFF()) {
// Get kerning
Iterator enum;
if (isCid)
@@ -457,6 +460,7 @@
}
}
}
+ }
return doc;
}