williamr@2: // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // contains the parser specialisation (BNF grammar) for a DTD parser. williamr@2: // See CBNFParser for function details williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef __CDTDMODEL_H__ williamr@2: #define __CDTDMODEL_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: //##ModelId=3B666BCB001C williamr@2: williamr@2: williamr@2: williamr@2: class CDTDModel : public CBNFParser williamr@2: /** Creates a tree that represents a specified DTD. williamr@2: williamr@2: To use it: williamr@2: williamr@2: 1. call the base class function ProcessDataL() with the filename of the DTD, and call CommitL() williamr@2: williamr@2: 2. call GeneratedTree() to get the tree williamr@2: williamr@2: @publishedAll williamr@4: @deprecated williamr@2: */ williamr@2: { williamr@2: public: williamr@2: class CDTDElementAttribute : public CBase williamr@2: /** Represents an attribute of a DTD element. */ williamr@2: { williamr@2: public: williamr@2: /** DTD element attribute value types. */ williamr@2: enum KValueType williamr@2: { williamr@2: /** Attribute supplies a default. */ williamr@2: EDefault, williamr@2: /** Attribute is #REQUIRED. */ williamr@2: ERequired, williamr@2: /** Attribute is #IMPLIED. */ williamr@2: EImplied, williamr@2: /** Attribute is #FIXED. */ williamr@2: EFixed, williamr@2: /** Attribute is a reference. */ williamr@2: EReference williamr@2: }; williamr@2: williamr@2: public: williamr@2: /** Destructor. williamr@2: */ williamr@2: virtual ~CDTDElementAttribute() williamr@2: { williamr@2: delete iType; williamr@2: delete iValue; williamr@2: } williamr@2: williamr@2: public: williamr@2: /** Node that specifies the attribute type. */ williamr@2: CBNFNode* iType; williamr@2: /** Node that specifies the attribute value. */ williamr@2: CBNFNode* iValue; williamr@2: /** Attribute value type. */ williamr@2: KValueType iValueType; williamr@2: }; williamr@2: williamr@2: williamr@2: enum TRuleMarks williamr@2: { williamr@2: ERuleStartMark = 1, williamr@2: EConditionalMark, williamr@2: EGroupMark williamr@2: }; williamr@2: williamr@2: //##ModelId=3B666BCB0321 williamr@2: IMPORT_C static CDTDModel* NewL(CAttributeLookupTable& aLUT); williamr@2: //##ModelId=3B666BCB0320 williamr@2: IMPORT_C virtual ~CDTDModel(); williamr@2: williamr@2: // This method MUST be invoked before data can be processed by the parser. williamr@2: //##ModelId=3B666BCB031F williamr@2: IMPORT_C virtual void ResetL(); williamr@2: williamr@2: //##ModelId=3B666BCB0315 williamr@2: IMPORT_C CBNFNode* GeneratedTree(); williamr@2: williamr@2: // Building method for a hard coded WML1.1 DTD tree williamr@2: // Input: williamr@2: // aPackageRoot - A root node to which the generated tree is attached williamr@2: // williamr@2: //##ModelId=3B666BCB030B williamr@2: IMPORT_C void BuildWml11DTDL(CBNFNode& aPackageRootNode); williamr@2: williamr@2: protected: williamr@2: IMPORT_C CDTDModel(CAttributeLookupTable& aLUT); williamr@2: williamr@2: // construct our BNF rule tree williamr@2: //##ModelId=3B666BCB0302 williamr@2: IMPORT_C virtual CBNFNode* TreeL(); williamr@2: williamr@2: // to control our internal state on conditional rules. williamr@2: //##ModelId=3B666BCB02F7 williamr@2: IMPORT_C virtual void StartConditional(TParserNodeTypes aRuleType); williamr@2: //##ModelId=3B666BCB02E3 williamr@2: IMPORT_C virtual void EndConditional(TParserNodeTypes aRuleType, TBool aSuccess); williamr@2: williamr@2: // rule callbacks to build the DTD Tree williamr@2: //##ModelId=3B666BCB02D9 williamr@2: static void PreRulesL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB02CF williamr@2: static void PostRulesL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB02C5 williamr@2: static void PreElementDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB02B1 williamr@2: static void PostElementDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB02A7 williamr@2: static void PreEntityDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0294 williamr@2: static void PostEntityDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0289 williamr@2: static void PreAttlistLineL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB027F williamr@2: static void PostAttlistLineL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0275 williamr@2: static void PostAttlistReferenceL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB026B williamr@2: static void PreAttValueL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0261 williamr@2: static void PostAttValueL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB024E williamr@2: static void PostRequiredL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0243 williamr@2: static void PostFixedL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0239 williamr@2: static void PostImpliedL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB022F williamr@2: static void PostAndL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0225 williamr@2: static void PostOrL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB021B williamr@2: static void PreGroupL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0208 williamr@2: static void PostGroupL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01FD williamr@2: static void PostMatch0PlusL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01F3 williamr@2: static void PostMatch1PlusL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01E9 williamr@2: static void PostOptionalL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01DF williamr@2: static void PostIdentifierL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01CC williamr@2: static void PostEntityDeclNameL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01C1 williamr@2: static void PostElementDeclNameL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01B7 williamr@2: static void PostAttlistDeclNameL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01AD williamr@2: static void PostAttfieldNameL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB01A3 williamr@2: static void PostReferenceNameL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0199 williamr@2: static void PostStringL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0186 williamr@2: static void PostValidHexCharL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB017B williamr@2: static void PostValidDecCharL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0171 williamr@2: static void PrePEDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0167 williamr@2: static void PostPEDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB015D williamr@2: static void PostGEDeclL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0153 williamr@2: static void PreGEContentL(CBNFParser& aParser); williamr@2: //##ModelId=3B666BCB0149 williamr@2: static void PostGEContentL(CBNFParser& aParser); williamr@2: williamr@2: // utility functions williamr@2: //##ModelId=3B666BCB0135 williamr@2: static void PostValidCharL(CBNFParser& aParser, TRadix aRadix); williamr@2: //##ModelId=3B666BCB0117 williamr@2: static void PostRuleL(CBNFParser& aParser, TParserNodeTypes aType, const TDesC* aAttribute); williamr@2: williamr@2: //##ModelId=3B666BCB0104 williamr@2: void CharRefReplacement(TPtr& aString); williamr@2: williamr@2: //##ModelId=3B666BCB0103 williamr@2: void DoClear(); williamr@2: williamr@2: // Help methods for the hardcoded WML 1.1 tree williamr@2: //##ModelId=3B666BCB00DB williamr@2: void AddNewAttributeL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, CDTDElementAttribute::KValueType aAttributeValueType, CBNFNode* aRootNode); williamr@2: //##ModelId=3B666BCB00BD williamr@2: void AddNewReferenceAttributeL(CBNFNode& aNode, const TDesC& aAttributeType, CBNFNode* aRootNode); williamr@2: //##ModelId=3B666BCB0095 williamr@2: void AddNewAttributeWithValueL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, const TDesC& aAttributeDefaultValue, CBNFNode* aRootNode); williamr@2: williamr@2: williamr@2: protected: williamr@2: typedef CRuleMarkedStack COwnerRuleMarkedStack; williamr@2: williamr@2: protected: williamr@2: //##ModelId=3B666BCB008B williamr@2: TBool iInPEDecl; williamr@2: //##ModelId=3B666BCB0078 williamr@2: TBool iCharRefCheck; williamr@2: //##ModelId=3B666BCB006E williamr@2: HBufC* iGEContent; williamr@2: williamr@2: //##ModelId=3B666BCB0064 williamr@2: HBufC* iNewAttfieldName; williamr@2: //##ModelId=3B666BCB005A williamr@2: CDTDElementAttribute* iNewElementAttribute; williamr@2: //##ModelId=3B666BCB0046 williamr@2: CBNFNode* iNewRule; williamr@2: //##ModelId=3B666BCB003C williamr@2: CBNFNode* iNewTree; williamr@2: //##ModelId=3B666BCB0030 williamr@2: COwnerRuleMarkedStack iNewRuleStack; williamr@2: }; williamr@2: williamr@2: #endif // __CDTDMODEL_H__