| 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..529f85169e569e37d90a90f5983aa656df8de8c7 | 
| --- /dev/null | 
| +++ b/core/fpdfdoc/cpvt_fontmap.cpp | 
| @@ -0,0 +1,75 @@ | 
| +// 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, | 
| +                                      const CPDF_Dictionary* pResDict, | 
| +                                      CPDF_Font*& pSysFont, | 
| +                                      CFX_ByteString& sSysFontAlias) { | 
| +  if (!pDoc || !pResDict) | 
| +    return; | 
| + | 
| +  CFX_ByteString sFontAlias; | 
| +  CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDictBy("AcroForm"); | 
| +  CPDF_Font* pPDFFont = AddNativeInterFormFont(pFormDict, pDoc, sSysFontAlias); | 
| +  if (!pPDFFont) | 
| +    return; | 
| + | 
| +  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; | 
| +    default: | 
| +      return nullptr; | 
| +  } | 
| +} | 
| + | 
| +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; | 
| +    default: | 
| +      return ""; | 
| +  } | 
| +} | 
|  |