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.Collections; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; public final class IndexSubTableFormat5 extends IndexSubTable { private final int imageSize = this.data.readULongAsInt(EblcTable.Offset.indexSubTable5_imageSize.offset); private IndexSubTableFormat5(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2) { super(paramReadableFontData, paramInt1, paramInt2); } private static int numGlyphs(ReadableFontData paramReadableFontData, int paramInt) { int i = paramReadableFontData.readULongAsInt(paramInt + EblcTable.Offset.indexSubTable5_numGlyphs.offset); return i; } public int imageSize() { return this.data.readULongAsInt(EblcTable.Offset.indexSubTable5_imageSize.offset); } public BigGlyphMetrics bigMetrics() { return new BigGlyphMetrics(this.data.slice(EblcTable.Offset.indexSubTable5_bigGlyphMetrics.offset, BigGlyphMetrics.Offset.metricsLength.offset)); } public int numGlyphs() { return numGlyphs(this.data, 0); } public int glyphStartOffset(int paramInt) { checkGlyphRange(paramInt); int i = readFontData().searchUShort(EblcTable.Offset.indexSubTable5_glyphArray.offset, FontData.DataSize.USHORT.size(), numGlyphs(), paramInt); if (i == -1) { return i; } return i * this.imageSize; } public int glyphLength(int paramInt) { checkGlyphRange(paramInt); return this.imageSize; } public static final class Builder extends IndexSubTable.Builder<IndexSubTableFormat5> { private List<Integer> glyphArray; private BigGlyphMetrics.Builder metrics; 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) { int i = IndexSubTableFormat5.numGlyphs(paramReadableFontData, paramInt1); return EblcTable.Offset.indexSubTable5_glyphArray.offset + i * FontData.DataSize.USHORT.size(); } private Builder() { super(5); this.metrics = BigGlyphMetrics.Builder.createBuilder(); } private Builder(WritableFontData paramWritableFontData, int paramInt1, int paramInt2) { super(paramInt1, paramInt2); } private Builder(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2) { super(paramInt1, paramInt2); } public int imageSize() { return internalReadData().readULongAsInt(EblcTable.Offset.indexSubTable5_imageSize.offset); } public void setImageSize(int paramInt) { internalWriteData().writeULong(EblcTable.Offset.indexSubTable5_imageSize.offset, paramInt); } public BigGlyphMetrics.Builder bigMetrics() { if (this.metrics == null) { WritableFontData localWritableFontData = internalWriteData().slice(EblcTable.Offset.indexSubTable5_bigGlyphMetrics.offset, BigGlyphMetrics.Offset.metricsLength.offset); this.metrics = new BigGlyphMetrics.Builder(localWritableFontData); setModelChanged(); } return this.metrics; } public int numGlyphs() { return getGlyphArray().size(); } public int glyphLength(int paramInt) { return imageSize(); } public int glyphStartOffset(int paramInt) { checkGlyphRange(paramInt); List localList = getGlyphArray(); int i = Collections.binarySearch(localList, Integer.valueOf(paramInt)); if (i == -1) { return -1; } return i * imageSize(); } public List<Integer> glyphArray() { return getGlyphArray(); } private List<Integer> getGlyphArray() { if (this.glyphArray == null) { initialize(super.internalReadData()); super.setModelChanged(); } return this.glyphArray; } private void initialize(ReadableFontData paramReadableFontData) { if (this.glyphArray == null) { this.glyphArray = new ArrayList(); } else { this.glyphArray.clear(); } if (paramReadableFontData != null) { int i = IndexSubTableFormat5.numGlyphs(paramReadableFontData, 0); for (int j = 0; j < i; j++) { this.glyphArray.add(Integer.valueOf(paramReadableFontData.readUShort(EblcTable.Offset.indexSubTable5_glyphArray.offset + j * FontData.DataSize.USHORT.size()))); } } } public void setGlyphArray(List<Integer> paramList) { this.glyphArray = paramList; setModelChanged(); } Iterator<BitmapGlyphInfo> iterator() { return new BitmapGlyphInfoIterator(); } protected void revert() { super.revert(); this.glyphArray = null; } protected IndexSubTableFormat5 subBuildTable(ReadableFontData paramReadableFontData) { return new IndexSubTableFormat5(paramReadableFontData, firstGlyphIndex(), lastGlyphIndex(), null); } protected void subDataSet() { revert(); } protected int subDataSizeToSerialize() { if (this.glyphArray == null) { return internalReadData().length(); } return EblcTable.Offset.indexSubTable5_builderDataSize.offset + this.glyphArray.size() * FontData.DataSize.USHORT.size(); } protected boolean subReadyToSerialize() { return this.glyphArray != null; } protected int subSerialize(WritableFontData paramWritableFontData) { int i = super.serializeIndexSubHeader(paramWritableFontData); if (!modelChanged()) { i += internalReadData().slice(EblcTable.Offset.indexSubTable5_imageSize.offset).copyTo(paramWritableFontData.slice(EblcTable.Offset.indexSubTable5_imageSize.offset)); } else { i += paramWritableFontData.writeULong(EblcTable.Offset.indexSubTable5_imageSize.offset, imageSize()); i += bigMetrics().subSerialize(paramWritableFontData.slice(i)); i += paramWritableFontData.writeULong(i, this.glyphArray.size()); Iterator localIterator = this.glyphArray.iterator(); while (localIterator.hasNext()) { Integer localInteger = (Integer)localIterator.next(); i += paramWritableFontData.writeUShort(i, localInteger.intValue()); } } return i; } private class BitmapGlyphInfoIterator implements Iterator<BitmapGlyphInfo> { private int offsetIndex; public BitmapGlyphInfoIterator() {} public boolean hasNext() { return this.offsetIndex < IndexSubTableFormat5.Builder.this.getGlyphArray().size(); } public BitmapGlyphInfo next() { if (!hasNext()) { throw new NoSuchElementException("No more characters to iterate."); } BitmapGlyphInfo localBitmapGlyphInfo = new BitmapGlyphInfo(((Integer)IndexSubTableFormat5.Builder.this.getGlyphArray().get(this.offsetIndex)).intValue(), IndexSubTableFormat5.Builder.this.imageDataOffset(), this.offsetIndex * IndexSubTableFormat5.Builder.this.imageSize(), IndexSubTableFormat5.Builder.this.imageSize(), IndexSubTableFormat5.Builder.this.imageFormat()); this.offsetIndex += 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\IndexSubTableFormat5.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */