--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/css/include/CSSVariableStyleSheet.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2004 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: Map containing the Variable CSS style rules
+*
+*/
+
+
+#ifndef CCSSVariableStyleSheet_H
+#define CCSSVariableStyleSheet_H
+
+// INCLUDES
+#include <e32base.h>
+#include "nw_css_defaultstylesheeti.h"
+#include "CSSRuleList.h"
+
+// CONSTANTS
+
+// MACROS
+
+// FUNCTION PROTOTYPES
+class TCSSParser;
+struct TCSSPropertyTablePropEntry;
+
+// CLASS DECLARATION
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+ extern NW_WBXML_Dictionary_t NW_XHTML_WBXMLDictionary;
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif /* __cplusplus */
+
+
+
+/** *****************************************************************
+ * These structs are simple wrappers for the css property and string
+ * entries. They wrap the same structures found in the default style
+ * sheets. Note that a flag indicates whether they entry is a static
+ * referring to the fixed table or a dynamic one referring to the
+ * dynamic one. The dynamic (e.g. variable) entry is heap allocated and
+ * as such it and its components should be deallocated.
+ *
+ * @lib css.lib
+ * @since 2.7
+ ******************************************************************* */
+
+typedef struct _TCSSStringEntry{
+ TBool variableEntry;
+ NW_Ucs2* entry;
+}TCSSStringEntry;
+
+
+typedef struct _TCSSPropEntry{
+ TInt key; // MUST BE FIRST
+ TBool variableEntry;
+ NW_CSS_DefaultStyleSheet_PropEntry_s* entry;
+}TCSSPropEntry;
+
+// DATA TYPES
+typedef RArray<TCSSStringEntry> CCSSStringEntryList;
+typedef RArray<TCSSPropEntry> CCSSPropEntryList;
+
+/** *****************************************************************
+ * The CCSSVariableStyleSheet is a repository for the default and
+ * variable style sheet entries. If no entries variable entries are
+ * found (i.e. file not found or corrupt) then only the default entries
+ * will be used to populate the structure.
+ *
+ * @lib css.lib
+ * @since 2.7
+ ******************************************************************* */
+class CCSSVariableStyleSheet : public CBase
+{
+
+
+public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. It is private because it is created as a
+ * singleton and shared.
+ * @return CCSSVariableStyleSheet*
+ */
+ static CCSSVariableStyleSheet* NewL();
+
+ /**
+ * Creates the CCSSVariableStyleSheet singleton.
+ * @since 2.7
+ * @return style sheet.
+ */
+ static CCSSVariableStyleSheet* CreateSingleton();
+
+ /**
+ * Deletes the CCSSVariableStyleSheet singleton.
+ * @since 2.7
+ * @return void.
+ */
+ static void DeleteSingleton();
+
+ /**
+ * Get the CCSSVariableStyleSheet singleton. If it doesn't exist
+ * then return NULL.
+ * @since 2.7
+ * @return a pointer to CCSSVariableStyleSheet
+ */
+ static CCSSVariableStyleSheet* GetSingleton();
+
+/**
+ * Applies the combined variable and default styles to the element node
+ * in the document after pattern matching. This is called frequently by
+ * XHTMLElementHandler. Duplicates have already been removed so that the
+ * default and variable styles do not need to be treated differently or
+ * applied separately.
+ *
+ * @param elementNode Element node for which pattern matching needs to be done
+ * @param box Box to which CSS is applied
+ * @param dictionary
+ * @param event event resulting in style application (for e.g. focus)
+ * This is usually NULL.
+ * @param documentNode
+ * @param domHelper for resolving entities
+ * @since 2.7
+ * @return KBrsrSuccess or KBrsrOutOfMemory
+ */
+TBrowserStatusCode ApplyStyles(NW_DOM_ElementNode_t* aElementNode,
+ NW_LMgr_Box_t* aBox,
+ NW_WBXML_Dictionary_t* aDictionary,
+ const NW_Evt_Event_t* aEvent,
+ NW_HED_DocumentNode_t* aDocumentNode,
+ NW_HED_DomHelper_t* aDomHelper);
+
+/**
+ * Parses the loaded variable CSS buffer stores entries in the tables.
+ * @param buffer data to parse. Stored as text
+ * @param length size of buffer in bytes. Does not include a null terminator
+ * @return ETrue if parsed.
+ */
+TBool ProcessBuffer(const TUint8* aBuffer, TUint32 aLength);
+
+/**
+ * Accessor for the state of the default property sheet. It is true if
+ * the values were successfully loaded.
+ * @return ETrue if loaded
+ */
+TBool IsStaticCSSLoaded(){
+ return iStaticCSSLoaded;
+}
+
+
+/**
+ * Accessor for the state of the variable property sheet. It is true if
+ * the values were successfully loaded.
+ * @return ETrue if loaded
+ */
+TBool IsVariableCSSLoaded(){
+ return iVariableCSSLoaded;
+}
+
+private: // Data
+
+ TBool iStaticCSSLoaded;
+ TBool iVariableCSSLoaded;
+ CCSSPropEntryList* iPropList;
+ CCSSStringEntryList* iStringList;
+
+private:
+
+/**
+ * C++ default constructor.
+ */
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+void ConstructL();
+
+
+/**
+ * Destructor. It is private because it is created as a singleton.
+ */
+ virtual ~CCSSVariableStyleSheet();
+
+
+/**
+ * Assignment operator. It is private because it should not be called.
+ */
+void operator=(const CCSSVariableStyleSheet& obj);
+
+
+/**
+ * Loads a file into the buffer. Looks first in on the C drive and then
+ * if not found looks on the Z drive.
+ * @return Pointer to buffer containing loaded file contents.
+ * Otherwise returns NULL.
+ */
+ HBufC8* ReadVariableCSSFile();
+
+
+/**
+ * Loads a file into the buffer. This is a generic utility.
+ * @return Pointer to buffer containing loaded file contents.
+ * Otherwise returns NULL.
+ */
+ HBufC8* ReadFile(const TDesC& aFile);
+
+
+/**
+ * Parses the css file that has been loaded. The results are stored into
+ * the variable style sheet list. Duplicates are ignored. That is, the
+ * first entry is added and subsequent duplicates are ignored. This list
+ * is added before the lower priority default list so if a duplicate is
+ * found it is assumed to be equal or higher priority.
+ * @param buffer The buffer contains the css variable file.
+ * @return ETrue if successfully parsed. Otherwise it returns EFalse
+ */
+ TBool AddVariableStyles(HBufC8* aBuffer);
+
+
+/**
+ * Loads the CSS strings from the default tables. These are placed in a
+ * string table.
+ */
+ void AddDefaultStyleStrings();
+
+
+/**
+ * Loads the default css styles. They are merged with the previously
+ * loaded variable styles. That is, if a style is not found in the list
+ * it is added. If it is already present the default value is
+ * ignored. Duplicates are not allowed. Note that if duplicates exist in
+ * this default list, only the first entry is applied.
+ */
+ void AddDefaultStyleProperties();
+
+
+/**
+ * Initializes the property using the entry loaded from the variable table.
+ * @param propEntry Default/variable entry to be applied.
+ * @param prop Property that is being initialized.
+ * @param box Box to which CSS is applied
+ * @param val Value to apply. Requires valType for interpretation.
+ * @param valType Data type
+ * @return KBrsrSuccess if operation successful. Otherwise KBrsrFailure.
+ */
+TBrowserStatusCode InitProperty(const TCSSPropertyTablePropEntry* aPropEntry,
+ NW_LMgr_Property_t* aProp,
+ NW_LMgr_Box_t* aBox,
+ NW_Float32 aVal,
+ NW_Uint8 aValType);
+
+
+/**
+ * Adds the styles for the element to the list.
+ * @param aParser loaded parser for the style sheet
+ * @param aRuleList list for this element token
+ * @param aElementToken
+ * @return KBrsrSuccess if operation successful. Otherwise KBrsrFailure.
+ */
+TBrowserStatusCode UpdateList(TCSSParser* aParser,
+ CCSSRules* aRuleList,
+ NW_Uint16 aElementToken);
+
+/**
+ * Updates one entry in the list.
+ * @param aParser The parser
+ * @param aElementToken The token to add
+ * @param aAsciiPatternStr Optional pattern to include with token.
+ * @return Status of operation
+ */
+TBrowserStatusCode UpdateEntry(TCSSParser* aParser,
+ TUint16 aElementToken,
+ char* aAsciiPatternStr);
+
+
+/**
+ * Wrapper method to call the correct setting method.
+ * @param aParser The parser.
+ * @param aVal The property value type
+ * @param aPropertyValue The actual value.
+ * @param aValStorage The text value
+ * @return Property type
+ */
+NW_LMgr_PropertyValueType_t SetPropertyVal(TCSSParser* aParser,
+ const TCSSPropertyTablePropEntry* aPropEntry,
+ NW_LMgr_PropertyValue_t* aVal,
+ TCSSPropertyVal* aPropertyVal,
+ TText16* aValStorage);
+
+/**
+ * Inserts a value into the list. If there is an error or a duplicate
+ * the value is not entered.
+ * @param aPropEntry Value to enter into the list.
+ * @return index of inserted value or -1 if error
+ */
+TInt InsertProperty(TCSSPropEntry aPropEntry);
+
+
+/**
+ * Dumps the contents of the style sheet to the log.
+ */
+TBrowserStatusCode DumpVariableStyleSheet();
+
+void ConstructCSSFileName();
+
+TFileName CSS_USER_SUPPLIED_FILE;
+TFileName CSS_OPERATOR_SUPPLIED_FILE;
+
+
+
+};
+
+
+#endif /* CCSSVariableStyleSheet_H */