package com.google.typography.font.tools.subsetter;
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.table.truetype.CompositeGlyph;
import com.google.typography.font.sfntly.table.truetype.Glyph;
import com.google.typography.font.sfntly.table.truetype.Glyph.Builder;
import com.google.typography.font.sfntly.table.truetype.GlyphTable.Builder;
import com.google.typography.font.sfntly.table.truetype.SimpleGlyph;
public class GlyphStripper
{
private final GlyphTable.Builder glyphTableBuilder;
public GlyphStripper(GlyphTable.Builder paramBuilder)
{
this.glyphTableBuilder = paramBuilder;
}
public Glyph.Builder<? extends Glyph> stripGlyph(Glyph paramGlyph)
{
WritableFontData localWritableFontData = null;
if ((paramGlyph != null) && (paramGlyph.readFontData().length() > 0)) {
switch (paramGlyph.glyphType())
{
case Simple:
localWritableFontData = stripSimpleGlyph(paramGlyph);
break;
case Composite:
localWritableFontData = stripCompositeGlyph(paramGlyph);
break;
}
}
if (localWritableFontData == null) {
localWritableFontData = WritableFontData.createWritableFontData(0);
}
return this.glyphTableBuilder.glyphBuilder(localWritableFontData);
}
private WritableFontData stripSimpleGlyph(Glyph paramGlyph)
{
int i = computeSimpleStrippedGlyphSize(paramGlyph);
int j = i + 1 & 0xFFFFFFFE;
WritableFontData localWritableFontData = WritableFontData.createWritableFontData(j);
SimpleGlyph localSimpleGlyph = (SimpleGlyph)paramGlyph;
ReadableFontData localReadableFontData = paramGlyph.readFontData();
int k = writeHeaderAndContoursSize(localWritableFontData, 0, localReadableFontData, 0, localSimpleGlyph);
k += writeZeroInstructionLength(localWritableFontData, k);
k += writeEndSimpleGlyph(localWritableFontData, k, localReadableFontData, k + localSimpleGlyph.instructionSize() * FontData.DataSize.BYTE.size(), i - k);
return localWritableFontData;
}
private int writeHeaderAndContoursSize(WritableFontData paramWritableFontData, int paramInt1, ReadableFontData paramReadableFontData, int paramInt2, SimpleGlyph paramSimpleGlyph)
{
int i = FontData.DataSize.SHORT.size() * 5 + paramSimpleGlyph.numberOfContours() * FontData.DataSize.USHORT.size();
WritableFontData localWritableFontData = paramWritableFontData.slice(paramInt1, i);
paramReadableFontData.slice(paramInt2, i).copyTo(localWritableFontData);
return i;
}
private int writeZeroInstructionLength(WritableFontData paramWritableFontData, int paramInt)
{
paramWritableFontData.writeUShort(paramInt, 0);
return FontData.DataSize.USHORT.size();
}
private int writeEndSimpleGlyph(WritableFontData paramWritableFontData, int paramInt1, ReadableFontData paramReadableFontData, int paramInt2, int paramInt3)
{
ReadableFontData localReadableFontData = paramReadableFontData.slice(paramInt2, paramInt3);
WritableFontData localWritableFontData = paramWritableFontData.slice(paramInt1, paramInt3);
localReadableFontData.copyTo(localWritableFontData);
return paramInt3;
}
private WritableFontData stripCompositeGlyph(Glyph paramGlyph)
{
int i = computeCompositeStrippedGlyphSize(paramGlyph);
WritableFontData localWritableFontData = WritableFontData.createWritableFontData(i);
CompositeGlyph localCompositeGlyph = (CompositeGlyph)paramGlyph;
ReadableFontData localReadableFontData = paramGlyph.readFontData().slice(0, i);
localReadableFontData.copyTo(localWritableFontData);
if (localCompositeGlyph.instructionSize() > 0) {
overrideCompositeGlyfFlags(localWritableFontData, i);
}
return localWritableFontData;
}
private void overrideCompositeGlyfFlags(WritableFontData paramWritableFontData, int paramInt)
{
int i = 5 * FontData.DataSize.USHORT.size();
int j = 32;
while ((j & 0x20) != 0)
{
j = paramWritableFontData.readUShort(i);
j &= 0xFEFF;
paramWritableFontData.writeUShort(i, j);
i += 2 * FontData.DataSize.USHORT.size();
if ((j & 0x1) != 0) {
i += 2 * FontData.DataSize.SHORT.size();
} else {
i += 2 * FontData.DataSize.BYTE.size();
}
if ((j & 0x8) != 0) {
i += FontData.DataSize.F2DOT14.size();
} else if ((j & 0x40) != 0) {
i += 2 * FontData.DataSize.F2DOT14.size();
} else if ((j & 0x80) != 0) {
i += 4 * FontData.DataSize.F2DOT14.size();
}
}
}
private int computeSimpleStrippedGlyphSize(Glyph paramGlyph)
{
SimpleGlyph localSimpleGlyph = (SimpleGlyph)paramGlyph;
int i = localSimpleGlyph.instructionSize();
int j = localSimpleGlyph.dataLength() - localSimpleGlyph.padding();
if (i > 0) {
return j - computeInstructionsSize(localSimpleGlyph);
}
return j;
}
private int computeInstructionsSize(SimpleGlyph paramSimpleGlyph)
{
return paramSimpleGlyph.instructionSize() * FontData.DataSize.BYTE.size();
}
private int computeCompositeStrippedGlyphSize(Glyph paramGlyph)
{
CompositeGlyph localCompositeGlyph = (CompositeGlyph)paramGlyph;
int i = localCompositeGlyph.instructionSize();
int j = localCompositeGlyph.dataLength() - localCompositeGlyph.padding();
if (i > 0) {
return j - i * FontData.DataSize.BYTE.size() - FontData.DataSize.USHORT.size();
}
return j;
}
}
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\tools\subsetter\GlyphStripper.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/