/*************************************************************************
 *
 *  $RCSfile: sfxhtml.hxx,v $
 *
 *  $Revision: 1.2 $
 *
 *  last change: $Author: os $ $Date: 2001/07/26 05:40:00 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (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.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/

#ifndef _SFXHTML_HXX
#define _SFXHTML_HXX

#ifndef _PARHTML_HXX
#include <svtools/parhtml.hxx>
#endif
#ifndef _SFXMACITEM_HXX //autogen
#include <svtools/macitem.hxx>
#endif

class ImageMap;
class SfxDocumentInfo;
class SfxMedium;
class SfxObjectShell;
class SvKeyValueIterator;

class SfxHTMLParser : public HTMLParser
{
	DECL_STATIC_LINK( SfxHTMLParser, FileDownloadDone, void* );

	String					aScriptType;

	SfxMedium*				pMedium;
	SfxMedium *pDLMedium;	// Medium fuer Download von Files

	USHORT nMetaTags;		// Anzahl der bisher gelesenen Meta-Tags
	ScriptType eScriptType;

	void GetScriptType_Impl( SvKeyValueIterator* );

protected:

	SfxHTMLParser( SvStream& rStream, BOOL bNewDoc=TRUE, SfxMedium *pMedium=0 );

	~SfxHTMLParser();

public:
	// Lesen der Optionen einer Image-Map
	// <MAP>: TRUE = Image-Map hat einen Namen
	// <AREA>: TRUE = Image-Map hat jetzt einen Bereich mehr
	static BOOL ParseMapOptions(ImageMap * pImageMap,
								const HTMLOptions * pOptions );
	BOOL ParseMapOptions(ImageMap * pImageMap)
	{ return ParseMapOptions(pImageMap, GetOptions()); }
	static BOOL ParseAreaOptions(ImageMap * pImageMap,
								 const HTMLOptions * pOptions,
								 USHORT nEventMouseOver = 0,
								 USHORT nEventMouseOut = 0 );
	inline BOOL ParseAreaOptions(ImageMap * pImageMap,
								 USHORT nEventMouseOver = 0,
								 USHORT nEventMouseOut = 0);

	// Parsen von Meta-Options in eine SfxDocumentInfo.
	static BOOL ParseMetaOptions( SfxDocumentInfo*, SvKeyValueIterator*,
								  const HTMLOptions*, USHORT& rMetaCnt,
								  rtl_TextEncoding& rEnc );

	// <TD SDVAL="..." SDNUM="...">
	static double GetTableDataOptionsValNum( ULONG& nNumForm,
			LanguageType& eNumLang, const String& aValStr,
			const String& aNumStr, SvNumberFormatter& rFormatter );

    static rtl_TextEncoding GetEncodingByHttpHeader( SvKeyValueIterator *pHTTPHeader );
protected:

	BOOL ParseMetaOptions( SfxDocumentInfo*, SvKeyValueIterator* );

	// Start eines File-Downloads. Dieser erfolgt synchron oder asynchron.
	// Im synchronen Fall befindet sich der Parser nach dem Aufruf im
	// Working-Zustand. Die gelesene Datei kann dann direkt mit
	// FinishFileDownload abgeholt werden.
	// Im asynchronen Fall befindet sich der Parser nach dem Aufruf im
	// Pending-Zustand. Der Parser muss dann ueber das Continue verlassen
	// werden (ohne Reschedule!). Wenn die Datei geladen ist, wird
	// ein Continue mit dem uebergebenen Token aufgerufen. Die Datei kann
	// dann wiederum mit FinishFileDownload abgeholt werden.
	// Zum Abbrechen des Dwonloads sollte eine Shell uebergeben werden.
	// Es kann nur ein einziger Download gleichzeitig existieren. Fuer jeden
	// gestarteten Download muss FinshFileDownload aufgerufen werden.
	void StartFileDownload( const String& rURL, int nToken,
							SfxObjectShell *pSh=0 );

	// Ermittelnd des MIME-Types eines zuvor downloadeten Files. Kann nur
	// unmittelbar vor FinishFileDownload aufgerufen werden, nie aber
	// danach.

	BOOL GetFileDownloadMIME( String& rMime );

	// Beenden eines asynchronen File-Downloads. Gibt TRUE zurueck, wenn
	// der Download geklappt hat. Das gelesene File befindet sich dann in
	// dem uebergeben String.
	BOOL FinishFileDownload( String& rStr );

	// Gibt TRUE zurueck, wenn ein File downloaded wurde und
	// FileDownloadFinished noch nicht gerufen wurde.
	BOOL ShouldFinishFileDownload() const { return pDLMedium != 0; }

	SfxMedium *GetMedium() { return pMedium; }
	const SfxMedium *GetMedium() const { return pMedium; }

	// Default (auch ohne Iterator) ist JavaScript
	ScriptType GetScriptType( SvKeyValueIterator* ) const;
	const String& GetScriptTypeString( SvKeyValueIterator* ) const;

	static rtl_TextEncoding GetEncodingByMIME( const String& rMime );

	BOOL SetEncodingByHTTPHeader( SvKeyValueIterator *pHTTPHeader );

};

inline BOOL SfxHTMLParser::ParseAreaOptions(ImageMap * pImageMap,
											USHORT nEventMouseOver,
											USHORT nEventMouseOut)
{
	return ParseAreaOptions( pImageMap, GetOptions(),
							 nEventMouseOver, nEventMouseOut );
}

#endif
