package org.basex.io.serial; import static org.basex.data.DataText.*; import static org.basex.util.Token.*; import java.io.IOException; import java.io.OutputStream; /** * This class serializes data as XHTML. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public class XHTMLSerializer extends OutputSerializer { /** * Constructor, specifying serialization options. * @param os output stream reference * @param p serialization properties * @throws IOException I/O exception */ XHTMLSerializer(final OutputStream os, final SerializerProp p) throws IOException { super(os, p, V10, V11); } @Override public void attribute(final byte[] n, final byte[] v) throws IOException { // escape URI attributes final byte[] tagatt = concat(lc(tag), COLON, lc(n)); final byte[] val = escape && URIS.id(tagatt) != 0 ? escape(v) : v; super.attribute(n, val); } @Override protected void startOpen(final byte[] t) throws IOException { super.startOpen(t); if(content && eq(lc(tag), HEAD)) ct++; } @Override protected void finishOpen() throws IOException { super.finishOpen(); ct(false, false); } @Override protected void finishEmpty() throws IOException { if(ct(true, false)) return; if(EMPTIES.contains(lc(tag))) { print(' '); print(ELEM_SC); } else { print(ELEM_C); ind = false; finishClose(); } } }