diff -r 000000000000 -r 1fb32624e06b textrendering/texthandling/stext/ParseLst.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textrendering/texthandling/stext/ParseLst.h Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,124 @@ +/* +* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __PARSELST_H__ +#define __PARSELST_H__ + +#include +#include +#include +//++ sort out definitive hash includes + + +NONSHARABLE_CLASS(CParserList) : public CBase +/** +@internalComponent +*/ + { + enum TParserTagValues + { + EReformatOnRecogniseFlag = (TInt)0x80000000, + EReformatOnRolloverFlag = 0x40000000, + EDefaultParserFlag = 0x20000000, + EParserTagMask = 0x3FFFFFFF, + EMaxParserIndex = 0x1FFFFFFF + }; + + enum TParserListPanic + { + EParserNoneActive, + EParserNullPtr, + EParserInstanceNotActive, + EParserNoSuchTag, + EParserIgnoringAllowFlag, + EParserIndexRollover + }; + +private: + class CParserItem : public CBase + { + public: + CParserItem(MParser* aParser, const TUint aTagIndex); + ~CParserItem() {} + + inline MParser* Parser() const {return iParser;} + inline TUint TagIndex() const {return iTagIndex;} + + private: + MParser* iParser; + TUint iTagIndex; + }; + +public: + CParserList(); + ~CParserList(); + + void ActivateParserL(MParser* aParser); + void DeactivateParser(MParser* aParser); + void ActivateDefaultParserL(MParser* aParser); + void DeactivateParserDefaults(); + TBool ParseThisText(CRichText& aTextObj,TInt aStartScan,TInt aScanLength,TInt& aStartOfTags,TInt& aLength); + MParser* ParserWithThisTag(const TUint aTagIndex) const; + TUint TagForThisParser(const MParser *const aParser) const; + + static inline TBool ReformatOnRollover(const TUint aTagIndex) {return (aTagIndex & EReformatOnRolloverFlag);} + +private: + static inline TBool ReformatOnRecognise(const TUint aTagIndex) {return (aTagIndex & static_cast( EReformatOnRecogniseFlag ) );} + static inline TBool DefaultParser(const TUint aTagIndex) {return (aTagIndex & EDefaultParserFlag);} + + static inline TUint MaskedTag(const TUint32 aTagIndex) {return (aTagIndex & EParserTagMask);} + + void ActivateAParserL(MParser* aParser, const TBool aDefaultParser); + TBool LoopOneParser(MParser* aParser, const TUint aTagIndex, CRichText& aTextObj, + const TInt aStartScan, const TInt aScanLength, + TInt& aStartOfTags, TInt& aLength); + void Panic(TParserListPanic aPanic) const; + +private: + RPointerArray iParserList; // List of active parsers (specific and default) + TUint iHighestIndex; +public: + TInt iNumberInList; + TInt iRefCount; + }; + +NONSHARABLE_CLASS(CParserData) : public CBase +/** +@internalComponent +*/ + { +public: + CParserData(TInt aEndParse); + ~CParserData(); + TBool HaveRange() const { return iStartParse != -1; } + void MergeRange(TInt aStart,TInt aOldLength,TInt aNewLength); + void KillRange() { iStartParse = -1; } + TInt StartParse() const { return iStartParse; } + TInt EndParse() const { return iEndParse; } + + CParserList* iActiveParserList; // local copy because access to Dll::Tls is slow + MEditObserver* iEditObserver; + TInt iLastKnownCursor; + +private: + TInt iStartParse; // start of text to be parsed; -1 means none + TInt iEndParse; // end of text to be parsed + }; + +#endif