diff -r 000000000000 -r 2e3d3ce01487 filehandling/htmltorichtextconverter/src/CHtmlToCrtConvHashTable.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filehandling/htmltorichtextconverter/src/CHtmlToCrtConvHashTable.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,162 @@ +// Copyright (c) 2001-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: +// + + +#include "CHtmlToCrtConvHashTable.h" +#include "CHtmlToCrtConvHash.h" +#include "CHtmlToCrtConvLookupTable.h" +#include "CHtmlToCrtConvAssertDefines.h" + +const TInt KTagHashTableNumberOfEntries = sizeof(KTagHashTable)/sizeof(TTagHashTableEntry); +const TInt KAttributeHashTableNumberOfEntries = sizeof(KAttributeHashTable)/sizeof(TAttributeHashTableEntry); + +CHtmlToCrtConvHashTable::CHtmlToCrtConvHashTable() + { + } + +CHtmlToCrtConvHashTable* CHtmlToCrtConvHashTable::NewL() + { + CHtmlToCrtConvHashTable* self=new(ELeave) CHtmlToCrtConvHashTable(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CHtmlToCrtConvHashTable::ConstructL() + { + CreateTagHashTableL(); + CreateAttributeHashTableL(); + } + +CHtmlToCrtConvHashTable::~CHtmlToCrtConvHashTable() + { + iTagHashValues.Close(); + iAttributeHashValues.Close(); + } + +void CHtmlToCrtConvHashTable::CreateTagHashTableL() + { + const TTagHashTableEntry* item=&KTagHashTable[0]; + TPtrC16 text; + + for(TInt ii=0; iiiText); + iTagHashValues.Append(Hash(text)); + item++; + } + iTagHashValues.Compress(); + } + +void CHtmlToCrtConvHashTable::CreateAttributeHashTableL() + { + const TAttributeHashTableEntry* item=&KAttributeHashTable[0]; + TPtrC16 text; + + for(TInt ii=0; iiiText); + iAttributeHashValues.Append(Hash(text)); + item++; + } + iAttributeHashValues.Compress(); + } + +THtmlToCrtConvTagType CHtmlToCrtConvHashTable::LookupTag(const TDesC16& aTag) const + { + TInt hashValue=Hash(aTag); + TInt length=aTag.Length(); + const TInt count=iTagHashValues.Count(); + + for(TInt ii=0; iiiText); + if (text.Length()==length) + { + if (aTag.CompareF(text)==0) + { + return item->iTagType; + } + } + } + } + return EHtmlTagUnknown; + } + +const TDesC16& CHtmlToCrtConvHashTable::LookupEntity(const TDesC16& aEntityName) const + { + TChar firstChar(aEntityName.Ptr()[0]); + firstChar=firstChar.GetUpperCase(); + switch (firstChar) + { + case 'L': + if (!aEntityName.CompareF(KHtmlLt)) + return KHtmlEntityLt; + break; + case 'G': + if (!aEntityName.CompareF(KHtmlGt)) + return KHtmlEntityGt; + break; + case 'N': + if (!aEntityName.CompareF(KHtmlNbsp)) + return KHtmlEntitySpace; + break; + } + + return KHtmlEntityUnknown; + } + +THtmlToCrtConvAttributeType CHtmlToCrtConvHashTable::LookupAttribute(const TDesC16& aAttribute) const + { + TInt hashValue=Hash(aAttribute); + TInt length=aAttribute.Length(); + const TInt count=iAttributeHashValues.Count(); + + for(TInt ii=0; iiiText); + if (text.Length()==length) + { + if (aAttribute.CompareF(text)==0) + { + return item->iAttributeType; + } + } + } + } + return EHtmlAttributeUnknown; + } + +TInt CHtmlToCrtConvHashTable::Hash(const TDesC16& aText) const + { + TInt hashValue=0; + const TInt length=aText.Length(); + + for(TInt ii=0; ii