// 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_PWL_CPWL_FONT_MAP_H_ #define FPDFSDK_PWL_CPWL_FONT_MAP_H_ #include #include #include "core/fpdfdoc/ipvt_fontmap.h" #include "core/fxcrt/fx_codepage.h" #include "public/fpdf_sysfontinfo.h" class CPDF_Document; class CFX_SystemHandler; struct CPWL_FontMap_Data { CPDF_Font* pFont; int32_t nCharset; ByteString sFontName; }; struct CPWL_FontMap_Native { int32_t nCharset; 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; 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(); ByteString GetNativeFontName(int32_t nCharset); protected: virtual void Initialize(); virtual CPDF_Document* GetDocument() = 0; virtual CPDF_Font* FindFontSameCharset(ByteString* sFontAlias, int32_t nCharset) = 0; virtual void AddedFont(CPDF_Font* pFont, const ByteString& sFontAlias) = 0; bool KnowWord(int32_t nFontIndex, uint16_t word); void Empty(); int32_t GetFontIndex(const ByteString& sFontName, int32_t nCharset, bool bFind); int32_t AddFontData(CPDF_Font* pFont, const ByteString& sFontAlias, int32_t nCharset); ByteString EncodeFontAlias(const ByteString& sFontName, int32_t nCharset); ByteString EncodeFontAlias(const ByteString& sFontName); std::vector> m_Data; std::vector> m_NativeFont; private: int32_t FindFont(const ByteString& sFontName, int32_t nCharset); ByteString GetNativeFont(int32_t nCharset); CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, ByteString& sFontName, uint8_t nCharset); bool IsStandardFont(const ByteString& sFontName); CPDF_Font* AddStandardFont(CPDF_Document* pDoc, ByteString& sFontName); CPDF_Font* AddSystemFont(CPDF_Document* pDoc, ByteString& sFontName, uint8_t nCharset); UnownedPtr const m_pSystemHandler; }; #endif // FPDFSDK_PWL_CPWL_FONT_MAP_H_