williamr@2: // Copyright (c) 1997-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@2: // 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 williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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: // williamr@2: williamr@2: #ifndef __WBCONVERTER_H williamr@2: #define __WBCONVERTER_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // forward declarations williamr@2: // williamr@2: class CWbxmlToken; williamr@2: class MWbxmlConverterObserver; williamr@2: class CByteList; williamr@2: class CCnvCharacterSetConverter; williamr@2: williamr@2: // consts, defines, enums williamr@2: // williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbXmlVersion10,""); williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbPublicIdStartWml,""); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbPublicIdEnd12,"\" \"http://www.wapforum.org/DTD/wml_1.2.xml\">"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbPublicIdEndSI10,"\" \"http://www.wapforum.org/DTD/si.dtd\">"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbPublicIdEndSL10,"\" \"http://www.wapforum.org/DTD/sl.dtd\">"); williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbTagStart,"<"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbTagStartClose,""); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbTagEndWithoutContent,"/>"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbVariableStart,"$("); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbVariableEscaped,":E)"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbVariableUnescaped,":U)"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbVariableNoescape,":N)"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbVariableNormal,")"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbQuote,"\""); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbSpace," "); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbTab,"\t"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KWbLineBreak,"\n"); williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdIndex = 0; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdUnknown = 1; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdWml10 = 2; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdWta10 = 3; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdWml11 = 4; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdSI = 5; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdSL = 6; williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TInt8 KWbxmlIdWml12 = 9; williamr@2: williamr@2: // Entity translation literals williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityDollar,"$$"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityAmp,"&"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityLt,"<"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityGt,">"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityQuot,"""); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityApos,"'"); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityNbsp," "); williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT8(KEntityShy,"­"); williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: const TUint16 KWbxmlSkipLiteralEndTagMagicToken = 0xac1d; williamr@2: williamr@2: williamr@2: /////////////////////////////////////////////////////////////////// williamr@2: // CWbxmlConverter williamr@2: /////////////////////////////////////////////////////////////////// williamr@2: class RFileReadStream; williamr@2: //##ModelId=3B6678E20007 williamr@2: class CWbxmlConverter : public CBase williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: { williamr@2: public: // Methods williamr@2: //##ModelId=3B6678E30199 williamr@2: ~CWbxmlConverter(); williamr@2: williamr@2: // NOTE: input data really is 8bit bytecode williamr@2: //##ModelId=3B6678E300F9 williamr@2: IMPORT_C static CWbxmlConverter* CWbxmlConverter::NewL(RFs& aFs, MWbxmlConverterObserver* aObserver); williamr@2: //##ModelId=3B6678E300BD williamr@2: IMPORT_C static CWbxmlConverter* CWbxmlConverter::NewLC(RFs& aFs, MWbxmlConverterObserver* aObserver); williamr@2: //##ModelId=3B6678E30135 williamr@2: IMPORT_C static CWbxmlConverter* CWbxmlConverter::NewL(RFs& aFs, MWbxmlConverterObserver* aObserver, const TDesC* aCharacterEncoding); williamr@2: //##ModelId=3B6678E3009F williamr@2: IMPORT_C void ProcessDataL(HBufC8& aBuffer); williamr@2: //##ModelId=3B6678E3009E williamr@2: IMPORT_C void CommitL(); williamr@2: williamr@2: private: // Emumerations williamr@2: williamr@2: enum TGotoState williamr@2: { williamr@2: EGotoStreaming = 1, williamr@2: EGotoString, williamr@2: EGotoOpaque williamr@2: }; williamr@2: enum TConvertState williamr@2: { williamr@2: EConvertError = 1, williamr@2: EConvertVersion, williamr@2: EConvertPublicIdValue, williamr@2: EConvertCharset, williamr@2: EConvertStringTable, williamr@2: EConvertPublicIdName, williamr@2: EConvertData, williamr@2: EConvertFinished williamr@2: }; williamr@2: williamr@2: private: // Methods williamr@2: williamr@2: //##ModelId=3B6678E30080 williamr@2: CWbxmlConverter(RFs& aFs); williamr@2: //##ModelId=3B6678E30045 williamr@2: void ConstructL(MWbxmlConverterObserver* aObserver, const TDesC* aCharacterEncoding); williamr@2: williamr@2: //##ModelId=3B6678E30044 williamr@2: void HandleDataL(); williamr@2: //##ModelId=3B6678E30009 williamr@2: void SetNextStateL(const TInt aResult, const TConvertState aState); williamr@2: //##ModelId=3B6678E30008 williamr@2: TInt ConvertWbxmlVersionL(); williamr@2: //##ModelId=3B6678E203E8 williamr@2: TInt ConvertPublicIdValueL(); // Extract PublicId williamr@2: //##ModelId=3B6678E203E7 williamr@2: TInt ConvertPublicIdNameL(); // Report PublicId williamr@2: //##ModelId=3B6678E203E6 williamr@2: TInt ConvertCharsetL(); williamr@2: //##ModelId=3B6678E203DE williamr@2: TInt ConvertStringTableL(); williamr@2: //##ModelId=3B6678E203DD williamr@2: TInt ConvertDataL(); williamr@2: //##ModelId=3B6678E203DC williamr@2: TInt ConvertDataStreamingL(); williamr@2: //##ModelId=3B6678E203D3 williamr@2: TInt ConvertDataStringL(); williamr@2: //##ModelId=3B6678E203D2 williamr@2: TInt ConvertOpaqueDataL(); williamr@2: //##ModelId=3B6678E203B4 williamr@2: HBufC16* FormatDateStringL(TDesC8& aData); williamr@2: williamr@2: //##ModelId=3B6678E20396 williamr@2: TInt OpenTokenFileL(HBufC& aFileName); williamr@2: //##ModelId=3B6678E2035A williamr@2: void ReadTokenFileL(RFileReadStream& aStream, HBufC8& aBuffer); williamr@2: //##ModelId=3B6678E2033C williamr@2: TInt LoadTokensL(HBufC* aBuffer); williamr@2: williamr@2: //##ModelId=3B6678E2030A williamr@2: TInt ExtractMultiByte(TUint32* aMultiByte, TInt aSkipHeader); williamr@2: //##ModelId=3B6678E202E3 williamr@2: void Indent(const TInt aCount) const; williamr@2: //##ModelId=3B6678E202E2 williamr@2: void FinishStringL(); williamr@2: //##ModelId=3B6678E202C4 williamr@2: HBufC16* CharsetConvertDataL(TDesC8& aData); williamr@2: williamr@2: // Gets the full path to wmlc token table. Input aTokenFilePath is the path, without the drive. williamr@2: // williamr@2: // In: williamr@2: // aTokenFilePath - the path to the token table file. williamr@2: // williamr@2: // Rtn: the full path to the token table file. Ownership is transfered to caller. williamr@2: // williamr@2: //##ModelId=3B6678E202A6 williamr@2: HBufC* FindTokenFileL(const TDesC& aTokenFilePath) const; williamr@2: williamr@2: // Replaces characters originating from chracter entity references with the reference string williamr@2: // For example chracter '&' will be "decoded" back to "&" williamr@2: // williamr@2: // In: williamr@2: // aString - The original string containing the undedcoded characters. williamr@2: // This string can get ReAllocated during the process - DO NOT USE THIS POINTER williamr@2: // AFTER THE CALL to this method. (use the returned one instead...) williamr@2: // Return: williamr@2: // HBufC* - Pointer to the string with replaced stuff williamr@2: // williamr@2: //##ModelId=3B6678E20288 williamr@2: HBufC* ReplaceCharacterEntitiesL(HBufC* aString); williamr@2: williamr@2: // MWbxmlConverterObserver interface overloads williamr@2: //##ModelId=3B6678E2024C williamr@2: void OutputL(const TUint32 aSource) const; williamr@2: williamr@2: //##ModelId=3B6678E2022E williamr@2: TBool OutputCheckQuoteL(HBufC8& aSource) const; williamr@2: williamr@2: // Helper method to optimise the OutputL oveloads williamr@2: //##ModelId=3B6678E20211 williamr@2: void BufferAndOutputL(const TDesC8& aSource) const; williamr@2: williamr@2: // Must exist for Binary Compatibility williamr@2: //##ModelId=3B6678E20210 williamr@2: IMPORT_C virtual void CWbxmlConverter_Reserved1(); williamr@2: williamr@2: private: // Attributes williamr@2: williamr@2: // For binary compatibility williamr@2: //##ModelId=3B6678E20206 williamr@2: TAny* CWbxmlConverter_Reserved; williamr@2: williamr@2: // Attributes williamr@2: // Note: conversion table from disk ie. you can change it at runtime williamr@2: //##ModelId=3B6678E201F2 williamr@2: CArrayPtrFlat* iTagArray; williamr@2: //##ModelId=3B6678E201D3 williamr@2: CArrayPtrFlat* iAttArray; williamr@2: williamr@2: //##ModelId=3B6678E2018D williamr@2: MWbxmlConverterObserver* iObserver; williamr@2: williamr@2: //##ModelId=3B6678E20179 williamr@2: TUint8 iWbxmlVersion; williamr@2: //##ModelId=3B6678E20165 williamr@2: TUint32 iWbxmlCharset; williamr@2: //##ModelId=3B6678E20151 williamr@2: TUint32 iPublicId; williamr@2: //##ModelId=3B6678E2013D williamr@2: TUint32 iPublicIdIndex; williamr@2: williamr@2: // Note: must handle source as 8bit data even in Unicode compile! williamr@2: //##ModelId=3B6678E2012B williamr@2: CByteList* iByteList; williamr@2: //##ModelId=3B6678E2011F williamr@2: HBufC8* iStringTable; williamr@2: //##ModelId=3B6678E2010D williamr@2: HBufC8* iPublicIdStr; williamr@2: //##ModelId=3B6678E20101 williamr@2: RFs& iFs; williamr@2: williamr@2: //##ModelId=3B6678E200ED williamr@2: TInt iState; williamr@2: //##ModelId=3B6678E200E3 williamr@2: TUint32 iContinue; williamr@2: williamr@2: //##ModelId=3B6678E200D1 williamr@2: TUint8 iVariable; williamr@2: //##ModelId=3B6678E200C5 williamr@2: TUint8 hasAttrs; williamr@2: //##ModelId=3B6678E200B3 williamr@2: TUint8 hasContent; williamr@2: williamr@2: williamr@2: //##ModelId=3B6678E200A7 williamr@2: TInt iTagIndex; williamr@2: //##ModelId=3B6678E20095 williamr@2: CArrayFixFlat* iTagStack; williamr@2: //##ModelId=3B6678E2006B williamr@2: TBool iRestrictedOutput; williamr@2: williamr@2: enum TParsing williamr@2: { williamr@2: EParseNot = 0, williamr@2: EParseTag, williamr@2: EParseAttrs williamr@2: }; williamr@2: //##ModelId=3B6678E20059 williamr@2: TParsing iParsing; williamr@2: //##ModelId=3B6678E2004F williamr@2: TBool iOpenQuote; williamr@2: williamr@2: //##ModelId=3B6678E20045 williamr@2: mutable HBufC8* iOutputBuffer; // Buffered output buffer : Optimisation williamr@2: williamr@2: //##ModelId=3B6678E2003B williamr@2: CCnvCharacterSetConverter* iCharsetConverter; williamr@2: williamr@2: #ifdef __OUTPUT_WMLC williamr@2: //##ModelId=3B6678E20031 williamr@2: RFile iWmlcFile; // Debug stuff williamr@2: //##ModelId=3B6678E20025 williamr@2: RFs iWmlcFs; // Debug stuff williamr@2: #endif williamr@2: williamr@2: }; williamr@2: williamr@2: #endif // __WBCONVERTER_H williamr@2: williamr@2: /////////////////////////////////////////////////////////////////// williamr@2: // End of file williamr@2: ///////////////////////////////////////////////////////////////////