mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 14:00:32 +08:00
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62550 954022d7-b5bf-4e40-9824-e11837661b57
96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
#ifndef _PDF_READER_CMAP_H
|
||
#define _PDF_READER_CMAP_H
|
||
|
||
#include "CharTypes.h"
|
||
#include "GlobalParams.h"
|
||
#include "XmlUtils.h"
|
||
#include "../../DesktopEditor/graphics/TemporaryCS.h"
|
||
|
||
namespace PdfReader
|
||
{
|
||
|
||
class StringExt;
|
||
struct CMapVectorEntry;
|
||
class CMapCache;
|
||
|
||
//-------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
class CMap
|
||
{
|
||
public:
|
||
|
||
// Создаем карту CMap определенную по <seCollection> и <seCMapName>.
|
||
// Устанавливаем счетчик ссылок на 1.
|
||
static CMap *Parse(CMapCache *pCache, StringExt *seCollection, StringExt *seCMapName, GlobalParams *pGlobalParams, wchar_t *wsFilePath = NULL);
|
||
|
||
~CMap();
|
||
|
||
// Считаем ссылки
|
||
void AddRef();
|
||
void Release();
|
||
|
||
// Название коллекции возвращаем в следующем формате: registry-ordering.
|
||
StringExt *GetCollection()
|
||
{
|
||
return m_seCollection;
|
||
}
|
||
|
||
// Возвращаем true, если параметры CMap совпадают с заданными <seCollection> и <seCMapName>.
|
||
bool Match(StringExt *seCollection, StringExt *seCMapName);
|
||
|
||
// Возвращаем CID соответствующий коду символа, который начинается в <sChar>,
|
||
// и содержит <nLen> байт.
|
||
CID GetCID(char *sChar, int nLen, int *pnUsed);
|
||
|
||
// Writing mode (0 = horizontal, 1 = vertical).
|
||
int GetWMode()
|
||
{
|
||
return m_nWMode;
|
||
}
|
||
void ToXml(std::wstring wsFilePath);
|
||
|
||
private:
|
||
|
||
CMap(GlobalParams *pGlobalParams, StringExt *seCollection, StringExt *seCMapName);
|
||
CMap(GlobalParams *pGlobalParams, StringExt *seCollection, StringExt *seCMapName, int nWMode);
|
||
void UseCMap(CMapCache *pCache, char *sUseName);
|
||
void CopyVector(CMapVectorEntry *pDest, CMapVectorEntry *pSrc);
|
||
void AddCodeSpace(CMapVectorEntry *pVector, unsigned int unStart, unsigned int unEnd, unsigned int unBytesCount);
|
||
void AddCIDs(unsigned int unStart, unsigned int unEnd, unsigned int unBytesCount, CID nFirstCID);
|
||
void FreeCMapVector(CMapVectorEntry *pVector);
|
||
void WriteVectorToXml(CXmlWriter *pWriter, CMapVectorEntry *pVector);
|
||
|
||
private:
|
||
|
||
StringExt *m_seCollection; //
|
||
StringExt *m_seCMapName; //
|
||
int m_nWMode; // writing mode (0=horizontal, 1=vertical)
|
||
CMapVectorEntry *m_pVector; // vector for first byte (NULL for identity CMap)
|
||
int m_nRef; // Счетчик ссылок
|
||
|
||
GlobalParams *m_pGlobalParams;
|
||
|
||
NSCriticalSection::CRITICAL_SECTION m_oCS;
|
||
};
|
||
|
||
//-------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
#define CMapCacheSize 4
|
||
|
||
class CMapCache
|
||
{
|
||
public:
|
||
|
||
CMapCache();
|
||
~CMapCache();
|
||
|
||
CMap *GetCMap(StringExt *seCollection, StringExt *seCMapName, GlobalParams *pGlobalParams, wchar_t *wsFilePath = NULL);
|
||
|
||
private:
|
||
|
||
CMap *m_ppCache[CMapCacheSize];
|
||
};
|
||
}
|
||
|
||
#endif // _PDF_READER_CMAP_H
|