Files
core/ASCOfficeFile/FormatChecker.h

984 lines
38 KiB
C++

#pragma once
#include "../Common/OfficeFileFormats.h"
#include "../Common/OfficeFileErrorDescription.h"
#include <string>
#include "XmlUtils.h"
#import "./../../Redist/AVSOfficeStudio/AVSOfficeUtils.dll" raw_interfaces_only
class AVSOfficeFormatChecker{
private: AVSOfficeUtils::IOfficeUtils2* m_pOfficeUtils;
private: static const long mc_aFormatTable[][2];
private: static const int mc_nFormatTableSize;
private: static const long mc_aViewTable[];
private: static const int mc_nViewTableSize;
public: AVSOfficeFormatChecker()
{
m_pOfficeUtils = NULL;
CoCreateInstance(__uuidof(AVSOfficeUtils::COfficeUtils),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(AVSOfficeUtils::IOfficeUtils2),
(void **)&(m_pOfficeUtils));
}
public: ~AVSOfficeFormatChecker()
{
if (m_pOfficeUtils != NULL)
{
m_pOfficeUtils->Release();
m_pOfficeUtils = NULL;
}
}
//nSource - define èñõîäíîãî ôîðìàòà
//nDestination - define êîíå÷íîãî ôîðìàòà
public: bool CanConvert( long nSource, long nDestination )
{
////íàïðÿìóþ
//for( int i = 0; i < mc_nFormatTableSize; i++ )
//{
// if( mc_aFormatTable[i][0] == nSource && mc_aFormatTable[i][1] == nDestination )
// {
// return true;
// }
//}
////èñïîëüçóåì docx êàê êîíòåéíåð
//bool bDocxContainer = false;
//for( int i = 0; i < mc_nFormatTableSize; i++ )
//{
// if( mc_aFormatTable[i][0] == nSource && mc_aFormatTable[i][1] == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX )
// {
// bDocxContainer = true;
// break;
// }
//}
//if( true == bDocxContainer )
// for( int i = 0; i < mc_nFormatTableSize; i++ )
// {
// if( mc_aFormatTable[i][0] == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX && mc_aFormatTable[i][1] == nDestination )
// return true;
// }
////èñïîëüçóåì xlsx êàê êîíòåéíåð
//bool bXlsxContainer = false;
//for( int i = 0; i < mc_nFormatTableSize; i++ )
//{
// if( mc_aFormatTable[i][0] == nSource && mc_aFormatTable[i][1] == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX )
// {
// bXlsxContainer = true;
// break;
// }
//}
//if( true == bXlsxContainer )
// for( int i = 0; i < mc_nFormatTableSize; i++ )
// {
// if( mc_aFormatTable[i][0] == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX && mc_aFormatTable[i][1] == nDestination )
// return true;
// }
//return false;
return true;
}
public: bool CanView( long nSource )
{
////ìîæíî ñäåëàòü áèíàðíî
//for( int i = 0; i < mc_nViewTableSize; i++ )
// if( mc_aViewTable[i] == nSource )
// return true;
//return false;
return true;
}
//sFileName - ïîëíîå èìÿ ôàéëà
//return - ôîðìàò ôàéëà áåðåòñÿ ïî íà÷àëó ôàéëà, åñëè ýòî íåâîçìîæíî, òî ïî ðàñøèðåíèþ
public: long GetFileFormat( CString sFileName )
{
long lError;
long format = AVS_OFFICESTUDIO_FILE_UNKNOWN;
//Òàêîé ïóñòîé ôàéë ïîÿâëÿåòñÿ, åñëè ñîçäàâàòü äîêóìåíò â êîíòåêñòíîì ìåíþ ïî ÏÊÌ
//Îòêðûâàåì åãî êàê txt
if( TRUE == IsEmptyFile( sFileName, lError ) )
return AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT;
//ïî çàãîëîâêó ôàéëà
if( TRUE == IsRTFFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF;
else if( TRUE == IsPDFFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF;
else if ( TRUE == IsFB2File( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2;
else if( TRUE == IsDJVUFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU;
else if( TRUE == IsMOBIFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI;
else
format = IsImageFile(sFileName, lError);
if (format != AVS_OFFICESTUDIO_FILE_UNKNOWN)
return format;
//ïî ñîäåðæàíèþ ôàéëà
IStorage* storage = IsStorageType( sFileName );
if (storage != NULL)
{
if( TRUE == IsDOCFile( storage, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC;
else if( TRUE == IsXLSFile( storage, lError ) )
format = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS;
else if( TRUE == IsPPTFile( storage, lError ) )
format = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT;
else if( TRUE == IsMS_OFFCRYPTOFile( storage, lError ) )
format = AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO;
storage->Release();
}
else if (IsArchiveType( sFileName ))
{
if ( TRUE == IsDOCXFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX;
else if ( TRUE == IsXLSXFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX;
else if ( TRUE == IsPPTXFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX;
else if ( TRUE == IsODTFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT;
else if ( TRUE == IsODPFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP;
else if ( TRUE == IsODSFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS;
else if ( TRUE == IsEPUBFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB;
else if ( TRUE == IsXPSFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS;
}
//âîçâðàùàåì òèï ïî ðàñøèðåíèþ
else
{
TCHAR tBuffer[256];
_tsplitpath( sFileName, NULL,NULL,NULL, tBuffer );
CString sExtention( tBuffer );
CharLower( sExtention.GetBuffer() );
sExtention.ReleaseBuffer();
if ( _T(".mht") == sExtention )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT;
else if ( _T(".txt") == sExtention || _T(".xml") == sExtention || _T(".xslt") == sExtention )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT;
else if( _T(".csv") == sExtention )
format = AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV;
else if( _T(".svg") == sExtention )
format = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG;
else if ( _T(".html") == sExtention || _T(".htm") == sExtention )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML;
else
{
//ïðîáóåì îïðåäåëèòü html ïî ñîäåðæèìîìó
//îáÿçàòåëüíî ïóñêàåì ýòó ôóíêöèþ â êîíöå êîãäà äðóãèå ñïîñîáû íå ïîìîãëè
if ( TRUE == IsHtmlFile( sFileName, lError ) )
format = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML;
}
}
return format;
}
private: BOOL IsEmptyFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
HANDLE hFile;
hFile = ::CreateFile( sFilePath , GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE==hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
DWORD dwDataSize = GetFileSize(hFile, NULL);
::CloseHandle(hFile);
if(INVALID_FILE_SIZE != dwDataSize && 0 == dwDataSize)
return TRUE;
return FALSE;
}
private: BOOL IsRTFFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
BYTE pBuffer[ 5 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile( sFilePath , GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE==hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile( hFile, pBuffer, 5, &dwBytesRead, NULL );
::CloseHandle(hFile);
if( (5 <= dwBytesRead) && '{' == pBuffer[0] && '\\' == pBuffer[1] && 'r' == pBuffer[2] && 't' == pBuffer[3] && 'f' == pBuffer[4] )
return TRUE;
return FALSE;
}
private: BOOL IsMOBIFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
BYTE pBuffer[ 70 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile( sFilePath , GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE==hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile( hFile, pBuffer, 70, &dwBytesRead, NULL );
::CloseHandle(hFile);
if (70 > dwBytesRead)
return FALSE;
if ((pBuffer[60] == (BYTE)'B') &&
(pBuffer[61] == (BYTE)'O') &&
(pBuffer[62] == (BYTE)'O') &&
(pBuffer[63] == (BYTE)'K') &&
(pBuffer[64] == (BYTE)'M') &&
(pBuffer[65] == (BYTE)'O') &&
(pBuffer[66] == (BYTE)'B') &&
(pBuffer[67] == (BYTE)'I'))
return TRUE;
if ((pBuffer[60] == (BYTE)'T') &&
(pBuffer[61] == (BYTE)'E') &&
(pBuffer[62] == (BYTE)'X') &&
(pBuffer[63] == (BYTE)'t') &&
(pBuffer[64] == (BYTE)'R') &&
(pBuffer[65] == (BYTE)'E') &&
(pBuffer[66] == (BYTE)'A') &&
(pBuffer[67] == (BYTE)'d'))
return TRUE;
return FALSE;
}
private: BOOL IsPDFFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
BYTE pBuffer[ 20 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile(hFile, pBuffer, 19, &dwBytesRead, NULL);
::CloseHandle(hFile);
pBuffer[dwBytesRead] = '\0';
char* pFirst = strstr( (char*)pBuffer, "%PDF-" );
if( NULL != pFirst )
return TRUE;
return FALSE;
}
private: BOOL IsDJVUFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
BYTE pBuffer[ 8 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile(hFile, pBuffer, 8, &dwBytesRead, NULL);
::CloseHandle(hFile);
//djvu
//Hex: 41 54 26 54 46 4f 52 4d
//ASCII: AT&TFORM
if ( 8 <= dwBytesRead )
{
if ( (0x41 == pBuffer[0]) && (0x54 == pBuffer[1]) && (0x26 == pBuffer[2]) && (0x54 == pBuffer[3]) && (0x46 == pBuffer[4]) && (0x4f == pBuffer[5]) && (0x52 == pBuffer[6]) && (0x4d == pBuffer[7]))
return TRUE;
}
return FALSE;
}
private: BOOL IsDOCFile(IStorage* storage, long &lError)
{
lError = NOERROR;
IStream* stream = NULL;
HRESULT hresult = storage->OpenStream( L"WordDocument", NULL, ( STGM_READ | STGM_DIRECT | STGM_SHARE_EXCLUSIVE ),
NULL, &stream );
if ( stream != NULL )
stream->Release();
return hresult == S_OK? TRUE: FALSE;
}
private: int IsImageFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
BYTE pBuffer[ 44 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
return AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
::ReadFile(hFile, pBuffer, 44, &dwBytesRead, NULL);
::CloseHandle(hFile);
//jpeg
// Hex: FF D8 FF
if ( (3 <= dwBytesRead) && (0xFF == pBuffer[0]) && (0xD8 == pBuffer[1]) && (0xFF == pBuffer[2]) )
return AVS_OFFICESTUDIO_FILE_IMAGE_JPG;
//bmp ( http://ru.wikipedia.org/wiki/BMP )
//Hex: 42 4D
//ASCII: BM
//Hex (position 6) : 00 00
//Hex (position 26): 01 00
//Hex (position 28): 00 || 01 || 04 || 08 || 10 || 18 || 20
//Hex (position 29): 00
//Hex (position 30): 00 || 01 || 02 || 03 || 04 || 05
//Hex (position 31): 00 00 00
if ( (34 <= dwBytesRead) && (0x42 == pBuffer[0]) && (0x4D == pBuffer[1]) &&
(0x00 == pBuffer[6]) && (0x00 == pBuffer[7]) && (0x01 == pBuffer[26]) && (0x00 == pBuffer[27]) &&
( (0x00 == pBuffer[28]) || (0x01 == pBuffer[28]) || (0x04 == pBuffer[28]) || (0x08 == pBuffer[28]) ||
(0x10 == pBuffer[28]) || (0x18 == pBuffer[28]) || (0x20 == pBuffer[28]) ) && (0x00 == pBuffer[29]) &&
( (0x00 == pBuffer[30]) || (0x01 == pBuffer[30]) || (0x02 == pBuffer[30]) || (0x03 == pBuffer[30]) ||
(0x04 == pBuffer[30]) || (0x05 == pBuffer[30]) ) && (0x00 == pBuffer[31]) && (0x00 == pBuffer[32]) && (0x00 == pBuffer[33]) )
return AVS_OFFICESTUDIO_FILE_IMAGE_BMP;
//gif
//Hex: 47 49 46 38
//ASCII: GIF8
//or for GIF87a...
//Hex: 47 49 46 38 37 61
//ASCII: GIF87a
//or for GIF89a...
//Hex: 47 49 46 38 39 61
//ASCII: GIF89a
if ( (4 <= dwBytesRead) && (0 == strncmp( (char *)pBuffer, "GIF8", 4)))
return AVS_OFFICESTUDIO_FILE_IMAGE_GIF;
if ( (6 <= dwBytesRead) && ( (0 == strncmp( (char *)pBuffer, "GIF87a", 6)) || (0 == strncmp((char *)pBuffer, "GIF89a", 6)) ) )
return AVS_OFFICESTUDIO_FILE_IMAGE_GIF;
//png
//Hex: 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
//ASCII: .PNG........IHDR
if ( (16 <= dwBytesRead) && (0x89 == pBuffer[0]) && (0x50 == pBuffer[1]) && (0x4E == pBuffer[2]) && (0x47 == pBuffer[3])
&& (0x0D == pBuffer[4]) && (0x0A == pBuffer[5]) && (0x1A == pBuffer[6]) && (0x0A == pBuffer[7])
&& (0x00 == pBuffer[8]) && (0x00 == pBuffer[9]) && (0x00 == pBuffer[10]) && (0x0D == pBuffer[11])
&& (0x49 == pBuffer[12]) && (0x48 == pBuffer[13]) && (0x44 == pBuffer[14]) && (0x52 == pBuffer[15]))
return AVS_OFFICESTUDIO_FILE_IMAGE_PNG;
//CR2
//Hex: 49 49 2A 00 10 00 00 00 43 52
//ASCII: II*.....CR
if ( (10 <= dwBytesRead ) && (0x49 == pBuffer[0]) && (0x49 == pBuffer[1]) && (0x2A == pBuffer[2])
&& (0x00 == pBuffer[3]) && (0x10 == pBuffer[4]) && (0x00 == pBuffer[5]) && (0x00 == pBuffer[6])
&& (0x00 == pBuffer[7]) && (0x43 == pBuffer[8]) && (0x52 == pBuffer[9]) )
return AVS_OFFICESTUDIO_FILE_IMAGE_CR2;
//tiff
//Hex: 49 49 2A 00
//ASCII:
//or for big endian
//Hex: 4D 4D 00 2A
//ASCII: MM.*
//or for little endian
//Hex: 49 49 2A 00
//ASCII: II*
if ( 4 <= dwBytesRead )
{
if ( ( (0x49 == pBuffer[0]) && (0x49 == pBuffer[1]) && (0x2A == pBuffer[2]) && (0x00 == pBuffer[3]) ) ||
( (0x4D == pBuffer[0]) && (0x4D == pBuffer[1]) && (0x00 == pBuffer[2]) && (0x2A == pBuffer[3]) ) ||
( (0x49 == pBuffer[0]) && (0x49 == pBuffer[1]) && (0x2A == pBuffer[2]) && (0x00 == pBuffer[3]) ))
return AVS_OFFICESTUDIO_FILE_IMAGE_TIFF;
}
//wmf
//Hex: D7 CD C6 9A 00 00
//or for Windows 3.x
//Hex: 01 00 09 00 00 03
if ( 6 <= dwBytesRead )
{
if ( ((0xD7 == pBuffer[0]) && (0xCD == pBuffer[1]) && (0xC6 == pBuffer[2]) && (0x9A == pBuffer[3])&& (0x00 == pBuffer[4]) && (0x00 == pBuffer[5]) ) ||
((0x01 == pBuffer[0]) && (0x00 == pBuffer[1]) && (0x09 == pBuffer[2]) && (0x00 == pBuffer[3]) && (0x00 == pBuffer[4]) && (0x03 == pBuffer[5]) ))
return AVS_OFFICESTUDIO_FILE_IMAGE_WMF;
}
//emf ( http://wvware.sourceforge.net/caolan/ora-wmf.html )
//Hex: 01 00 00 00
//Hex (position 40): 20 45 4D 46
if ( (44 <= dwBytesRead) && (0x01 == pBuffer[0]) && (0x00 == pBuffer[1]) && (0x00 == pBuffer[2]) && (0x00 == pBuffer[3]) &&
(0x20 == pBuffer[40]) && (0x45 == pBuffer[41]) && (0x4D == pBuffer[42]) && (0x46 == pBuffer[43]) )
return AVS_OFFICESTUDIO_FILE_IMAGE_EMF;
//pcx ( http://www.fileformat.info/format/pcx/corion.htm )
//Hex (position 0): 0A
//Hex (position 1): 00 || 01 || 02 || 03 || 04 || 05
//Hex (position 3): 01 || 02 || 04 || 08 ( Bytes per pixel )
if ( (4 <= dwBytesRead) && (0x0A == pBuffer[0]) && (0x00 == pBuffer[1] || 0x01 == pBuffer[1] ||
0x02 == pBuffer[1] || 0x03 == pBuffer[1] || 0x04 == pBuffer[1] || 0x05 == pBuffer[1] ) &&
( 0x01 == pBuffer[3] || 0x02 == pBuffer[3] || 0x04 == pBuffer[3] || 0x08 == pBuffer[3] ))
return AVS_OFFICESTUDIO_FILE_IMAGE_PCX;
//tga ( http://www.fileformat.info/format/tga/corion.htm )
//DATA TYPE 1-COLOR-MAPPED IMAGES : Hex (position 1) : 01 01
//DATA TYPE 2-TRUE-COLOR IMAGES : Hex (position 1) : 00 02
//DATA TYPE 3-BLACK AND WHITE(UNMAPPED) IMAGES : Hex (position 1) : 00 03
//DATA TYPE 9-RUN-LENGTH ENCODED(RLE),COLOR-MAPPED IMAGES : Hex (position 1) : 01 09
//DATA TYPE 10-RUN-LENGTH ENCODED(RLE),TRUE-COLOR IMAGES : Hex (position 1) : 00 0A
//DATA TYPE 11-RUN-LENGTH ENCODED(RLE),BLACK AND WHITE IMAGES : Hex (position 1) : 00 0B
// + Bytes per pixel : Hex (position 16): 0x08 || 0x10 || 0x18 || 0x20
if ( (17 <= dwBytesRead) && ( (0x01 == pBuffer[1] && 0x01 == pBuffer[2]) || (0x00 == pBuffer[1] && 0x02 == pBuffer[2]) ||
(0x00 == pBuffer[1] && 0x03 == pBuffer[2]) || (0x01 == pBuffer[1] && 0x09 == pBuffer[2]) ||
(0x00 == pBuffer[1] && 0x0A == pBuffer[2]) || (0x00 == pBuffer[1] && 0x0B == pBuffer[2]) )
&& ( 0x08 == pBuffer[16] || 0x10 == pBuffer[16] || 0x18 == pBuffer[16] || 0x20 == pBuffer[16] ))
return AVS_OFFICESTUDIO_FILE_IMAGE_TGA;
//ras
//Hex: 59 A6 6A 95
//ASCII: Y
if ( (4 <= dwBytesRead ) && (0x59 == pBuffer[0]) && (0xA6 == pBuffer[1]) && (0x6A == pBuffer[2])&& (0x95 == pBuffer[3]))
return AVS_OFFICESTUDIO_FILE_IMAGE_RAS;
//ipod
//(None or Unknown)
//psd
//Hex: 38 42 50 53 00 01 00 00 00 00 00 00 00
//ASCII: 8BPS
if ( (13 <= dwBytesRead ) && (0x38 == pBuffer[0]) && (0x42 == pBuffer[1]) && (0x50 == pBuffer[2])
&& (0x53 == pBuffer[3]) && (0x00 == pBuffer[4]) && (0x01 == pBuffer[5]) && (0x00 == pBuffer[6])
&& (0x00 == pBuffer[7]) && (0x00 == pBuffer[8]) && (0x00 == pBuffer[9]) && (0x00 == pBuffer[10])
&& (0x00 == pBuffer[11]) && (0x00 == pBuffer[12]))
return AVS_OFFICESTUDIO_FILE_IMAGE_PSD;
return AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
private: BOOL IsXLSFile(IStorage* storage, long &lError)
{
lError = NOERROR;
IStream* stream = NULL;
HRESULT hresult = storage->OpenStream( L"Workbook", NULL, ( STGM_READ | STGM_DIRECT | STGM_SHARE_EXCLUSIVE ),
NULL, &stream );
if ( stream != NULL )
stream->Release();
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsPPTFile(IStorage* storage, long &lError)
{
lError = NOERROR;
IStream* stream = NULL;
HRESULT hresult = storage->OpenStream( L"PowerPoint Document", NULL, ( STGM_READ | STGM_DIRECT | STGM_SHARE_EXCLUSIVE ),
NULL, &stream );
if ( stream != NULL )
stream->Release();
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsMS_OFFCRYPTOFile(IStorage* storage, long &lError)
{
lError = NOERROR;
IStorage* storageDataSpaces = NULL;
HRESULT hresult = storage->OpenStorage( L"\006DataSpaces", NULL, STGM_SHARE_EXCLUSIVE, NULL, 0, &(storageDataSpaces) );
if ( storageDataSpaces != NULL )
storageDataSpaces->Release();
return hresult == S_OK? TRUE: FALSE;
}
private: IStorage* IsStorageType(const CString &sFilePath)
{
IStorage* storage;
storage = NULL;
StgOpenStorage( sFilePath, NULL, STGM_READ | STGM_TRANSACTED | STGM_SHARE_DENY_NONE,
NULL, 0, &(storage) );
return storage;
}
private: BOOL IsArchiveType(const CString &sFilePath)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->IsArchive(bstrFilePath);
SysFreeString( bstrFilePath );
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsDOCXFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->IsFileExistInArchive(bstrFilePath, L"word/document.xml");
SysFreeString( bstrFilePath );
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsXPSFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
BYTE* pBuffer = NULL;
const char *xpsFormatLine = "http://schemas.microsoft.com/xps/2005/06/fixedrepresentation";
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"_rels/.rels", &pBuffer);
if (hresult == S_OK && pBuffer != NULL)
{
if (!strstr((char*)pBuffer, xpsFormatLine))
hresult = S_FALSE;
}
else
{// XPS åñòü ñïåöàëüíûé ôîðìàò îïòèìèçèðîâàííûé äëÿ ïå÷àòè
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"_rels/.rels/[0].piece", &pBuffer);
if (hresult != S_OK || pBuffer == NULL)
hresult = S_FALSE;
}
SysFreeString( bstrFilePath );
RELEASEHEAP(pBuffer);
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsXLSXFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->IsFileExistInArchive(bstrFilePath, L"xl/workbook.xml");
SysFreeString( bstrFilePath );
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsPPTXFile(const CString &sFilePath, long &lError)
{
lError = NOERROR;
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->IsFileExistInArchive(bstrFilePath, L"ppt/presentation.xml");
SysFreeString( bstrFilePath );
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsODTFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
BYTE* pBuffer = NULL;
const char *odtFormatLine = "application/vnd.oasis.opendocument.text";
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"mimetype", &pBuffer);
if (hresult == S_OK && pBuffer != NULL)
{
if (!strstr((char*)pBuffer, odtFormatLine))
hresult = S_FALSE;
}
SysFreeString( bstrFilePath );
RELEASEHEAP(pBuffer);
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsODPFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
BYTE* pBuffer = NULL;
const char *odtFormatLine = "application/vnd.oasis.opendocument.presentation";
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"mimetype", &pBuffer);
if (hresult == S_OK && pBuffer != NULL)
{
if (!strstr((char*)pBuffer, odtFormatLine))
hresult = S_FALSE;
}
SysFreeString( bstrFilePath );
RELEASEHEAP(pBuffer);
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsODSFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
BYTE* pBuffer = NULL;
const char *odtFormatLine = "application/vnd.oasis.opendocument.spreadsheet";
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"mimetype", &pBuffer);
if (hresult == S_OK && pBuffer != NULL)
{
if (!strstr((char*)pBuffer, odtFormatLine))
hresult = S_FALSE;
}
SysFreeString( bstrFilePath );
RELEASEHEAP(pBuffer);
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsEPUBFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
if (m_pOfficeUtils != NULL)
{
BYTE* pBuffer = NULL;
const char *odtFormatLine = "application/epub+zip";
CStringW sTemp = sFilePath;
BSTR bstrFilePath = sTemp.AllocSysString();
hresult = m_pOfficeUtils->LoadFileFromArchive(bstrFilePath, L"mimetype", &pBuffer);
if (hresult == S_OK && pBuffer != NULL)
{
if (!strstr((char*)pBuffer, odtFormatLine))
hresult = S_FALSE;
}
SysFreeString( bstrFilePath );
RELEASEHEAP(pBuffer);
}
return hresult == S_OK? TRUE: FALSE;
}
private: BOOL IsFB2File(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
lError = NOERROR;
BYTE pBuffer[ 100 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile(hFile, pBuffer, 100, &dwBytesRead, NULL);
::CloseHandle(hFile);
bool tagOpen = false;
//FB2 File is XML-file with rootElement - FictionBook
for (size_t i = 0; i < 100 - 11; i++)
{
if (0x3C == pBuffer[i])
tagOpen = true;
else if (0x3E == pBuffer[i])
tagOpen = false;
else if (tagOpen && 0x46 == pBuffer[i] && 0x69 == pBuffer[i + 1] && 0x63 == pBuffer[i + 2]
&& 0x74 == pBuffer[i + 3] && 0x69 == pBuffer[i + 4] && 0x6F == pBuffer[i + 5]
&& 0x6E == pBuffer[i + 6] && 0x42 == pBuffer[i + 7] && 0x6F == pBuffer[i + 8]
&& 0x6F == pBuffer[i + 9] && 0x6B == pBuffer[i + 10])
return TRUE;
}
return FALSE;
}
private: BOOL IsSVGFile(const CString &sFilePath, long &lError)
{
//×òîáû âêëþ÷èòü ôóíêèöþ íàäî ðåøèòü ïðîáëåìû:
//â íà÷àëå ôàéëà ìîãóò áûòü áîëüøèå êîìåíòàðèè
//ñëîâî svg ìîæåò âñòðå÷àòüñÿ âî âëîæåííàõ òåãà è àòðèáóòàõ(êàê íàïðèìåð â html ïðè ñîõðàíåíèè drawing <img alt="" datasvg="%3Csvg%20width%3D%...)
HRESULT hresult = S_FALSE;
lError = NOERROR;
BYTE pBuffer[ 2000 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile(hFile, pBuffer, 2000, &dwBytesRead, NULL);
::CloseHandle(hFile);
bool tagOpen = false;
//SVG File is XML-file with rootElement - svg
for (size_t i = 0; i < dwBytesRead - 2; i++)
{
if (0x3C == pBuffer[i])
tagOpen = true;
else if (0x3E == pBuffer[i])
tagOpen = false;
else if (tagOpen && 0x73 == pBuffer[i] && 0x76 == pBuffer[i + 1] && 0x67 == pBuffer[i + 2])
return TRUE;
}
return FALSE;
}
private: BOOL IsHtmlFile(const CString &sFilePath, long &lError)
{
HRESULT hresult = S_FALSE;
lError = NOERROR;
BYTE pBuffer[ 2000 ];
DWORD dwBytesRead;
HANDLE hFile;
hFile = ::CreateFile(sFilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hFile)
{
lError = AVS_ERROR_FILEACCESS;
return FALSE;
}
::ReadFile(hFile, pBuffer, 2000, &dwBytesRead, NULL);
::CloseHandle(hFile);
bool tagOpen = false;
//Html File is XML-file with rootElement - html
for (size_t i = 0; i < dwBytesRead - 2; i++)
{
if (0x3C == pBuffer[i] && (0x48 == pBuffer[i + 1] || 0x68 == pBuffer[i + 1]) && (0x54 == pBuffer[i + 2] || 0x74 == pBuffer[i + 2]) && (0x4d == pBuffer[i + 3] || 0x6d == pBuffer[i + 3]) && (0x4c == pBuffer[i + 4] || 0x6c == pBuffer[i + 4]))
return TRUE;
}
return FALSE;
}
//nSource - define èñõîäíîãî ôîðìàòà
//nDestination - define êîíå÷íîãî ôîðìàòà
//aOutputFormats - ìàññèâ áóäåò î÷èùåí è íàïîëíåí define âîçìîæíûõ êîíå÷íûõ ôîðìàòà
//return - false - íè îäíîãî ôîðìàòà íå äîñòóïíî true - äîñòóïíî áîëüøå 1-îãî ôîðìàòà
public: bool GetAvailableFormats( long nSource, CAtlArray<long>& aOutputFormats )
{
aOutputFormats.RemoveAll();
for( int i = 0; i < mc_nFormatTableSize; i++ )
if( mc_aFormatTable[i][0] == nSource )
aOutputFormats.Add( mc_aFormatTable[i][1] );
return aOutputFormats.GetCount() > 0;
}
//nIndex - èíäåêñ îò 1 äî çíà÷åíèÿ âîçâðàùåííîãî GetAvailableFormatCount(...)
//nSource - define èñõîäíîãî ôîðìàòà
//return - define ôîðìàòà, â êîòîðûé ìîæíî îñóùåñòâèòü êîíâåðòàöèþ
public: long GetAvailableFormat( int nIndex, long nSource)
{
int nResultCount = 0;
for( int i = 0; i < mc_nFormatTableSize; i++ )
if( mc_aFormatTable[i][0] == nSource )
if( ++nResultCount == nIndex )
return mc_aFormatTable[i][1];
return AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
//nSource - define èñõîäíîãî ôîðìàòà
//return - êîëè÷åñòâî ôîðìàòîâ, â êîòîðûé ìîæíî îñóùåñòâèòü êîíâåðòàöèþ
public: int GetAvailableFormatCount( long nSource )
{
int nResultCount = 0;
for( int i = 0; i < mc_nFormatTableSize; i++ )
if( mc_aFormatTable[i][0] == nSource )
nResultCount++;
return nResultCount;
}
private:
AVSOfficeUtils::IOfficeUtils* pOfficeUtils;
};
__declspec(selectany) const long AVSOfficeFormatChecker::mc_aFormatTable[][2] = {
//Source //Destination
//AVS_OFFICESTUDIO_FILE_DOCUMENT, AVS_OFFICESTUDIO_FILE_DOCUMENT,
//AVS_OFFICESTUDIO_FILE_DOCUMENT, AVS_OFFICESTUDIO_FILE_PRESENTATION,
//AVS_OFFICESTUDIO_FILE_SPREADSHEET, AVS_OFFICESTUDIO_FILE_SPREADSHEET,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_IMAGE_GIF, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_IMAGE_JPG, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_IMAGE_PNG, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_IMAGE_TGA, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_IMAGE_TIFF, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS, AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_IMAGE_EMF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB,
AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2, AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF
};
__declspec(selectany) const int AVSOfficeFormatChecker::mc_nFormatTableSize = sizeof( mc_aFormatTable ) / (2 * sizeof( long ) );
__declspec(selectany) const long AVSOfficeFormatChecker::mc_aViewTable[] = {
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC,
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT,
AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML,
AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT,
AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT,
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX,
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF,
AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB,
AVS_OFFICESTUDIO_FILE_IMAGE_GIF,
AVS_OFFICESTUDIO_FILE_IMAGE_JPG,
AVS_OFFICESTUDIO_FILE_IMAGE_PNG,
AVS_OFFICESTUDIO_FILE_IMAGE_TGA,
AVS_OFFICESTUDIO_FILE_IMAGE_TIFF,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS,
AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX,
AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU,
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS
};
__declspec(selectany) const int AVSOfficeFormatChecker::mc_nViewTableSize = sizeof( mc_aViewTable ) / ( sizeof( long ) );