diff -r 000000000000 -r e4d67989cc36 genericservices/mimerecognitionfw/rec/RECTXT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericservices/mimerecognitionfw/rec/RECTXT.CPP Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,120 @@ +// Copyright (c) 1997-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 "RECTXT.H" +#include + +const TUid KUidMimeTxtRecognizer={0x100012FB}; +const TInt KMinBufferLength=42; // minimum amount of file needed to determine a text file IF it's not called .TXT +const TInt KMaxBufferLength=1024; // maximum amount of buffer space we will ever use +_LIT8(KDataTypeTextPlain,"text/plain"); +_LIT(KTextFileExt,".txt"); + +CApaTextRecognizer::CApaTextRecognizer() + :CApaDataRecognizerType(KUidMimeTxtRecognizer,CApaDataRecognizerType::ELow) + // Text files are low recognition - they don't have a clear signature + { + iCountDataTypes=1; + } + +TUint CApaTextRecognizer::PreferredBufSize() + { + return KMaxBufferLength; + } + +#if defined(_DEBUG) +TDataType CApaTextRecognizer::SupportedDataTypeL(TInt aIndex) const +#else +TDataType CApaTextRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const +#endif + { + __ASSERT_DEBUG(aIndex==0,User::Invariant()); + return TDataType(KDataTypeTextPlain); + } + +void CApaTextRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer) + { + TBool nameRecognized=EFalse; + + // check if the file has valid UIDs + if (aBuffer.Length() >= 16) + { + // if the first 3 bytes are valid UIDs,then this file is not a plain/text. + // Set iConfidence appropriately and exit. + const TCheckedUid checkUid(aBuffer.Left(16)); + if (checkUid.UidType().IsValid()) + { + iConfidence=ENotRecognized; + return; + } + } + + if (aName.Length()>4) + { + nameRecognized=(aName.Right(4).CompareF(KTextFileExt)==0); + } + const TInt length=Min(aBuffer.Length(), KMaxBufferLength); + if (length13 && chr<32)) + { + break; + } + if (chr>148) + { + break; + } + } + const TBool validChars=(ii==length); + + if (nameRecognized) + { + iConfidence=validChars? EProbable : EUnlikely; + } + else + { + if (!validChars) + { + return; + } + iConfidence=EPossible; + } + iDataType=TDataType(KDataTypeTextPlain); + } + +CApaDataRecognizerType* CApaTextRecognizer::CreateRecognizerL() + { + return new (ELeave) CApaTextRecognizer(); + } + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0x101F7DA0,CApaTextRecognizer::CreateRecognizerL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +