package com.googlecode.mp4parser.boxes.threegpp26245;
import com.coremedia.iso.BoxParser;
import com.coremedia.iso.IsoBufferWrapper;
import com.coremedia.iso.IsoFile;
import com.coremedia.iso.IsoOutputStream;
import com.coremedia.iso.boxes.AbstractBox;
import com.coremedia.iso.boxes.Box;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
/**
*
*/
public class FontTableBox extends AbstractBox {
List<FontRecord> entries = new LinkedList<FontRecord>();
public FontTableBox() {
super(IsoFile.fourCCtoBytes("ftab"));
}
public void parse(IsoBufferWrapper in) {
}
public void getContent(IsoOutputStream isos) throws IOException {
isos.writeUInt16(entries.size());
for (FontRecord record : entries) {
record.getContent(isos);
}
}
@Override
protected long getContentSize() {
int size = 2;
for (FontRecord fontRecord : entries) {
size += fontRecord.getSize();
}
return size;
}
@Override
public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException {
int numberOfRecords = in.readUInt16();
for (int i = 0; i < numberOfRecords; i++) {
FontRecord fr = new FontRecord();
fr.parse(in);
entries.add(fr);
}
}
public List<FontRecord> getEntries() {
return entries;
}
public void setEntries(List<FontRecord> entries) {
this.entries = entries;
}
public static class FontRecord {
int fontId;
String fontname;
public FontRecord() {
}
public FontRecord(int fontId, String fontname) {
this.fontId = fontId;
this.fontname = fontname;
}
public void parse(IsoBufferWrapper in) throws IOException {
fontId = in.readUInt16();
int length = in.readUInt8();
fontname = in.readString(length);
}
public void getContent(IsoOutputStream isos) throws IOException {
isos.writeUInt16(fontId);
isos.writeUInt8(fontname.length());
isos.writeStringNoTerm(fontname);
}
public int getSize() {
return utf8StringLengthInBytes(fontname) + 3;
}
@Override
public String toString() {
return "FontRecord{" +
"fontId=" + fontId +
", fontname='" + fontname + '\'' +
'}';
}
}
}