Chromium Code Reviews| Index: core/fpdfdoc/cpvt_fontmap.cpp |
| diff --git a/core/fpdfdoc/cpvt_fontmap.cpp b/core/fpdfdoc/cpvt_fontmap.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..72d7497aad85df6d65cd5beb0ff71b92ef038e43 |
| --- /dev/null |
| +++ b/core/fpdfdoc/cpvt_fontmap.cpp |
| @@ -0,0 +1,73 @@ |
| +// Copyright 2016 PDFium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| + |
| +#include "core/fpdfdoc/cpvt_fontmap.h" |
| + |
| +#include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
| +#include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| +#include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
| +#include "core/fpdfdoc/doc_utils.h" |
| + |
| +CPVT_FontMap::CPVT_FontMap(CPDF_Document* pDoc, |
| + CPDF_Dictionary* pResDict, |
| + CPDF_Font* pDefFont, |
| + const CFX_ByteString& sDefFontAlias) |
| + : m_pDocument(pDoc), |
| + m_pResDict(pResDict), |
| + m_pDefFont(pDefFont), |
| + m_sDefFontAlias(sDefFontAlias), |
| + m_pSysFont(nullptr), |
| + m_sSysFontAlias() {} |
| + |
| +CPVT_FontMap::~CPVT_FontMap() {} |
| + |
| +void CPVT_FontMap::GetAnnotSysPDFFont(CPDF_Document* pDoc, |
| + CPDF_Dictionary* pResDict, |
| + CPDF_Font*& pSysFont, |
| + CFX_ByteString& sSysFontAlias) { |
| + if (pDoc && pResDict) { |
|
Tom Sepez
2016/03/30 17:19:52
nit: prefer early return
dsinclair
2016/03/30 18:41:19
Done.
|
| + CFX_ByteString sFontAlias; |
| + CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDictBy("AcroForm"); |
| + if (CPDF_Font* pPDFFont = |
| + AddNativeInterFormFont(pFormDict, pDoc, sSysFontAlias)) { |
| + if (CPDF_Dictionary* pFontList = pResDict->GetDictBy("Font")) { |
| + if (!pFontList->KeyExist(sSysFontAlias)) { |
| + pFontList->SetAtReference(sSysFontAlias, pDoc, |
| + pPDFFont->GetFontDict()); |
| + } |
| + } |
| + pSysFont = pPDFFont; |
| + } |
| + } |
| +} |
| + |
| +CPDF_Font* CPVT_FontMap::GetPDFFont(int32_t nFontIndex) { |
| + switch (nFontIndex) { |
| + case 0: |
| + return m_pDefFont; |
| + case 1: |
| + if (!m_pSysFont) { |
| + GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont, |
| + m_sSysFontAlias); |
| + } |
| + return m_pSysFont; |
| + } |
| + return nullptr; |
|
Tom Sepez
2016/03/30 17:19:52
nit: maybe this becomes default: and there's no ne
dsinclair
2016/03/30 18:41:19
Done.
|
| +} |
| + |
| +CFX_ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex) { |
| + switch (nFontIndex) { |
| + case 0: |
| + return m_sDefFontAlias; |
| + case 1: |
| + if (!m_pSysFont) { |
| + GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont, |
| + m_sSysFontAlias); |
| + } |
| + return m_sSysFontAlias; |
|
Tom Sepez
2016/03/30 17:19:52
ditto
dsinclair
2016/03/30 18:41:19
Done.
|
| + } |
| + return ""; |
| +} |