// Copyright 2014 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 FPDFSDK_PDFWINDOW_PWL_FONTMAP_H_ #define FPDFSDK_PDFWINDOW_PWL_FONTMAP_H_ #include <memory> #include <vector> #include "core/fpdfdoc/ipvt_fontmap.h" #include "core/fxge/fx_font.h" #include "fpdfsdk/fxedit/fx_edit.h" #include "public/fpdf_sysfontinfo.h" class CPDF_Document; class CFX_SystemHandler; struct CPWL_FontMap_Data { CPDF_Font* pFont; int32_t nCharset; CFX_ByteString sFontName; }; struct CPWL_FontMap_Native { int32_t nCharset; CFX_ByteString sFontName; }; class CPWL_FontMap : public IPVT_FontMap { public: explicit CPWL_FontMap(CFX_SystemHandler* pSystemHandler); ~CPWL_FontMap() override; // IPVT_FontMap CPDF_Font* GetPDFFont(int32_t nFontIndex) override; CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) override; int32_t GetWordFontIndex(uint16_t word, int32_t nCharset, int32_t nFontIndex) override; int32_t CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) override; int32_t CharSetFromUnicode(uint16_t word, int32_t nOldCharset) override; const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const; static int32_t GetNativeCharset(); CFX_ByteString GetNativeFontName(int32_t nCharset); static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset); static const FPDF_CharsetFontMap defaultTTFMap[]; protected: virtual void Initialize(); virtual CPDF_Document* GetDocument(); virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset); virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); bool KnowWord(int32_t nFontIndex, uint16_t word); void Empty(); int32_t GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, bool bFind); int32_t AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset = FXFONT_DEFAULT_CHARSET); CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset); CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName); std::vector<std::unique_ptr<CPWL_FontMap_Data>> m_Data; std::vector<std::unique_ptr<CPWL_FontMap_Native>> m_NativeFont; private: int32_t FindFont(const CFX_ByteString& sFontName, int32_t nCharset = FXFONT_DEFAULT_CHARSET); CFX_ByteString GetNativeFont(int32_t nCharset); CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset); bool IsStandardFont(const CFX_ByteString& sFontName); CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName); CPDF_Font* AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset); std::unique_ptr<CPDF_Document> m_pPDFDoc; CFX_SystemHandler* const m_pSystemHandler; }; #endif // FPDFSDK_PDFWINDOW_PWL_FONTMAP_H_