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_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
75 --m_nCount; | 75 --m_nCount; |
76 } | 76 } |
77 size_t use_count() const { return m_nCount; } | 77 size_t use_count() const { return m_nCount; } |
78 | 78 |
79 protected: | 79 protected: |
80 size_t m_nCount; | 80 size_t m_nCount; |
81 T* m_pObj; | 81 T* m_pObj; |
82 }; | 82 }; |
83 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; | 83 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; |
84 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; | 84 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; |
85 #define PDFFONT_TYPE1 1 | 85 |
86 #define PDFFONT_TRUETYPE 2 | |
87 #define PDFFONT_TYPE3 3 | |
88 #define PDFFONT_CIDFONT 4 | |
89 #define PDFFONT_FIXEDPITCH 1 | 86 #define PDFFONT_FIXEDPITCH 1 |
90 #define PDFFONT_SERIF 2 | 87 #define PDFFONT_SERIF 2 |
91 #define PDFFONT_SYMBOLIC 4 | 88 #define PDFFONT_SYMBOLIC 4 |
92 #define PDFFONT_SCRIPT 8 | 89 #define PDFFONT_SCRIPT 8 |
93 #define PDFFONT_NONSYMBOLIC 32 | 90 #define PDFFONT_NONSYMBOLIC 32 |
94 #define PDFFONT_ITALIC 64 | 91 #define PDFFONT_ITALIC 64 |
95 #define PDFFONT_ALLCAP 0x10000 | 92 #define PDFFONT_ALLCAP 0x10000 |
96 #define PDFFONT_SMALLCAP 0x20000 | 93 #define PDFFONT_SMALLCAP 0x20000 |
97 #define PDFFONT_FORCEBOLD 0x40000 | 94 #define PDFFONT_FORCEBOLD 0x40000 |
98 #define PDFFONT_USEEXTERNATTR 0x80000 | 95 #define PDFFONT_USEEXTERNATTR 0x80000 |
96 | |
99 class CPDF_Font { | 97 class CPDF_Font { |
100 public: | 98 public: |
101 static CPDF_Font* CreateFontF(CPDF_Document* pDoc, | 99 static CPDF_Font* CreateFontF(CPDF_Document* pDoc, |
102 CPDF_Dictionary* pFontDict); | 100 CPDF_Dictionary* pFontDict); |
103 static CPDF_Font* GetStockFont(CPDF_Document* pDoc, | 101 static CPDF_Font* GetStockFont(CPDF_Document* pDoc, |
104 const CFX_ByteStringC& fontname); | 102 const CFX_ByteStringC& fontname); |
105 static const FX_DWORD kInvalidCharCode = static_cast<FX_DWORD>(-1); | 103 static const FX_DWORD kInvalidCharCode = static_cast<FX_DWORD>(-1); |
106 | 104 |
107 virtual ~CPDF_Font(); | 105 virtual ~CPDF_Font(); |
108 | 106 |
109 bool IsFontType(int fonttype) const { return fonttype == m_FontType; } | 107 // virtual Type GetFontType() const = 0; |
110 int GetFontType() const { return m_FontType; } | 108 virtual bool IsType1Font() const { return false; } |
109 virtual bool IsTrueTypeFont() const { return false; } | |
110 virtual bool IsType3Font() const { return false; } | |
111 virtual bool IsCIDFont() const { return false; } | |
112 virtual const CPDF_Type1Font* AsType1Font() const { return nullptr; } | |
113 virtual CPDF_Type1Font* AsType1Font() { return nullptr; } | |
114 virtual const CPDF_TrueTypeFont* AsTrueTypeFont() const { return nullptr; } | |
115 virtual CPDF_TrueTypeFont* AsTrueTypeFont() { return nullptr; } | |
116 virtual const CPDF_Type3Font* AsType3Font() const { return nullptr; } | |
117 virtual CPDF_Type3Font* AsType3Font() { return nullptr; } | |
118 virtual const CPDF_CIDFont* AsCIDFont() const { return nullptr; } | |
119 virtual CPDF_CIDFont* AsCIDFont() { return nullptr; } | |
120 | |
121 virtual FX_BOOL IsVertWriting() const; | |
122 virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; } | |
123 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, | |
124 int nStrLen, | |
125 int& offset) const; | |
126 virtual int CountChar(const FX_CHAR* pString, int size) const { return size; } | |
127 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const; | |
128 virtual int GetCharSize(FX_DWORD charcode) const { return 1; } | |
129 virtual int GlyphFromCharCode(FX_DWORD charcode, | |
130 FX_BOOL* pVertGlyph = NULL) = 0; | |
111 | 131 |
112 CFX_ByteString GetFontTypeName() const; | 132 CFX_ByteString GetFontTypeName() const; |
113 | |
114 const CFX_ByteString& GetBaseFont() const { return m_BaseFont; } | 133 const CFX_ByteString& GetBaseFont() const { return m_BaseFont; } |
115 | |
116 const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); } | 134 const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); } |
117 | |
118 FX_DWORD GetFlags() const { return m_Flags; } | 135 FX_DWORD GetFlags() const { return m_Flags; } |
119 | 136 FX_BOOL IsEmbedded() const { return IsType3Font() || m_pFontFile != NULL; } |
120 virtual FX_BOOL IsVertWriting() const; | |
121 | |
122 CPDF_Type1Font* GetType1Font() const { | |
123 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL; | |
124 } | |
125 | |
126 CPDF_TrueTypeFont* GetTrueTypeFont() const { | |
127 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this | |
128 : NULL; | |
129 } | |
130 | |
131 CPDF_CIDFont* GetCIDFont() const { | |
132 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL; | |
133 } | |
134 | |
135 CPDF_Type3Font* GetType3Font() const { | |
136 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL; | |
137 } | |
138 | |
139 FX_BOOL IsEmbedded() const { | |
140 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; | |
141 } | |
142 | |
143 virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; } | |
144 | |
145 CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; } | 137 CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; } |
146 | |
147 CPDF_Dictionary* GetFontDict() const { return m_pFontDict; } | 138 CPDF_Dictionary* GetFontDict() const { return m_pFontDict; } |
148 | |
149 FX_BOOL IsStandardFont() const; | 139 FX_BOOL IsStandardFont() const; |
150 | |
151 FXFT_Face GetFace() const { return m_Font.GetFace(); } | 140 FXFT_Face GetFace() const { return m_Font.GetFace(); } |
152 | 141 |
153 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, | |
154 int nStrLen, | |
155 int& offset) const { | |
156 if (offset < 0 || nStrLen < 1) { | |
157 return 0; | |
158 } | |
159 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; | |
160 return static_cast<FX_DWORD>(ch); | |
161 } | |
162 | |
163 virtual int CountChar(const FX_CHAR* pString, int size) const { return size; } | |
164 | |
165 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; | 142 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; |
166 | |
167 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const { | |
168 *buf = (FX_CHAR)charcode; | |
169 return 1; | |
170 } | |
171 | |
172 virtual int GetCharSize(FX_DWORD charcode) const { return 1; } | |
173 | |
174 virtual int GlyphFromCharCode(FX_DWORD charcode, | |
175 FX_BOOL* pVertGlyph = NULL) = 0; | |
176 virtual int GlyphFromCharCodeExt(FX_DWORD charcode) { | |
177 return GlyphFromCharCode(charcode); | |
178 } | |
179 | |
180 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; | 143 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; |
181 | |
182 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; | 144 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; |
183 | 145 |
184 void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; } | 146 void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; } |
185 | |
186 int GetTypeAscent() const { return m_Ascent; } | 147 int GetTypeAscent() const { return m_Ascent; } |
187 | |
188 int GetTypeDescent() const { return m_Descent; } | 148 int GetTypeDescent() const { return m_Descent; } |
189 | |
190 int GetItalicAngle() const { return m_ItalicAngle; } | 149 int GetItalicAngle() const { return m_ItalicAngle; } |
191 | |
192 int GetStemV() const { return m_StemV; } | 150 int GetStemV() const { return m_StemV; } |
193 | |
194 int GetStringWidth(const FX_CHAR* pString, int size); | 151 int GetStringWidth(const FX_CHAR* pString, int size); |
195 | 152 |
196 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; | 153 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; |
197 | |
198 virtual int GetCharTypeWidth(FX_DWORD charcode); | |
199 | |
200 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; | 154 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; |
201 | 155 |
202 CPDF_Document* m_pDocument; | 156 CPDF_Document* m_pDocument; |
203 | |
204 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); | |
205 | |
206 CFX_Font m_Font; | 157 CFX_Font m_Font; |
207 | 158 |
208 protected: | 159 protected: |
209 explicit CPDF_Font(int fonttype); | 160 CPDF_Font(); |
161 | |
162 virtual FX_BOOL _Load() = 0; | |
163 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; | |
164 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; | |
210 | 165 |
211 FX_BOOL Initialize(); | 166 FX_BOOL Initialize(); |
212 | |
213 FX_BOOL Load(); | 167 FX_BOOL Load(); |
214 | |
215 virtual FX_BOOL _Load() = 0; | |
216 | |
217 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; | |
218 | |
219 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; | |
220 | |
221 void LoadUnicodeMap(); | 168 void LoadUnicodeMap(); |
222 | |
223 void LoadPDFEncoding(CPDF_Object* pEncoding, | 169 void LoadPDFEncoding(CPDF_Object* pEncoding, |
224 int& iBaseEncoding, | 170 int& iBaseEncoding, |
225 CFX_ByteString*& pCharNames, | 171 CFX_ByteString*& pCharNames, |
226 FX_BOOL bEmbedded, | 172 FX_BOOL bEmbedded, |
227 FX_BOOL bTrueType); | 173 FX_BOOL bTrueType); |
228 | |
229 void LoadFontDescriptor(CPDF_Dictionary*); | 174 void LoadFontDescriptor(CPDF_Dictionary*); |
230 | |
231 void LoadCharWidths(FX_WORD* pWidths); | |
232 | |
233 void CheckFontMetrics(); | 175 void CheckFontMetrics(); |
234 | 176 |
235 CFX_ByteString m_BaseFont; | 177 CFX_ByteString m_BaseFont; |
178 CPDF_StreamAcc* m_pFontFile; | |
179 CPDF_Dictionary* m_pFontDict; | |
180 CPDF_ToUnicodeMap* m_pToUnicodeMap; | |
181 FX_BOOL m_bToUnicodeLoaded; | |
182 int m_Flags; | |
183 FX_RECT m_FontBBox; | |
184 int m_StemV; | |
185 int m_Ascent; | |
186 int m_Descent; | |
187 int m_ItalicAngle; | |
188 }; | |
236 | 189 |
237 CPDF_StreamAcc* m_pFontFile; | |
238 | |
239 CPDF_Dictionary* m_pFontDict; | |
240 | |
241 CPDF_ToUnicodeMap* m_pToUnicodeMap; | |
242 | |
243 FX_BOOL m_bToUnicodeLoaded; | |
244 | |
245 int m_Flags; | |
246 | |
247 FX_RECT m_FontBBox; | |
248 | |
249 int m_StemV; | |
250 | |
251 int m_Ascent; | |
252 | |
253 int m_Descent; | |
254 | |
255 int m_ItalicAngle; | |
256 | |
257 private: | |
258 const int m_FontType; | |
259 }; | |
260 #define PDFFONT_ENCODING_BUILTIN 0 | 190 #define PDFFONT_ENCODING_BUILTIN 0 |
261 #define PDFFONT_ENCODING_WINANSI 1 | 191 #define PDFFONT_ENCODING_WINANSI 1 |
262 #define PDFFONT_ENCODING_MACROMAN 2 | 192 #define PDFFONT_ENCODING_MACROMAN 2 |
263 #define PDFFONT_ENCODING_MACEXPERT 3 | 193 #define PDFFONT_ENCODING_MACEXPERT 3 |
264 #define PDFFONT_ENCODING_STANDARD 4 | 194 #define PDFFONT_ENCODING_STANDARD 4 |
265 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5 | 195 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5 |
266 #define PDFFONT_ENCODING_ZAPFDINGBATS 6 | 196 #define PDFFONT_ENCODING_ZAPFDINGBATS 6 |
267 #define PDFFONT_ENCODING_PDFDOC 7 | 197 #define PDFFONT_ENCODING_PDFDOC 7 |
268 #define PDFFONT_ENCODING_MS_SYMBOL 8 | 198 #define PDFFONT_ENCODING_MS_SYMBOL 8 |
269 #define PDFFONT_ENCODING_UNICODE 9 | 199 #define PDFFONT_ENCODING_UNICODE 9 |
200 | |
270 class CPDF_FontEncoding { | 201 class CPDF_FontEncoding { |
271 public: | 202 public: |
272 CPDF_FontEncoding(); | 203 CPDF_FontEncoding(); |
273 | 204 |
274 CPDF_FontEncoding(int PredefinedEncoding); | 205 CPDF_FontEncoding(int PredefinedEncoding); |
275 | 206 |
276 void LoadEncoding(CPDF_Object* pEncoding); | 207 void LoadEncoding(CPDF_Object* pEncoding); |
277 | 208 |
278 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; | 209 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; |
279 | 210 |
280 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const { | 211 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const { |
281 return m_Unicodes[charcode]; | 212 return m_Unicodes[charcode]; |
282 } | 213 } |
283 | 214 |
284 int CharCodeFromUnicode(FX_WCHAR unicode) const; | 215 int CharCodeFromUnicode(FX_WCHAR unicode) const; |
285 | 216 |
286 void SetUnicode(uint8_t charcode, FX_WCHAR unicode) { | 217 void SetUnicode(uint8_t charcode, FX_WCHAR unicode) { |
287 m_Unicodes[charcode] = unicode; | 218 m_Unicodes[charcode] = unicode; |
288 } | 219 } |
289 | 220 |
290 CPDF_Object* Realize(); | 221 CPDF_Object* Realize(); |
291 | 222 |
292 public: | 223 public: |
293 FX_WCHAR m_Unicodes[256]; | 224 FX_WCHAR m_Unicodes[256]; |
294 }; | 225 }; |
295 | 226 |
296 class CPDF_SimpleFont : public CPDF_Font { | 227 class CPDF_SimpleFont : public CPDF_Font { |
297 public: | 228 public: |
298 explicit CPDF_SimpleFont(int fonttype); | 229 CPDF_SimpleFont(); |
299 ~CPDF_SimpleFont() override; | 230 ~CPDF_SimpleFont() override; |
300 | 231 |
301 CPDF_FontEncoding* GetEncoding() { return &m_Encoding; } | 232 // CPDF_Font: |
302 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 233 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; |
303 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | 234 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; |
304 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; | 235 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; |
305 FX_BOOL IsUnicodeCompatible() const override; | 236 FX_BOOL IsUnicodeCompatible() const override; |
306 | 237 |
238 CPDF_FontEncoding* GetEncoding() { return &m_Encoding; } | |
239 | |
307 protected: | 240 protected: |
308 FX_BOOL LoadCommon(); | |
309 | |
310 void LoadSubstFont(); | |
311 | |
312 void LoadFaceMetrics(); | |
313 | |
314 virtual void LoadGlyphMap() = 0; | 241 virtual void LoadGlyphMap() = 0; |
315 | 242 |
316 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override { | 243 FX_BOOL LoadCommon(); |
317 return m_Encoding.UnicodeFromCharCode((uint8_t)charcode); | 244 void LoadSubstFont(); |
318 } | 245 void LoadFaceMetrics(); |
246 void LoadCharMetrics(int charcode); | |
319 | 247 |
320 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override { | 248 // CPDF_Font: |
321 return m_Encoding.CharCodeFromUnicode(Unicode); | 249 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; |
322 } | 250 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; |
323 | |
324 void LoadCharMetrics(int charcode); | |
325 | 251 |
326 CPDF_FontEncoding m_Encoding; | 252 CPDF_FontEncoding m_Encoding; |
327 FX_WORD m_GlyphIndex[256]; | 253 FX_WORD m_GlyphIndex[256]; |
328 FX_WORD m_ExtGID[256]; | 254 FX_WORD m_ExtGID[256]; |
329 CFX_ByteString* m_pCharNames; | 255 CFX_ByteString* m_pCharNames; |
330 int m_BaseEncoding; | 256 int m_BaseEncoding; |
331 FX_WORD m_CharWidth[256]; | 257 FX_WORD m_CharWidth[256]; |
332 FX_SMALL_RECT m_CharBBox[256]; | 258 FX_SMALL_RECT m_CharBBox[256]; |
333 FX_BOOL m_bUseFontWidth; | 259 FX_BOOL m_bUseFontWidth; |
334 }; | 260 }; |
335 | 261 |
336 class CPDF_Type1Font : public CPDF_SimpleFont { | 262 class CPDF_Type1Font : public CPDF_SimpleFont { |
337 public: | 263 public: |
338 CPDF_Type1Font(); | 264 CPDF_Type1Font(); |
339 | 265 |
340 int GetBase14Font() { return m_Base14Font; } | 266 // CPDF_Font: |
267 bool IsType1Font() const override { return true; } | |
268 const CPDF_Type1Font* AsType1Font() const override { return this; } | |
269 CPDF_Type1Font* AsType1Font() override { return this; } | |
270 | |
271 int GetBase14Font() const { return m_Base14Font; } | |
341 | 272 |
342 protected: | 273 protected: |
274 // CPDF_Font: | |
275 FX_BOOL _Load() override; | |
276 | |
343 // CPDF_SimpleFont: | 277 // CPDF_SimpleFont: |
344 int GlyphFromCharCodeExt(FX_DWORD charcode) override; | |
345 FX_BOOL _Load() override; | |
346 void LoadGlyphMap() override; | 278 void LoadGlyphMap() override; |
347 | 279 |
348 int m_Base14Font; | 280 int m_Base14Font; |
349 }; | 281 }; |
282 | |
350 class CPDF_TrueTypeFont : public CPDF_SimpleFont { | 283 class CPDF_TrueTypeFont : public CPDF_SimpleFont { |
351 public: | 284 public: |
352 CPDF_TrueTypeFont(); | 285 CPDF_TrueTypeFont(); |
353 | 286 |
287 // CPDF_Font | |
Lei Zhang
2016/02/25 01:54:02
nit: add a colon, ditto below.
Wei Li
2016/02/25 18:48:42
Done.
| |
288 bool IsTrueTypeFont() const override { return true; } | |
289 const CPDF_TrueTypeFont* AsTrueTypeFont() const override { return this; } | |
290 CPDF_TrueTypeFont* AsTrueTypeFont() override { return this; } | |
291 | |
354 protected: | 292 protected: |
293 // CPDF_Font: | |
294 FX_BOOL _Load() override; | |
295 | |
355 // CPDF_SimpleFont: | 296 // CPDF_SimpleFont: |
356 FX_BOOL _Load() override; | |
357 void LoadGlyphMap() override; | 297 void LoadGlyphMap() override; |
358 }; | 298 }; |
359 | 299 |
360 class CPDF_Type3Char { | 300 class CPDF_Type3Char { |
361 public: | 301 public: |
362 // Takes ownership of |pForm|. | 302 // Takes ownership of |pForm|. |
363 explicit CPDF_Type3Char(CPDF_Form* pForm); | 303 explicit CPDF_Type3Char(CPDF_Form* pForm); |
364 ~CPDF_Type3Char(); | 304 ~CPDF_Type3Char(); |
365 | 305 |
366 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); | 306 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); |
367 | 307 |
368 CPDF_Form* m_pForm; | 308 CPDF_Form* m_pForm; |
369 CFX_DIBitmap* m_pBitmap; | 309 CFX_DIBitmap* m_pBitmap; |
370 FX_BOOL m_bColored; | 310 FX_BOOL m_bColored; |
371 int m_Width; | 311 int m_Width; |
372 CFX_Matrix m_ImageMatrix; | 312 CFX_Matrix m_ImageMatrix; |
373 FX_RECT m_BBox; | 313 FX_RECT m_BBox; |
374 }; | 314 }; |
375 | 315 |
376 class CPDF_Type3Font : public CPDF_SimpleFont { | 316 class CPDF_Type3Font : public CPDF_SimpleFont { |
377 public: | 317 public: |
378 CPDF_Type3Font(); | 318 CPDF_Type3Font(); |
379 ~CPDF_Type3Font() override; | 319 ~CPDF_Type3Font() override; |
380 | 320 |
321 // CPDF_Font | |
322 bool IsType3Font() const override { return true; } | |
323 const CPDF_Type3Font* AsType3Font() const override { return this; } | |
324 CPDF_Type3Font* AsType3Font() override { return this; } | |
325 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | |
326 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | |
327 | |
381 void SetPageResources(CPDF_Dictionary* pResources) { | 328 void SetPageResources(CPDF_Dictionary* pResources) { |
382 m_pPageResources = pResources; | 329 m_pPageResources = pResources; |
383 } | 330 } |
384 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); | 331 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); |
385 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 332 void CheckType3FontMetrics(); |
386 int GetCharTypeWidth(FX_DWORD charcode) override { | 333 |
387 return GetCharWidthF(charcode); | |
388 } | |
389 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | |
390 CFX_Matrix& GetFontMatrix() { return m_FontMatrix; } | 334 CFX_Matrix& GetFontMatrix() { return m_FontMatrix; } |
391 void CheckType3FontMetrics(); | |
392 | 335 |
393 protected: | 336 protected: |
394 CFX_Matrix m_FontMatrix; | 337 CFX_Matrix m_FontMatrix; |
395 | 338 |
396 private: | 339 private: |
340 // CPDF_Font: | |
397 FX_BOOL _Load() override; | 341 FX_BOOL _Load() override; |
342 | |
343 // CPDF_SimpleFont: | |
398 void LoadGlyphMap() override {} | 344 void LoadGlyphMap() override {} |
399 | 345 |
400 int m_CharWidthL[256]; | 346 int m_CharWidthL[256]; |
401 CPDF_Dictionary* m_pCharProcs; | 347 CPDF_Dictionary* m_pCharProcs; |
402 CPDF_Dictionary* m_pPageResources; | 348 CPDF_Dictionary* m_pPageResources; |
403 CPDF_Dictionary* m_pFontResources; | 349 CPDF_Dictionary* m_pFontResources; |
404 std::map<FX_DWORD, CPDF_Type3Char*> m_CacheMap; | 350 std::map<FX_DWORD, CPDF_Type3Char*> m_CacheMap; |
405 }; | 351 }; |
406 | 352 |
407 enum CIDSet { | 353 enum CIDSet { |
408 CIDSET_UNKNOWN, | 354 CIDSET_UNKNOWN, |
409 CIDSET_GB1, | 355 CIDSET_GB1, |
410 CIDSET_CNS1, | 356 CIDSET_CNS1, |
411 CIDSET_JAPAN1, | 357 CIDSET_JAPAN1, |
412 CIDSET_KOREA1, | 358 CIDSET_KOREA1, |
413 CIDSET_UNICODE, | 359 CIDSET_UNICODE, |
414 CIDSET_NUM_SETS | 360 CIDSET_NUM_SETS |
415 }; | 361 }; |
416 | 362 |
417 class CPDF_CIDFont : public CPDF_Font { | 363 class CPDF_CIDFont : public CPDF_Font { |
418 public: | 364 public: |
419 CPDF_CIDFont(); | 365 CPDF_CIDFont(); |
420 | |
421 ~CPDF_CIDFont() override; | 366 ~CPDF_CIDFont() override; |
422 | 367 |
423 static FX_FLOAT CIDTransformToFloat(uint8_t ch); | 368 static FX_FLOAT CIDTransformToFloat(uint8_t ch); |
424 | 369 |
425 // CPDF_Font: | 370 // CPDF_Font: |
371 bool IsCIDFont() const override { return true; } | |
372 const CPDF_CIDFont* AsCIDFont() const override { return this; } | |
373 CPDF_CIDFont* AsCIDFont() override { return this; } | |
426 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; | 374 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; |
427 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 375 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; |
428 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | 376 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; |
429 FX_DWORD GetNextChar(const FX_CHAR* pString, | 377 FX_DWORD GetNextChar(const FX_CHAR* pString, |
430 int nStrLen, | 378 int nStrLen, |
431 int& offset) const override; | 379 int& offset) const override; |
432 int CountChar(const FX_CHAR* pString, int size) const override; | 380 int CountChar(const FX_CHAR* pString, int size) const override; |
433 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; | 381 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; |
434 int GetCharSize(FX_DWORD charcode) const override; | 382 int GetCharSize(FX_DWORD charcode) const override; |
435 FX_BOOL IsVertWriting() const override; | 383 FX_BOOL IsVertWriting() const override; |
436 FX_BOOL IsUnicodeCompatible() const override; | 384 FX_BOOL IsUnicodeCompatible() const override; |
437 FX_BOOL _Load() override; | 385 FX_BOOL _Load() override; |
438 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; | 386 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; |
439 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; | 387 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; |
440 | 388 |
441 FX_BOOL LoadGB2312(); | 389 FX_BOOL LoadGB2312(); |
442 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; | 390 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; |
443 FX_BOOL IsTrueType() const { return !m_bType1; } | |
444 const uint8_t* GetCIDTransform(FX_WORD CID) const; | 391 const uint8_t* GetCIDTransform(FX_WORD CID) const; |
445 short GetVertWidth(FX_WORD CID) const; | 392 short GetVertWidth(FX_WORD CID) const; |
446 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; | 393 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; |
447 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; | 394 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; |
448 | 395 |
449 protected: | 396 protected: |
450 friend class CPDF_Font; | 397 friend class CPDF_Font; |
451 | 398 |
452 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph); | 399 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph); |
453 void LoadMetricsArray(CPDF_Array* pArray, | 400 void LoadMetricsArray(CPDF_Array* pArray, |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
838 | 785 |
839 FX_BOOL m_bInterpolate; | 786 FX_BOOL m_bInterpolate; |
840 | 787 |
841 CPDF_Document* m_pDocument; | 788 CPDF_Document* m_pDocument; |
842 | 789 |
843 CPDF_Dictionary* m_pOC; | 790 CPDF_Dictionary* m_pOC; |
844 CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size); | 791 CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size); |
845 }; | 792 }; |
846 | 793 |
847 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 794 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
OLD | NEW |