webengine/wmlengine/src/css/include/CSSReader.h
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/css/include/CSSReader.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,303 @@
+/*
+* 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 "nw_string_string.h"
+#include <e32std.h>
+
+// 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 */
+