package eu.dnetlib.efg1914.commons.utils;

import java.io.OutputStream;
import java.util.regex.Pattern;

import org.xml.sax.SAXException;

import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;


public class CDataXMLSerializer extends XMLSerializer {
	private static final Pattern XML_CHARS = Pattern.compile("[<>&]");
	
	public CDataXMLSerializer(OutputStream outputStream) {
		super(outputStream, new OutputFormat( "XML", "UTF-8", true ));
	}
	
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		boolean useCData = XML_CHARS.matcher(new String(ch, start, length)).find();
		if (useCData) {
			super.startCDATA();
		}
		
		super.characters(ch, start, length);
		if (useCData) {
			super.endCDATA();
		}
	}
}