package com.jpexs.decompiler.flash.iggy;
import com.jpexs.decompiler.flash.iggy.streams.ReadDataStreamInterface;
import com.jpexs.decompiler.flash.iggy.streams.StructureInterface;
import com.jpexs.decompiler.flash.iggy.streams.WriteDataStreamInterface;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author JPEXS
*/
public class IggyCharKerning implements StructureInterface {
public static final int STRUCT_SIZE = 6;
private long kernCount;
List<Character> charsA;
List<Character> charsB;
List<Short> kerningOffsets;
public long getKernCount() {
return kernCount;
}
public List<Character> getCharsA() {
return charsA;
}
public List<Character> getCharsB() {
return charsB;
}
public List<Short> getKerningOffsets() {
return kerningOffsets;
}
public IggyCharKerning(List<Character> charsA, List<Character> charsB, List<Short> kerningOffsets) {
if ((charsA.size() != charsB.size()) || (charsB.size() != kerningOffsets.size())) {
throw new RuntimeException("sizes of charsA, charsB and offsets must match");
}
this.kernCount = charsA.size();
this.charsA = charsA;
this.charsB = charsB;
this.kerningOffsets = kerningOffsets;
}
public IggyCharKerning(ReadDataStreamInterface stream, long kernCount) throws IOException {
this.kernCount = kernCount;
readFromDataStream(stream);
}
@Override
public void readFromDataStream(ReadDataStreamInterface stream) throws IOException {
charsA = new ArrayList<>();
charsB = new ArrayList<>();
kerningOffsets = new ArrayList<>();
for (int i = 0; i < kernCount; i++) {
charsA.add((char) stream.readUI16());
charsB.add((char) stream.readUI16());
kerningOffsets.add((short) stream.readUI16());
}
}
@Override
public void writeToDataStream(WriteDataStreamInterface stream) throws IOException {
for (int i = 0; i < kernCount; i++) {
stream.writeUI16(charsA.get(i));
stream.writeUI16(charsB.get(i));
stream.writeUI16(kerningOffsets.get(i));
}
}
}