1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/fpdfdoc/cpvt_fontmap.h"
8
9 #include "core/fpdfapi/font/cpdf_font.h"
10 #include "core/fpdfapi/parser/cpdf_dictionary.h"
11 #include "core/fpdfapi/parser/cpdf_document.h"
12 #include "core/fpdfapi/parser/cpdf_reference.h"
13 #include "core/fpdfdoc/cpdf_interform.h"
14 #include "core/fxcrt/fx_codepage.h"
15 #include "third_party/base/logging.h"
16
CPVT_FontMap(CPDF_Document * pDoc,CPDF_Dictionary * pResDict,CPDF_Font * pDefFont,const ByteString & sDefFontAlias)17 CPVT_FontMap::CPVT_FontMap(CPDF_Document* pDoc,
18 CPDF_Dictionary* pResDict,
19 CPDF_Font* pDefFont,
20 const ByteString& sDefFontAlias)
21 : m_pDocument(pDoc),
22 m_pResDict(pResDict),
23 m_pDefFont(pDefFont),
24 m_sDefFontAlias(sDefFontAlias) {}
25
~CPVT_FontMap()26 CPVT_FontMap::~CPVT_FontMap() {}
27
GetAnnotSysPDFFont(CPDF_Document * pDoc,const CPDF_Dictionary * pResDict,ByteString * sSysFontAlias)28 CPDF_Font* CPVT_FontMap::GetAnnotSysPDFFont(CPDF_Document* pDoc,
29 const CPDF_Dictionary* pResDict,
30 ByteString* sSysFontAlias) {
31 if (!pDoc || !pResDict)
32 return nullptr;
33
34 CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDictFor("AcroForm");
35 CPDF_Font* pPDFFont = AddNativeInterFormFont(pFormDict, pDoc, sSysFontAlias);
36 if (!pPDFFont)
37 return nullptr;
38
39 CPDF_Dictionary* pFontList = pResDict->GetDictFor("Font");
40 if (pFontList && !pFontList->KeyExist(*sSysFontAlias)) {
41 pFontList->SetNewFor<CPDF_Reference>(*sSysFontAlias, pDoc,
42 pPDFFont->GetFontDict()->GetObjNum());
43 }
44 return pPDFFont;
45 }
46
GetPDFFont(int32_t nFontIndex)47 CPDF_Font* CPVT_FontMap::GetPDFFont(int32_t nFontIndex) {
48 switch (nFontIndex) {
49 case 0:
50 return m_pDefFont.Get();
51 case 1:
52 if (!m_pSysFont) {
53 m_pSysFont = GetAnnotSysPDFFont(m_pDocument.Get(), m_pResDict.Get(),
54 &m_sSysFontAlias);
55 }
56 return m_pSysFont.Get();
57 default:
58 return nullptr;
59 }
60 }
61
GetPDFFontAlias(int32_t nFontIndex)62 ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
63 switch (nFontIndex) {
64 case 0:
65 return m_sDefFontAlias;
66 case 1:
67 if (!m_pSysFont) {
68 m_pSysFont = GetAnnotSysPDFFont(m_pDocument.Get(), m_pResDict.Get(),
69 &m_sSysFontAlias);
70 }
71 return m_sSysFontAlias;
72 default:
73 return ByteString();
74 }
75 }
76
GetWordFontIndex(uint16_t word,int32_t charset,int32_t nFontIndex)77 int32_t CPVT_FontMap::GetWordFontIndex(uint16_t word,
78 int32_t charset,
79 int32_t nFontIndex) {
80 NOTREACHED();
81 return 0;
82 }
83
CharCodeFromUnicode(int32_t nFontIndex,uint16_t word)84 int32_t CPVT_FontMap::CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) {
85 NOTREACHED();
86 return 0;
87 }
88
CharSetFromUnicode(uint16_t word,int32_t nOldCharset)89 int32_t CPVT_FontMap::CharSetFromUnicode(uint16_t word, int32_t nOldCharset) {
90 NOTREACHED();
91 return FX_CHARSET_ANSI;
92 }
93