package com.google.typography.font.sfntly.table.truetype;
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;
public final class SimpleGlyph
extends Glyph
{
private static final int FLAG_ONCURVE = 1;
private static final int FLAG_XSHORT = 2;
private static final int FLAG_YSHORT = 4;
private static final int FLAG_REPEAT = 8;
private static final int FLAG_XREPEATSIGN = 16;
private static final int FLAG_YREPEATSIGN = 32;
private int instructionSize;
private int numberOfPoints;
private int instructionsOffset;
private int flagsOffset;
private int xCoordinatesOffset;
private int yCoordinatesOffset;
private int flagByteCount;
private int xByteCount;
private int yByteCount;
private int[] xCoordinates;
private int[] yCoordinates;
private boolean[] onCurve;
private int[] contourIndex;
SimpleGlyph(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2)
{
super(paramReadableFontData, paramInt1, paramInt2, Glyph.GlyphType.Simple);
}
private SimpleGlyph(ReadableFontData paramReadableFontData)
{
super(paramReadableFontData, Glyph.GlyphType.Simple);
}
protected void initialize()
{
if (this.initialized) {
return;
}
synchronized (this.initializationLock)
{
if (this.initialized) {
return;
}
if (readFontData().length() == 0)
{
this.instructionSize = 0;
this.numberOfPoints = 0;
this.instructionsOffset = 0;
this.flagsOffset = 0;
this.xCoordinatesOffset = 0;
this.yCoordinatesOffset = 0;
return;
}
this.instructionSize = this.data.readUShort(GlyphTable.Offset.simpleEndPtsOfCountours.offset + numberOfContours() * FontData.DataSize.USHORT.size());
this.instructionsOffset = (GlyphTable.Offset.simpleEndPtsOfCountours.offset + (numberOfContours() + 1) * FontData.DataSize.USHORT.size());
this.flagsOffset = (this.instructionsOffset + this.instructionSize * FontData.DataSize.BYTE.size());
this.numberOfPoints = (contourEndPoint(numberOfContours() - 1) + 1);
this.xCoordinates = new int[this.numberOfPoints];
this.yCoordinates = new int[this.numberOfPoints];
this.onCurve = new boolean[this.numberOfPoints];
parseData(false);
this.xCoordinatesOffset = (this.flagsOffset + this.flagByteCount * FontData.DataSize.BYTE.size());
this.yCoordinatesOffset = (this.xCoordinatesOffset + this.xByteCount * FontData.DataSize.BYTE.size());
this.contourIndex = new int[numberOfContours() + 1];
this.contourIndex[0] = 0;
for (int i = 0; i < this.contourIndex.length - 1; i++) {
this.contourIndex[(i + 1)] = (contourEndPoint(i) + 1);
}
parseData(true);
i = 5 * FontData.DataSize.SHORT.size() + numberOfContours() * FontData.DataSize.USHORT.size() + FontData.DataSize.USHORT.size() + this.instructionSize * FontData.DataSize.BYTE.size() + this.flagByteCount * FontData.DataSize.BYTE.size() + this.xByteCount * FontData.DataSize.BYTE.size() + this.yByteCount * FontData.DataSize.BYTE.size();
setPadding(dataLength() - i);
this.initialized = true;
}
}
private void parseData(boolean paramBoolean)
{
int i = 0;
int j = 0;
int k = 0;
int m = 0;
int n = 0;
for (int i1 = 0; i1 < this.numberOfPoints; i1++)
{
if (j == 0)
{
i = flagAsInt(k++);
if ((i & 0x8) == 8) {
j = flagAsInt(k++);
}
}
else
{
j--;
}
if (paramBoolean) {
this.onCurve[i1] = ((i & 0x1) == 1 ? 1 : false);
}
if ((i & 0x2) == 2)
{
if (paramBoolean)
{
this.xCoordinates[i1] = this.data.readUByte(this.xCoordinatesOffset + m);
this.xCoordinates[i1] *= ((i & 0x10) == 16 ? 1 : -1);
}
m++;
}
else if ((i & 0x10) != 16)
{
if (paramBoolean) {
this.xCoordinates[i1] = this.data.readShort(this.xCoordinatesOffset + m);
}
m += 2;
}
if ((paramBoolean) && (i1 > 0)) {
this.xCoordinates[i1] += this.xCoordinates[(i1 - 1)];
}
if ((i & 0x4) == 4)
{
if (paramBoolean)
{
this.yCoordinates[i1] = this.data.readUByte(this.yCoordinatesOffset + n);
this.yCoordinates[i1] *= ((i & 0x20) == 32 ? 1 : -1);
}
n++;
}
else if ((i & 0x20) != 32)
{
if (paramBoolean) {
this.yCoordinates[i1] = this.data.readShort(this.yCoordinatesOffset + n);
}
n += 2;
}
if ((paramBoolean) && (i1 > 0)) {
this.yCoordinates[i1] += this.yCoordinates[(i1 - 1)];
}
}
this.flagByteCount = k;
this.xByteCount = m;
this.yByteCount = n;
}
private int flagAsInt(int paramInt)
{
return this.data.readUByte(this.flagsOffset + paramInt * FontData.DataSize.BYTE.size());
}
public int contourEndPoint(int paramInt)
{
return this.data.readUShort(paramInt * FontData.DataSize.USHORT.size() + GlyphTable.Offset.simpleEndPtsOfCountours.offset);
}
public int instructionSize()
{
initialize();
return this.instructionSize;
}
public ReadableFontData instructions()
{
initialize();
return this.data.slice(this.instructionsOffset, instructionSize());
}
public int numberOfPoints(int paramInt)
{
initialize();
if (paramInt >= numberOfContours()) {
return 0;
}
return this.contourIndex[(paramInt + 1)] - this.contourIndex[paramInt];
}
public int xCoordinate(int paramInt1, int paramInt2)
{
initialize();
return this.xCoordinates[(this.contourIndex[paramInt1] + paramInt2)];
}
public int yCoordinate(int paramInt1, int paramInt2)
{
initialize();
return this.yCoordinates[(this.contourIndex[paramInt1] + paramInt2)];
}
public boolean onCurve(int paramInt1, int paramInt2)
{
initialize();
return this.onCurve[(this.contourIndex[paramInt1] + paramInt2)];
}
public String toString()
{
initialize();
StringBuilder localStringBuilder = new StringBuilder(super.toString());
localStringBuilder.append("\tinstruction bytes = " + instructionSize() + "\n");
for (int i = 0; i < numberOfContours(); i++) {
for (int j = 0; j < numberOfPoints(i); j++) {
localStringBuilder.append("\t" + i + ":" + j + " = [" + xCoordinate(i, j) + ", " + yCoordinate(i, j) + ", " + onCurve(i, j) + "]\n");
}
}
return localStringBuilder.toString();
}
public static class SimpleGlyphBuilder
extends Glyph.Builder<SimpleGlyph>
{
protected SimpleGlyphBuilder(WritableFontData paramWritableFontData, int paramInt1, int paramInt2)
{
super();
}
protected SimpleGlyphBuilder(ReadableFontData paramReadableFontData, int paramInt1, int paramInt2)
{
super();
}
protected SimpleGlyph subBuildTable(ReadableFontData paramReadableFontData)
{
return new SimpleGlyph(paramReadableFontData, 0, paramReadableFontData.length());
}
}
public static final class SimpleContour
extends Glyph.Contour
{}
}
/* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\google\typography\font\sfntly\table\truetype\SimpleGlyph.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/