📄 recognizer.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 + -