/**************************************************************
 *
 * 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.
 *
 *************************************************************/


#ifndef __com_sun_star_xml_sax_XFastDocumentHandler_idl__
#define __com_sun_star_xml_sax_XFastDocumentHandler_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_xml_sax_SAXException_idl__
#include <com/sun/star/xml/sax/SAXException.idl>
#endif

#ifndef __com_sun_star_xml_sax_XFastAttributeList_idl__
#include <com/sun/star/xml/sax/XFastAttributeList.idl>
#endif

#ifndef __com_sun_star_xml_sax_XFastContextHandler_idl__
#include <com/sun/star/xml/sax/XFastContextHandler.idl>
#endif

#ifndef __com_sun_star_xml_sax_XLocator_idl__
#include <com/sun/star/xml/sax/XLocator.idl>
#endif


//=============================================================================

module com {  module sun {  module star {  module xml {  module sax {

//=============================================================================

/** receives notification of sax document events from a
	<type>XFastParser</type>
 */
interface XFastDocumentHandler: XFastContextHandler
{
	//-------------------------------------------------------------------------

	/** called by the parser when parsing of an xml stream is started.
	 */
	void startDocument()
			raises( com::sun::star::xml::sax::SAXException );

	//-------------------------------------------------------------------------

	/** called by the parser after the last xml element of a stream is processed.
	 */
	void endDocument()
			raises( com::sun::star::xml::sax::SAXException );

	//-------------------------------------------------------------------------

	/** receives an object for locating the origin of SAX document events.
	 */
	void setDocumentLocator( [in] com::sun::star::xml::sax::XLocator xLocator )
			raises( com::sun::star::xml::sax::SAXException );

};

//=============================================================================

}; }; }; }; };

#endif
