epoc32/include/mw/cdtdmodel.h
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 2fe1408b6811
child 4 837f303aceeb
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/mw/cdtdmodel.h	Wed Mar 31 12:27:01 2010 +0100
     1.3 @@ -0,0 +1,237 @@
     1.4 +// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +// contains the parser specialisation (BNF grammar) for a DTD parser.
    1.18 +// See CBNFParser for function details
    1.19 +// 
    1.20 +//
    1.21 +
    1.22 +#ifndef __CDTDMODEL_H__
    1.23 +#define __CDTDMODEL_H__
    1.24 +
    1.25 +#include <cbnfnode.h>
    1.26 +#include <cbnfparser.h>
    1.27 +#include <crulemarkedstack.h>
    1.28 +
    1.29 +//##ModelId=3B666BCB001C
    1.30 +
    1.31 +
    1.32 +
    1.33 +class CDTDModel : public CBNFParser
    1.34 +/** Creates a tree that represents a specified DTD.
    1.35 +
    1.36 +To use it:
    1.37 +
    1.38 +1. call the base class function ProcessDataL() with the filename of the DTD, and call CommitL()
    1.39 +
    1.40 +2. call GeneratedTree() to get the tree
    1.41 +
    1.42 +	@publishedAll
    1.43 +	@released
    1.44 +*/
    1.45 +	{
    1.46 +public:
    1.47 +    class CDTDElementAttribute : public CBase
    1.48 +	/** Represents an attribute of a DTD element. */
    1.49 +		{
    1.50 +	public:
    1.51 +		/** DTD element attribute value types. */
    1.52 +		enum KValueType
    1.53 +			{
    1.54 +			/** Attribute supplies a default. */
    1.55 +			EDefault, 
    1.56 +			/** Attribute is #REQUIRED. */
    1.57 +			ERequired, 
    1.58 +			/** Attribute is #IMPLIED. */
    1.59 +			EImplied, 
    1.60 +			/** Attribute is #FIXED. */
    1.61 +			EFixed, 
    1.62 +			/** Attribute is a reference. */
    1.63 +			EReference
    1.64 +			};
    1.65 +
    1.66 +	public:
    1.67 +		/** Destructor.
    1.68 +		*/
    1.69 +		virtual ~CDTDElementAttribute() 
    1.70 +			{ 
    1.71 +			delete iType; 
    1.72 +			delete iValue; 
    1.73 +			}
    1.74 +
    1.75 +	public:
    1.76 +		/** Node that specifies the attribute type. */
    1.77 +		CBNFNode*	iType;
    1.78 +		/** Node that specifies the attribute value. */
    1.79 +        CBNFNode*	iValue;
    1.80 +		/** Attribute value type. */
    1.81 +        KValueType	iValueType;
    1.82 +		};
    1.83 +
    1.84 +
    1.85 +	enum TRuleMarks 
    1.86 +		{
    1.87 +		ERuleStartMark = 1, 
    1.88 +		EConditionalMark, 
    1.89 +		EGroupMark 
    1.90 +		};
    1.91 +
    1.92 +	//##ModelId=3B666BCB0321
    1.93 +	IMPORT_C static CDTDModel* NewL(CAttributeLookupTable& aLUT);
    1.94 +	//##ModelId=3B666BCB0320
    1.95 +	IMPORT_C virtual ~CDTDModel();
    1.96 +
    1.97 +	// This method MUST be invoked before data can be processed by the parser.
    1.98 +	//##ModelId=3B666BCB031F
    1.99 +	IMPORT_C virtual void ResetL();
   1.100 +
   1.101 +	//##ModelId=3B666BCB0315
   1.102 +	IMPORT_C CBNFNode* GeneratedTree();
   1.103 +
   1.104 +	// Building method for a hard coded WML1.1 DTD tree
   1.105 +	// Input:
   1.106 +	//		aPackageRoot - A root node to which the generated tree is attached
   1.107 +	//
   1.108 +	//##ModelId=3B666BCB030B
   1.109 +	IMPORT_C void BuildWml11DTDL(CBNFNode& aPackageRootNode);
   1.110 +
   1.111 +protected:
   1.112 +    IMPORT_C CDTDModel(CAttributeLookupTable& aLUT);	
   1.113 +
   1.114 +	// construct our BNF rule tree
   1.115 +	//##ModelId=3B666BCB0302
   1.116 +	IMPORT_C virtual CBNFNode* TreeL();
   1.117 +	
   1.118 +	// to control our internal state on conditional rules.
   1.119 +	//##ModelId=3B666BCB02F7
   1.120 +	IMPORT_C virtual void StartConditional(TParserNodeTypes aRuleType); 
   1.121 +	//##ModelId=3B666BCB02E3
   1.122 +	IMPORT_C virtual void EndConditional(TParserNodeTypes aRuleType, TBool aSuccess);
   1.123 +
   1.124 +	// rule callbacks to build the DTD Tree
   1.125 +	//##ModelId=3B666BCB02D9
   1.126 +	static void PreRulesL(CBNFParser& aParser);
   1.127 +	//##ModelId=3B666BCB02CF
   1.128 +	static void PostRulesL(CBNFParser& aParser);
   1.129 +	//##ModelId=3B666BCB02C5
   1.130 +	static void PreElementDeclL(CBNFParser& aParser);
   1.131 +	//##ModelId=3B666BCB02B1
   1.132 +	static void PostElementDeclL(CBNFParser& aParser);
   1.133 +	//##ModelId=3B666BCB02A7
   1.134 +	static void PreEntityDeclL(CBNFParser& aParser);
   1.135 +	//##ModelId=3B666BCB0294
   1.136 +	static void PostEntityDeclL(CBNFParser& aParser);
   1.137 +	//##ModelId=3B666BCB0289
   1.138 +	static void PreAttlistLineL(CBNFParser& aParser);
   1.139 +	//##ModelId=3B666BCB027F
   1.140 +	static void PostAttlistLineL(CBNFParser& aParser);
   1.141 +	//##ModelId=3B666BCB0275
   1.142 +	static void PostAttlistReferenceL(CBNFParser& aParser);
   1.143 +	//##ModelId=3B666BCB026B
   1.144 +	static void PreAttValueL(CBNFParser& aParser);
   1.145 +	//##ModelId=3B666BCB0261
   1.146 +	static void PostAttValueL(CBNFParser& aParser);
   1.147 +	//##ModelId=3B666BCB024E
   1.148 +	static void PostRequiredL(CBNFParser& aParser);
   1.149 +	//##ModelId=3B666BCB0243
   1.150 +	static void PostFixedL(CBNFParser& aParser);
   1.151 +	//##ModelId=3B666BCB0239
   1.152 +	static void PostImpliedL(CBNFParser& aParser);
   1.153 +	//##ModelId=3B666BCB022F
   1.154 +	static void PostAndL(CBNFParser& aParser);
   1.155 +	//##ModelId=3B666BCB0225
   1.156 +	static void PostOrL(CBNFParser& aParser);
   1.157 +	//##ModelId=3B666BCB021B
   1.158 +	static void PreGroupL(CBNFParser& aParser);
   1.159 +	//##ModelId=3B666BCB0208
   1.160 +	static void PostGroupL(CBNFParser& aParser);
   1.161 +	//##ModelId=3B666BCB01FD
   1.162 +	static void PostMatch0PlusL(CBNFParser& aParser);
   1.163 +	//##ModelId=3B666BCB01F3
   1.164 +	static void PostMatch1PlusL(CBNFParser& aParser);
   1.165 +	//##ModelId=3B666BCB01E9
   1.166 +	static void PostOptionalL(CBNFParser& aParser);
   1.167 +	//##ModelId=3B666BCB01DF
   1.168 +	static void PostIdentifierL(CBNFParser& aParser);
   1.169 +	//##ModelId=3B666BCB01CC
   1.170 +	static void PostEntityDeclNameL(CBNFParser& aParser);
   1.171 +	//##ModelId=3B666BCB01C1
   1.172 +	static void PostElementDeclNameL(CBNFParser& aParser);
   1.173 +	//##ModelId=3B666BCB01B7
   1.174 +	static void PostAttlistDeclNameL(CBNFParser& aParser);
   1.175 +	//##ModelId=3B666BCB01AD
   1.176 +	static void PostAttfieldNameL(CBNFParser& aParser);
   1.177 +	//##ModelId=3B666BCB01A3
   1.178 +	static void PostReferenceNameL(CBNFParser& aParser);
   1.179 +	//##ModelId=3B666BCB0199
   1.180 +	static void PostStringL(CBNFParser& aParser);
   1.181 +	//##ModelId=3B666BCB0186
   1.182 +	static void PostValidHexCharL(CBNFParser& aParser);
   1.183 +	//##ModelId=3B666BCB017B
   1.184 +	static void PostValidDecCharL(CBNFParser& aParser);
   1.185 +	//##ModelId=3B666BCB0171
   1.186 +	static void PrePEDeclL(CBNFParser& aParser);
   1.187 +	//##ModelId=3B666BCB0167
   1.188 +	static void PostPEDeclL(CBNFParser& aParser);
   1.189 +	//##ModelId=3B666BCB015D
   1.190 +	static void PostGEDeclL(CBNFParser& aParser);
   1.191 +	//##ModelId=3B666BCB0153
   1.192 +	static void PreGEContentL(CBNFParser& aParser);
   1.193 +	//##ModelId=3B666BCB0149
   1.194 +	static void PostGEContentL(CBNFParser& aParser);	
   1.195 +
   1.196 +	// utility functions
   1.197 +	//##ModelId=3B666BCB0135
   1.198 +	static void PostValidCharL(CBNFParser& aParser, TRadix aRadix);
   1.199 +	//##ModelId=3B666BCB0117
   1.200 +	static void PostRuleL(CBNFParser& aParser, TParserNodeTypes aType, const TDesC* aAttribute);
   1.201 +
   1.202 +	//##ModelId=3B666BCB0104
   1.203 +	void CharRefReplacement(TPtr& aString);
   1.204 +
   1.205 +	//##ModelId=3B666BCB0103
   1.206 +	void DoClear();
   1.207 +
   1.208 +	// Help methods for the hardcoded WML 1.1 tree
   1.209 +	//##ModelId=3B666BCB00DB
   1.210 +	void AddNewAttributeL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, CDTDElementAttribute::KValueType aAttributeValueType, CBNFNode* aRootNode);
   1.211 +	//##ModelId=3B666BCB00BD
   1.212 +	void AddNewReferenceAttributeL(CBNFNode& aNode, const TDesC& aAttributeType, CBNFNode* aRootNode);
   1.213 +	//##ModelId=3B666BCB0095
   1.214 +	void AddNewAttributeWithValueL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, const TDesC& aAttributeDefaultValue, CBNFNode* aRootNode);
   1.215 +
   1.216 +
   1.217 +protected:
   1.218 +    typedef CRuleMarkedStack<ETrue> COwnerRuleMarkedStack;
   1.219 +
   1.220 +protected:
   1.221 +	//##ModelId=3B666BCB008B
   1.222 +	TBool					iInPEDecl;	
   1.223 +	//##ModelId=3B666BCB0078
   1.224 +	TBool					iCharRefCheck;
   1.225 +	//##ModelId=3B666BCB006E
   1.226 +	HBufC*					iGEContent;
   1.227 +
   1.228 +	//##ModelId=3B666BCB0064
   1.229 +	HBufC*					iNewAttfieldName;
   1.230 +	//##ModelId=3B666BCB005A
   1.231 +	CDTDElementAttribute*	iNewElementAttribute;
   1.232 +	//##ModelId=3B666BCB0046
   1.233 +	CBNFNode*				iNewRule;
   1.234 +	//##ModelId=3B666BCB003C
   1.235 +	CBNFNode*				iNewTree;
   1.236 +	//##ModelId=3B666BCB0030
   1.237 +	COwnerRuleMarkedStack	iNewRuleStack;
   1.238 +	};
   1.239 +
   1.240 +#endif // __CDTDMODEL_H__