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 "core/fpdfapi/fpdf_font/font_int.h" | 7 #include "core/fpdfapi/fpdf_font/font_int.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" | 9 #include "core/fpdfapi/fpdf_cmaps/cmap_int.h" |
10 #include "core/fpdfapi/fpdf_font/ttgsubtable.h" | 10 #include "core/fpdfapi/fpdf_font/ttgsubtable.h" |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 CPDF_CMap* pCMap = new CPDF_CMap; | 308 CPDF_CMap* pCMap = new CPDF_CMap; |
309 const FX_CHAR* pname = name.c_str(); | 309 const FX_CHAR* pname = name.c_str(); |
310 if (*pname == '/') { | 310 if (*pname == '/') { |
311 pname++; | 311 pname++; |
312 } | 312 } |
313 pCMap->LoadPredefined(this, pname, bPromptCJK); | 313 pCMap->LoadPredefined(this, pname, bPromptCJK); |
314 return pCMap; | 314 return pCMap; |
315 } | 315 } |
316 | 316 |
317 void CPDF_CMapManager::ReloadAll() { | 317 void CPDF_CMapManager::ReloadAll() { |
318 for (const auto& pair : m_CMaps) { | 318 for (const auto& pair : m_CMaps) |
319 CPDF_CMap* pCMap = pair.second; | 319 pair.second->LoadPredefined(this, pair.first, FALSE); |
320 pCMap->LoadPredefined(this, pair.first.c_str(), FALSE); | 320 |
321 } | |
322 for (size_t i = 0; i < FX_ArraySize(m_CID2UnicodeMaps); ++i) { | 321 for (size_t i = 0; i < FX_ArraySize(m_CID2UnicodeMaps); ++i) { |
323 if (CPDF_CID2UnicodeMap* pMap = m_CID2UnicodeMaps[i]) { | 322 if (CPDF_CID2UnicodeMap* pMap = m_CID2UnicodeMaps[i]) { |
324 pMap->Load(this, CIDSetFromSizeT(i), FALSE); | 323 pMap->Load(this, CIDSetFromSizeT(i), FALSE); |
325 } | 324 } |
326 } | 325 } |
327 } | 326 } |
328 CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset, | 327 CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(CIDSet charset, |
329 FX_BOOL bPromptCJK) { | 328 FX_BOOL bPromptCJK) { |
330 if (!m_CID2UnicodeMaps[charset]) | 329 if (!m_CID2UnicodeMaps[charset]) |
331 m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK); | 330 m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 | 520 |
522 FX_BOOL CPDF_CMap::IsLoaded() const { | 521 FX_BOOL CPDF_CMap::IsLoaded() const { |
523 return m_bLoaded; | 522 return m_bLoaded; |
524 } | 523 } |
525 | 524 |
526 FX_BOOL CPDF_CMap::IsVertWriting() const { | 525 FX_BOOL CPDF_CMap::IsVertWriting() const { |
527 return m_bVertical; | 526 return m_bVertical; |
528 } | 527 } |
529 | 528 |
530 FX_BOOL CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr, | 529 FX_BOOL CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr, |
531 const FX_CHAR* pName, | 530 const CFX_ByteString& bsName, |
532 FX_BOOL bPromptCJK) { | 531 FX_BOOL bPromptCJK) { |
533 m_PredefinedCMap = pName; | 532 m_PredefinedCMap = bsName; |
534 if (m_PredefinedCMap == "Identity-H" || m_PredefinedCMap == "Identity-V") { | 533 if (m_PredefinedCMap == "Identity-H" || m_PredefinedCMap == "Identity-V") { |
535 m_Coding = CIDCODING_CID; | 534 m_Coding = CIDCODING_CID; |
536 m_bVertical = pName[9] == 'V'; | 535 m_bVertical = bsName[9] == 'V'; |
537 m_bLoaded = TRUE; | 536 m_bLoaded = TRUE; |
538 return TRUE; | 537 return TRUE; |
539 } | 538 } |
540 CFX_ByteString cmapid = m_PredefinedCMap; | 539 CFX_ByteString cmapid = m_PredefinedCMap; |
541 m_bVertical = cmapid.Right(1) == "V"; | 540 m_bVertical = cmapid.Right(1) == "V"; |
542 if (cmapid.GetLength() > 2) { | 541 if (cmapid.GetLength() > 2) { |
543 cmapid = cmapid.Left(cmapid.GetLength() - 2); | 542 cmapid = cmapid.Left(cmapid.GetLength() - 2); |
544 } | 543 } |
545 const CPDF_PredefinedCMap* map = nullptr; | 544 const CPDF_PredefinedCMap* map = nullptr; |
546 for (size_t i = 0; i < FX_ArraySize(g_PredefinedCMaps); ++i) { | 545 for (size_t i = 0; i < FX_ArraySize(g_PredefinedCMaps); ++i) { |
(...skipping 10 matching lines...) Expand all Loading... |
557 m_CodingScheme = map->m_CodingScheme; | 556 m_CodingScheme = map->m_CodingScheme; |
558 if (m_CodingScheme == MixedTwoBytes) { | 557 if (m_CodingScheme == MixedTwoBytes) { |
559 m_pLeadingBytes = FX_Alloc(uint8_t, 256); | 558 m_pLeadingBytes = FX_Alloc(uint8_t, 256); |
560 for (uint32_t i = 0; i < map->m_LeadingSegCount; ++i) { | 559 for (uint32_t i = 0; i < map->m_LeadingSegCount; ++i) { |
561 const uint8_t* segs = map->m_LeadingSegs; | 560 const uint8_t* segs = map->m_LeadingSegs; |
562 for (int b = segs[i * 2]; b <= segs[i * 2 + 1]; ++b) { | 561 for (int b = segs[i * 2]; b <= segs[i * 2 + 1]; ++b) { |
563 m_pLeadingBytes[b] = 1; | 562 m_pLeadingBytes[b] = 1; |
564 } | 563 } |
565 } | 564 } |
566 } | 565 } |
567 FPDFAPI_FindEmbeddedCMap(pName, m_Charset, m_Coding, m_pEmbedMap); | 566 FPDFAPI_FindEmbeddedCMap(bsName, m_Charset, m_Coding, m_pEmbedMap); |
568 if (m_pEmbedMap) { | 567 if (!m_pEmbedMap) |
569 m_bLoaded = TRUE; | 568 return FALSE; |
570 return TRUE; | 569 |
571 } | 570 m_bLoaded = TRUE; |
572 return FALSE; | 571 return TRUE; |
573 } | 572 } |
| 573 |
574 FX_BOOL CPDF_CMap::LoadEmbedded(const uint8_t* pData, uint32_t size) { | 574 FX_BOOL CPDF_CMap::LoadEmbedded(const uint8_t* pData, uint32_t size) { |
575 m_pMapping = FX_Alloc(uint16_t, 65536); | 575 m_pMapping = FX_Alloc(uint16_t, 65536); |
576 CPDF_CMapParser parser; | 576 CPDF_CMapParser parser; |
577 parser.Initialize(this); | 577 parser.Initialize(this); |
578 CPDF_SimpleParser syntax(pData, size); | 578 CPDF_SimpleParser syntax(pData, size); |
579 while (1) { | 579 while (1) { |
580 CFX_ByteStringC word = syntax.GetWord(); | 580 CFX_ByteStringC word = syntax.GetWord(); |
581 if (word.IsEmpty()) { | 581 if (word.IsEmpty()) { |
582 break; | 582 break; |
583 } | 583 } |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 m_EmbeddedCount = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count; | 785 m_EmbeddedCount = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count; |
786 } | 786 } |
787 | 787 |
788 CIDSet CharsetFromOrdering(const CFX_ByteStringC& ordering) { | 788 CIDSet CharsetFromOrdering(const CFX_ByteStringC& ordering) { |
789 for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) { | 789 for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) { |
790 if (ordering == g_CharsetNames[charset]) | 790 if (ordering == g_CharsetNames[charset]) |
791 return CIDSetFromSizeT(charset); | 791 return CIDSetFromSizeT(charset); |
792 } | 792 } |
793 return CIDSET_UNKNOWN; | 793 return CIDSET_UNKNOWN; |
794 } | 794 } |
OLD | NEW |