class CFFFont.Item {
/** Emit the byte stream for this item. */
public void emit(byte[] buffer) {}
}
class CFFFont.RangeItem {
@Override
public void emit(byte[] buffer) {
//System.err.println("range emit offset "+offset+" size="+length);
try {
buf.seek(offset);
for (int i=myOffset; i<myOffset+length; i++)
buffer[i] = buf.readByte();
}
catch (Exception e) {
throw new ExceptionConverter(e);
}
//System.err.println("finished range emit");
}
}
class CFFFont.IndexOffsetItem {
@Override
public void emit(byte[] buffer) {
int i=0;
switch (size) {
case 4:
buffer[myOffset+i] = (byte) (value >>> 24 & 0xff);
i++;
case 3:
buffer[myOffset+i] = (byte) (value >>> 16 & 0xff);
i++;
case 2:
buffer[myOffset+i] = (byte) (value >>> 8 & 0xff);
i++;
case 1:
buffer[myOffset+i] = (byte) (value >>> 0 & 0xff);
i++;
}
/*
int mask = 0xff;
for (int i=size-1; i>=0; i--) {
buffer[myOffset+i] = (byte) (value & mask);
mask <<= 8;
}
*/
}
}
class CFFFont.DictOffsetItem {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
if (size==5) {
buffer[myOffset] = 29;
buffer[myOffset+1] = (byte) (value >>> 24 & 0xff);
buffer[myOffset+2] = (byte) (value >>> 16 & 0xff);
buffer[myOffset+3] = (byte) (value >>> 8 & 0xff);
buffer[myOffset+4] = (byte) (value >>> 0 & 0xff);
}
}
}
class CFFFont.UInt24Item {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
buffer[myOffset+0] = (byte) (value >>> 16 & 0xff);
buffer[myOffset+1] = (byte) (value >>> 8 & 0xff);
buffer[myOffset+2] = (byte) (value >>> 0 & 0xff);
}
}
class CFFFont.UInt32Item {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
buffer[myOffset+0] = (byte) (value >>> 24 & 0xff);
buffer[myOffset+1] = (byte) (value >>> 16 & 0xff);
buffer[myOffset+2] = (byte) (value >>> 8 & 0xff);
buffer[myOffset+3] = (byte) (value >>> 0 & 0xff);
}
}
class CFFFont.UInt16Item {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
buffer[myOffset+0] = (byte) (value >>> 8 & 0xff);
buffer[myOffset+1] = (byte) (value >>> 0 & 0xff);
}
}
class CFFFont.UInt8Item {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
buffer[myOffset+0] = (byte) (value >>> 0 & 0xff);
}
}
class CFFFont.StringItem {
@Override
public void emit(byte[] buffer) {
for (int i=0; i<s.length(); i++)
buffer[myOffset+i] = (byte) (s.charAt(i) & 0xff);
}
}
class CFFFont.DictNumberItem {
// this is incomplete!
@Override
public void emit(byte[] buffer) {
if (size==5) {
buffer[myOffset] = 29;
buffer[myOffset+1] = (byte) (value >>> 24 & 0xff);
buffer[myOffset+2] = (byte) (value >>> 16 & 0xff);
buffer[myOffset+3] = (byte) (value >>> 8 & 0xff);
buffer[myOffset+4] = (byte) (value >>> 0 & 0xff);
}
}
}
|