package com.google.typography.font.tools.conversion.eot;
import com.google.typography.font.sfntly.Tag;
import com.google.typography.font.sfntly.data.ReadableFontData;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
public class MtxFontBuilder
{
private static final int OPENTYPE_VERSION_1_0 = 65536;
private static final int FONT_HEADER_BASE_SIZE = 12;
private static final int FONT_HEADER_PER_TABLE_SIZE = 16;
private static final int TABLE_ALIGN = 4;
private Map<Integer, ReadableFontData> tables = new HashMap();
private MtxHeadBuilder headBuilder = new MtxHeadBuilder();
public MtxHeadBuilder getHeadBuilder()
{
return this.headBuilder;
}
public void addTable(int paramInt, ReadableFontData paramReadableFontData)
{
this.tables.put(Integer.valueOf(paramInt), paramReadableFontData);
}
public void addTableBytes(int paramInt, byte[] paramArrayOfByte)
{
addTable(paramInt, ReadableFontData.createReadableFontData(paramArrayOfByte));
}
private static void putUshort(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
{
paramArrayOfByte[paramInt1] = ((byte)(paramInt2 >> 8));
paramArrayOfByte[(paramInt1 + 1)] = ((byte)paramInt2);
}
private static void putUlong(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
{
paramArrayOfByte[paramInt1] = ((byte)(paramInt2 >> 24));
paramArrayOfByte[(paramInt1 + 1)] = ((byte)(paramInt2 >> 16));
paramArrayOfByte[(paramInt1 + 2)] = ((byte)(paramInt2 >> 8));
paramArrayOfByte[(paramInt1 + 3)] = ((byte)paramInt2);
}
public byte[] build()
{
addTable(Tag.head, this.headBuilder.build());
TreeSet localTreeSet = new TreeSet(this.tables.keySet());
int i = this.tables.size();
int j = 12 + 16 * i;
Object localObject = this.tables.entrySet().iterator();
while (((Iterator)localObject).hasNext())
{
Map.Entry localEntry = (Map.Entry)((Iterator)localObject).next();
ReadableFontData localReadableFontData1 = (ReadableFontData)localEntry.getValue();
if (localReadableFontData1 != null) {
j += (((ReadableFontData)localEntry.getValue()).length() + 4 - 1 & 0xFFFFFFFC);
}
}
localObject = new byte[j];
putUlong((byte[])localObject, 0, 65536);
putUshort((byte[])localObject, 4, i);
int k = 0;
int m = searchRange(i);
putUshort((byte[])localObject, 6, m * 16);
putUshort((byte[])localObject, 8, log2(m));
putUshort((byte[])localObject, 10, (i - m) * 16);
int n = 12;
int i1 = 12 + 16 * i;
Iterator localIterator = localTreeSet.iterator();
while (localIterator.hasNext())
{
Integer localInteger = (Integer)localIterator.next();
ReadableFontData localReadableFontData2 = (ReadableFontData)this.tables.get(localInteger);
putUlong((byte[])localObject, n, localInteger.intValue());
int i2 = 0;
putUlong((byte[])localObject, n + 4, i2);
if (localReadableFontData2 == null)
{
putUlong((byte[])localObject, n + 8, 0);
putUlong((byte[])localObject, n + 12, 0);
}
else
{
putUlong((byte[])localObject, n + 8, i1);
int i3 = localReadableFontData2.length();
putUlong((byte[])localObject, n + 12, i3);
localReadableFontData2.readBytes(0, (byte[])localObject, i1, i3);
i1 += (i3 + 4 - 1 & 0xFFFFFFFC);
}
n += 16;
}
return (byte[])localObject;
}
static int searchRange(int paramInt)
{
return Integer.highestOneBit(paramInt);
}
static int log2(int paramInt)
{
return 31 - Integer.numberOfLeadingZeros(paramInt);
}
}
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\tools\conversion\eot\MtxFontBuilder.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/