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