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__