--- /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; ii<KTagHashTableNumberOfEntries; ii++)
+ {
+ text.Set(item->iText);
+ iTagHashValues.Append(Hash(text));
+ item++;
+ }
+ iTagHashValues.Compress();
+ }
+
+void CHtmlToCrtConvHashTable::CreateAttributeHashTableL()
+ {
+ const TAttributeHashTableEntry* item=&KAttributeHashTable[0];
+ TPtrC16 text;
+
+ for(TInt ii=0; ii<KAttributeHashTableNumberOfEntries; ii++)
+ {
+ text.Set(item->iText);
+ 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; ii<count; ii++)
+ {
+ const TTagHashTableEntry* item=&KTagHashTable[ii];
+
+ if ((iTagHashValues)[ii]==hashValue)
+ {
+ TPtrC16 text=TPtrC16(item->iText);
+ 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; ii<count; ii++)
+ {
+ const TAttributeHashTableEntry* item=&KAttributeHashTable[ii];
+
+ if ((iAttributeHashValues)[ii]==hashValue)
+ {
+ TPtrC16 text=TPtrC16(item->iText);
+ 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<length; ii++)
+ {
+ TCharUC temp(aText[ii]);
+ hashValue += temp;
+ }
+ return hashValue;
+ }