1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 #ifndef CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_ 7 #define CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_ 8 9 typedef void* FXFT_Library; 10 class CPDF_CMapManager 11 { 12 public: 13 CPDF_CMapManager(); 14 ~CPDF_CMapManager(); 15 FX_LPVOID GetPackage(FX_BOOL bPrompt); 16 CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt); 17 CPDF_CID2UnicodeMap* GetCID2UnicodeMap(int charset, FX_BOOL bPrompt); 18 void ReloadAll(); 19 private: 20 CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt); 21 CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt); 22 void DropAll(FX_BOOL bReload); 23 FX_BOOL m_bPrompted; 24 CFX_MapByteStringToPtr m_CMaps; 25 CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6]; 26 }; 27 class CPDF_FontGlobals 28 { 29 public: 30 CPDF_FontGlobals(); 31 ~CPDF_FontGlobals(); 32 void ClearAll(); 33 void Clear(void* key); 34 CPDF_Font* Find(void* key, int index); 35 void Set(void* key, int index, CPDF_Font* pFont); 36 CPDF_CMapManager m_CMapManager; 37 struct { 38 const struct FXCMAP_CMap* m_pMapList; 39 int m_Count; 40 } m_EmbeddedCharsets[NUMBER_OF_CIDSETS]; 41 struct { 42 const FX_WORD* m_pMap; 43 int m_Count; 44 } m_EmbeddedToUnicodes[NUMBER_OF_CIDSETS]; 45 private: 46 CFX_MapPtrToPtr m_pStockMap; 47 FX_LPBYTE m_pContrastRamps; 48 }; 49 struct _CMap_CodeRange { 50 int m_CharSize; 51 FX_BYTE m_Lower[4]; 52 FX_BYTE m_Upper[4]; 53 }; 54 class CPDF_CMapParser 55 { 56 public: 57 CPDF_CMapParser(); ~CPDF_CMapParser()58 ~CPDF_CMapParser() {} 59 FX_BOOL Initialize(CPDF_CMap*); 60 void ParseWord(FX_BSTR str); 61 CFX_BinaryBuf m_AddMaps; 62 private: 63 CPDF_CMap* m_pCMap; 64 int m_Status; 65 int m_CodeSeq; 66 FX_DWORD m_CodePoints[4]; 67 CFX_ArrayTemplate<_CMap_CodeRange> m_CodeRanges; 68 CFX_ByteString m_Registry, m_Ordering, m_Supplement; 69 CFX_ByteString m_LastWord; 70 }; 71 #define CIDCODING_UNKNOWN 0 72 #define CIDCODING_GB 1 73 #define CIDCODING_BIG5 2 74 #define CIDCODING_JIS 3 75 #define CIDCODING_KOREA 4 76 #define CIDCODING_UCS2 5 77 #define CIDCODING_CID 6 78 #define CIDCODING_UTF16 7 79 class CPDF_CMap 80 { 81 public: 82 CPDF_CMap(); 83 FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK); 84 FX_BOOL LoadEmbedded(FX_LPCBYTE pData, FX_DWORD dwSize); 85 void Release(); IsLoaded()86 FX_BOOL IsLoaded() const 87 { 88 return m_bLoaded; 89 } GetCharset()90 int GetCharset() 91 { 92 return m_Charset; 93 } IsVertWriting()94 FX_BOOL IsVertWriting() const 95 { 96 return m_bVertical; 97 } 98 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; 99 FX_DWORD CharCodeFromCID(FX_WORD CID) const; 100 int GetCharSize(FX_DWORD charcode) const; 101 FX_DWORD GetNextChar(FX_LPCSTR pString, int nStrLen, int& offset) const; 102 int CountChar(FX_LPCSTR pString, int size) const; 103 int AppendChar(FX_LPSTR str, FX_DWORD charcode) const; 104 typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme; 105 protected: 106 ~CPDF_CMap(); 107 friend class CPDF_CMapParser; 108 friend class CPDF_CMapManager; 109 friend class CPDF_CIDFont; 110 protected: 111 CFX_ByteString m_PredefinedCMap; 112 FX_BOOL m_bVertical; 113 int m_Charset, m_Coding; 114 CodingScheme m_CodingScheme; 115 int m_nCodeRanges; 116 FX_BYTE* m_pLeadingBytes; 117 FX_WORD* m_pMapping; 118 FX_LPBYTE m_pAddMapping; 119 FX_BOOL m_bLoaded; 120 const FXCMAP_CMap* m_pEmbedMap; 121 CPDF_CMap* m_pUseMap; 122 }; 123 class CPDF_PredefinedCMap 124 { 125 public: 126 FX_LPCSTR m_pName; 127 int m_Charset; 128 int m_Coding; 129 CPDF_CMap::CodingScheme m_CodingScheme; 130 FX_DWORD m_LeadingSegCount; 131 FX_BYTE m_LeadingSegs[4]; 132 }; 133 typedef struct _FileHeader { 134 FX_BYTE btTag[4]; 135 FX_BYTE btVersion; 136 FX_BYTE btFormat; 137 FX_BYTE btReserved1[2]; 138 FX_DWORD dwStartIndex; 139 FX_DWORD dwEndIndex; 140 FX_DWORD dwDataSize; 141 FX_DWORD dwDataOffset; 142 FX_DWORD dwRecordSize; 143 } FXMP_FILEHEADER; 144 class CPDF_CID2UnicodeMap 145 { 146 public: 147 CPDF_CID2UnicodeMap(); 148 ~CPDF_CID2UnicodeMap(); 149 FX_BOOL Initialize(); 150 FX_BOOL IsLoaded(); 151 void Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK); 152 FX_WCHAR UnicodeFromCID(FX_WORD CID); 153 protected: 154 int m_Charset; 155 const FX_WORD* m_pEmbeddedMap; 156 FX_DWORD m_EmbeddedCount; 157 }; 158 class CPDF_ToUnicodeMap 159 { 160 public: 161 void Load(CPDF_Stream* pStream); 162 CFX_WideString Lookup(FX_DWORD charcode); 163 FX_DWORD ReverseLookup(FX_WCHAR unicode); 164 protected: 165 CFX_CMapDWordToDWord m_Map; 166 CPDF_CID2UnicodeMap* m_pBaseMap; 167 CFX_WideTextBuf m_MultiCharBuf; 168 }; 169 class CPDF_FontCharMap : public CFX_CharMap 170 { 171 public: 172 CPDF_FontCharMap(CPDF_Font* pFont); 173 CPDF_Font* m_pFont; 174 }; 175 176 #endif // CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_ 177