diff -r 79859ed3eea9 -r 919f36ff910f webengine/wmlengine/src/css/include/CSSReader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/css/include/CSSReader.h Wed Sep 01 12:28:30 2010 +0100 @@ -0,0 +1,302 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: CSS Lexer +* +*/ + +#ifndef TCSSReader_H +#define TCSSReader_H + +// INCLUDES +#include "nwx_defs.h" +#include +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +enum TCSSReaderTokenType{ + SPACE = 1, + ATKEYWORD, + HASH, + ASTERISK, + COMMA, + DOT, + COLON, + HYPHEN, + SEMI_COLON, + LEFT_BRACE, + RIGHT_BRACE, + LEFT_BRACKET, + RIGHT_BRACKET, + EQUALS, + CHARSET_RULE, + IMPORT_RULE, + MEDIA_RULE, + LINK_PSEUDO_CLASS, + VISITED_PSEUDO_CLASS, + FOCUS_PSEUDO_CLASS, + ACTIVE_PSEUDO_CLASS, + CACHED_PSEUDO_CLASS, + IMPORTANT, + VERTICAL_LINE, + CDO, + CDC, + BUFFER_END, + IDENTIFIER, + EMS, + EXS, + PXS, + INS, + CMS, + MMS, + PTS, + PERCENTAGE, + PCS, + NUMBER, + URI, + RGB, + STRING, + RIGHT_PARENTHESIS, + DIGIT, + ALPHA, + INVALID +}; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* This class is a unit of text +* @lib css.lib +* @since 2.1 +*/ +class TCSSReaderUnit +{ + public: + // constructor + TCSSReaderUnit(TText8* aStorage, TUint32 aLength, TUint32 aNumChars) + { + iStorage = aStorage; + iLength = aLength; + iNumChars = aNumChars; + } + + TCSSReaderUnit() + { + iStorage = NULL; + iLength = 0; + iNumChars = 0; + } + + void Init(TText8* aStorage, TUint32 aLength, TUint32 aNumChars) + { + iStorage = aStorage; + iLength = aLength; + iNumChars = aNumChars; + } + /** + * Converts the text to unicode + * @since 2.1 + * @param aEncoding: encoding of the document being parsed + * return unicode String + */ + TText16* GetUnicodeL(TUint32 aEncoding); + TText16* GetUnicode(TUint32 aEncoding); + + public: //data + // pointer to beginning of text + TText8* iStorage; + // length of storage + TUint32 iLength; + // number of character + TUint32 iNumChars; +}; +// CLASS DECLARATION + +/** +* This class is the lexer for CSS syntax +* @lib css.lib +* @since 2.1 +*/ +class TCSSReader +{ + public: + // constructor + TCSSReader(TText8* aBuffer, TUint32 aLength, TUint32 aEncoding) + { + iBuffer = aBuffer; + iLength = aLength; + iEncoding = aEncoding; + iPosition = 0; + } + + TCSSReader() + { + iBuffer = NULL; + iLength = 0; + iEncoding = 0; + iPosition = 0; + } + + void Init(TText8* aBuffer, TUint32 aLength, TUint32 aEncoding) + { + iBuffer = aBuffer; + iLength = aLength; + iEncoding = aEncoding; + iPosition = 0; + } + + /** + * Skips white space as defined by CSS2 Spec + * @since 2.1 + * return void + */ + void SkipWhiteSpaces(); + + /** + * Finds if the media type is valid (all or handheld) + * @since 2.1 + * @param aMedia: media to be evaluated + * return ETrue if media is valid else EFalse + */ + TBool IsValidMedia(TCSSReaderUnit* aMedia); + + TInt8 ReadNextToken(TCSSReaderUnit* aStr); + + TInt8 GetPseudoClass(); + + TInt8 ReadNumberToken(TCSSReaderUnit* aStr); + + TBool ReadIdentifier(TCSSReaderUnit* aStr); + + TBool ReadString(TCSSReaderUnit* aStr); + + TBool ReadName(TCSSReaderUnit* aStr); + + TBool ReadURI(TCSSReaderUnit* aStr); + + TBool ReadCharset(); + + TBrowserStatusCode GoToToken(TUint8 aTokenType, TText8** aPosition); + + /** + * Ignores the At-rule of CSS starting at given position + * @since 2.1 + * @param aPosition - starting of At-Rule + * return void + */ + TBool IgnoreAtRule(TUint32 aPosition); + + /** + * Sets position of the reader + * @since 2.1 + * @param aPosition - position of reader + * return void + */ + inline void SetPosition(TUint32 aPosition){iPosition = aPosition;} + + /** + * Returns pointer to the buffer + * @since 2.1 + * return pointer to the buffer + */ + inline TText8* GetBuffer(){return iBuffer;} + + /** + * Returns length of buffer + * @since 2.1 + * return length of buffer + */ + inline TUint32 GetLength(){return iLength;} + + /** + * Returns current position of reader + * @since 2.1 + * return current position of reader + */ + inline TUint32 GetPosition(){return iPosition;} + + /** + * Returns encoding of buffer + * @since 2.1 + * return encoding of buffer + */ + inline TUint32 GetEncoding(){return iEncoding;} + + /** + * Advances the buffer by certain number of bytes + * @since 2.1 + * @param aNumBytes - number of bytes to advance + * return void + */ + TBool Advance(TUint32 aNumBytes); + + /** + * Sets encoding of the document + * @since 2.1 + * @param aEncoding - encoding of buffer + * return void + */ + inline void SetEncoding(TUint32 aEncoding){iEncoding = aEncoding;} + + /** + * Returns pointer to the buffer storage where reader is positioned + * @since 2.1 + * return pointer to the buffer storage where reader is positioned + */ + inline TText8* GetBufferPointer(){return (iBuffer+iPosition);} + + /** + * Gets the encoding associated with the text + * @since 2.1 + * return encoding of the document being parsed + */ + TUint32 GetCharsetVal(); + + /** + * Reads a character + * @since 2.1 + * return encoding of the document being parsed + */ + TInt32 ReadChar(TText16* aChar); + + TUint16 ReadEscape(TText16* aOutChar); + + private: // Functions + + TBool Equals(const TText16* aStr, TBool aCaseInsensitive); + + TBool ReadBlock(TText16 aClosingChar); + + private: // Data + + // pointer to the CSS buffer + TText8* iBuffer; + // length of buffer + TUint32 iLength; + // encoding of buffer + TUint32 iEncoding; + // position in the buffer + TUint32 iPosition; +}; + +#endif /* TCSSReader_H */ +