| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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/include/cpdf_font.h" | 7 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 *basemap = PDFFONT_ENCODING_MACEXPERT; | 43 *basemap = PDFFONT_ENCODING_MACEXPERT; |
| 44 else if (value == "PDFDocEncoding") | 44 else if (value == "PDFDocEncoding") |
| 45 *basemap = PDFFONT_ENCODING_PDFDOC; | 45 *basemap = PDFFONT_ENCODING_PDFDOC; |
| 46 } | 46 } |
| 47 | 47 |
| 48 } // namespace | 48 } // namespace |
| 49 | 49 |
| 50 CPDF_Font::CPDF_Font() | 50 CPDF_Font::CPDF_Font() |
| 51 : m_pFontFile(nullptr), | 51 : m_pFontFile(nullptr), |
| 52 m_pFontDict(nullptr), | 52 m_pFontDict(nullptr), |
| 53 m_bToUnicodeLoaded(FALSE), | 53 m_bToUnicodeLoaded(false), |
| 54 m_Flags(0), | 54 m_Flags(0), |
| 55 m_StemV(0), | 55 m_StemV(0), |
| 56 m_Ascent(0), | 56 m_Ascent(0), |
| 57 m_Descent(0), | 57 m_Descent(0), |
| 58 m_ItalicAngle(0) {} | 58 m_ItalicAngle(0) {} |
| 59 | 59 |
| 60 CPDF_Font::~CPDF_Font() { | 60 CPDF_Font::~CPDF_Font() { |
| 61 if (m_pFontFile) { | 61 if (m_pFontFile) { |
| 62 m_pDocument->GetPageData()->ReleaseFontFileStreamAcc( | 62 m_pDocument->GetPageData()->ReleaseFontFileStreamAcc( |
| 63 m_pFontFile->GetStream()->AsStream()); | 63 m_pFontFile->GetStream()->AsStream()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 } | 105 } |
| 106 | 106 |
| 107 const CPDF_CIDFont* CPDF_Font::AsCIDFont() const { | 107 const CPDF_CIDFont* CPDF_Font::AsCIDFont() const { |
| 108 return nullptr; | 108 return nullptr; |
| 109 } | 109 } |
| 110 | 110 |
| 111 CPDF_CIDFont* CPDF_Font::AsCIDFont() { | 111 CPDF_CIDFont* CPDF_Font::AsCIDFont() { |
| 112 return nullptr; | 112 return nullptr; |
| 113 } | 113 } |
| 114 | 114 |
| 115 FX_BOOL CPDF_Font::IsUnicodeCompatible() const { | 115 bool CPDF_Font::IsUnicodeCompatible() const { |
| 116 return FALSE; | 116 return false; |
| 117 } | 117 } |
| 118 | 118 |
| 119 int CPDF_Font::CountChar(const FX_CHAR* pString, int size) const { | 119 int CPDF_Font::CountChar(const FX_CHAR* pString, int size) const { |
| 120 return size; | 120 return size; |
| 121 } | 121 } |
| 122 | 122 |
| 123 int CPDF_Font::GetCharSize(uint32_t charcode) const { | 123 int CPDF_Font::GetCharSize(uint32_t charcode) const { |
| 124 return 1; | 124 return 1; |
| 125 } | 125 } |
| 126 | 126 |
| 127 int CPDF_Font::GlyphFromCharCodeExt(uint32_t charcode) { | 127 int CPDF_Font::GlyphFromCharCodeExt(uint32_t charcode) { |
| 128 return GlyphFromCharCode(charcode, nullptr); | 128 return GlyphFromCharCode(charcode, nullptr); |
| 129 } | 129 } |
| 130 | 130 |
| 131 FX_BOOL CPDF_Font::IsVertWriting() const { | 131 bool CPDF_Font::IsVertWriting() const { |
| 132 const CPDF_CIDFont* pCIDFont = AsCIDFont(); | 132 const CPDF_CIDFont* pCIDFont = AsCIDFont(); |
| 133 return pCIDFont ? pCIDFont->IsVertWriting() : m_Font.IsVertical(); | 133 return pCIDFont ? pCIDFont->IsVertWriting() : m_Font.IsVertical(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 int CPDF_Font::AppendChar(FX_CHAR* buf, uint32_t charcode) const { | 136 int CPDF_Font::AppendChar(FX_CHAR* buf, uint32_t charcode) const { |
| 137 *buf = static_cast<FX_CHAR>(charcode); | 137 *buf = static_cast<FX_CHAR>(charcode); |
| 138 return 1; | 138 return 1; |
| 139 } | 139 } |
| 140 | 140 |
| 141 void CPDF_Font::AppendChar(CFX_ByteString& str, uint32_t charcode) const { | 141 void CPDF_Font::AppendChar(CFX_ByteString& str, uint32_t charcode) const { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 } | 269 } |
| 270 if (m_Ascent == 0 && m_Descent == 0) { | 270 if (m_Ascent == 0 && m_Descent == 0) { |
| 271 FX_RECT rect = GetCharBBox('A'); | 271 FX_RECT rect = GetCharBBox('A'); |
| 272 m_Ascent = rect.bottom == rect.top ? m_FontBBox.top : rect.top; | 272 m_Ascent = rect.bottom == rect.top ? m_FontBBox.top : rect.top; |
| 273 rect = GetCharBBox('g'); | 273 rect = GetCharBBox('g'); |
| 274 m_Descent = rect.bottom == rect.top ? m_FontBBox.bottom : rect.bottom; | 274 m_Descent = rect.bottom == rect.top ? m_FontBBox.bottom : rect.bottom; |
| 275 } | 275 } |
| 276 } | 276 } |
| 277 | 277 |
| 278 void CPDF_Font::LoadUnicodeMap() const { | 278 void CPDF_Font::LoadUnicodeMap() const { |
| 279 m_bToUnicodeLoaded = TRUE; | 279 m_bToUnicodeLoaded = true; |
| 280 CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode"); | 280 CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode"); |
| 281 if (!pStream) { | 281 if (!pStream) { |
| 282 return; | 282 return; |
| 283 } | 283 } |
| 284 m_pToUnicodeMap.reset(new CPDF_ToUnicodeMap); | 284 m_pToUnicodeMap.reset(new CPDF_ToUnicodeMap); |
| 285 m_pToUnicodeMap->Load(pStream); | 285 m_pToUnicodeMap->Load(pStream); |
| 286 } | 286 } |
| 287 | 287 |
| 288 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) { | 288 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) { |
| 289 int offset = 0; | 289 int offset = 0; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 if (offset < 0 || nStrLen < 1) { | 351 if (offset < 0 || nStrLen < 1) { |
| 352 return 0; | 352 return 0; |
| 353 } | 353 } |
| 354 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; | 354 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; |
| 355 return static_cast<uint32_t>(ch); | 355 return static_cast<uint32_t>(ch); |
| 356 } | 356 } |
| 357 | 357 |
| 358 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, | 358 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, |
| 359 int& iBaseEncoding, | 359 int& iBaseEncoding, |
| 360 std::vector<CFX_ByteString>* pCharNames, | 360 std::vector<CFX_ByteString>* pCharNames, |
| 361 FX_BOOL bEmbedded, | 361 bool bEmbedded, |
| 362 FX_BOOL bTrueType) { | 362 bool bTrueType) { |
| 363 if (!pEncoding) { | 363 if (!pEncoding) { |
| 364 if (m_BaseFont == "Symbol") { | 364 if (m_BaseFont == "Symbol") { |
| 365 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL | 365 iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL |
| 366 : PDFFONT_ENCODING_ADOBE_SYMBOL; | 366 : PDFFONT_ENCODING_ADOBE_SYMBOL; |
| 367 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { | 367 } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) { |
| 368 iBaseEncoding = PDFFONT_ENCODING_WINANSI; | 368 iBaseEncoding = PDFFONT_ENCODING_WINANSI; |
| 369 } | 369 } |
| 370 return; | 370 return; |
| 371 } | 371 } |
| 372 if (pEncoding->IsName()) { | 372 if (pEncoding->IsName()) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 if (CPDF_Name* pName = pElement->AsName()) { | 417 if (CPDF_Name* pName = pElement->AsName()) { |
| 418 if (cur_code < 256) | 418 if (cur_code < 256) |
| 419 (*pCharNames)[cur_code] = pName->GetString(); | 419 (*pCharNames)[cur_code] = pName->GetString(); |
| 420 cur_code++; | 420 cur_code++; |
| 421 } else { | 421 } else { |
| 422 cur_code = pElement->GetInteger(); | 422 cur_code = pElement->GetInteger(); |
| 423 } | 423 } |
| 424 } | 424 } |
| 425 } | 425 } |
| 426 | 426 |
| 427 FX_BOOL CPDF_Font::IsStandardFont() const { | 427 bool CPDF_Font::IsStandardFont() const { |
| 428 if (!IsType1Font()) | 428 if (!IsType1Font()) |
| 429 return FALSE; | 429 return false; |
| 430 if (m_pFontFile) | 430 if (m_pFontFile) |
| 431 return FALSE; | 431 return false; |
| 432 if (AsType1Font()->GetBase14Font() < 0) | 432 if (AsType1Font()->GetBase14Font() < 0) |
| 433 return FALSE; | 433 return false; |
| 434 return TRUE; | 434 return true; |
| 435 } | 435 } |
| 436 | 436 |
| 437 const FX_CHAR* CPDF_Font::GetAdobeCharName( | 437 const FX_CHAR* CPDF_Font::GetAdobeCharName( |
| 438 int iBaseEncoding, | 438 int iBaseEncoding, |
| 439 const std::vector<CFX_ByteString>& charnames, | 439 const std::vector<CFX_ByteString>& charnames, |
| 440 int charcode) { | 440 int charcode) { |
| 441 if (charcode < 0 || charcode >= 256) { | 441 if (charcode < 0 || charcode >= 256) { |
| 442 ASSERT(false); | 442 ASSERT(false); |
| 443 return nullptr; | 443 return nullptr; |
| 444 } | 444 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 466 if (fallbackFont < 0 || | 466 if (fallbackFont < 0 || |
| 467 fallbackFont >= pdfium::CollectionSize<int>(m_FontFallbacks)) { | 467 fallbackFont >= pdfium::CollectionSize<int>(m_FontFallbacks)) { |
| 468 return -1; | 468 return -1; |
| 469 } | 469 } |
| 470 int glyph = | 470 int glyph = |
| 471 FXFT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), charcode); | 471 FXFT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), charcode); |
| 472 if (glyph == 0 || glyph == 0xffff) | 472 if (glyph == 0 || glyph == 0xffff) |
| 473 return -1; | 473 return -1; |
| 474 return glyph; | 474 return glyph; |
| 475 } | 475 } |
| OLD | NEW |