Files
core/ASCOfficePDFReader/CMap.h

93 lines
2.6 KiB
C++

#ifndef _CMAP_H
#define _CMAP_H
#include "CharTypes.h"
#include "GlobalParams.h"
#include "..\..\AVSImageStudio3\AVSGraphics\Interfaces\XmlUtils.h"
#include "TemporaryCS.h"
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(CString sFilePath);
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(XmlUtils::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;
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 /* _CMAP_H */