⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recognizer.cpp

📁 QReader - is a small but very functional e-book reader for Symbian platform (S60-2, S60-3, UIQ2, UIQ
💻 CPP
字号:
/***********************************************************/ 
/* */ 
/* MyRecognizer.cpp */ 
/* */ 
/***********************************************************/ 

// Includes 
#include "Recognizer.h" 

const TUid KUidMimeQReaderRec={0x101FF383};

// 
// Constructor 
// 
CQReaderRecognizer::CQReaderRecognizer() 
	:CApaDataRecognizerType(KUidMimeQReaderRec, CApaDataRecognizerType::ENormal) 
{ 
	iCountDataTypes = 1; 
} 

// 
// Preferred buffer size. 
// 
TUint CQReaderRecognizer::PreferredBufSize() 
{ 
	return 128; 
} 

// 
// For the framework for collecting the supported mime types list. 
// 
TDataType CQReaderRecognizer::SupportedDataTypeL( TInt aIndex ) const 
{ 
/*	switch( aIndex ) 
	{ 
		case 0: 
		default: */
		return TDataType( KMyMimeType ); 
//		break; 
//	} 
} 

// 
// The framework calls this function for recognition 
// 
void CQReaderRecognizer::DoRecognizeL( 
	const TDesC& aName, 
	const TDesC8& aBuffer ) 
{ 
	TInt nameId(0); 
	TBool headerOk( EFalse ); 
	iConfidence = ENotRecognized; 
	if ( aBuffer.Length() < 10 ) 
		return; 

	// First try the name, then the data. 
	nameId = NameRecognized( aName ); 
	switch(nameId)
	{
		case 1:
			headerOk = HeaderRecognizedTCR( aBuffer );
			if(headerOk)
				iConfidence = ECertain; 
			break;
		case 2:
			headerOk = HeaderRecognizedPalmDOC( aBuffer );
			if(headerOk)
				iConfidence = ECertain; 
			break;
		case 3:
//			headerOk = HeaderRecognizedPalmDOC( aBuffer );
//			if(headerOk)
				iConfidence = ECertain; 
			break;
		default:
			break;
	}
	
/*	if ( nameOk && headerOk ) 
	{ 
		iConfidence = ECertain; 
	} */
/*	else if ( !nameOk && headerOk ) 
	{ 
		iConfidence = EProbable; 
	} 
	else if ( nameOk && !headerOk ) 
	{ 
		iConfidence = EPossible; 
	} */
//	else 
//		return; 
	iDataType = TDataType( KMyMimeType ); 
}; 

// 
// Check if the file header can be recognized 
// 
TBool CQReaderRecognizer::HeaderRecognizedTCR( const TDesC8& aBuffer )
{ 
	if(aBuffer.Length()<9||aBuffer[0]!='!'||aBuffer[1]!='!'||aBuffer[2]!='8'||aBuffer[3]!='-'||aBuffer[4]!='B'||aBuffer[5]!='i'||aBuffer[6]!='t'||aBuffer[7]!='!'||aBuffer[8]!='!')
		return EFalse;
	return ETrue;
} 

TBool CQReaderRecognizer::HeaderRecognizedPalmDOC (const TDesC8& aBuffer)
{ 
	if(aBuffer.Length()<0x50||aBuffer[0x3c]!='T'||aBuffer[0x3d]!='E'||aBuffer[0x3e]!='X'||aBuffer[0x3f]!='t'||aBuffer[0x40]!='R'||aBuffer[0x41]!='E'||aBuffer[0x42]!='A'||aBuffer[0x43]!='d')
		return EFalse;
	return ETrue;
} 

// 
// Check if the file name has ".mym" extension 
// 
TInt CQReaderRecognizer::NameRecognized( const TDesC& aName ) 
{ 
	TBool ret = 0; 
	if ( aName.Length() > 5 ) 
	{ 
		TInt dotPos = aName.LocateReverse( '.' ); 

		if (dotPos != KErrNotFound) 
		{ 
			TInt extLength = aName.Length() - dotPos; 
			HBufC* ext = aName.Right( extLength ).AllocL(); 
			CleanupStack::PushL( ext ); 
//			ext->LowerCase();
			if ( ext->CompareF( KDotQReaderMimeTCR ) == 0 ) 
			{ 
				ret = 1; 
			} 
			else if( ext->CompareF( KDotQReaderMimePRC ) == 0 ) 
			{ 
				ret = 2; 
			} 
			else if( ext->CompareF( KDotQReaderMimePDB ) == 0 ) 
			{ 
				ret = 2; 
			} 
			else if( ext->CompareF( KDotQReaderMimeFB2 ) == 0 ) 
			{ 
				ret = 3; 
			} 
/*			else if( ext->CompareF( KDotQReaderMimeBookmarkFile) == 0 ) 
			{ 
				ret = 3; 
			} 
			else if( ext->CompareF( KDotQReaderMimeBookmarkDir) == 0 ) 
			{ 
				ret = 3; 
			}*/

			CleanupStack::PopAndDestroy(); // ext 
		} 
	} 
	return ret; 
} 

// 
// The gate function - ordinal 1 
// 
EXPORT_C CApaDataRecognizerType* CreateRecognizer() 
{ 
	CApaDataRecognizerType* thing = new CQReaderRecognizer(); 
	return thing; // NULL if new failed 
} 

// 
// DLL entry point 
// 
GLDEF_C TInt E32Dll(TDllReason /*aReason*/) 
{ 
	return KErrNone; 
} 
// End of file 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -