|  | // 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 | 
|  |  | 
|  | #ifndef CORE_FXGE_CFX_FONTMAPPER_H_ | 
|  | #define CORE_FXGE_CFX_FONTMAPPER_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <utility> | 
|  | #include <vector> | 
|  |  | 
|  | #include "core/fxcrt/fx_memory_wrappers.h" | 
|  | #include "core/fxcrt/fx_string.h" | 
|  | #include "core/fxcrt/unowned_ptr.h" | 
|  | #include "core/fxge/cfx_face.h" | 
|  | #include "third_party/base/optional.h" | 
|  |  | 
|  | class CFX_FontMgr; | 
|  | class CFX_SubstFont; | 
|  | class SystemFontInfoIface; | 
|  |  | 
|  | class CFX_FontMapper { | 
|  | public: | 
|  | enum StandardFont : uint8_t { | 
|  | kCourier = 0, | 
|  | kCourierBold, | 
|  | kCourierBoldOblique, | 
|  | kCourierOblique, | 
|  | kHelvetica, | 
|  | kHelveticaBold, | 
|  | kHelveticaBoldOblique, | 
|  | kHelveticaOblique, | 
|  | kTimes, | 
|  | kTimesBold, | 
|  | kTimesBoldOblique, | 
|  | kTimesOblique, | 
|  | kSymbol, | 
|  | kDingbats, | 
|  | }; | 
|  |  | 
|  | explicit CFX_FontMapper(CFX_FontMgr* mgr); | 
|  | ~CFX_FontMapper(); | 
|  |  | 
|  | static Optional<StandardFont> GetStandardFontName(ByteString* name); | 
|  | static bool IsSymbolicFont(StandardFont font); | 
|  | static bool IsFixedFont(StandardFont font); | 
|  | static constexpr uint32_t MakeTag(char c1, char c2, char c3, char c4) { | 
|  | return static_cast<uint8_t>(c1) << 24 | static_cast<uint8_t>(c2) << 16 | | 
|  | static_cast<uint8_t>(c3) << 8 | static_cast<uint8_t>(c4); | 
|  | } | 
|  |  | 
|  | void SetSystemFontInfo(std::unique_ptr<SystemFontInfoIface> pFontInfo); | 
|  | void AddInstalledFont(const ByteString& name, int charset); | 
|  | void LoadInstalledFonts(); | 
|  |  | 
|  | RetainPtr<CFX_Face> FindSubstFont(const ByteString& face_name, | 
|  | bool bTrueType, | 
|  | uint32_t flags, | 
|  | int weight, | 
|  | int italic_angle, | 
|  | int CharsetCP, | 
|  | CFX_SubstFont* pSubstFont); | 
|  |  | 
|  | bool IsBuiltinFace(const RetainPtr<CFX_Face>& face) const; | 
|  | int GetFaceSize() const; | 
|  | ByteString GetFaceName(int index) const { return m_FaceArray[index].name; } | 
|  |  | 
|  | #ifdef PDF_ENABLE_XFA | 
|  | std::unique_ptr<uint8_t, FxFreeDeleter> RawBytesForIndex( | 
|  | uint32_t index, | 
|  | size_t* returned_length); | 
|  | #endif  // PDF_ENABLE_XFA | 
|  |  | 
|  | std::vector<ByteString> m_InstalledTTFonts; | 
|  | std::vector<std::pair<ByteString, ByteString>> m_LocalizedTTFonts; | 
|  |  | 
|  | private: | 
|  | static constexpr size_t MM_FACE_COUNT = 2; | 
|  | static constexpr size_t FOXIT_FACE_COUNT = 14; | 
|  |  | 
|  | uint32_t GetChecksumFromTT(void* hFont); | 
|  | ByteString GetPSNameFromTT(void* hFont); | 
|  | ByteString MatchInstalledFonts(const ByteString& norm_name); | 
|  | RetainPtr<CFX_Face> UseInternalSubst(CFX_SubstFont* pSubstFont, | 
|  | int iBaseFont, | 
|  | int italic_angle, | 
|  | int weight, | 
|  | int pitch_family); | 
|  | RetainPtr<CFX_Face> GetCachedTTCFace(void* hFont, | 
|  | uint32_t ttc_size, | 
|  | uint32_t font_size); | 
|  | RetainPtr<CFX_Face> GetCachedFace(void* hFont, | 
|  | ByteString SubstName, | 
|  | int weight, | 
|  | bool bItalic, | 
|  | uint32_t font_size); | 
|  |  | 
|  | struct FaceData { | 
|  | ByteString name; | 
|  | uint32_t charset; | 
|  | }; | 
|  |  | 
|  | bool m_bListLoaded = false; | 
|  | ByteString m_LastFamily; | 
|  | std::vector<FaceData> m_FaceArray; | 
|  | std::unique_ptr<SystemFontInfoIface> m_pFontInfo; | 
|  | UnownedPtr<CFX_FontMgr> const m_pFontMgr; | 
|  | RetainPtr<CFX_Face> m_MMFaces[MM_FACE_COUNT]; | 
|  | RetainPtr<CFX_Face> m_FoxitFaces[FOXIT_FACE_COUNT]; | 
|  | }; | 
|  |  | 
|  | #endif  // CORE_FXGE_CFX_FONTMAPPER_H_ |