// 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 typedef void* FXFT_Library; class CPDF_CMapManager : public CFX_Object { public: CPDF_CMapManager(); ~CPDF_CMapManager(); FX_LPVOID 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); #ifndef _FPDFAPI_MINI_ FX_BOOL m_bPrompted; FX_LPVOID m_pPackage; #endif CFX_MapByteStringToPtr m_CMaps; CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6]; }; class CPDF_FontGlobals : public CFX_Object { 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); CFX_MapPtrToPtr m_pStockMap; CPDF_CMapManager m_CMapManager; struct { const struct FXCMAP_CMap* m_pMapList; int m_Count; } m_EmbeddedCharsets[5]; struct { const FX_WORD* m_pMap; int m_Count; } m_EmbeddedToUnicodes[5]; FX_LPBYTE m_pContrastRamps; }; struct _CMap_CodeRange { int m_CharSize; FX_BYTE m_Lower[4]; FX_BYTE m_Upper[4]; }; class CPDF_CMapParser : public CFX_Object { public: CPDF_CMapParser(); ~CPDF_CMapParser() {} FX_BOOL Initialize(CPDF_CMap*); void ParseWord(FX_BSTR 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 CFX_Object { public: CPDF_CMap(); FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK); FX_BOOL LoadEmbedded(FX_LPCBYTE 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& offset) const; int CountChar(const FX_CHAR* pString, int size) const; int AppendChar(FX_LPSTR 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; FX_BYTE* m_pLeadingBytes; FX_WORD* m_pMapping; FX_LPBYTE m_pAddMapping; FX_BOOL m_bLoaded; const FXCMAP_CMap* m_pEmbedMap; CPDF_CMap* m_pUseMap; }; class CPDF_PredefinedCMap { public: FX_LPCSTR m_pName; int m_Charset; int m_Coding; CPDF_CMap::CodingScheme m_CodingScheme; FX_DWORD m_LeadingSegCount; FX_BYTE m_LeadingSegs[4]; }; typedef struct _FileHeader { FX_BYTE btTag[4]; FX_BYTE btVersion; FX_BYTE btFormat; FX_BYTE btReserved1[2]; FX_DWORD dwStartIndex; FX_DWORD dwEndIndex; FX_DWORD dwDataSize; FX_DWORD dwDataOffset; FX_DWORD dwRecordSize; } FXMP_FILEHEADER; class CPDF_FXMP : public CFX_Object { public: CPDF_FXMP() { m_pHeader = NULL; m_pTable = NULL; } ~CPDF_FXMP() { if (m_pHeader) { FX_Free(m_pHeader); } } FX_BOOL IsLoaded() { return m_pTable != NULL; } FX_BOOL LoadFile(FX_LPVOID pPackage, FX_LPCSTR fileid); FX_LPBYTE GetRecord(FX_DWORD index); private: FXMP_FILEHEADER* m_pHeader; FX_LPBYTE m_pTable; }; class CPDF_CID2UnicodeMap : public CFX_Object { 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; #ifndef _FPDFAPI_MINI_ CPDF_FXMP* m_pExternalMap; #endif }; class CPDF_ToUnicodeMap : public CFX_Object { 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 CFX_Object { public: CPDF_FontCharMap(CPDF_Font* pFont); CPDF_Font* m_pFont; };