// 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_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_ #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_ #include "fpdfsdk/include/fxedit/fx_edit.h" #include "public/fpdf_sysfontinfo.h" class CPDF_Document; class IFX_SystemHandler; struct CPWL_FontMap_Data { CPDF_Font* pFont; int32_t nCharset; CFX_ByteString sFontName; }; struct CPWL_FontMap_Native { int32_t nCharset; CFX_ByteString sFontName; }; #ifndef ANSI_CHARSET #define ANSI_CHARSET 0 #define DEFAULT_CHARSET 1 #define SYMBOL_CHARSET 2 #define SHIFTJIS_CHARSET 128 #define HANGEUL_CHARSET 129 #define HANGUL_CHARSET 129 #define GB2312_CHARSET 134 #define CHINESEBIG5_CHARSET 136 #define OEM_CHARSET 255 #define JOHAB_CHARSET 130 #define HEBREW_CHARSET 177 #define ARABIC_CHARSET 178 #define GREEK_CHARSET 161 #define TURKISH_CHARSET 162 #define VIETNAMESE_CHARSET 163 #define THAI_CHARSET 222 #define EASTEUROPE_CHARSET 238 #define RUSSIAN_CHARSET 204 #define BALTIC_CHARSET 186 #endif class CPWL_FontMap : public IFX_Edit_FontMap { public: CPWL_FontMap(IFX_SystemHandler* pSystemHandler); ~CPWL_FontMap() override; // IFX_Edit_FontMap CPDF_Font* GetPDFFont(int32_t nFontIndex) override; CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) override; int32_t GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex) override; int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) override; int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) override; void SetSystemHandler(IFX_SystemHandler* pSystemHandler); int32_t GetFontMapCount() const; 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); CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset); static FX_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); protected: void Initial(const FX_CHAR* fontname = NULL); CPDF_Document* GetDocument(); CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset); void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word); void Empty(); int32_t GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, FX_BOOL bFind); int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset); int32_t AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset = DEFAULT_CHARSET); CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset); CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName); private: CFX_ByteString GetFontName(int32_t nFontIndex); int32_t FindFont(const CFX_ByteString& sFontName, int32_t nCharset = DEFAULT_CHARSET); CFX_ByteString GetNativeFont(int32_t nCharset); public: using CharsetFontMap = FPDF_CharsetFontMap; static const CharsetFontMap defaultTTFMap[]; protected: CFX_ArrayTemplate<CPWL_FontMap_Data*> m_aData; CFX_ArrayTemplate<CPWL_FontMap_Native*> m_aNativeFont; private: CPDF_Document* m_pPDFDoc; IFX_SystemHandler* m_pSystemHandler; }; class CPWL_DocFontMap : public CPWL_FontMap { public: CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc); ~CPWL_DocFontMap() override; virtual CPDF_Document* GetDocument(); private: CPDF_Document* m_pAttachedDoc; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_