epoc32/include/mw/cdtdmodel.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
// contains the parser specialisation (BNF grammar) for a DTD parser.
williamr@2
    15
// See CBNFParser for function details
williamr@2
    16
// 
williamr@2
    17
//
williamr@2
    18
williamr@2
    19
#ifndef __CDTDMODEL_H__
williamr@2
    20
#define __CDTDMODEL_H__
williamr@2
    21
williamr@2
    22
#include <cbnfnode.h>
williamr@2
    23
#include <cbnfparser.h>
williamr@2
    24
#include <crulemarkedstack.h>
williamr@2
    25
williamr@2
    26
//##ModelId=3B666BCB001C
williamr@2
    27
williamr@2
    28
williamr@2
    29
williamr@2
    30
class CDTDModel : public CBNFParser
williamr@2
    31
/** Creates a tree that represents a specified DTD.
williamr@2
    32
williamr@2
    33
To use it:
williamr@2
    34
williamr@2
    35
1. call the base class function ProcessDataL() with the filename of the DTD, and call CommitL()
williamr@2
    36
williamr@2
    37
2. call GeneratedTree() to get the tree
williamr@2
    38
williamr@2
    39
	@publishedAll
williamr@4
    40
	@deprecated
williamr@2
    41
*/
williamr@2
    42
	{
williamr@2
    43
public:
williamr@2
    44
    class CDTDElementAttribute : public CBase
williamr@2
    45
	/** Represents an attribute of a DTD element. */
williamr@2
    46
		{
williamr@2
    47
	public:
williamr@2
    48
		/** DTD element attribute value types. */
williamr@2
    49
		enum KValueType
williamr@2
    50
			{
williamr@2
    51
			/** Attribute supplies a default. */
williamr@2
    52
			EDefault, 
williamr@2
    53
			/** Attribute is #REQUIRED. */
williamr@2
    54
			ERequired, 
williamr@2
    55
			/** Attribute is #IMPLIED. */
williamr@2
    56
			EImplied, 
williamr@2
    57
			/** Attribute is #FIXED. */
williamr@2
    58
			EFixed, 
williamr@2
    59
			/** Attribute is a reference. */
williamr@2
    60
			EReference
williamr@2
    61
			};
williamr@2
    62
williamr@2
    63
	public:
williamr@2
    64
		/** Destructor.
williamr@2
    65
		*/
williamr@2
    66
		virtual ~CDTDElementAttribute() 
williamr@2
    67
			{ 
williamr@2
    68
			delete iType; 
williamr@2
    69
			delete iValue; 
williamr@2
    70
			}
williamr@2
    71
williamr@2
    72
	public:
williamr@2
    73
		/** Node that specifies the attribute type. */
williamr@2
    74
		CBNFNode*	iType;
williamr@2
    75
		/** Node that specifies the attribute value. */
williamr@2
    76
        CBNFNode*	iValue;
williamr@2
    77
		/** Attribute value type. */
williamr@2
    78
        KValueType	iValueType;
williamr@2
    79
		};
williamr@2
    80
williamr@2
    81
williamr@2
    82
	enum TRuleMarks 
williamr@2
    83
		{
williamr@2
    84
		ERuleStartMark = 1, 
williamr@2
    85
		EConditionalMark, 
williamr@2
    86
		EGroupMark 
williamr@2
    87
		};
williamr@2
    88
williamr@2
    89
	//##ModelId=3B666BCB0321
williamr@2
    90
	IMPORT_C static CDTDModel* NewL(CAttributeLookupTable& aLUT);
williamr@2
    91
	//##ModelId=3B666BCB0320
williamr@2
    92
	IMPORT_C virtual ~CDTDModel();
williamr@2
    93
williamr@2
    94
	// This method MUST be invoked before data can be processed by the parser.
williamr@2
    95
	//##ModelId=3B666BCB031F
williamr@2
    96
	IMPORT_C virtual void ResetL();
williamr@2
    97
williamr@2
    98
	//##ModelId=3B666BCB0315
williamr@2
    99
	IMPORT_C CBNFNode* GeneratedTree();
williamr@2
   100
williamr@2
   101
	// Building method for a hard coded WML1.1 DTD tree
williamr@2
   102
	// Input:
williamr@2
   103
	//		aPackageRoot - A root node to which the generated tree is attached
williamr@2
   104
	//
williamr@2
   105
	//##ModelId=3B666BCB030B
williamr@2
   106
	IMPORT_C void BuildWml11DTDL(CBNFNode& aPackageRootNode);
williamr@2
   107
williamr@2
   108
protected:
williamr@2
   109
    IMPORT_C CDTDModel(CAttributeLookupTable& aLUT);	
williamr@2
   110
williamr@2
   111
	// construct our BNF rule tree
williamr@2
   112
	//##ModelId=3B666BCB0302
williamr@2
   113
	IMPORT_C virtual CBNFNode* TreeL();
williamr@2
   114
	
williamr@2
   115
	// to control our internal state on conditional rules.
williamr@2
   116
	//##ModelId=3B666BCB02F7
williamr@2
   117
	IMPORT_C virtual void StartConditional(TParserNodeTypes aRuleType); 
williamr@2
   118
	//##ModelId=3B666BCB02E3
williamr@2
   119
	IMPORT_C virtual void EndConditional(TParserNodeTypes aRuleType, TBool aSuccess);
williamr@2
   120
williamr@2
   121
	// rule callbacks to build the DTD Tree
williamr@2
   122
	//##ModelId=3B666BCB02D9
williamr@2
   123
	static void PreRulesL(CBNFParser& aParser);
williamr@2
   124
	//##ModelId=3B666BCB02CF
williamr@2
   125
	static void PostRulesL(CBNFParser& aParser);
williamr@2
   126
	//##ModelId=3B666BCB02C5
williamr@2
   127
	static void PreElementDeclL(CBNFParser& aParser);
williamr@2
   128
	//##ModelId=3B666BCB02B1
williamr@2
   129
	static void PostElementDeclL(CBNFParser& aParser);
williamr@2
   130
	//##ModelId=3B666BCB02A7
williamr@2
   131
	static void PreEntityDeclL(CBNFParser& aParser);
williamr@2
   132
	//##ModelId=3B666BCB0294
williamr@2
   133
	static void PostEntityDeclL(CBNFParser& aParser);
williamr@2
   134
	//##ModelId=3B666BCB0289
williamr@2
   135
	static void PreAttlistLineL(CBNFParser& aParser);
williamr@2
   136
	//##ModelId=3B666BCB027F
williamr@2
   137
	static void PostAttlistLineL(CBNFParser& aParser);
williamr@2
   138
	//##ModelId=3B666BCB0275
williamr@2
   139
	static void PostAttlistReferenceL(CBNFParser& aParser);
williamr@2
   140
	//##ModelId=3B666BCB026B
williamr@2
   141
	static void PreAttValueL(CBNFParser& aParser);
williamr@2
   142
	//##ModelId=3B666BCB0261
williamr@2
   143
	static void PostAttValueL(CBNFParser& aParser);
williamr@2
   144
	//##ModelId=3B666BCB024E
williamr@2
   145
	static void PostRequiredL(CBNFParser& aParser);
williamr@2
   146
	//##ModelId=3B666BCB0243
williamr@2
   147
	static void PostFixedL(CBNFParser& aParser);
williamr@2
   148
	//##ModelId=3B666BCB0239
williamr@2
   149
	static void PostImpliedL(CBNFParser& aParser);
williamr@2
   150
	//##ModelId=3B666BCB022F
williamr@2
   151
	static void PostAndL(CBNFParser& aParser);
williamr@2
   152
	//##ModelId=3B666BCB0225
williamr@2
   153
	static void PostOrL(CBNFParser& aParser);
williamr@2
   154
	//##ModelId=3B666BCB021B
williamr@2
   155
	static void PreGroupL(CBNFParser& aParser);
williamr@2
   156
	//##ModelId=3B666BCB0208
williamr@2
   157
	static void PostGroupL(CBNFParser& aParser);
williamr@2
   158
	//##ModelId=3B666BCB01FD
williamr@2
   159
	static void PostMatch0PlusL(CBNFParser& aParser);
williamr@2
   160
	//##ModelId=3B666BCB01F3
williamr@2
   161
	static void PostMatch1PlusL(CBNFParser& aParser);
williamr@2
   162
	//##ModelId=3B666BCB01E9
williamr@2
   163
	static void PostOptionalL(CBNFParser& aParser);
williamr@2
   164
	//##ModelId=3B666BCB01DF
williamr@2
   165
	static void PostIdentifierL(CBNFParser& aParser);
williamr@2
   166
	//##ModelId=3B666BCB01CC
williamr@2
   167
	static void PostEntityDeclNameL(CBNFParser& aParser);
williamr@2
   168
	//##ModelId=3B666BCB01C1
williamr@2
   169
	static void PostElementDeclNameL(CBNFParser& aParser);
williamr@2
   170
	//##ModelId=3B666BCB01B7
williamr@2
   171
	static void PostAttlistDeclNameL(CBNFParser& aParser);
williamr@2
   172
	//##ModelId=3B666BCB01AD
williamr@2
   173
	static void PostAttfieldNameL(CBNFParser& aParser);
williamr@2
   174
	//##ModelId=3B666BCB01A3
williamr@2
   175
	static void PostReferenceNameL(CBNFParser& aParser);
williamr@2
   176
	//##ModelId=3B666BCB0199
williamr@2
   177
	static void PostStringL(CBNFParser& aParser);
williamr@2
   178
	//##ModelId=3B666BCB0186
williamr@2
   179
	static void PostValidHexCharL(CBNFParser& aParser);
williamr@2
   180
	//##ModelId=3B666BCB017B
williamr@2
   181
	static void PostValidDecCharL(CBNFParser& aParser);
williamr@2
   182
	//##ModelId=3B666BCB0171
williamr@2
   183
	static void PrePEDeclL(CBNFParser& aParser);
williamr@2
   184
	//##ModelId=3B666BCB0167
williamr@2
   185
	static void PostPEDeclL(CBNFParser& aParser);
williamr@2
   186
	//##ModelId=3B666BCB015D
williamr@2
   187
	static void PostGEDeclL(CBNFParser& aParser);
williamr@2
   188
	//##ModelId=3B666BCB0153
williamr@2
   189
	static void PreGEContentL(CBNFParser& aParser);
williamr@2
   190
	//##ModelId=3B666BCB0149
williamr@2
   191
	static void PostGEContentL(CBNFParser& aParser);	
williamr@2
   192
williamr@2
   193
	// utility functions
williamr@2
   194
	//##ModelId=3B666BCB0135
williamr@2
   195
	static void PostValidCharL(CBNFParser& aParser, TRadix aRadix);
williamr@2
   196
	//##ModelId=3B666BCB0117
williamr@2
   197
	static void PostRuleL(CBNFParser& aParser, TParserNodeTypes aType, const TDesC* aAttribute);
williamr@2
   198
williamr@2
   199
	//##ModelId=3B666BCB0104
williamr@2
   200
	void CharRefReplacement(TPtr& aString);
williamr@2
   201
williamr@2
   202
	//##ModelId=3B666BCB0103
williamr@2
   203
	void DoClear();
williamr@2
   204
williamr@2
   205
	// Help methods for the hardcoded WML 1.1 tree
williamr@2
   206
	//##ModelId=3B666BCB00DB
williamr@2
   207
	void AddNewAttributeL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, CDTDElementAttribute::KValueType aAttributeValueType, CBNFNode* aRootNode);
williamr@2
   208
	//##ModelId=3B666BCB00BD
williamr@2
   209
	void AddNewReferenceAttributeL(CBNFNode& aNode, const TDesC& aAttributeType, CBNFNode* aRootNode);
williamr@2
   210
	//##ModelId=3B666BCB0095
williamr@2
   211
	void AddNewAttributeWithValueL(CBNFNode& aNode, const TDesC* aAttributeId, const TDesC& aAttributeType, const TDesC& aAttributeDefaultValue, CBNFNode* aRootNode);
williamr@2
   212
williamr@2
   213
williamr@2
   214
protected:
williamr@2
   215
    typedef CRuleMarkedStack<ETrue> COwnerRuleMarkedStack;
williamr@2
   216
williamr@2
   217
protected:
williamr@2
   218
	//##ModelId=3B666BCB008B
williamr@2
   219
	TBool					iInPEDecl;	
williamr@2
   220
	//##ModelId=3B666BCB0078
williamr@2
   221
	TBool					iCharRefCheck;
williamr@2
   222
	//##ModelId=3B666BCB006E
williamr@2
   223
	HBufC*					iGEContent;
williamr@2
   224
williamr@2
   225
	//##ModelId=3B666BCB0064
williamr@2
   226
	HBufC*					iNewAttfieldName;
williamr@2
   227
	//##ModelId=3B666BCB005A
williamr@2
   228
	CDTDElementAttribute*	iNewElementAttribute;
williamr@2
   229
	//##ModelId=3B666BCB0046
williamr@2
   230
	CBNFNode*				iNewRule;
williamr@2
   231
	//##ModelId=3B666BCB003C
williamr@2
   232
	CBNFNode*				iNewTree;
williamr@2
   233
	//##ModelId=3B666BCB0030
williamr@2
   234
	COwnerRuleMarkedStack	iNewRuleStack;
williamr@2
   235
	};
williamr@2
   236
williamr@2
   237
#endif // __CDTDMODEL_H__