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 |