summaryrefslogtreecommitdiff
path: root/isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java
diff options
context:
space:
mode:
Diffstat (limited to 'isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java')
-rw-r--r--isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java95
1 files changed, 95 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java
new file mode 100644
index 0000000..2e3f640
--- /dev/null
+++ b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/threegpp26245/FontTableBox.java
@@ -0,0 +1,95 @@
+package com.googlecode.mp4parser.boxes.threegpp26245;
+
+import com.coremedia.iso.IsoTypeReader;
+import com.coremedia.iso.IsoTypeWriter;
+import com.coremedia.iso.Utf8;
+import com.googlecode.mp4parser.AbstractBox;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ *
+ */
+public class FontTableBox extends AbstractBox {
+ List<FontRecord> entries = new LinkedList<FontRecord>();
+
+ public FontTableBox() {
+ super("ftab");
+ }
+
+ @Override
+ protected long getContentSize() {
+ int size = 2;
+ for (FontRecord fontRecord : entries) {
+ size += fontRecord.getSize();
+ }
+ return size;
+ }
+
+
+ @Override
+ public void _parseDetails(ByteBuffer content) {
+ int numberOfRecords = IsoTypeReader.readUInt16(content);
+ for (int i = 0; i < numberOfRecords; i++) {
+ FontRecord fr = new FontRecord();
+ fr.parse(content);
+ entries.add(fr);
+ }
+ }
+
+ @Override
+ protected void getContent(ByteBuffer byteBuffer) {
+ IsoTypeWriter.writeUInt16(byteBuffer, entries.size());
+ for (FontRecord record : entries) {
+ record.getContent(byteBuffer);
+ }
+ }
+
+ 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(ByteBuffer bb) {
+ fontId = IsoTypeReader.readUInt16(bb);
+ int length = IsoTypeReader.readUInt8(bb);
+ fontname = IsoTypeReader.readString(bb, length);
+ }
+
+ public void getContent(ByteBuffer bb) {
+ IsoTypeWriter.writeUInt16(bb, fontId);
+ IsoTypeWriter.writeUInt8(bb, fontname.length());
+ bb.put(Utf8.convert(fontname));
+ }
+
+ public int getSize() {
+ return Utf8.utf8StringLengthInBytes(fontname) + 3;
+ }
+
+ @Override
+ public String toString() {
+ return "FontRecord{" +
+ "fontId=" + fontId +
+ ", fontname='" + fontname + '\'' +
+ '}';
+ }
+ }
+}