blob: aa46f16f75b2be004a25f6e0da868a695318dc51 [file] [log] [blame]
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
#define CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
typedef void* FXFT_Library;
class CPDF_CMapManager
{
public:
CPDF_CMapManager();
~CPDF_CMapManager();
void* GetPackage(FX_BOOL bPrompt);
CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
CPDF_CID2UnicodeMap* GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);
void ReloadAll();
private:
CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);
void DropAll(FX_BOOL bReload);
FX_BOOL m_bPrompted;
CFX_MapByteStringToPtr m_CMaps;
CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6];
};
class CPDF_FontGlobals
{
public:
CPDF_FontGlobals();
~CPDF_FontGlobals();
void ClearAll();
void Clear(void* key);
CPDF_Font* Find(void* key, int index);
void Set(void* key, int index, CPDF_Font* pFont);
CPDF_CMapManager m_CMapManager;
struct {
const struct FXCMAP_CMap* m_pMapList;
int m_Count;
} m_EmbeddedCharsets[NUMBER_OF_CIDSETS];
struct {
const FX_WORD* m_pMap;
int m_Count;
} m_EmbeddedToUnicodes[NUMBER_OF_CIDSETS];
private:
CFX_MapPtrToPtr m_pStockMap;
uint8_t* m_pContrastRamps;
};
struct _CMap_CodeRange {
int m_CharSize;
uint8_t m_Lower[4];
uint8_t m_Upper[4];
};
class CPDF_CMapParser
{
public:
CPDF_CMapParser();
~CPDF_CMapParser() {}
FX_BOOL Initialize(CPDF_CMap*);
void ParseWord(const CFX_ByteStringC& str);
CFX_BinaryBuf m_AddMaps;
private:
CPDF_CMap* m_pCMap;
int m_Status;
int m_CodeSeq;
FX_DWORD m_CodePoints[4];
CFX_ArrayTemplate<_CMap_CodeRange> m_CodeRanges;
CFX_ByteString m_Registry, m_Ordering, m_Supplement;
CFX_ByteString m_LastWord;
};
#define CIDCODING_UNKNOWN 0
#define CIDCODING_GB 1
#define CIDCODING_BIG5 2
#define CIDCODING_JIS 3
#define CIDCODING_KOREA 4
#define CIDCODING_UCS2 5
#define CIDCODING_CID 6
#define CIDCODING_UTF16 7
class CPDF_CMap
{
public:
CPDF_CMap();
FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK);
FX_BOOL LoadEmbedded(const uint8_t* pData, FX_DWORD dwSize);
void Release();
FX_BOOL IsLoaded() const
{
return m_bLoaded;
}
int GetCharset()
{
return m_Charset;
}
FX_BOOL IsVertWriting() const
{
return m_bVertical;
}
FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
FX_DWORD CharCodeFromCID(FX_WORD CID) const;
int GetCharSize(FX_DWORD charcode) const;
FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const;
int CountChar(const FX_CHAR* pString, int size) const;
int AppendChar(FX_CHAR* str, FX_DWORD charcode) const;
typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme;
protected:
~CPDF_CMap();
friend class CPDF_CMapParser;
friend class CPDF_CMapManager;
friend class CPDF_CIDFont;
protected:
CFX_ByteString m_PredefinedCMap;
FX_BOOL m_bVertical;
int m_Charset, m_Coding;
CodingScheme m_CodingScheme;
int m_nCodeRanges;
uint8_t* m_pLeadingBytes;
FX_WORD* m_pMapping;
uint8_t* m_pAddMapping;
FX_BOOL m_bLoaded;
const FXCMAP_CMap* m_pEmbedMap;
CPDF_CMap* m_pUseMap;
};
class CPDF_PredefinedCMap
{
public:
const FX_CHAR* m_pName;
int m_Charset;
int m_Coding;
CPDF_CMap::CodingScheme m_CodingScheme;
FX_DWORD m_LeadingSegCount;
uint8_t m_LeadingSegs[4];
};
typedef struct _FileHeader {
uint8_t btTag[4];
uint8_t btVersion;
uint8_t btFormat;
uint8_t btReserved1[2];
FX_DWORD dwStartIndex;
FX_DWORD dwEndIndex;
FX_DWORD dwDataSize;
FX_DWORD dwDataOffset;
FX_DWORD dwRecordSize;
} FXMP_FILEHEADER;
class CPDF_CID2UnicodeMap
{
public:
CPDF_CID2UnicodeMap();
~CPDF_CID2UnicodeMap();
FX_BOOL Initialize();
FX_BOOL IsLoaded();
void Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);
FX_WCHAR UnicodeFromCID(FX_WORD CID);
protected:
int m_Charset;
const FX_WORD* m_pEmbeddedMap;
FX_DWORD m_EmbeddedCount;
};
class CPDF_ToUnicodeMap
{
public:
void Load(CPDF_Stream* pStream);
CFX_WideString Lookup(FX_DWORD charcode);
FX_DWORD ReverseLookup(FX_WCHAR unicode);
protected:
CFX_CMapDWordToDWord m_Map;
CPDF_CID2UnicodeMap* m_pBaseMap;
CFX_WideTextBuf m_MultiCharBuf;
};
class CPDF_FontCharMap : public CFX_CharMap
{
public:
CPDF_FontCharMap(CPDF_Font* pFont);
CPDF_Font* m_pFont;
};
#endif // CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_