Chromium Code Reviews| 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 |