package com.google.typography.font.sfntly; import com.google.typography.font.sfntly.data.FontData.DataSize; import com.google.typography.font.sfntly.data.ReadableFontData; import com.google.typography.font.sfntly.data.WritableFontData; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PushbackInputStream; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; public final class FontFactory { private static final int LOOKAHEAD_SIZE = 4; private boolean fingerprint = false; List<Integer> tableOrdering; public static FontFactory getInstance() { return new FontFactory(); } public void fingerprintFont(boolean paramBoolean) { this.fingerprint = paramBoolean; } public boolean fingerprintFont() { return this.fingerprint; } public Font[] loadFonts(InputStream paramInputStream) throws IOException { PushbackInputStream localPushbackInputStream = new PushbackInputStream(new BufferedInputStream(paramInputStream), 4); if (isCollection(localPushbackInputStream)) { return loadCollection(localPushbackInputStream); } return new Font[] { loadSingleOTF(localPushbackInputStream) }; } public Font.Builder[] loadFontsForBuilding(InputStream paramInputStream) throws IOException { PushbackInputStream localPushbackInputStream = new PushbackInputStream(new BufferedInputStream(paramInputStream), 4); if (isCollection(localPushbackInputStream)) { return loadCollectionForBuilding(localPushbackInputStream); } return new Font.Builder[] { loadSingleOTFForBuilding(localPushbackInputStream) }; } private Font loadSingleOTF(InputStream paramInputStream) throws IOException { return loadSingleOTFForBuilding(paramInputStream).build(); } private Font[] loadCollection(InputStream paramInputStream) throws IOException { Font.Builder[] arrayOfBuilder = loadCollectionForBuilding(paramInputStream); Font[] arrayOfFont = new Font[arrayOfBuilder.length]; for (int i = 0; i < arrayOfFont.length; i++) { arrayOfFont[i] = arrayOfBuilder[i].build(); } return arrayOfFont; } private Font.Builder loadSingleOTFForBuilding(InputStream paramInputStream) throws IOException { MessageDigest localMessageDigest = null; if (fingerprintFont()) { try { localMessageDigest = MessageDigest.getInstance("SHA-1"); } catch (NoSuchAlgorithmException localNoSuchAlgorithmException) { throw new IOException("Unable to get requested message digest algorithm.", localNoSuchAlgorithmException); } localObject = new DigestInputStream(paramInputStream, localMessageDigest); paramInputStream = (InputStream)localObject; } Object localObject = Font.Builder.getOTFBuilder(this, paramInputStream); if (fingerprintFont()) { ((Font.Builder)localObject).setDigest(localMessageDigest.digest()); } return (Font.Builder)localObject; } private Font.Builder[] loadCollectionForBuilding(InputStream paramInputStream) throws IOException { WritableFontData localWritableFontData = WritableFontData.createWritableFontData(paramInputStream.available()); localWritableFontData.copyFrom(paramInputStream); return loadCollectionForBuilding(localWritableFontData); } private static boolean isCollection(PushbackInputStream paramPushbackInputStream) throws IOException { byte[] arrayOfByte = new byte[4]; paramPushbackInputStream.read(arrayOfByte); paramPushbackInputStream.unread(arrayOfByte); return Tag.ttcf == Tag.intValue(arrayOfByte); } public Font[] loadFonts(byte[] paramArrayOfByte) throws IOException { WritableFontData localWritableFontData = WritableFontData.createWritableFontData(paramArrayOfByte); if (isCollection(localWritableFontData)) { return loadCollection(localWritableFontData); } return new Font[] { loadSingleOTF(localWritableFontData) }; } public Font.Builder[] loadFontsForBuilding(byte[] paramArrayOfByte) throws IOException { WritableFontData localWritableFontData = WritableFontData.createWritableFontData(paramArrayOfByte); if (isCollection(localWritableFontData)) { return loadCollectionForBuilding(localWritableFontData); } return new Font.Builder[] { loadSingleOTFForBuilding(localWritableFontData, 0) }; } private Font loadSingleOTF(WritableFontData paramWritableFontData) throws IOException { return loadSingleOTFForBuilding(paramWritableFontData, 0).build(); } private Font[] loadCollection(WritableFontData paramWritableFontData) throws IOException { Font.Builder[] arrayOfBuilder = loadCollectionForBuilding(paramWritableFontData); Font[] arrayOfFont = new Font[arrayOfBuilder.length]; for (int i = 0; i < arrayOfFont.length; i++) { arrayOfFont[i] = arrayOfBuilder[i].build(); } return arrayOfFont; } private Font.Builder loadSingleOTFForBuilding(WritableFontData paramWritableFontData, int paramInt) throws IOException { Object localObject = null; if (fingerprintFont()) {} Font.Builder localBuilder = Font.Builder.getOTFBuilder(this, paramWritableFontData, paramInt); return localBuilder; } private Font.Builder[] loadCollectionForBuilding(WritableFontData paramWritableFontData) throws IOException { int i = paramWritableFontData.readULongAsInt(Offset.TTCTag.offset); long l = paramWritableFontData.readFixed(Offset.Version.offset); int j = paramWritableFontData.readULongAsInt(Offset.numFonts.offset); Font.Builder[] arrayOfBuilder = new Font.Builder[j]; int k = Offset.OffsetTable.offset; int m = 0; while (m < j) { int n = paramWritableFontData.readULongAsInt(k); arrayOfBuilder[m] = loadSingleOTFForBuilding(paramWritableFontData, n); m++; k += FontData.DataSize.ULONG.size(); } return arrayOfBuilder; } private static boolean isCollection(ReadableFontData paramReadableFontData) { byte[] arrayOfByte = new byte[4]; paramReadableFontData.readBytes(0, arrayOfByte, 0, arrayOfByte.length); return Tag.ttcf == Tag.intValue(arrayOfByte); } public void serializeFont(Font paramFont, OutputStream paramOutputStream) throws IOException { paramFont.serialize(paramOutputStream, this.tableOrdering); } public void setSerializationTableOrdering(List<Integer> paramList) { this.tableOrdering = new ArrayList(paramList); } public Font.Builder newFontBuilder() { return Font.Builder.getOTFBuilder(this); } private static enum Offset { TTCTag(0), Version(4), numFonts(8), OffsetTable(12), ulDsigTag(0), ulDsigLength(4), ulDsigOffset(8); private final int offset; private Offset(int paramInt) { this.offset = paramInt; } } } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\sfntly\FontFactory.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */