Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: core/include/fpdfapi/fpdf_resource.h

Issue 1729823004: refactor CPDF_Font and subclasses (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Remove types and delete unused Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | core/src/fpdfapi/fpdf_font/fpdf_font.cpp » ('j') | core/src/fpdfapi/fpdf_font/fpdf_font.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698