diff -r 000000000000 -r b16258d2340f applayerprotocols/httpexamples/TestWebBrowser/htmlparserplugin/inc/HtmlParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httpexamples/TestWebBrowser/htmlparserplugin/inc/HtmlParser.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,125 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// HTML parser header +// @publishedAll +// @released +// +// + +#ifndef _HTMLPARSER_H +#define _HTMLPARSER_H + +#include +#include + +class CDesC8ArrayFlat; +class CStringParser; + +class CHtmlParser : public CBase + { + public: + enum TTagState + { + ENoTag, + EOpeningTag, + EClosingTag, + EText + }; + + enum TParserState + { + EInitialState, + ESeeStartOfTag, + ESeeEndOfTag, + ESeeClosingTagIndicator, + ESeeEquals, + ESeeExclamationMark, + ESeeEndOfTagWhileReadingJavascript, + EReadingOpeningTag, + EReadingClosingTag, + EReadingAttribute, + EReadingAttributeValue, + EReadingAttributeValueWithinApos, + EReadingAttributeValueWithinQuot, + EReadingText, + EReadingJavascript, + EFinishedReadingTag, + EFinishedReadingAttribute, + EFinishedReadingAttributeValue + }; + + static CHtmlParser* NewL ( Xml::MContentHandler& aContentHandler, RStringPool& aStringPool ); + ~CHtmlParser (); + + void ParseL ( const TDesC8& aBuffer, TBool aLastChunk = EFalse ); + void SetContentSink(class Xml::MContentHandler& ); + + private: + CHtmlParser ( Xml::MContentHandler& aContentHandler, RStringPool& aStringPool ); + void ConstructL (); + + void CreateTagInfoLC ( Xml::RTagInfo& aTagInfo, const TDesC8& aTag ); + + void ParseContentL ( const TDesC8& aContent, TBool aLastChunk = EFalse ); + + void ParseTaggedBufferL ( const TPtrC8& aTaggedBuffer, TBool aPartial = EFalse ); + + void ProcessPartialContentL ( CStringParser& aParser ); + void AddToPartialContentL ( const TPtrC8& aContent, TBool aAppend = EFalse ); + + void ParseStartDocumentL ( CStringParser& aParser ); + + void ProcessTextL ( const TPtrC8& aText ); + + TBool InspectCurrentCharacter( TChar aChar ); + + void SeeWhiteSpaceCharacterInTag( TBool& aBool ); + void SeeSpecialCharactersInTag( TChar aChar, TBool& aBool ); + void SeeOtherCharactersInTag(); + void SeeOtherCharactersNotInTag( TBool& aBool ); + + TBool CheckAndRemoveTagL ( const TPtrC8& aTag ); + + void CallStartElementL ( const TDesC8& aTag ); + void CallEndElementL ( const TDesC8& aTag ); + + void CallStartDocumentL ( const TDesC8& aCharset ); + + TBool IsOptionalTagL ( const TDesC8& aTag ); + void CheckAndProcessLastOptionalTagL ( const TDesC8& aTag ); + TBool IsForbiddenTagL ( const TDesC8& aTag ); + void CheckAndProcessForbiddenTagL ( const TDesC8& aTag ); + + void ExtractCharsetL ( const TDesC8& aContent, TPtrC8& aCharset, TBool& aXMLFound ); + void ExtractCharsetValueL ( const TDesC8& aContent, const TDesC8& aSearchValue, TPtrC8& aCharset ); + + private: + Xml::MContentHandler* iContentHandler; + RStringPool& iStringPool; + + TTagState iTagState; + TParserState iParserState; + TBool iInTag; + + HBufC8* iPartialContent; // Content which is pending to parse. + + CDesC8ArrayFlat* iTagAttribute; + CDesC8ArrayFlat* iTagAttributeValue; + CDesC8ArrayFlat* iTagQueue; + + TBool iFirst; + TBool iEndDocCalled; + }; + +#endif // _HTMLPARSER_H \ No newline at end of file