package com.google.typography.font.sfntly.table.bitmap;
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 com.google.typography.font.sfntly.math.FontMath;
import com.google.typography.font.sfntly.table.Header;
import com.google.typography.font.sfntly.table.SubTableContainerTable;
import com.google.typography.font.sfntly.table.SubTableContainerTable.Builder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class EblcTable
extends SubTableContainerTable
{
private static final boolean DEBUG = false;
public static final int NOTDEF = -1;
private final Object bitmapSizeTableLock = new Object();
private volatile List<BitmapSizeTable> bitmapSizeTable;
protected EblcTable(Header paramHeader, ReadableFontData paramReadableFontData)
{
super(paramHeader, paramReadableFontData);
}
public int version()
{
return this.data.readFixed(Offset.version.offset);
}
public int numSizes()
{
return this.data.readULongAsInt(Offset.numSizes.offset);
}
public String toString()
{
StringBuilder localStringBuilder = new StringBuilder(super.toString());
localStringBuilder.append("\nnum sizes = ");
localStringBuilder.append(numSizes());
localStringBuilder.append("\n");
for (int i = 0; i < numSizes(); i++)
{
localStringBuilder.append(i);
localStringBuilder.append(": ");
BitmapSizeTable localBitmapSizeTable = bitmapSizeTable(i);
localStringBuilder.append(localBitmapSizeTable.toString());
}
return localStringBuilder.toString();
}
public BitmapSizeTable bitmapSizeTable(int paramInt)
{
if ((paramInt < 0) || (paramInt > numSizes())) {
throw new IndexOutOfBoundsException("Size table index is outside of the range of tables.");
}
List localList = getBitmapSizeTableList();
return (BitmapSizeTable)localList.get(paramInt);
}
private List<BitmapSizeTable> getBitmapSizeTableList()
{
if (this.bitmapSizeTable == null) {
synchronized (this.bitmapSizeTableLock)
{
if (this.bitmapSizeTable == null) {
this.bitmapSizeTable = createBitmapSizeTable(this.data, numSizes());
}
}
}
return this.bitmapSizeTable;
}
private static List<BitmapSizeTable> createBitmapSizeTable(ReadableFontData paramReadableFontData, int paramInt)
{
ArrayList localArrayList = new ArrayList();
for (int i = 0; i < paramInt; i++)
{
BitmapSizeTable.Builder localBuilder = BitmapSizeTable.Builder.createBuilder(paramReadableFontData.slice(Offset.bitmapSizeTableArrayStart.offset + i * Offset.bitmapSizeTableLength.offset, Offset.bitmapSizeTableLength.offset), paramReadableFontData);
BitmapSizeTable localBitmapSizeTable = (BitmapSizeTable)localBuilder.build();
localArrayList.add(localBitmapSizeTable);
}
return Collections.unmodifiableList(localArrayList);
}
public static final class Builder
extends SubTableContainerTable.Builder<EblcTable>
{
private final int version = 131072;
private List<BitmapSizeTable.Builder> sizeTableBuilders;
public static Builder createBuilder(Header paramHeader, WritableFontData paramWritableFontData)
{
return new Builder(paramHeader, paramWritableFontData);
}
public static Builder createBuilder(Header paramHeader, ReadableFontData paramReadableFontData)
{
return new Builder(paramHeader, paramReadableFontData);
}
protected Builder(Header paramHeader, WritableFontData paramWritableFontData)
{
super(paramWritableFontData);
}
protected Builder(Header paramHeader, ReadableFontData paramReadableFontData)
{
super(paramReadableFontData);
}
public List<BitmapSizeTable.Builder> bitmapSizeBuilders()
{
return getSizeList();
}
protected void revert()
{
this.sizeTableBuilders = null;
setModelChanged(false);
}
public List<Map<Integer, BitmapGlyphInfo>> generateLocaList()
{
List localList = getSizeList();
ArrayList localArrayList = new ArrayList(localList.size());
int i = 0;
Iterator localIterator = localList.iterator();
while (localIterator.hasNext())
{
BitmapSizeTable.Builder localBuilder = (BitmapSizeTable.Builder)localIterator.next();
Map localMap = localBuilder.generateLocaMap();
localArrayList.add(localMap);
}
return localArrayList;
}
private List<BitmapSizeTable.Builder> getSizeList()
{
if (this.sizeTableBuilders == null)
{
this.sizeTableBuilders = initialize(internalReadData());
super.setModelChanged();
}
return this.sizeTableBuilders;
}
private List<BitmapSizeTable.Builder> initialize(ReadableFontData paramReadableFontData)
{
ArrayList localArrayList = new ArrayList();
if (paramReadableFontData != null)
{
int i = paramReadableFontData.readULongAsInt(EblcTable.Offset.numSizes.offset);
for (int j = 0; j < i; j++)
{
BitmapSizeTable.Builder localBuilder = BitmapSizeTable.Builder.createBuilder(paramReadableFontData.slice(EblcTable.Offset.bitmapSizeTableArrayStart.offset + j * EblcTable.Offset.bitmapSizeTableLength.offset, EblcTable.Offset.bitmapSizeTableLength.offset), paramReadableFontData);
localArrayList.add(localBuilder);
}
}
return localArrayList;
}
protected EblcTable subBuildTable(ReadableFontData paramReadableFontData)
{
return new EblcTable(header(), paramReadableFontData);
}
protected void subDataSet()
{
revert();
}
protected int subDataSizeToSerialize()
{
if (this.sizeTableBuilders == null) {
return 0;
}
int i = EblcTable.Offset.headerLength.offset;
int j = 0;
int k = 0;
Iterator localIterator = this.sizeTableBuilders.iterator();
while (localIterator.hasNext())
{
BitmapSizeTable.Builder localBuilder = (BitmapSizeTable.Builder)localIterator.next();
int m = localBuilder.subDataSizeToSerialize();
j = m > 0 ? j : 1;
i += Math.abs(m);
}
return j != 0 ? -i : i;
}
protected boolean subReadyToSerialize()
{
if (this.sizeTableBuilders == null) {
return false;
}
Iterator localIterator = this.sizeTableBuilders.iterator();
while (localIterator.hasNext())
{
BitmapSizeTable.Builder localBuilder = (BitmapSizeTable.Builder)localIterator.next();
if (!localBuilder.subReadyToSerialize()) {
return false;
}
}
return true;
}
protected int subSerialize(WritableFontData paramWritableFontData)
{
getClass();
int i = paramWritableFontData.writeFixed(0, 131072);
i += paramWritableFontData.writeULong(i, this.sizeTableBuilders.size());
int j = i;
int k = j;
int m = k + this.sizeTableBuilders.size() * EblcTable.Offset.bitmapSizeTableLength.offset;
int n = m;
int i1 = 0;
Iterator localIterator1 = this.sizeTableBuilders.iterator();
while (localIterator1.hasNext())
{
BitmapSizeTable.Builder localBuilder = (BitmapSizeTable.Builder)localIterator1.next();
localBuilder.setIndexSubTableArrayOffset(n);
List localList = localBuilder.indexSubTableBuilders();
int i2 = n;
int i3 = i2 + localList.size() * EblcTable.Offset.indexSubHeaderLength.offset;
int i4 = 0;
Iterator localIterator2 = localList.iterator();
while (localIterator2.hasNext())
{
IndexSubTable.Builder localBuilder1 = (IndexSubTable.Builder)localIterator2.next();
i2 += paramWritableFontData.writeUShort(i2, localBuilder1.firstGlyphIndex());
i2 += paramWritableFontData.writeUShort(i2, localBuilder1.lastGlyphIndex());
i2 += paramWritableFontData.writeULong(i2, i3 - n);
int i5 = localBuilder1.subSerialize(paramWritableFontData.slice(i3));
int i6 = FontMath.paddingRequired(i5, FontData.DataSize.ULONG.size());
i3 += i5;
i3 += paramWritableFontData.writePadding(i3, i6);
}
localBuilder.setIndexTableSize(i3 - n);
k += localBuilder.subSerialize(paramWritableFontData.slice(k));
n = i3;
}
return i + n;
}
}
static enum Offset
{
version(0), numSizes(4), headerLength(numSizes.offset + FontData.DataSize.ULONG.size()), bitmapSizeTableArrayStart(headerLength.offset), bitmapSizeTableLength(48), bitmapSizeTable_indexSubTableArrayOffset(0), bitmapSizeTable_indexTableSize(4), bitmapSizeTable_numberOfIndexSubTables(8), bitmapSizeTable_colorRef(12), bitmapSizeTable_hori(16), bitmapSizeTable_vert(28), bitmapSizeTable_startGlyphIndex(40), bitmapSizeTable_endGlyphIndex(42), bitmapSizeTable_ppemX(44), bitmapSizeTable_ppemY(45), bitmapSizeTable_bitDepth(46), bitmapSizeTable_flags(47), sbitLineMetricsLength(12), sbitLineMetrics_ascender(0), sbitLineMetrics_descender(1), sbitLineMetrics_widthMax(2), sbitLineMetrics_caretSlopeNumerator(3), sbitLineMetrics__caretSlopeDenominator(4), sbitLineMetrics_caretOffset(5), sbitLineMetrics_minOriginSB(6), sbitLineMetrics_minAdvanceSB(7), sbitLineMetrics_maxBeforeBL(8), sbitLineMetrics_minAfterBL(9), sbitLineMetrics_pad1(10), sbitLineMetrics_pad2(11), indexSubTableEntryLength(8), indexSubTableEntry_firstGlyphIndex(0), indexSubTableEntry_lastGlyphIndex(2), indexSubTableEntry_additionalOffsetToIndexSubtable(4), indexSubHeaderLength(8), indexSubHeader_indexFormat(0), indexSubHeader_imageFormat(2), indexSubHeader_imageDataOffset(4), indexSubTable1_offsetArray(indexSubHeaderLength.offset), indexSubTable1_builderDataSize(indexSubHeaderLength.offset), indexSubTable2Length(indexSubHeaderLength.offset + FontData.DataSize.ULONG.size() + BitmapGlyph.Offset.bigGlyphMetricsLength.offset), indexSubTable2_imageSize(indexSubHeaderLength.offset), indexSubTable2_bigGlyphMetrics(indexSubTable2_imageSize.offset + FontData.DataSize.ULONG.size()), indexSubTable2_builderDataSize(indexSubTable2_bigGlyphMetrics.offset + BigGlyphMetrics.Offset.metricsLength.offset), indexSubTable3_offsetArray(indexSubHeaderLength.offset), indexSubTable3_builderDataSize(indexSubTable3_offsetArray.offset), indexSubTable4_numGlyphs(indexSubHeaderLength.offset), indexSubTable4_glyphArray(indexSubTable4_numGlyphs.offset + FontData.DataSize.ULONG.size()), indexSubTable4_codeOffsetPairLength(2 * FontData.DataSize.USHORT.size()), indexSubTable4_codeOffsetPair_glyphCode(0), indexSubTable4_codeOffsetPair_offset(FontData.DataSize.USHORT.size()), indexSubTable4_builderDataSize(indexSubTable4_glyphArray.offset), indexSubTable5_imageSize(indexSubHeaderLength.offset), indexSubTable5_bigGlyphMetrics(indexSubTable5_imageSize.offset + FontData.DataSize.ULONG.size()), indexSubTable5_numGlyphs(indexSubTable5_bigGlyphMetrics.offset + BitmapGlyph.Offset.bigGlyphMetricsLength.offset), indexSubTable5_glyphArray(indexSubTable5_numGlyphs.offset + FontData.DataSize.ULONG.size()), indexSubTable5_builderDataSize(indexSubTable5_glyphArray.offset), codeOffsetPairLength(2 * FontData.DataSize.USHORT.size()), codeOffsetPair_glyphCode(0), codeOffsetPair_offset(FontData.DataSize.USHORT.size());
final int offset;
private Offset(int paramInt)
{
this.offset = paramInt;
}
}
}
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\sfntly\table\bitmap\EblcTable.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/