| 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 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "core/fxge/fontdata/chromefontdata/chromefontdata.h" | 11 #include "core/fxge/fontdata/chromefontdata/chromefontdata.h" |
| 12 #include "core/fxge/ge/fx_text_int.h" | 12 #include "core/fxge/ge/fx_text_int.h" |
| 13 #include "core/include/fxge/fx_freetype.h" | 13 #include "core/include/fxge/fx_freetype.h" |
| 14 #include "core/include/fxge/fx_ge.h" | 14 #include "core/include/fxge/fx_ge.h" |
| 15 #include "third_party/base/stl_util.h" | 15 #include "third_party/base/stl_util.h" |
| 16 | 16 |
| 17 #define GET_TT_SHORT(w) (uint16_t)(((w)[0] << 8) | (w)[1]) | 17 #define GET_TT_SHORT(w) (uint16_t)(((w)[0] << 8) | (w)[1]) |
| 18 #define GET_TT_LONG(w) \ | 18 #define GET_TT_LONG(w) \ |
| 19 (FX_DWORD)(((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3]) | 19 (uint32_t)(((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3]) |
| 20 | 20 |
| 21 #define FX_FONT_STYLE_None 0x00 | 21 #define FX_FONT_STYLE_None 0x00 |
| 22 #define FX_FONT_STYLE_Bold 0x01 | 22 #define FX_FONT_STYLE_Bold 0x01 |
| 23 #define FX_FONT_STYLE_Italic 0x02 | 23 #define FX_FONT_STYLE_Italic 0x02 |
| 24 #define FX_FONT_STYLE_BoldBold 0x04 | 24 #define FX_FONT_STYLE_BoldBold 0x04 |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 struct BuiltinFont { | 28 struct BuiltinFont { |
| 29 const uint8_t* m_pFontData; | 29 const uint8_t* m_pFontData; |
| 30 FX_DWORD m_dwSize; | 30 uint32_t m_dwSize; |
| 31 }; | 31 }; |
| 32 | 32 |
| 33 const BuiltinFont g_FoxitFonts[14] = { | 33 const BuiltinFont g_FoxitFonts[14] = { |
| 34 {g_FoxitFixedFontData, 17597}, | 34 {g_FoxitFixedFontData, 17597}, |
| 35 {g_FoxitFixedBoldFontData, 18055}, | 35 {g_FoxitFixedBoldFontData, 18055}, |
| 36 {g_FoxitFixedBoldItalicFontData, 19151}, | 36 {g_FoxitFixedBoldItalicFontData, 19151}, |
| 37 {g_FoxitFixedItalicFontData, 18746}, | 37 {g_FoxitFixedItalicFontData, 18746}, |
| 38 {g_FoxitSansFontData, 15025}, | 38 {g_FoxitSansFontData, 15025}, |
| 39 {g_FoxitSansBoldFontData, 16344}, | 39 {g_FoxitSansBoldFontData, 16344}, |
| 40 {g_FoxitSansBoldItalicFontData, 16418}, | 40 {g_FoxitSansBoldItalicFontData, 16418}, |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } g_Codepage2CharsetTable[] = { | 204 } g_Codepage2CharsetTable[] = { |
| 205 {0, 1}, {42, 2}, {437, 254}, {850, 255}, {874, 222}, | 205 {0, 1}, {42, 2}, {437, 254}, {850, 255}, {874, 222}, |
| 206 {932, 128}, {936, 134}, {949, 129}, {950, 136}, {1250, 238}, | 206 {932, 128}, {936, 134}, {949, 129}, {950, 136}, {1250, 238}, |
| 207 {1251, 204}, {1252, 0}, {1253, 161}, {1254, 162}, {1255, 177}, | 207 {1251, 204}, {1252, 0}, {1253, 161}, {1254, 162}, {1255, 177}, |
| 208 {1256, 178}, {1257, 186}, {1258, 163}, {1361, 130}, {10000, 77}, | 208 {1256, 178}, {1257, 186}, {1258, 163}, {1361, 130}, {10000, 77}, |
| 209 {10001, 78}, {10002, 81}, {10003, 79}, {10004, 84}, {10005, 83}, | 209 {10001, 78}, {10002, 81}, {10003, 79}, {10004, 84}, {10005, 83}, |
| 210 {10006, 85}, {10007, 89}, {10008, 80}, {10021, 87}, {10029, 88}, | 210 {10006, 85}, {10007, 89}, {10008, 80}, {10021, 87}, {10029, 88}, |
| 211 {10081, 86}, | 211 {10081, 86}, |
| 212 }; | 212 }; |
| 213 | 213 |
| 214 const FX_DWORD kTableNAME = FXDWORD_GET_MSBFIRST("name"); | 214 const uint32_t kTableNAME = FXDWORD_GET_MSBFIRST("name"); |
| 215 const FX_DWORD kTableTTCF = FXDWORD_GET_MSBFIRST("ttcf"); | 215 const uint32_t kTableTTCF = FXDWORD_GET_MSBFIRST("ttcf"); |
| 216 | 216 |
| 217 int CompareFontFamilyString(const void* key, const void* element) { | 217 int CompareFontFamilyString(const void* key, const void* element) { |
| 218 CFX_ByteString str_key((const FX_CHAR*)key); | 218 CFX_ByteString str_key((const FX_CHAR*)key); |
| 219 if (str_key.Find(((AltFontFamily*)element)->m_pFontName) != -1) { | 219 if (str_key.Find(((AltFontFamily*)element)->m_pFontName) != -1) { |
| 220 return 0; | 220 return 0; |
| 221 } | 221 } |
| 222 return FXSYS_stricmp((const FX_CHAR*)key, | 222 return FXSYS_stricmp((const FX_CHAR*)key, |
| 223 ((AltFontFamily*)element)->m_pFontName); | 223 ((AltFontFamily*)element)->m_pFontName); |
| 224 } | 224 } |
| 225 | 225 |
| 226 int CompareString(const void* key, const void* element) { | 226 int CompareString(const void* key, const void* element) { |
| 227 return FXSYS_stricmp((const FX_CHAR*)key, ((AltFontName*)element)->m_pName); | 227 return FXSYS_stricmp((const FX_CHAR*)key, ((AltFontName*)element)->m_pName); |
| 228 } | 228 } |
| 229 | 229 |
| 230 CFX_ByteString KeyNameFromFace(const CFX_ByteString& face_name, | 230 CFX_ByteString KeyNameFromFace(const CFX_ByteString& face_name, |
| 231 int weight, | 231 int weight, |
| 232 FX_BOOL bItalic) { | 232 FX_BOOL bItalic) { |
| 233 CFX_ByteString key(face_name); | 233 CFX_ByteString key(face_name); |
| 234 key += ','; | 234 key += ','; |
| 235 key += CFX_ByteString::FormatInteger(weight); | 235 key += CFX_ByteString::FormatInteger(weight); |
| 236 key += bItalic ? 'I' : 'N'; | 236 key += bItalic ? 'I' : 'N'; |
| 237 return key; | 237 return key; |
| 238 } | 238 } |
| 239 | 239 |
| 240 CFX_ByteString KeyNameFromSize(int ttc_size, FX_DWORD checksum) { | 240 CFX_ByteString KeyNameFromSize(int ttc_size, uint32_t checksum) { |
| 241 CFX_ByteString key; | 241 CFX_ByteString key; |
| 242 key.Format("%d:%d", ttc_size, checksum); | 242 key.Format("%d:%d", ttc_size, checksum); |
| 243 return key; | 243 return key; |
| 244 } | 244 } |
| 245 | 245 |
| 246 CFX_ByteString TT_NormalizeName(const FX_CHAR* family) { | 246 CFX_ByteString TT_NormalizeName(const FX_CHAR* family) { |
| 247 CFX_ByteString norm(family); | 247 CFX_ByteString norm(family); |
| 248 norm.Remove(' '); | 248 norm.Remove(' '); |
| 249 norm.Remove('-'); | 249 norm.Remove('-'); |
| 250 norm.Remove(','); | 250 norm.Remove(','); |
| 251 int pos = norm.Find('+'); | 251 int pos = norm.Find('+'); |
| 252 if (pos > 0) { | 252 if (pos > 0) { |
| 253 norm = norm.Left(pos); | 253 norm = norm.Left(pos); |
| 254 } | 254 } |
| 255 norm.MakeLower(); | 255 norm.MakeLower(); |
| 256 return norm; | 256 return norm; |
| 257 } | 257 } |
| 258 | 258 |
| 259 CFX_ByteString FPDF_ReadStringFromFile(FXSYS_FILE* pFile, FX_DWORD size) { | 259 CFX_ByteString FPDF_ReadStringFromFile(FXSYS_FILE* pFile, uint32_t size) { |
| 260 CFX_ByteString buffer; | 260 CFX_ByteString buffer; |
| 261 if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) { | 261 if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) { |
| 262 return CFX_ByteString(); | 262 return CFX_ByteString(); |
| 263 } | 263 } |
| 264 buffer.ReleaseBuffer(size); | 264 buffer.ReleaseBuffer(size); |
| 265 return buffer; | 265 return buffer; |
| 266 } | 266 } |
| 267 | 267 |
| 268 CFX_ByteString FPDF_LoadTableFromTT(FXSYS_FILE* pFile, | 268 CFX_ByteString FPDF_LoadTableFromTT(FXSYS_FILE* pFile, |
| 269 const uint8_t* pTables, | 269 const uint8_t* pTables, |
| 270 FX_DWORD nTables, | 270 uint32_t nTables, |
| 271 FX_DWORD tag) { | 271 uint32_t tag) { |
| 272 for (FX_DWORD i = 0; i < nTables; i++) { | 272 for (uint32_t i = 0; i < nTables; i++) { |
| 273 const uint8_t* p = pTables + i * 16; | 273 const uint8_t* p = pTables + i * 16; |
| 274 if (GET_TT_LONG(p) == tag) { | 274 if (GET_TT_LONG(p) == tag) { |
| 275 FX_DWORD offset = GET_TT_LONG(p + 8); | 275 uint32_t offset = GET_TT_LONG(p + 8); |
| 276 FX_DWORD size = GET_TT_LONG(p + 12); | 276 uint32_t size = GET_TT_LONG(p + 12); |
| 277 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); | 277 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); |
| 278 return FPDF_ReadStringFromFile(pFile, size); | 278 return FPDF_ReadStringFromFile(pFile, size); |
| 279 } | 279 } |
| 280 } | 280 } |
| 281 return CFX_ByteString(); | 281 return CFX_ByteString(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 uint8_t GetCharsetFromCodePage(uint16_t codepage) { | 284 uint8_t GetCharsetFromCodePage(uint16_t codepage) { |
| 285 const CODEPAGE_MAP* pEnd = | 285 const CODEPAGE_MAP* pEnd = |
| 286 g_Codepage2CharsetTable + FX_ArraySize(g_Codepage2CharsetTable); | 286 g_Codepage2CharsetTable + FX_ArraySize(g_Codepage2CharsetTable); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 } | 355 } |
| 356 | 356 |
| 357 FX_BOOL CheckSupportThirdPartFont(CFX_ByteString name, int& PitchFamily) { | 357 FX_BOOL CheckSupportThirdPartFont(CFX_ByteString name, int& PitchFamily) { |
| 358 if (name == "MyriadPro") { | 358 if (name == "MyriadPro") { |
| 359 PitchFamily &= ~FXFONT_FF_ROMAN; | 359 PitchFamily &= ~FXFONT_FF_ROMAN; |
| 360 return TRUE; | 360 return TRUE; |
| 361 } | 361 } |
| 362 return FALSE; | 362 return FALSE; |
| 363 } | 363 } |
| 364 | 364 |
| 365 FX_DWORD GetCharset(int charset) { | 365 uint32_t GetCharset(int charset) { |
| 366 switch (charset) { | 366 switch (charset) { |
| 367 case FXFONT_SHIFTJIS_CHARSET: | 367 case FXFONT_SHIFTJIS_CHARSET: |
| 368 return CHARSET_FLAG_SHIFTJIS; | 368 return CHARSET_FLAG_SHIFTJIS; |
| 369 case FXFONT_GB2312_CHARSET: | 369 case FXFONT_GB2312_CHARSET: |
| 370 return CHARSET_FLAG_GB; | 370 return CHARSET_FLAG_GB; |
| 371 case FXFONT_CHINESEBIG5_CHARSET: | 371 case FXFONT_CHINESEBIG5_CHARSET: |
| 372 return CHARSET_FLAG_BIG5; | 372 return CHARSET_FLAG_BIG5; |
| 373 case FXFONT_HANGEUL_CHARSET: | 373 case FXFONT_HANGEUL_CHARSET: |
| 374 return CHARSET_FLAG_KOREAN; | 374 return CHARSET_FLAG_KOREAN; |
| 375 case FXFONT_SYMBOL_CHARSET: | 375 case FXFONT_SYMBOL_CHARSET: |
| 376 return CHARSET_FLAG_SYMBOL; | 376 return CHARSET_FLAG_SYMBOL; |
| 377 case FXFONT_ANSI_CHARSET: | 377 case FXFONT_ANSI_CHARSET: |
| 378 return CHARSET_FLAG_ANSI; | 378 return CHARSET_FLAG_ANSI; |
| 379 default: | 379 default: |
| 380 break; | 380 break; |
| 381 } | 381 } |
| 382 return 0; | 382 return 0; |
| 383 } | 383 } |
| 384 | 384 |
| 385 int32_t GetSimilarValue(int weight, | 385 int32_t GetSimilarValue(int weight, |
| 386 FX_BOOL bItalic, | 386 FX_BOOL bItalic, |
| 387 int pitch_family, | 387 int pitch_family, |
| 388 FX_DWORD style) { | 388 uint32_t style) { |
| 389 int32_t iSimilarValue = 0; | 389 int32_t iSimilarValue = 0; |
| 390 if (!!(style & FXFONT_BOLD) == (weight > 400)) { | 390 if (!!(style & FXFONT_BOLD) == (weight > 400)) { |
| 391 iSimilarValue += 16; | 391 iSimilarValue += 16; |
| 392 } | 392 } |
| 393 if (!!(style & FXFONT_ITALIC) == bItalic) { | 393 if (!!(style & FXFONT_ITALIC) == bItalic) { |
| 394 iSimilarValue += 16; | 394 iSimilarValue += 16; |
| 395 } | 395 } |
| 396 if (!!(style & FXFONT_SERIF) == !!(pitch_family & FXFONT_FF_ROMAN)) { | 396 if (!!(style & FXFONT_SERIF) == !!(pitch_family & FXFONT_FF_ROMAN)) { |
| 397 iSimilarValue += 16; | 397 iSimilarValue += 16; |
| 398 } | 398 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 return; | 473 return; |
| 474 FXFT_Init_FreeType(&m_FTLibrary); | 474 FXFT_Init_FreeType(&m_FTLibrary); |
| 475 } | 475 } |
| 476 | 476 |
| 477 void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) { | 477 void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) { |
| 478 m_pBuiltinMapper->SetSystemFontInfo(pFontInfo); | 478 m_pBuiltinMapper->SetSystemFontInfo(pFontInfo); |
| 479 } | 479 } |
| 480 | 480 |
| 481 FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, | 481 FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, |
| 482 FX_BOOL bTrueType, | 482 FX_BOOL bTrueType, |
| 483 FX_DWORD flags, | 483 uint32_t flags, |
| 484 int weight, | 484 int weight, |
| 485 int italic_angle, | 485 int italic_angle, |
| 486 int CharsetCP, | 486 int CharsetCP, |
| 487 CFX_SubstFont* pSubstFont) { | 487 CFX_SubstFont* pSubstFont) { |
| 488 InitFTLibrary(); | 488 InitFTLibrary(); |
| 489 return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, | 489 return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, |
| 490 italic_angle, CharsetCP, pSubstFont); | 490 italic_angle, CharsetCP, pSubstFont); |
| 491 } | 491 } |
| 492 | 492 |
| 493 FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name, | 493 FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name, |
| 494 int weight, | 494 int weight, |
| 495 FX_BOOL bItalic, | 495 FX_BOOL bItalic, |
| 496 uint8_t*& pFontData) { | 496 uint8_t*& pFontData) { |
| 497 auto it = m_FaceMap.find(KeyNameFromFace(face_name, weight, bItalic)); | 497 auto it = m_FaceMap.find(KeyNameFromFace(face_name, weight, bItalic)); |
| 498 if (it == m_FaceMap.end()) | 498 if (it == m_FaceMap.end()) |
| 499 return nullptr; | 499 return nullptr; |
| 500 | 500 |
| 501 CTTFontDesc* pFontDesc = it->second; | 501 CTTFontDesc* pFontDesc = it->second; |
| 502 pFontData = pFontDesc->m_pFontData; | 502 pFontData = pFontDesc->m_pFontData; |
| 503 pFontDesc->m_RefCount++; | 503 pFontDesc->m_RefCount++; |
| 504 return pFontDesc->m_SingleFace.m_pFace; | 504 return pFontDesc->m_SingleFace.m_pFace; |
| 505 } | 505 } |
| 506 FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name, | 506 FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name, |
| 507 int weight, | 507 int weight, |
| 508 FX_BOOL bItalic, | 508 FX_BOOL bItalic, |
| 509 uint8_t* pData, | 509 uint8_t* pData, |
| 510 FX_DWORD size, | 510 uint32_t size, |
| 511 int face_index) { | 511 int face_index) { |
| 512 CTTFontDesc* pFontDesc = new CTTFontDesc; | 512 CTTFontDesc* pFontDesc = new CTTFontDesc; |
| 513 pFontDesc->m_Type = 1; | 513 pFontDesc->m_Type = 1; |
| 514 pFontDesc->m_SingleFace.m_pFace = NULL; | 514 pFontDesc->m_SingleFace.m_pFace = NULL; |
| 515 pFontDesc->m_SingleFace.m_bBold = weight; | 515 pFontDesc->m_SingleFace.m_bBold = weight; |
| 516 pFontDesc->m_SingleFace.m_bItalic = bItalic; | 516 pFontDesc->m_SingleFace.m_bItalic = bItalic; |
| 517 pFontDesc->m_pFontData = pData; | 517 pFontDesc->m_pFontData = pData; |
| 518 pFontDesc->m_RefCount = 1; | 518 pFontDesc->m_RefCount = 1; |
| 519 | 519 |
| 520 InitFTLibrary(); | 520 InitFTLibrary(); |
| 521 FXFT_Library library = m_FTLibrary; | 521 FXFT_Library library = m_FTLibrary; |
| 522 int ret = FXFT_New_Memory_Face(library, pData, size, face_index, | 522 int ret = FXFT_New_Memory_Face(library, pData, size, face_index, |
| 523 &pFontDesc->m_SingleFace.m_pFace); | 523 &pFontDesc->m_SingleFace.m_pFace); |
| 524 if (ret) { | 524 if (ret) { |
| 525 delete pFontDesc; | 525 delete pFontDesc; |
| 526 return NULL; | 526 return NULL; |
| 527 } | 527 } |
| 528 ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace.m_pFace, 64, 64); | 528 ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace.m_pFace, 64, 64); |
| 529 if (ret) { | 529 if (ret) { |
| 530 delete pFontDesc; | 530 delete pFontDesc; |
| 531 return NULL; | 531 return NULL; |
| 532 } | 532 } |
| 533 m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)] = pFontDesc; | 533 m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)] = pFontDesc; |
| 534 return pFontDesc->m_SingleFace.m_pFace; | 534 return pFontDesc->m_SingleFace.m_pFace; |
| 535 } | 535 } |
| 536 | 536 |
| 537 int GetTTCIndex(const uint8_t* pFontData, | 537 int GetTTCIndex(const uint8_t* pFontData, |
| 538 FX_DWORD ttc_size, | 538 uint32_t ttc_size, |
| 539 FX_DWORD font_offset) { | 539 uint32_t font_offset) { |
| 540 int face_index = 0; | 540 int face_index = 0; |
| 541 const uint8_t* p = pFontData + 8; | 541 const uint8_t* p = pFontData + 8; |
| 542 FX_DWORD nfont = GET_TT_LONG(p); | 542 uint32_t nfont = GET_TT_LONG(p); |
| 543 FX_DWORD index; | 543 uint32_t index; |
| 544 for (index = 0; index < nfont; index++) { | 544 for (index = 0; index < nfont; index++) { |
| 545 p = pFontData + 12 + index * 4; | 545 p = pFontData + 12 + index * 4; |
| 546 if (GET_TT_LONG(p) == font_offset) { | 546 if (GET_TT_LONG(p) == font_offset) { |
| 547 break; | 547 break; |
| 548 } | 548 } |
| 549 } | 549 } |
| 550 if (index >= nfont) { | 550 if (index >= nfont) { |
| 551 face_index = 0; | 551 face_index = 0; |
| 552 } else { | 552 } else { |
| 553 face_index = index; | 553 face_index = index; |
| 554 } | 554 } |
| 555 return face_index; | 555 return face_index; |
| 556 } | 556 } |
| 557 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, | 557 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, |
| 558 FX_DWORD checksum, | 558 uint32_t checksum, |
| 559 int font_offset, | 559 int font_offset, |
| 560 uint8_t*& pFontData) { | 560 uint8_t*& pFontData) { |
| 561 auto it = m_FaceMap.find(KeyNameFromSize(ttc_size, checksum)); | 561 auto it = m_FaceMap.find(KeyNameFromSize(ttc_size, checksum)); |
| 562 if (it == m_FaceMap.end()) | 562 if (it == m_FaceMap.end()) |
| 563 return nullptr; | 563 return nullptr; |
| 564 | 564 |
| 565 CTTFontDesc* pFontDesc = it->second; | 565 CTTFontDesc* pFontDesc = it->second; |
| 566 pFontData = pFontDesc->m_pFontData; | 566 pFontData = pFontDesc->m_pFontData; |
| 567 pFontDesc->m_RefCount++; | 567 pFontDesc->m_RefCount++; |
| 568 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); | 568 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); |
| 569 if (!pFontDesc->m_TTCFace.m_pFaces[face_index]) { | 569 if (!pFontDesc->m_TTCFace.m_pFaces[face_index]) { |
| 570 pFontDesc->m_TTCFace.m_pFaces[face_index] = | 570 pFontDesc->m_TTCFace.m_pFaces[face_index] = |
| 571 GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); | 571 GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); |
| 572 } | 572 } |
| 573 return pFontDesc->m_TTCFace.m_pFaces[face_index]; | 573 return pFontDesc->m_TTCFace.m_pFaces[face_index]; |
| 574 } | 574 } |
| 575 FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, | 575 FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, |
| 576 FX_DWORD checksum, | 576 uint32_t checksum, |
| 577 uint8_t* pData, | 577 uint8_t* pData, |
| 578 FX_DWORD size, | 578 uint32_t size, |
| 579 int font_offset) { | 579 int font_offset) { |
| 580 CTTFontDesc* pFontDesc = new CTTFontDesc; | 580 CTTFontDesc* pFontDesc = new CTTFontDesc; |
| 581 pFontDesc->m_Type = 2; | 581 pFontDesc->m_Type = 2; |
| 582 pFontDesc->m_pFontData = pData; | 582 pFontDesc->m_pFontData = pData; |
| 583 for (int i = 0; i < 16; i++) { | 583 for (int i = 0; i < 16; i++) { |
| 584 pFontDesc->m_TTCFace.m_pFaces[i] = NULL; | 584 pFontDesc->m_TTCFace.m_pFaces[i] = NULL; |
| 585 } | 585 } |
| 586 pFontDesc->m_RefCount++; | 586 pFontDesc->m_RefCount++; |
| 587 m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = pFontDesc; | 587 m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = pFontDesc; |
| 588 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); | 588 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); |
| 589 pFontDesc->m_TTCFace.m_pFaces[face_index] = | 589 pFontDesc->m_TTCFace.m_pFaces[face_index] = |
| 590 GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); | 590 GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); |
| 591 return pFontDesc->m_TTCFace.m_pFaces[face_index]; | 591 return pFontDesc->m_TTCFace.m_pFaces[face_index]; |
| 592 } | 592 } |
| 593 | 593 |
| 594 FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, | 594 FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, |
| 595 FX_DWORD size, | 595 uint32_t size, |
| 596 int face_index) { | 596 int face_index) { |
| 597 InitFTLibrary(); | 597 InitFTLibrary(); |
| 598 FXFT_Library library = m_FTLibrary; | 598 FXFT_Library library = m_FTLibrary; |
| 599 FXFT_Face face = nullptr; | 599 FXFT_Face face = nullptr; |
| 600 if (FXFT_New_Memory_Face(library, pData, size, face_index, &face)) | 600 if (FXFT_New_Memory_Face(library, pData, size, face_index, &face)) |
| 601 return nullptr; | 601 return nullptr; |
| 602 return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; | 602 return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; |
| 603 } | 603 } |
| 604 | 604 |
| 605 FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) { | 605 FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 626 if (nRet == 0) | 626 if (nRet == 0) |
| 627 m_FaceMap.erase(temp); | 627 m_FaceMap.erase(temp); |
| 628 break; | 628 break; |
| 629 } | 629 } |
| 630 if (bNeedFaceDone && !m_pBuiltinMapper->IsBuiltinFace(face)) | 630 if (bNeedFaceDone && !m_pBuiltinMapper->IsBuiltinFace(face)) |
| 631 FXFT_Done_Face(face); | 631 FXFT_Done_Face(face); |
| 632 } | 632 } |
| 633 | 633 |
| 634 bool CFX_FontMgr::GetBuiltinFont(size_t index, | 634 bool CFX_FontMgr::GetBuiltinFont(size_t index, |
| 635 const uint8_t** pFontData, | 635 const uint8_t** pFontData, |
| 636 FX_DWORD* size) { | 636 uint32_t* size) { |
| 637 if (index < FX_ArraySize(g_FoxitFonts)) { | 637 if (index < FX_ArraySize(g_FoxitFonts)) { |
| 638 *pFontData = g_FoxitFonts[index].m_pFontData; | 638 *pFontData = g_FoxitFonts[index].m_pFontData; |
| 639 *size = g_FoxitFonts[index].m_dwSize; | 639 *size = g_FoxitFonts[index].m_dwSize; |
| 640 return true; | 640 return true; |
| 641 } | 641 } |
| 642 index -= FX_ArraySize(g_FoxitFonts); | 642 index -= FX_ArraySize(g_FoxitFonts); |
| 643 if (index < FX_ArraySize(g_MMFonts)) { | 643 if (index < FX_ArraySize(g_MMFonts)) { |
| 644 *pFontData = g_MMFonts[index].m_pFontData; | 644 *pFontData = g_MMFonts[index].m_pFontData; |
| 645 *size = g_MMFonts[index].m_dwSize; | 645 *size = g_MMFonts[index].m_dwSize; |
| 646 return true; | 646 return true; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 675 void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) { | 675 void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) { |
| 676 if (!pFontInfo) { | 676 if (!pFontInfo) { |
| 677 return; | 677 return; |
| 678 } | 678 } |
| 679 if (m_pFontInfo) { | 679 if (m_pFontInfo) { |
| 680 m_pFontInfo->Release(); | 680 m_pFontInfo->Release(); |
| 681 } | 681 } |
| 682 m_pFontInfo = pFontInfo; | 682 m_pFontInfo = pFontInfo; |
| 683 } | 683 } |
| 684 static CFX_ByteString GetStringFromTable(const uint8_t* string_ptr, | 684 static CFX_ByteString GetStringFromTable(const uint8_t* string_ptr, |
| 685 FX_DWORD string_ptr_length, | 685 uint32_t string_ptr_length, |
| 686 uint16_t offset, | 686 uint16_t offset, |
| 687 uint16_t length) { | 687 uint16_t length) { |
| 688 if (string_ptr_length < offset + length) { | 688 if (string_ptr_length < offset + length) { |
| 689 return CFX_ByteString(); | 689 return CFX_ByteString(); |
| 690 } | 690 } |
| 691 return CFX_ByteStringC(string_ptr + offset, length); | 691 return CFX_ByteStringC(string_ptr + offset, length); |
| 692 } | 692 } |
| 693 CFX_ByteString GetNameFromTT(const uint8_t* name_table, | 693 CFX_ByteString GetNameFromTT(const uint8_t* name_table, |
| 694 FX_DWORD name_table_size, | 694 uint32_t name_table_size, |
| 695 FX_DWORD name_id) { | 695 uint32_t name_id) { |
| 696 if (!name_table || name_table_size < 6) { | 696 if (!name_table || name_table_size < 6) { |
| 697 return CFX_ByteString(); | 697 return CFX_ByteString(); |
| 698 } | 698 } |
| 699 FX_DWORD name_count = GET_TT_SHORT(name_table + 2); | 699 uint32_t name_count = GET_TT_SHORT(name_table + 2); |
| 700 FX_DWORD string_offset = GET_TT_SHORT(name_table + 4); | 700 uint32_t string_offset = GET_TT_SHORT(name_table + 4); |
| 701 // We will ignore the possibility of overlap of structures and | 701 // We will ignore the possibility of overlap of structures and |
| 702 // string table as if it's all corrupt there's not a lot we can do. | 702 // string table as if it's all corrupt there's not a lot we can do. |
| 703 if (name_table_size < string_offset) { | 703 if (name_table_size < string_offset) { |
| 704 return CFX_ByteString(); | 704 return CFX_ByteString(); |
| 705 } | 705 } |
| 706 | 706 |
| 707 const uint8_t* string_ptr = name_table + string_offset; | 707 const uint8_t* string_ptr = name_table + string_offset; |
| 708 FX_DWORD string_ptr_size = name_table_size - string_offset; | 708 uint32_t string_ptr_size = name_table_size - string_offset; |
| 709 name_table += 6; | 709 name_table += 6; |
| 710 name_table_size -= 6; | 710 name_table_size -= 6; |
| 711 if (name_table_size < name_count * 12) { | 711 if (name_table_size < name_count * 12) { |
| 712 return CFX_ByteString(); | 712 return CFX_ByteString(); |
| 713 } | 713 } |
| 714 | 714 |
| 715 for (FX_DWORD i = 0; i < name_count; i++, name_table += 12) { | 715 for (uint32_t i = 0; i < name_count; i++, name_table += 12) { |
| 716 if (GET_TT_SHORT(name_table + 6) == name_id && | 716 if (GET_TT_SHORT(name_table + 6) == name_id && |
| 717 GET_TT_SHORT(name_table) == 1 && GET_TT_SHORT(name_table + 2) == 0) { | 717 GET_TT_SHORT(name_table) == 1 && GET_TT_SHORT(name_table + 2) == 0) { |
| 718 return GetStringFromTable(string_ptr, string_ptr_size, | 718 return GetStringFromTable(string_ptr, string_ptr_size, |
| 719 GET_TT_SHORT(name_table + 10), | 719 GET_TT_SHORT(name_table + 10), |
| 720 GET_TT_SHORT(name_table + 8)); | 720 GET_TT_SHORT(name_table + 8)); |
| 721 } | 721 } |
| 722 } | 722 } |
| 723 return CFX_ByteString(); | 723 return CFX_ByteString(); |
| 724 } | 724 } |
| 725 | 725 |
| 726 CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) { | 726 CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) { |
| 727 if (!m_pFontInfo) | 727 if (!m_pFontInfo) |
| 728 return CFX_ByteString(); | 728 return CFX_ByteString(); |
| 729 | 729 |
| 730 FX_DWORD size = m_pFontInfo->GetFontData(hFont, kTableNAME, nullptr, 0); | 730 uint32_t size = m_pFontInfo->GetFontData(hFont, kTableNAME, nullptr, 0); |
| 731 if (!size) | 731 if (!size) |
| 732 return CFX_ByteString(); | 732 return CFX_ByteString(); |
| 733 | 733 |
| 734 std::vector<uint8_t> buffer(size); | 734 std::vector<uint8_t> buffer(size); |
| 735 uint8_t* buffer_ptr = buffer.data(); | 735 uint8_t* buffer_ptr = buffer.data(); |
| 736 FX_DWORD bytes_read = | 736 uint32_t bytes_read = |
| 737 m_pFontInfo->GetFontData(hFont, kTableNAME, buffer_ptr, size); | 737 m_pFontInfo->GetFontData(hFont, kTableNAME, buffer_ptr, size); |
| 738 return bytes_read == size ? GetNameFromTT(buffer_ptr, bytes_read, 6) | 738 return bytes_read == size ? GetNameFromTT(buffer_ptr, bytes_read, 6) |
| 739 : CFX_ByteString(); | 739 : CFX_ByteString(); |
| 740 } | 740 } |
| 741 | 741 |
| 742 void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) { | 742 void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) { |
| 743 if (!m_pFontInfo) { | 743 if (!m_pFontInfo) { |
| 744 return; | 744 return; |
| 745 } | 745 } |
| 746 if (m_CharsetArray.Find((FX_DWORD)charset) == -1) { | 746 if (m_CharsetArray.Find((uint32_t)charset) == -1) { |
| 747 m_CharsetArray.Add((FX_DWORD)charset); | 747 m_CharsetArray.Add((uint32_t)charset); |
| 748 m_FaceArray.push_back(name); | 748 m_FaceArray.push_back(name); |
| 749 } | 749 } |
| 750 if (name == m_LastFamily) { | 750 if (name == m_LastFamily) { |
| 751 return; | 751 return; |
| 752 } | 752 } |
| 753 const uint8_t* ptr = name; | 753 const uint8_t* ptr = name; |
| 754 FX_BOOL bLocalized = FALSE; | 754 FX_BOOL bLocalized = FALSE; |
| 755 for (int i = 0; i < name.GetLength(); i++) | 755 for (int i = 0; i < name.GetLength(); i++) |
| 756 if (ptr[i] > 0x80) { | 756 if (ptr[i] > 0x80) { |
| 757 bLocalized = TRUE; | 757 bLocalized = TRUE; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, | 813 FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, |
| 814 int iBaseFont, | 814 int iBaseFont, |
| 815 int italic_angle, | 815 int italic_angle, |
| 816 int weight, | 816 int weight, |
| 817 int picthfamily) { | 817 int picthfamily) { |
| 818 if (iBaseFont < 12) { | 818 if (iBaseFont < 12) { |
| 819 if (m_FoxitFaces[iBaseFont]) { | 819 if (m_FoxitFaces[iBaseFont]) { |
| 820 return m_FoxitFaces[iBaseFont]; | 820 return m_FoxitFaces[iBaseFont]; |
| 821 } | 821 } |
| 822 const uint8_t* pFontData = NULL; | 822 const uint8_t* pFontData = NULL; |
| 823 FX_DWORD size = 0; | 823 uint32_t size = 0; |
| 824 if (m_pFontMgr->GetBuiltinFont(iBaseFont, &pFontData, &size)) { | 824 if (m_pFontMgr->GetBuiltinFont(iBaseFont, &pFontData, &size)) { |
| 825 m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 825 m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 826 return m_FoxitFaces[iBaseFont]; | 826 return m_FoxitFaces[iBaseFont]; |
| 827 } | 827 } |
| 828 } | 828 } |
| 829 pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM; | 829 pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM; |
| 830 pSubstFont->m_ItalicAngle = italic_angle; | 830 pSubstFont->m_ItalicAngle = italic_angle; |
| 831 if (weight) { | 831 if (weight) { |
| 832 pSubstFont->m_Weight = weight; | 832 pSubstFont->m_Weight = weight; |
| 833 } | 833 } |
| 834 if (picthfamily & FXFONT_FF_ROMAN) { | 834 if (picthfamily & FXFONT_FF_ROMAN) { |
| 835 pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5; | 835 pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5; |
| 836 pSubstFont->m_Family = "Chrome Serif"; | 836 pSubstFont->m_Family = "Chrome Serif"; |
| 837 if (m_MMFaces[1]) { | 837 if (m_MMFaces[1]) { |
| 838 return m_MMFaces[1]; | 838 return m_MMFaces[1]; |
| 839 } | 839 } |
| 840 const uint8_t* pFontData = NULL; | 840 const uint8_t* pFontData = NULL; |
| 841 FX_DWORD size = 0; | 841 uint32_t size = 0; |
| 842 m_pFontMgr->GetBuiltinFont(14, &pFontData, &size); | 842 m_pFontMgr->GetBuiltinFont(14, &pFontData, &size); |
| 843 m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 843 m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 844 return m_MMFaces[1]; | 844 return m_MMFaces[1]; |
| 845 } | 845 } |
| 846 pSubstFont->m_Family = "Chrome Sans"; | 846 pSubstFont->m_Family = "Chrome Sans"; |
| 847 if (m_MMFaces[0]) { | 847 if (m_MMFaces[0]) { |
| 848 return m_MMFaces[0]; | 848 return m_MMFaces[0]; |
| 849 } | 849 } |
| 850 const uint8_t* pFontData = NULL; | 850 const uint8_t* pFontData = NULL; |
| 851 FX_DWORD size = 0; | 851 uint32_t size = 0; |
| 852 m_pFontMgr->GetBuiltinFont(15, &pFontData, &size); | 852 m_pFontMgr->GetBuiltinFont(15, &pFontData, &size); |
| 853 m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 853 m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 854 return m_MMFaces[0]; | 854 return m_MMFaces[0]; |
| 855 } | 855 } |
| 856 | 856 |
| 857 FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, | 857 FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| 858 FX_BOOL bTrueType, | 858 FX_BOOL bTrueType, |
| 859 FX_DWORD flags, | 859 uint32_t flags, |
| 860 int weight, | 860 int weight, |
| 861 int italic_angle, | 861 int italic_angle, |
| 862 int WindowCP, | 862 int WindowCP, |
| 863 CFX_SubstFont* pSubstFont) { | 863 CFX_SubstFont* pSubstFont) { |
| 864 if (!(flags & FXFONT_USEEXTERNATTR)) { | 864 if (!(flags & FXFONT_USEEXTERNATTR)) { |
| 865 weight = FXFONT_FW_NORMAL; | 865 weight = FXFONT_FW_NORMAL; |
| 866 italic_angle = 0; | 866 italic_angle = 0; |
| 867 } | 867 } |
| 868 CFX_ByteString SubstName = name; | 868 CFX_ByteString SubstName = name; |
| 869 SubstName.Remove(0x20); | 869 SubstName.Remove(0x20); |
| 870 if (bTrueType) { | 870 if (bTrueType) { |
| 871 if (name[0] == '@') { | 871 if (name[0] == '@') { |
| 872 SubstName = name.Mid(1); | 872 SubstName = name.Mid(1); |
| 873 } | 873 } |
| 874 } | 874 } |
| 875 PDF_GetStandardFontName(&SubstName); | 875 PDF_GetStandardFontName(&SubstName); |
| 876 if (SubstName == "Symbol" && !bTrueType) { | 876 if (SubstName == "Symbol" && !bTrueType) { |
| 877 pSubstFont->m_Family = "Chrome Symbol"; | 877 pSubstFont->m_Family = "Chrome Symbol"; |
| 878 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; | 878 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; |
| 879 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; | 879 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; |
| 880 if (m_FoxitFaces[12]) { | 880 if (m_FoxitFaces[12]) { |
| 881 return m_FoxitFaces[12]; | 881 return m_FoxitFaces[12]; |
| 882 } | 882 } |
| 883 const uint8_t* pFontData = NULL; | 883 const uint8_t* pFontData = NULL; |
| 884 FX_DWORD size = 0; | 884 uint32_t size = 0; |
| 885 m_pFontMgr->GetBuiltinFont(12, &pFontData, &size); | 885 m_pFontMgr->GetBuiltinFont(12, &pFontData, &size); |
| 886 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 886 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 887 return m_FoxitFaces[12]; | 887 return m_FoxitFaces[12]; |
| 888 } | 888 } |
| 889 if (SubstName == "ZapfDingbats") { | 889 if (SubstName == "ZapfDingbats") { |
| 890 pSubstFont->m_Family = "Chrome Dingbats"; | 890 pSubstFont->m_Family = "Chrome Dingbats"; |
| 891 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; | 891 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; |
| 892 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; | 892 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; |
| 893 if (m_FoxitFaces[13]) { | 893 if (m_FoxitFaces[13]) { |
| 894 return m_FoxitFaces[13]; | 894 return m_FoxitFaces[13]; |
| 895 } | 895 } |
| 896 const uint8_t* pFontData = NULL; | 896 const uint8_t* pFontData = NULL; |
| 897 FX_DWORD size = 0; | 897 uint32_t size = 0; |
| 898 m_pFontMgr->GetBuiltinFont(13, &pFontData, &size); | 898 m_pFontMgr->GetBuiltinFont(13, &pFontData, &size); |
| 899 m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 899 m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 900 return m_FoxitFaces[13]; | 900 return m_FoxitFaces[13]; |
| 901 } | 901 } |
| 902 int iBaseFont = 0; | 902 int iBaseFont = 0; |
| 903 CFX_ByteString family, style; | 903 CFX_ByteString family, style; |
| 904 FX_BOOL bHasComma = FALSE; | 904 FX_BOOL bHasComma = FALSE; |
| 905 FX_BOOL bHasHypen = FALSE; | 905 FX_BOOL bHasHypen = FALSE; |
| 906 int find = SubstName.Find(",", 0); | 906 int find = SubstName.Find(",", 0); |
| 907 if (find >= 0) { | 907 if (find >= 0) { |
| 908 family = SubstName.Left(find); | 908 family = SubstName.Left(find); |
| 909 PDF_GetStandardFontName(&family); | 909 PDF_GetStandardFontName(&family); |
| 910 style = SubstName.Mid(find + 1); | 910 style = SubstName.Mid(find + 1); |
| 911 bHasComma = TRUE; | 911 bHasComma = TRUE; |
| 912 } else { | 912 } else { |
| 913 family = SubstName; | 913 family = SubstName; |
| 914 } | 914 } |
| 915 for (; iBaseFont < 12; iBaseFont++) | 915 for (; iBaseFont < 12; iBaseFont++) |
| 916 if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont])) { | 916 if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont])) { |
| 917 break; | 917 break; |
| 918 } | 918 } |
| 919 int PitchFamily = 0; | 919 int PitchFamily = 0; |
| 920 FX_BOOL bItalic = FALSE; | 920 FX_BOOL bItalic = FALSE; |
| 921 FX_DWORD nStyle = 0; | 921 uint32_t nStyle = 0; |
| 922 FX_BOOL bStyleAvail = FALSE; | 922 FX_BOOL bStyleAvail = FALSE; |
| 923 if (iBaseFont < 12) { | 923 if (iBaseFont < 12) { |
| 924 family = g_Base14FontNames[iBaseFont]; | 924 family = g_Base14FontNames[iBaseFont]; |
| 925 if ((iBaseFont % 4) == 1 || (iBaseFont % 4) == 2) { | 925 if ((iBaseFont % 4) == 1 || (iBaseFont % 4) == 2) { |
| 926 nStyle |= FX_FONT_STYLE_Bold; | 926 nStyle |= FX_FONT_STYLE_Bold; |
| 927 } | 927 } |
| 928 if ((iBaseFont % 4) / 2) { | 928 if ((iBaseFont % 4) / 2) { |
| 929 nStyle |= FX_FONT_STYLE_Italic; | 929 nStyle |= FX_FONT_STYLE_Italic; |
| 930 } | 930 } |
| 931 if (iBaseFont < 4) { | 931 if (iBaseFont < 4) { |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \ | 1132 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \ |
| 1133 _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ | 1133 _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ |
| 1134 if (SubstName == "Symbol") { | 1134 if (SubstName == "Symbol") { |
| 1135 pSubstFont->m_Family = "Chrome Symbol"; | 1135 pSubstFont->m_Family = "Chrome Symbol"; |
| 1136 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; | 1136 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; |
| 1137 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; | 1137 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; |
| 1138 if (m_FoxitFaces[12]) { | 1138 if (m_FoxitFaces[12]) { |
| 1139 return m_FoxitFaces[12]; | 1139 return m_FoxitFaces[12]; |
| 1140 } | 1140 } |
| 1141 const uint8_t* pFontData = NULL; | 1141 const uint8_t* pFontData = NULL; |
| 1142 FX_DWORD size = 0; | 1142 uint32_t size = 0; |
| 1143 m_pFontMgr->GetBuiltinFont(12, &pFontData, &size); | 1143 m_pFontMgr->GetBuiltinFont(12, &pFontData, &size); |
| 1144 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); | 1144 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); |
| 1145 return m_FoxitFaces[12]; | 1145 return m_FoxitFaces[12]; |
| 1146 } | 1146 } |
| 1147 #endif | 1147 #endif |
| 1148 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL; | 1148 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL; |
| 1149 return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMBOLIC, | 1149 return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMBOLIC, |
| 1150 weight, italic_angle, 0, pSubstFont); | 1150 weight, italic_angle, 0, pSubstFont); |
| 1151 } | 1151 } |
| 1152 if (Charset == FXFONT_ANSI_CHARSET) { | 1152 if (Charset == FXFONT_ANSI_CHARSET) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1163 } | 1163 } |
| 1164 } | 1164 } |
| 1165 pSubstFont->m_ExtHandle = m_pFontInfo->RetainFont(hFont); | 1165 pSubstFont->m_ExtHandle = m_pFontInfo->RetainFont(hFont); |
| 1166 if (!hFont) | 1166 if (!hFont) |
| 1167 return nullptr; | 1167 return nullptr; |
| 1168 | 1168 |
| 1169 m_pFontInfo->GetFaceName(hFont, SubstName); | 1169 m_pFontInfo->GetFaceName(hFont, SubstName); |
| 1170 if (Charset == FXFONT_DEFAULT_CHARSET) { | 1170 if (Charset == FXFONT_DEFAULT_CHARSET) { |
| 1171 m_pFontInfo->GetFontCharset(hFont, Charset); | 1171 m_pFontInfo->GetFontCharset(hFont, Charset); |
| 1172 } | 1172 } |
| 1173 FX_DWORD ttc_size = m_pFontInfo->GetFontData(hFont, kTableTTCF, nullptr, 0); | 1173 uint32_t ttc_size = m_pFontInfo->GetFontData(hFont, kTableTTCF, nullptr, 0); |
| 1174 FX_DWORD font_size = m_pFontInfo->GetFontData(hFont, 0, nullptr, 0); | 1174 uint32_t font_size = m_pFontInfo->GetFontData(hFont, 0, nullptr, 0); |
| 1175 if (font_size == 0 && ttc_size == 0) { | 1175 if (font_size == 0 && ttc_size == 0) { |
| 1176 m_pFontInfo->DeleteFont(hFont); | 1176 m_pFontInfo->DeleteFont(hFont); |
| 1177 return nullptr; | 1177 return nullptr; |
| 1178 } | 1178 } |
| 1179 FXFT_Face face = nullptr; | 1179 FXFT_Face face = nullptr; |
| 1180 if (ttc_size) { | 1180 if (ttc_size) { |
| 1181 uint8_t temp[1024]; | 1181 uint8_t temp[1024]; |
| 1182 m_pFontInfo->GetFontData(hFont, kTableTTCF, temp, 1024); | 1182 m_pFontInfo->GetFontData(hFont, kTableTTCF, temp, 1024); |
| 1183 FX_DWORD checksum = 0; | 1183 uint32_t checksum = 0; |
| 1184 for (int i = 0; i < 256; i++) { | 1184 for (int i = 0; i < 256; i++) { |
| 1185 checksum += ((FX_DWORD*)temp)[i]; | 1185 checksum += ((uint32_t*)temp)[i]; |
| 1186 } | 1186 } |
| 1187 uint8_t* pFontData; | 1187 uint8_t* pFontData; |
| 1188 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, | 1188 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, |
| 1189 ttc_size - font_size, pFontData); | 1189 ttc_size - font_size, pFontData); |
| 1190 if (!face) { | 1190 if (!face) { |
| 1191 pFontData = FX_Alloc(uint8_t, ttc_size); | 1191 pFontData = FX_Alloc(uint8_t, ttc_size); |
| 1192 m_pFontInfo->GetFontData(hFont, kTableTTCF, pFontData, ttc_size); | 1192 m_pFontInfo->GetFontData(hFont, kTableTTCF, pFontData, ttc_size); |
| 1193 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, | 1193 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, |
| 1194 ttc_size, ttc_size - font_size); | 1194 ttc_size, ttc_size - font_size); |
| 1195 } | 1195 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1232 italic_angle = -12; | 1232 italic_angle = -12; |
| 1233 } else if (FXSYS_abs(italic_angle) < 5) { | 1233 } else if (FXSYS_abs(italic_angle) < 5) { |
| 1234 italic_angle = 0; | 1234 italic_angle = 0; |
| 1235 } | 1235 } |
| 1236 pSubstFont->m_ItalicAngle = italic_angle; | 1236 pSubstFont->m_ItalicAngle = italic_angle; |
| 1237 } | 1237 } |
| 1238 m_pFontInfo->DeleteFont(hFont); | 1238 m_pFontInfo->DeleteFont(hFont); |
| 1239 return face; | 1239 return face; |
| 1240 } | 1240 } |
| 1241 #ifdef PDF_ENABLE_XFA | 1241 #ifdef PDF_ENABLE_XFA |
| 1242 FXFT_Face CFX_FontMapper::FindSubstFontByUnicode(FX_DWORD dwUnicode, | 1242 FXFT_Face CFX_FontMapper::FindSubstFontByUnicode(uint32_t dwUnicode, |
| 1243 FX_DWORD flags, | 1243 uint32_t flags, |
| 1244 int weight, | 1244 int weight, |
| 1245 int italic_angle) { | 1245 int italic_angle) { |
| 1246 if (m_pFontInfo == NULL) { | 1246 if (m_pFontInfo == NULL) { |
| 1247 return NULL; | 1247 return NULL; |
| 1248 } | 1248 } |
| 1249 FX_BOOL bItalic = (flags & FXFONT_ITALIC) != 0; | 1249 FX_BOOL bItalic = (flags & FXFONT_ITALIC) != 0; |
| 1250 int PitchFamily = 0; | 1250 int PitchFamily = 0; |
| 1251 if (flags & FXFONT_SERIF) { | 1251 if (flags & FXFONT_SERIF) { |
| 1252 PitchFamily |= FXFONT_FF_ROMAN; | 1252 PitchFamily |= FXFONT_FF_ROMAN; |
| 1253 } | 1253 } |
| 1254 if (flags & FXFONT_SCRIPT) { | 1254 if (flags & FXFONT_SCRIPT) { |
| 1255 PitchFamily |= FXFONT_FF_SCRIPT; | 1255 PitchFamily |= FXFONT_FF_SCRIPT; |
| 1256 } | 1256 } |
| 1257 if (flags & FXFONT_FIXED_PITCH) { | 1257 if (flags & FXFONT_FIXED_PITCH) { |
| 1258 PitchFamily |= FXFONT_FF_FIXEDPITCH; | 1258 PitchFamily |= FXFONT_FF_FIXEDPITCH; |
| 1259 } | 1259 } |
| 1260 void* hFont = | 1260 void* hFont = |
| 1261 m_pFontInfo->MapFontByUnicode(dwUnicode, weight, bItalic, PitchFamily); | 1261 m_pFontInfo->MapFontByUnicode(dwUnicode, weight, bItalic, PitchFamily); |
| 1262 if (hFont == NULL) { | 1262 if (hFont == NULL) { |
| 1263 return NULL; | 1263 return NULL; |
| 1264 } | 1264 } |
| 1265 FX_DWORD ttc_size = m_pFontInfo->GetFontData(hFont, 0x74746366, NULL, 0); | 1265 uint32_t ttc_size = m_pFontInfo->GetFontData(hFont, 0x74746366, NULL, 0); |
| 1266 FX_DWORD font_size = m_pFontInfo->GetFontData(hFont, 0, NULL, 0); | 1266 uint32_t font_size = m_pFontInfo->GetFontData(hFont, 0, NULL, 0); |
| 1267 if (font_size == 0 && ttc_size == 0) { | 1267 if (font_size == 0 && ttc_size == 0) { |
| 1268 m_pFontInfo->DeleteFont(hFont); | 1268 m_pFontInfo->DeleteFont(hFont); |
| 1269 return NULL; | 1269 return NULL; |
| 1270 } | 1270 } |
| 1271 FXFT_Face face = NULL; | 1271 FXFT_Face face = NULL; |
| 1272 if (ttc_size) { | 1272 if (ttc_size) { |
| 1273 uint8_t temp[1024]; | 1273 uint8_t temp[1024]; |
| 1274 m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024); | 1274 m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024); |
| 1275 FX_DWORD checksum = 0; | 1275 uint32_t checksum = 0; |
| 1276 for (int i = 0; i < 256; i++) { | 1276 for (int i = 0; i < 256; i++) { |
| 1277 checksum += ((FX_DWORD*)temp)[i]; | 1277 checksum += ((uint32_t*)temp)[i]; |
| 1278 } | 1278 } |
| 1279 uint8_t* pFontData; | 1279 uint8_t* pFontData; |
| 1280 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, | 1280 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, |
| 1281 ttc_size - font_size, pFontData); | 1281 ttc_size - font_size, pFontData); |
| 1282 if (face == NULL) { | 1282 if (face == NULL) { |
| 1283 pFontData = FX_Alloc(uint8_t, ttc_size); | 1283 pFontData = FX_Alloc(uint8_t, ttc_size); |
| 1284 if (pFontData) { | 1284 if (pFontData) { |
| 1285 m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size); | 1285 m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size); |
| 1286 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, | 1286 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, |
| 1287 ttc_size, ttc_size - font_size); | 1287 ttc_size, ttc_size - font_size); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1301 m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size); | 1301 m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size); |
| 1302 face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontData, | 1302 face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontData, |
| 1303 font_size, | 1303 font_size, |
| 1304 m_pFontInfo->GetFaceIndex(hFont)); | 1304 m_pFontInfo->GetFaceIndex(hFont)); |
| 1305 } | 1305 } |
| 1306 } | 1306 } |
| 1307 m_pFontInfo->DeleteFont(hFont); | 1307 m_pFontInfo->DeleteFont(hFont); |
| 1308 return face; | 1308 return face; |
| 1309 } | 1309 } |
| 1310 | 1310 |
| 1311 void* IFX_SystemFontInfo::MapFontByUnicode(FX_DWORD dwUnicode, | 1311 void* IFX_SystemFontInfo::MapFontByUnicode(uint32_t dwUnicode, |
| 1312 int weight, | 1312 int weight, |
| 1313 FX_BOOL bItalic, | 1313 FX_BOOL bItalic, |
| 1314 int pitch_family) { | 1314 int pitch_family) { |
| 1315 return nullptr; | 1315 return nullptr; |
| 1316 } | 1316 } |
| 1317 #endif // PDF_ENABLE_XFA | 1317 #endif // PDF_ENABLE_XFA |
| 1318 | 1318 |
| 1319 int IFX_SystemFontInfo::GetFaceIndex(void* hFont) { | 1319 int IFX_SystemFontInfo::GetFaceIndex(void* hFont) { |
| 1320 return 0; | 1320 return 0; |
| 1321 } | 1321 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 } | 1408 } |
| 1409 } | 1409 } |
| 1410 FX_CloseFolder(handle); | 1410 FX_CloseFolder(handle); |
| 1411 } | 1411 } |
| 1412 void CFX_FolderFontInfo::ScanFile(const CFX_ByteString& path) { | 1412 void CFX_FolderFontInfo::ScanFile(const CFX_ByteString& path) { |
| 1413 FXSYS_FILE* pFile = FXSYS_fopen(path, "rb"); | 1413 FXSYS_FILE* pFile = FXSYS_fopen(path, "rb"); |
| 1414 if (!pFile) { | 1414 if (!pFile) { |
| 1415 return; | 1415 return; |
| 1416 } | 1416 } |
| 1417 FXSYS_fseek(pFile, 0, FXSYS_SEEK_END); | 1417 FXSYS_fseek(pFile, 0, FXSYS_SEEK_END); |
| 1418 FX_DWORD filesize = FXSYS_ftell(pFile); | 1418 uint32_t filesize = FXSYS_ftell(pFile); |
| 1419 uint8_t buffer[16]; | 1419 uint8_t buffer[16]; |
| 1420 FXSYS_fseek(pFile, 0, FXSYS_SEEK_SET); | 1420 FXSYS_fseek(pFile, 0, FXSYS_SEEK_SET); |
| 1421 size_t readCnt = FXSYS_fread(buffer, 12, 1, pFile); | 1421 size_t readCnt = FXSYS_fread(buffer, 12, 1, pFile); |
| 1422 if (readCnt != 1) { | 1422 if (readCnt != 1) { |
| 1423 FXSYS_fclose(pFile); | 1423 FXSYS_fclose(pFile); |
| 1424 return; | 1424 return; |
| 1425 } | 1425 } |
| 1426 | 1426 |
| 1427 if (GET_TT_LONG(buffer) == kTableTTCF) { | 1427 if (GET_TT_LONG(buffer) == kTableTTCF) { |
| 1428 FX_DWORD nFaces = GET_TT_LONG(buffer + 8); | 1428 uint32_t nFaces = GET_TT_LONG(buffer + 8); |
| 1429 if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) { | 1429 if (nFaces > std::numeric_limits<uint32_t>::max() / 4) { |
| 1430 FXSYS_fclose(pFile); | 1430 FXSYS_fclose(pFile); |
| 1431 return; | 1431 return; |
| 1432 } | 1432 } |
| 1433 FX_DWORD face_bytes = nFaces * 4; | 1433 uint32_t face_bytes = nFaces * 4; |
| 1434 uint8_t* offsets = FX_Alloc(uint8_t, face_bytes); | 1434 uint8_t* offsets = FX_Alloc(uint8_t, face_bytes); |
| 1435 readCnt = FXSYS_fread(offsets, 1, face_bytes, pFile); | 1435 readCnt = FXSYS_fread(offsets, 1, face_bytes, pFile); |
| 1436 if (readCnt != face_bytes) { | 1436 if (readCnt != face_bytes) { |
| 1437 FX_Free(offsets); | 1437 FX_Free(offsets); |
| 1438 FXSYS_fclose(pFile); | 1438 FXSYS_fclose(pFile); |
| 1439 return; | 1439 return; |
| 1440 } | 1440 } |
| 1441 for (FX_DWORD i = 0; i < nFaces; i++) { | 1441 for (uint32_t i = 0; i < nFaces; i++) { |
| 1442 uint8_t* p = offsets + i * 4; | 1442 uint8_t* p = offsets + i * 4; |
| 1443 ReportFace(path, pFile, filesize, GET_TT_LONG(p)); | 1443 ReportFace(path, pFile, filesize, GET_TT_LONG(p)); |
| 1444 } | 1444 } |
| 1445 FX_Free(offsets); | 1445 FX_Free(offsets); |
| 1446 } else { | 1446 } else { |
| 1447 ReportFace(path, pFile, filesize, 0); | 1447 ReportFace(path, pFile, filesize, 0); |
| 1448 } | 1448 } |
| 1449 FXSYS_fclose(pFile); | 1449 FXSYS_fclose(pFile); |
| 1450 } | 1450 } |
| 1451 void CFX_FolderFontInfo::ReportFace(const CFX_ByteString& path, | 1451 void CFX_FolderFontInfo::ReportFace(const CFX_ByteString& path, |
| 1452 FXSYS_FILE* pFile, | 1452 FXSYS_FILE* pFile, |
| 1453 FX_DWORD filesize, | 1453 uint32_t filesize, |
| 1454 FX_DWORD offset) { | 1454 uint32_t offset) { |
| 1455 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); | 1455 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); |
| 1456 char buffer[16]; | 1456 char buffer[16]; |
| 1457 if (!FXSYS_fread(buffer, 12, 1, pFile)) { | 1457 if (!FXSYS_fread(buffer, 12, 1, pFile)) { |
| 1458 return; | 1458 return; |
| 1459 } | 1459 } |
| 1460 FX_DWORD nTables = GET_TT_SHORT(buffer + 4); | 1460 uint32_t nTables = GET_TT_SHORT(buffer + 4); |
| 1461 CFX_ByteString tables = FPDF_ReadStringFromFile(pFile, nTables * 16); | 1461 CFX_ByteString tables = FPDF_ReadStringFromFile(pFile, nTables * 16); |
| 1462 if (tables.IsEmpty()) { | 1462 if (tables.IsEmpty()) { |
| 1463 return; | 1463 return; |
| 1464 } | 1464 } |
| 1465 CFX_ByteString names = | 1465 CFX_ByteString names = |
| 1466 FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616d65); | 1466 FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616d65); |
| 1467 if (names.IsEmpty()) { | 1467 if (names.IsEmpty()) { |
| 1468 return; | 1468 return; |
| 1469 } | 1469 } |
| 1470 CFX_ByteString facename = GetNameFromTT(names, names.GetLength(), 1); | 1470 CFX_ByteString facename = GetNameFromTT(names, names.GetLength(), 1); |
| 1471 if (facename.IsEmpty()) { | 1471 if (facename.IsEmpty()) { |
| 1472 return; | 1472 return; |
| 1473 } | 1473 } |
| 1474 CFX_ByteString style = GetNameFromTT(names, names.GetLength(), 2); | 1474 CFX_ByteString style = GetNameFromTT(names, names.GetLength(), 2); |
| 1475 if (style != "Regular") { | 1475 if (style != "Regular") { |
| 1476 facename += " " + style; | 1476 facename += " " + style; |
| 1477 } | 1477 } |
| 1478 if (pdfium::ContainsKey(m_FontList, facename)) | 1478 if (pdfium::ContainsKey(m_FontList, facename)) |
| 1479 return; | 1479 return; |
| 1480 | 1480 |
| 1481 CFX_FontFaceInfo* pInfo = | 1481 CFX_FontFaceInfo* pInfo = |
| 1482 new CFX_FontFaceInfo(path, facename, tables, offset, filesize); | 1482 new CFX_FontFaceInfo(path, facename, tables, offset, filesize); |
| 1483 CFX_ByteString os2 = FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32); | 1483 CFX_ByteString os2 = FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32); |
| 1484 if (os2.GetLength() >= 86) { | 1484 if (os2.GetLength() >= 86) { |
| 1485 const uint8_t* p = (const uint8_t*)os2 + 78; | 1485 const uint8_t* p = (const uint8_t*)os2 + 78; |
| 1486 FX_DWORD codepages = GET_TT_LONG(p); | 1486 uint32_t codepages = GET_TT_LONG(p); |
| 1487 if (codepages & (1 << 17)) { | 1487 if (codepages & (1 << 17)) { |
| 1488 m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET); | 1488 m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET); |
| 1489 pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS; | 1489 pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS; |
| 1490 } | 1490 } |
| 1491 if (codepages & (1 << 18)) { | 1491 if (codepages & (1 << 18)) { |
| 1492 m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET); | 1492 m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET); |
| 1493 pInfo->m_Charsets |= CHARSET_FLAG_GB; | 1493 pInfo->m_Charsets |= CHARSET_FLAG_GB; |
| 1494 } | 1494 } |
| 1495 if (codepages & (1 << 20)) { | 1495 if (codepages & (1 << 20)) { |
| 1496 m_pMapper->AddInstalledFont(facename, FXFONT_CHINESEBIG5_CHARSET); | 1496 m_pMapper->AddInstalledFont(facename, FXFONT_CHINESEBIG5_CHARSET); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 void* CFX_FolderFontInfo::FindFont(int weight, | 1533 void* CFX_FolderFontInfo::FindFont(int weight, |
| 1534 FX_BOOL bItalic, | 1534 FX_BOOL bItalic, |
| 1535 int charset, | 1535 int charset, |
| 1536 int pitch_family, | 1536 int pitch_family, |
| 1537 const FX_CHAR* family, | 1537 const FX_CHAR* family, |
| 1538 FX_BOOL bMatchName) { | 1538 FX_BOOL bMatchName) { |
| 1539 CFX_FontFaceInfo* pFind = nullptr; | 1539 CFX_FontFaceInfo* pFind = nullptr; |
| 1540 if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) { | 1540 if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) { |
| 1541 return GetFont("Courier New"); | 1541 return GetFont("Courier New"); |
| 1542 } | 1542 } |
| 1543 FX_DWORD charset_flag = GetCharset(charset); | 1543 uint32_t charset_flag = GetCharset(charset); |
| 1544 int32_t iBestSimilar = 0; | 1544 int32_t iBestSimilar = 0; |
| 1545 for (const auto& it : m_FontList) { | 1545 for (const auto& it : m_FontList) { |
| 1546 const CFX_ByteString& bsName = it.first; | 1546 const CFX_ByteString& bsName = it.first; |
| 1547 CFX_FontFaceInfo* pFont = it.second; | 1547 CFX_FontFaceInfo* pFont = it.second; |
| 1548 if (!(pFont->m_Charsets & charset_flag) && | 1548 if (!(pFont->m_Charsets & charset_flag) && |
| 1549 charset != FXFONT_DEFAULT_CHARSET) { | 1549 charset != FXFONT_DEFAULT_CHARSET) { |
| 1550 continue; | 1550 continue; |
| 1551 } | 1551 } |
| 1552 int32_t index = bsName.Find(family); | 1552 int32_t index = bsName.Find(family); |
| 1553 if (bMatchName && index < 0) { | 1553 if (bMatchName && index < 0) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1565 void* CFX_FolderFontInfo::MapFont(int weight, | 1565 void* CFX_FolderFontInfo::MapFont(int weight, |
| 1566 FX_BOOL bItalic, | 1566 FX_BOOL bItalic, |
| 1567 int charset, | 1567 int charset, |
| 1568 int pitch_family, | 1568 int pitch_family, |
| 1569 const FX_CHAR* family, | 1569 const FX_CHAR* family, |
| 1570 int& iExact) { | 1570 int& iExact) { |
| 1571 return NULL; | 1571 return NULL; |
| 1572 } | 1572 } |
| 1573 | 1573 |
| 1574 #ifdef PDF_ENABLE_XFA | 1574 #ifdef PDF_ENABLE_XFA |
| 1575 void* CFX_FolderFontInfo::MapFontByUnicode(FX_DWORD dwUnicode, | 1575 void* CFX_FolderFontInfo::MapFontByUnicode(uint32_t dwUnicode, |
| 1576 int weight, | 1576 int weight, |
| 1577 FX_BOOL bItalic, | 1577 FX_BOOL bItalic, |
| 1578 int pitch_family) { | 1578 int pitch_family) { |
| 1579 return NULL; | 1579 return NULL; |
| 1580 } | 1580 } |
| 1581 #endif // PDF_ENABLE_XFA | 1581 #endif // PDF_ENABLE_XFA |
| 1582 | 1582 |
| 1583 void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face) { | 1583 void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face) { |
| 1584 auto it = m_FontList.find(face); | 1584 auto it = m_FontList.find(face); |
| 1585 return it != m_FontList.end() ? it->second : nullptr; | 1585 return it != m_FontList.end() ? it->second : nullptr; |
| 1586 } | 1586 } |
| 1587 | 1587 |
| 1588 FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, | 1588 uint32_t CFX_FolderFontInfo::GetFontData(void* hFont, |
| 1589 FX_DWORD table, | 1589 uint32_t table, |
| 1590 uint8_t* buffer, | 1590 uint8_t* buffer, |
| 1591 FX_DWORD size) { | 1591 uint32_t size) { |
| 1592 if (!hFont) | 1592 if (!hFont) |
| 1593 return 0; | 1593 return 0; |
| 1594 | 1594 |
| 1595 const CFX_FontFaceInfo* pFont = static_cast<CFX_FontFaceInfo*>(hFont); | 1595 const CFX_FontFaceInfo* pFont = static_cast<CFX_FontFaceInfo*>(hFont); |
| 1596 FX_DWORD datasize = 0; | 1596 uint32_t datasize = 0; |
| 1597 FX_DWORD offset = 0; | 1597 uint32_t offset = 0; |
| 1598 if (table == 0) { | 1598 if (table == 0) { |
| 1599 datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize; | 1599 datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize; |
| 1600 } else if (table == kTableTTCF) { | 1600 } else if (table == kTableTTCF) { |
| 1601 datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0; | 1601 datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0; |
| 1602 } else { | 1602 } else { |
| 1603 FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16; | 1603 uint32_t nTables = pFont->m_FontTables.GetLength() / 16; |
| 1604 for (FX_DWORD i = 0; i < nTables; i++) { | 1604 for (uint32_t i = 0; i < nTables; i++) { |
| 1605 const uint8_t* p = | 1605 const uint8_t* p = |
| 1606 static_cast<const uint8_t*>(pFont->m_FontTables) + i * 16; | 1606 static_cast<const uint8_t*>(pFont->m_FontTables) + i * 16; |
| 1607 if (GET_TT_LONG(p) == table) { | 1607 if (GET_TT_LONG(p) == table) { |
| 1608 offset = GET_TT_LONG(p + 8); | 1608 offset = GET_TT_LONG(p + 8); |
| 1609 datasize = GET_TT_LONG(p + 12); | 1609 datasize = GET_TT_LONG(p + 12); |
| 1610 } | 1610 } |
| 1611 } | 1611 } |
| 1612 } | 1612 } |
| 1613 | 1613 |
| 1614 if (!datasize || size < datasize) | 1614 if (!datasize || size < datasize) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1642 int PDF_GetStandardFontName(CFX_ByteString* name) { | 1642 int PDF_GetStandardFontName(CFX_ByteString* name) { |
| 1643 AltFontName* found = static_cast<AltFontName*>( | 1643 AltFontName* found = static_cast<AltFontName*>( |
| 1644 FXSYS_bsearch(name->c_str(), g_AltFontNames, FX_ArraySize(g_AltFontNames), | 1644 FXSYS_bsearch(name->c_str(), g_AltFontNames, FX_ArraySize(g_AltFontNames), |
| 1645 sizeof(AltFontName), CompareString)); | 1645 sizeof(AltFontName), CompareString)); |
| 1646 if (!found) | 1646 if (!found) |
| 1647 return -1; | 1647 return -1; |
| 1648 | 1648 |
| 1649 *name = g_Base14FontNames[found->m_Index]; | 1649 *name = g_Base14FontNames[found->m_Index]; |
| 1650 return found->m_Index; | 1650 return found->m_Index; |
| 1651 } | 1651 } |
| OLD | NEW |