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 java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
public final class IndexSubTableFormat1
extends IndexSubTable
{
private IndexSubTableFormat1(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2)
{
super(paramReadableFontData, paramInt1, paramInt2);
}
public int numGlyphs()
{
return lastGlyphIndex() - firstGlyphIndex() + 1;
}
public int glyphStartOffset(int paramInt)
{
int i = checkGlyphRange(paramInt);
return loca(i);
}
public int glyphLength(int paramInt)
{
int i = checkGlyphRange(paramInt);
return loca(i + 1) - loca(i);
}
private int loca(int paramInt)
{
return imageDataOffset() + this.data.readULongAsInt(EblcTable.Offset.indexSubTable1_offsetArray.offset + paramInt * FontData.DataSize.ULONG.size());
}
public static final class Builder
extends IndexSubTable.Builder<IndexSubTableFormat1>
{
private List<Integer> offsetArray;
public static Builder createBuilder()
{
return new Builder();
}
static Builder createBuilder(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2, int paramInt3)
{
int i = dataLength(paramReadableFontData, paramInt1, paramInt2, paramInt3);
return new Builder(paramReadableFontData.slice(paramInt1, i), paramInt2, paramInt3);
}
static Builder createBuilder(WritableFontData paramWritableFontData, int paramInt1, int paramInt2, int paramInt3)
{
int i = dataLength(paramWritableFontData, paramInt1, paramInt2, paramInt3);
return new Builder(paramWritableFontData.slice(paramInt1, i), paramInt2, paramInt3);
}
private static int dataLength(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2, int paramInt3)
{
return EblcTable.Offset.indexSubHeaderLength.offset + (paramInt3 - paramInt2 + 1 + 1) * FontData.DataSize.ULONG.size();
}
private Builder()
{
super(1);
}
private Builder(WritableFontData paramWritableFontData, int paramInt1, int paramInt2)
{
super(paramInt1, paramInt2);
}
private Builder(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2)
{
super(paramInt1, paramInt2);
}
public int numGlyphs()
{
return getOffsetArray().size() - 1;
}
public int glyphLength(int paramInt)
{
int i = checkGlyphRange(paramInt);
List localList = getOffsetArray();
return ((Integer)localList.get(i + 1)).intValue() - ((Integer)localList.get(i)).intValue();
}
public int glyphStartOffset(int paramInt)
{
int i = checkGlyphRange(paramInt);
List localList = getOffsetArray();
return ((Integer)localList.get(i)).intValue();
}
public List<Integer> offsetArray()
{
return getOffsetArray();
}
private List<Integer> getOffsetArray()
{
if (this.offsetArray == null)
{
initialize(internalReadData());
setModelChanged();
}
return this.offsetArray;
}
private void initialize(ReadableFontData paramReadableFontData)
{
if (this.offsetArray == null) {
this.offsetArray = new ArrayList();
} else {
this.offsetArray.clear();
}
if (paramReadableFontData != null)
{
int i = lastGlyphIndex() - firstGlyphIndex() + 1 + 1;
for (int j = 0; j < i; j++) {
this.offsetArray.add(Integer.valueOf(paramReadableFontData.readULongAsInt(EblcTable.Offset.indexSubTable1_offsetArray.offset + j * FontData.DataSize.ULONG.size())));
}
}
}
public void setOffsetArray(List<Integer> paramList)
{
this.offsetArray = paramList;
setModelChanged();
}
Iterator<BitmapGlyphInfo> iterator()
{
return new BitmapGlyphInfoIterator();
}
protected void revert()
{
super.revert();
this.offsetArray = null;
}
protected IndexSubTableFormat1 subBuildTable(ReadableFontData paramReadableFontData)
{
return new IndexSubTableFormat1(paramReadableFontData, firstGlyphIndex(), lastGlyphIndex(), null);
}
protected void subDataSet()
{
revert();
}
protected int subDataSizeToSerialize()
{
if (this.offsetArray == null) {
return internalReadData().length();
}
return EblcTable.Offset.indexSubHeaderLength.offset + this.offsetArray.size() * FontData.DataSize.ULONG.size();
}
protected boolean subReadyToSerialize()
{
return this.offsetArray != null;
}
protected int subSerialize(WritableFontData paramWritableFontData)
{
int i = super.serializeIndexSubHeader(paramWritableFontData);
if (!modelChanged())
{
i += internalReadData().slice(EblcTable.Offset.indexSubTable1_offsetArray.offset).copyTo(paramWritableFontData.slice(EblcTable.Offset.indexSubTable1_offsetArray.offset));
}
else
{
Iterator localIterator = this.offsetArray.iterator();
while (localIterator.hasNext())
{
Integer localInteger = (Integer)localIterator.next();
i += paramWritableFontData.writeULong(i, localInteger.intValue());
}
}
return i;
}
private class BitmapGlyphInfoIterator
implements Iterator<BitmapGlyphInfo>
{
private int glyphId = IndexSubTableFormat1.Builder.this.firstGlyphIndex();
public BitmapGlyphInfoIterator() {}
public boolean hasNext()
{
return this.glyphId <= IndexSubTableFormat1.Builder.this.lastGlyphIndex();
}
public BitmapGlyphInfo next()
{
if (!hasNext()) {
throw new NoSuchElementException("No more characters to iterate.");
}
BitmapGlyphInfo localBitmapGlyphInfo = new BitmapGlyphInfo(this.glyphId, IndexSubTableFormat1.Builder.this.imageDataOffset(), IndexSubTableFormat1.Builder.this.glyphStartOffset(this.glyphId), IndexSubTableFormat1.Builder.this.glyphLength(this.glyphId), IndexSubTableFormat1.Builder.this.imageFormat());
this.glyphId += 1;
return localBitmapGlyphInfo;
}
public void remove()
{
throw new UnsupportedOperationException("Unable to remove a glyph info.");
}
}
}
}
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\sfntly\table\bitmap\IndexSubTableFormat1.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/