mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 14:00:32 +08:00
116 lines
2.9 KiB
C++
116 lines
2.9 KiB
C++
#ifndef _UNICODE_MAP_H
|
|
#define _UNICODE_MAP_H
|
|
|
|
#include "CharTypes.h"
|
|
#include "TemporaryCS.h"
|
|
|
|
class StringExt;
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
enum UnicodeMapType
|
|
{
|
|
unicodeMapUser, // ×òåíèå èç ôàéëà
|
|
unicodeMapResident, // Ñòàòè÷åñêèé ñïèñîê
|
|
unicodeMapFunc // Óêàçàòåëü íà ôóíêöèþ
|
|
};
|
|
|
|
typedef int (*UnicodeMapFunc)(Unicode nUnicode, char *sBuffer, int nBufferSize);
|
|
|
|
struct UnicodeMapRange
|
|
{
|
|
Unicode nStart; // Äèàïàçîí þíèêîäíûõ ñèìâîëîâ
|
|
Unicode nEnd; //
|
|
unsigned int unCode; // Ïåðâûé êîä
|
|
unsigned int nBytesCount; //
|
|
};
|
|
|
|
struct UnicodeMapExt;
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// UnicodeMap
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
class UnicodeMap
|
|
{
|
|
public:
|
|
|
|
// Ñîçäàåì UnicodeMap ïî èìåíè <seEncodingName>. Óñòàíàâëèâàåì ñ÷åò÷èê ññûëîê ðàâíûé 1.
|
|
static UnicodeMap *Parse(StringExt *seEncodingName, GlobalParams *pGlobalParams);
|
|
|
|
// Ñîçäàåì Resident UnicodeMap.
|
|
UnicodeMap(char *sEncodingName, BOOL bUnicodeOut, UnicodeMapRange *pRanges, int nLen);
|
|
|
|
// Ñîçäàåì Resident UnicodeMap, êîòîðûé èñïîëüçóåò ôóíêöèþ âìåñòî äèàïàçîíà çíà÷åíèé.
|
|
UnicodeMap(char *sEncodingName, BOOL bUnicodeOut, UnicodeMapFunc pFunction);
|
|
|
|
~UnicodeMap();
|
|
|
|
// Ñ÷åò÷èê ññûëîê
|
|
void AddRef();
|
|
void Release();
|
|
|
|
StringExt *GetEncodingName()
|
|
{
|
|
return m_seEncodingName;
|
|
}
|
|
|
|
BOOL IsUnicode()
|
|
{
|
|
return m_bUnicodeOut;
|
|
}
|
|
|
|
|
|
// Ñîâïàäàþò ëè íàçâàíèÿ êîäèðîâîê?
|
|
BOOL Match(StringExt *seEncodingName);
|
|
|
|
// Íàõîäèì îáðàç òåêóùåãî þíèêîäíîãî çíà÷åíèÿ â êîäèðîâêå. Çàïîëíÿåì <sBuffer> ðåçóëüòàòîì è âîçâðàùàåì
|
|
// êîëè÷åñòâî èñïîëüçóåìûõ áàéò. Íèêàêèõ ñòðîêîâûõ ðàçäåëèòåëåé (òèïà \0) íå ïèøåì.
|
|
int MapUnicode(Unicode nUnicode, char *sBuffer, int nBufferSize);
|
|
|
|
private:
|
|
|
|
UnicodeMap(StringExt *seEncodingName);
|
|
|
|
private:
|
|
|
|
StringExt *m_seEncodingName;
|
|
UnicodeMapType m_eType;
|
|
BOOL m_bUnicodeOut;
|
|
union
|
|
{
|
|
UnicodeMapRange *m_pRanges; // Äëÿ òèïîâ: User, Resident
|
|
UnicodeMapFunc m_pFunction; // Äëÿ òèïà Func
|
|
};
|
|
int m_nLen; // User, Resident
|
|
UnicodeMapExt *m_pEMaps; // User
|
|
int m_nEMapsLen; // User
|
|
|
|
int m_nRefCount;
|
|
|
|
CRITICAL_SECTION m_oCS;
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// UnicodeMapCache
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
#define unicodeMapCacheSize 4
|
|
|
|
class UnicodeMapCache
|
|
{
|
|
public:
|
|
|
|
UnicodeMapCache();
|
|
~UnicodeMapCache();
|
|
|
|
UnicodeMap *GetUnicodeMap(StringExt *seEncodingName, GlobalParams *pGlobalParams);
|
|
|
|
private:
|
|
|
|
UnicodeMap *m_ppCache[unicodeMapCacheSize];
|
|
};
|
|
|
|
#endif /* _UNICODE_MAP_H */
|