package com.google.typography.font.tools.conversion.eot; import com.google.typography.font.sfntly.Font; import com.google.typography.font.sfntly.FontFactory; import com.google.typography.font.sfntly.Tag; import com.google.typography.font.sfntly.data.FontData.DataSize; import com.google.typography.font.sfntly.data.WritableFontData; import com.google.typography.font.sfntly.table.core.FontHeaderTable; import com.google.typography.font.sfntly.table.core.NameTable; import com.google.typography.font.sfntly.table.core.OS2Table; import java.io.ByteArrayOutputStream; import java.io.IOException; public class EOTWriter { private final boolean compressed; private final FontFactory factory = FontFactory.getInstance(); private static final long RESERVED = 0L; private static final short PADDING = 0; private static final long VERSION = 131074L; private static final short MAGIC_NUMBER = 20556; private static final long DEFAULT_FLAGS = 0L; private static final long FLAGS_TT_COMPRESSED = 4L; private static final byte DEFAULT_CHARSET = 1; private static final long CS_XORKEY = 1346851650L; public EOTWriter() { this.compressed = false; } public EOTWriter(boolean paramBoolean) { this.compressed = paramBoolean; } public WritableFontData convert(Font paramFont) throws IOException { ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); this.factory.serializeFont(paramFont, localByteArrayOutputStream); byte[] arrayOfByte1 = localByteArrayOutputStream.toByteArray(); NameTable localNameTable = (NameTable)paramFont.getTable(Tag.name); byte[] arrayOfByte2 = convertUTF16StringToLittleEndian(localNameTable.nameAsBytes(3, 1, 1033, 1)); byte[] arrayOfByte3 = convertUTF16StringToLittleEndian(localNameTable.nameAsBytes(3, 1, 1033, 2)); byte[] arrayOfByte4 = convertUTF16StringToLittleEndian(localNameTable.nameAsBytes(3, 1, 1033, 5)); byte[] arrayOfByte5 = convertUTF16StringToLittleEndian(localNameTable.nameAsBytes(3, 1, 1033, 4)); long l1 = 0L; if (this.compressed) { l1 |= 0x4; MtxWriter localMtxWriter = new MtxWriter(); arrayOfByte1 = localMtxWriter.compress(paramFont); } long l2 = computeEotSize(arrayOfByte2.length, arrayOfByte3.length, arrayOfByte4.length, arrayOfByte5.length, arrayOfByte1.length); WritableFontData localWritableFontData = createWritableFontData((int)l2); OS2Table localOS2Table = (OS2Table)paramFont.getTable(Tag.OS_2); int i = 0; i += localWritableFontData.writeULongLE(i, l2); i += localWritableFontData.writeULongLE(i, arrayOfByte1.length); i += localWritableFontData.writeULongLE(i, 131074L); i += localWritableFontData.writeULongLE(i, l1); i += writeFontPANOSE(i, localOS2Table, localWritableFontData); i += localWritableFontData.writeByte(i, (byte)1); i += localWritableFontData.writeByte(i, (byte)(localOS2Table.fsSelectionAsInt() & 0x1)); i += localWritableFontData.writeULongLE(i, localOS2Table.usWeightClass()); i += localWritableFontData.writeUShortLE(i, (short)localOS2Table.fsTypeAsInt()); i += localWritableFontData.writeUShortLE(i, 20556); i += writeUnicodeRanges(i, localOS2Table, localWritableFontData); i += writeCodePages(i, localOS2Table, localWritableFontData); FontHeaderTable localFontHeaderTable = (FontHeaderTable)paramFont.getTable(Tag.head); i += localWritableFontData.writeULongLE(i, localFontHeaderTable.checkSumAdjustment()); i += writeReservedFields(i, localWritableFontData); i += writePadding(i, localWritableFontData); i += writeUTF16String(i, arrayOfByte2, localWritableFontData); i += writePadding(i, localWritableFontData); i += writeUTF16String(i, arrayOfByte3, localWritableFontData); i += writePadding(i, localWritableFontData); i += writeUTF16String(i, arrayOfByte4, localWritableFontData); i += writePadding(i, localWritableFontData); i += writeUTF16String(i, arrayOfByte5, localWritableFontData); i += writePadding(i, localWritableFontData); i += writePadding(i, localWritableFontData); i += localWritableFontData.writeULongLE(i, 1346851650L); i += localWritableFontData.writeULongLE(i, 0L); i += writePadding(i, localWritableFontData); i += writePadding(i, localWritableFontData); i += localWritableFontData.writeULongLE(i, 0L); i += localWritableFontData.writeULongLE(i, 0L); localWritableFontData.writeBytes(i, arrayOfByte1, 0, arrayOfByte1.length); return localWritableFontData; } private long computeEotSize(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5) { return 16 * FontData.DataSize.ULONG.size() + 12 * FontData.DataSize.BYTE.size() + 12 * FontData.DataSize.USHORT.size() + paramInt1 * FontData.DataSize.BYTE.size() + paramInt2 * FontData.DataSize.BYTE.size() + paramInt3 * FontData.DataSize.BYTE.size() + paramInt4 * FontData.DataSize.BYTE.size() + paramInt5 * FontData.DataSize.BYTE.size() + 5 * FontData.DataSize.ULONG.size(); } private int writeFontPANOSE(int paramInt, OS2Table paramOS2Table, WritableFontData paramWritableFontData) { byte[] arrayOfByte = paramOS2Table.panose(); return paramWritableFontData.writeBytes(paramInt, arrayOfByte, 0, arrayOfByte.length); } private int writeReservedFields(int paramInt, WritableFontData paramWritableFontData) { int i = paramInt; for (int j = 0; j < 4; j++) { i += paramWritableFontData.writeULongLE(i, 0L); } return i - paramInt; } private int writeUnicodeRanges(int paramInt, OS2Table paramOS2Table, WritableFontData paramWritableFontData) { int i = paramInt; i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulUnicodeRange1()); i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulUnicodeRange2()); i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulUnicodeRange3()); i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulUnicodeRange4()); return i - paramInt; } private int writeCodePages(int paramInt, OS2Table paramOS2Table, WritableFontData paramWritableFontData) { int i = paramInt; i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulCodePageRange1()); i += paramWritableFontData.writeULongLE(i, paramOS2Table.ulCodePageRange2()); return i - paramInt; } private int writePadding(int paramInt, WritableFontData paramWritableFontData) { return paramWritableFontData.writeUShortLE(paramInt, 0); } private int writeUTF16String(int paramInt, byte[] paramArrayOfByte, WritableFontData paramWritableFontData) { int i = paramInt; i += paramWritableFontData.writeUShortLE(i, (short)paramArrayOfByte.length); i += paramWritableFontData.writeBytes(i, paramArrayOfByte, 0, paramArrayOfByte.length); return i - paramInt; } private byte[] convertUTF16StringToLittleEndian(byte[] paramArrayOfByte) { if (paramArrayOfByte == null) { return new byte[0]; } for (int i = 0; i < paramArrayOfByte.length; i += 2) { int j = paramArrayOfByte[i]; paramArrayOfByte[i] = paramArrayOfByte[(i + 1)]; paramArrayOfByte[(i + 1)] = j; } return paramArrayOfByte; } private WritableFontData createWritableFontData(int paramInt) { return WritableFontData.createWritableFontData(paramInt); } } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\tools\conversion\eot\EOTWriter.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */