// Copyright 2006, FreeHEP. package org.freehep.graphicsio.emf.gdiplus; import java.io.IOException; import org.freehep.graphicsio.emf.EMFInputStream; import org.freehep.graphicsio.emf.EMFOutputStream; import org.freehep.graphicsio.emf.EMFTag; /** * EMF+ specific tag, from which all other EMF Tags inherit. * * @author Mark Donszelmann * @version $Id: EMFPlusTag.java,v 1.1 2009-08-17 21:44:44 murkle Exp $ */ public abstract class EMFPlusTag extends EMFTag { private static final int OFFSET = 0x00004000; /** * Constructs an EMFPlusTag. * * @param id * id of the element, which will be offset to 0x4000 * @param version * emf+ version in which this element was first supported, which * will be offset to 0x4000 */ protected EMFPlusTag(int id, int version) { super(id + OFFSET, version + OFFSET); } @Override public EMFTag read(int tagID, EMFInputStream emf, int len) throws IOException { len = emf.readUINT(); // intermediate length return read(tagID - OFFSET, flags, emf, len); } public abstract EMFPlusTag read(int tagID, int flags, EMFInputStream emf, int len) throws IOException; @Override public void write(int tagID, EMFOutputStream emf) throws IOException { emf.pushBuffer(); write(tagID - OFFSET, flags, emf); int len = emf.popBuffer(); emf.writeUINT(len); emf.append(); } public abstract void write(int tagID, int flags, EMFOutputStream emf) throws IOException; @Override public String toString() { int id = getTag(); String s = "EMF+Tag " + getName() + " (" + id + ") (0x" + Integer.toHexString(id) + ")\n"; s += " flags: 0x" + Integer.toHexString(flags); return s; } }