filehandling/htmltorichtextconverter/src/CHtmlToCrtConvHashTable.cpp
changeset 0 2e3d3ce01487
--- /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;
+	}