diff -r 000000000000 -r 2e3d3ce01487 contenthandling/webrecognisers/recweb/RECWEB.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contenthandling/webrecognisers/recweb/RECWEB.CPP Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,221 @@ +// Copyright (c) 2003-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 +#include +#include +#include "RECWEB.H" + +#ifdef __UI_FRAMEWORKS_V2__ +#include +#endif //__UI_FRAMEWORKS_V2__ + +const TInt KMimeWebRecognizerValue=0x10001315; +const TUid KUidMimeWebRecognizer={KMimeWebRecognizerValue}; +const TInt KWebNumMimeTypes=2; +const TInt KWebRecogniserBufferSize=2048; +_LIT8(KHtmlMimeType,"text/html"); +_LIT8(KXmlMimeType,"text/xml"); + +CApaWebRecognizer::CApaWebRecognizer() +: CApaDataRecognizerType(KUidMimeWebRecognizer,CApaDataRecognizerType::ENormal) + // All these mime types have reasonable recognition + { + iCountDataTypes=KWebNumMimeTypes; + } + +TUint CApaWebRecognizer::PreferredBufSize() + { + return KWebRecogniserBufferSize; + } + +TDataType CApaWebRecognizer::SupportedDataTypeL(TInt aIndex) const + { + __ASSERT_DEBUG(aIndex>=0 && aIndex=0) + {//check the extension + const TPtrC ext=aName.Mid(positionOfLastDot); + _LIT(KDotHtml,".html"); + _LIT(KDotHtm,".htm"); + _LIT(KDotShtml,".shtml"); + _LIT(KDotShtm,".shtm"); + _LIT(KDotXhtml,".xhtml"); + _LIT(KDotXml,".xml"); + + if (ext.CompareF(KDotHtml)==0 || ext.CompareF(KDotHtm)==0 + || ext.CompareF(KDotShtml)==0 || ext.CompareF(KDotShtm)==0 + || ext.CompareF(KDotXhtml)==0) + { + iDataType=TDataType(KHtmlMimeType); + iConfidence=EProbable; + } + else if (ext.CompareF(KDotXml)==0) + { + iDataType=TDataType(KXmlMimeType); + iConfidence=EProbable; + } + } + + if (aBuffer.Length() > 0 && iConfidence == ENotRecognized) + { //don't check data if extension is recognised, otherwise check data file + TInt htmlConfidence = 0; + TInt xmlConfidence = 0; + + // Description Valid in + // HTML XHTML XML + // + _LIT8(KXml, "=0) + { + ++xmlConfidence; + } + + if (aBuffer.FindF(KEmbeddedXml) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KXmlScheme) >=0) + { + ++xmlConfidence; + } + + if (aBuffer.FindF(KHtml) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KBody) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KTitle) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KHead) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KDocType) >=0) + { + ++xmlConfidence; + ++htmlConfidence; + } + + if (aBuffer.FindF(KHtmlDocType) >=0) + { + ++htmlConfidence; + } + + if (aBuffer.FindF(KXmlStyle) >=0) + { + ++xmlConfidence; + } + + // Use the xmlConfidence and htmlConfidence values and decide on the type. + // The datatype will be set to text/xml if 2 or more xml tags match. + // If there are 3 or more html tags the data type is overridden to text/html + // as if we have xml and html tags, it is likely that it is an xhtml file + // which has the text.html datatype. If there are more than 3 html tags + // the confidence is increased. + // If there is an extension but it doesn't match data, knock down confidence. + if(xmlConfidence>1) + { + iDataType=TDataType(KXmlMimeType); + //knock down confidence if extension is not recognised + iConfidence=(positionOfLastDot>=0) ? EPossible : EProbable; + } + + if(htmlConfidence>2) + { + iDataType=TDataType(KHtmlMimeType); + //knock down confidence if extension is not recognised + iConfidence=(positionOfLastDot>=0) ? EPossible : EProbable; + } + + if(htmlConfidence>3) + iConfidence=EProbable; + } + } + +#ifdef __UI_FRAMEWORKS_V2__ + +const TImplementationProxy ImplementationTable[]= + { + IMPLEMENTATION_PROXY_ENTRY(0x10001315,CApaWebRecognizer::NewL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +CApaDataRecognizerType* CApaWebRecognizer::NewL() + { + return new (ELeave) CApaWebRecognizer(); + } + +#else + +EXPORT_C CApaDataRecognizerType* CreateRecognizer() +// The gate function - ordinal 1 +// + { + CApaDataRecognizerType* self = new CApaWebRecognizer(); + return self; // NULL if new failed + } + +#endif //__UI_FRAMEWORKS_V2__ + + +#ifndef EKA2 +GLDEF_C TInt E32Dll(TDllReason /*aReason*/) +// +// DLL entry point +// + { + return KErrNone; + } +#endif // EKA2