diff -r 000000000000 -r dd21522fd290 webengine/wmlengine/src/css/include/CSSVariableStyleSheet.h --- /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 +#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 CCSSStringEntryList; +typedef RArray 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 */