/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


 
//i20156 - new file for xmlsecurity module

#ifndef __com_sun_star_xml_csax_XCompressedDocumentHandler_idl__ 
#define __com_sun_star_xml_csax_XCompressedDocumentHandler_idl__ 

#include <com/sun/star/uno/XInterface.idl> 
#include <com/sun/star/xml/sax/SAXException.idl> 
 
 
module com { module sun { module star { module xml { module csax {

/**
 * A struct to keep information of an element's attribute.
 */
struct XMLAttribute
{
	/**
	 * the attribute name
	 */
	string sName;
	
	/**
	 * the attribute value
	 */
	string sValue;
}; 

/**
 * A compressed XDocumentHandler interface.
 * <p>
 * All methods in this interface have the same function with methods
 * in the XDocumentHandler interface.
 * <p>
 * Because there is no interface parameter in these methods, so using
 * this interface to transfer SAX event is thought to have better
 * performance than using the XDocumentHandler interface, in case of
 * when UNO C++/Java bridge is involved.
 */
interface XCompressedDocumentHandler: com::sun::star::uno::XInterface
{ 
	void _startDocument() 
		raises( com::sun::star::xml::sax::SAXException ); 
		
	void _endDocument() 
		raises( com::sun::star::xml::sax::SAXException ); 
		
	void _startElement( [in] string aName, [in] sequence< XMLAttribute > aAttributes) 
		raises( com::sun::star::xml::sax::SAXException );
		
	void _endElement( [in] string aName ) 
		raises( com::sun::star::xml::sax::SAXException ); 
 
	void _characters( [in] string aChars ) 
		raises( com::sun::star::xml::sax::SAXException ); 
 
	void _ignorableWhitespace( [in] string aWhitespaces ) 
		raises( com::sun::star::xml::sax::SAXException ); 
		
	void _processingInstruction( [in] string aTarget, [in] string aData ) 
		raises( com::sun::star::xml::sax::SAXException ); 
 
	void _setDocumentLocator( [in] long columnNumber, [in] long lineNumber, [in] string publicId, [in] string systemId)
		raises( com::sun::star::xml::sax::SAXException ); 
 
}; 

} ; } ; } ; } ; } ;

#endif 
