Home | History | Annotate | Download | only in app
      1 // Copyright 2014 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 #ifndef _FXFA_FORMFILLER_FONTMGR_IMP_H
      8 #define _FXFA_FORMFILLER_FONTMGR_IMP_H
      9 struct XFA_FONTINFO {
     10   FX_DWORD dwFontNameHash;
     11   const FX_WCHAR* pPsName;
     12   const FX_WCHAR* pReplaceFont;
     13   FX_WORD dwStyles;
     14   FX_WORD wCodePage;
     15 };
     16 class CXFA_DefFontMgr : public IXFA_FontMgr {
     17  public:
     18   CXFA_DefFontMgr() {}
     19   ~CXFA_DefFontMgr() override;
     20 
     21   // IXFA_FontMgr:
     22   IFX_Font* GetFont(IXFA_Doc* hDoc,
     23                     const CFX_WideStringC& wsFontFamily,
     24                     FX_DWORD dwFontStyles,
     25                     FX_WORD wCodePage = 0xFFFF) override;
     26   IFX_Font* GetDefaultFont(IXFA_Doc* hDoc,
     27                            const CFX_WideStringC& wsFontFamily,
     28                            FX_DWORD dwFontStyles,
     29                            FX_WORD wCodePage = 0xFFFF) override;
     30 
     31  protected:
     32   CFX_PtrArray m_CacheFonts;
     33 };
     34 class CXFA_PDFFontMgr : public IFX_FontProvider {
     35  public:
     36   CXFA_PDFFontMgr(CXFA_FFDoc* pDoc);
     37   ~CXFA_PDFFontMgr();
     38   IFX_Font* GetFont(const CFX_WideStringC& wsFontFamily,
     39                     FX_DWORD dwFontStyles,
     40                     CPDF_Font** pPDFFont,
     41                     FX_BOOL bStrictMatch = TRUE);
     42   FX_BOOL GetCharWidth(IFX_Font* pFont,
     43                        FX_WCHAR wUnicode,
     44                        int32_t& iWidth,
     45                        FX_BOOL bCharCode);
     46   CFX_MapPtrToPtr m_FDE2PDFFont;
     47 
     48  protected:
     49   IFX_Font* FindFont(CFX_ByteString strFamilyName,
     50                      FX_BOOL bBold,
     51                      FX_BOOL bItalic,
     52                      CPDF_Font** pPDFFont,
     53                      FX_BOOL bStrictMatch = TRUE);
     54   CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName,
     55                                   FX_BOOL bBold,
     56                                   FX_BOOL bItalic);
     57   FX_BOOL PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName,
     58                                 FX_BOOL bBold,
     59                                 FX_BOOL bItalic,
     60                                 const CFX_ByteString& bsDRFontName,
     61                                 FX_BOOL bStrictMatch = TRUE);
     62   CXFA_FFDoc* m_pDoc;
     63   CFX_CMapByteStringToPtr m_FontArray;
     64 };
     65 class CXFA_FontMgr {
     66  public:
     67   CXFA_FontMgr();
     68   ~CXFA_FontMgr();
     69   IFX_Font* GetFont(IXFA_Doc* hDoc,
     70                     const CFX_WideStringC& wsFontFamily,
     71                     FX_DWORD dwFontStyles,
     72                     FX_WORD wCodePage = 0xFFFF);
     73   void LoadDocFonts(IXFA_Doc* hDoc);
     74   void ReleaseDocFonts(IXFA_Doc* hDoc);
     75 
     76   void SetDefFontMgr(IXFA_FontMgr* pFontMgr);
     77 
     78  protected:
     79   void DelAllMgrMap();
     80   CFX_MapPtrToPtr m_PDFFontMgrArray;
     81   IXFA_FontMgr* m_pDefFontMgr;
     82   CFX_CMapByteStringToPtr m_FontArray;
     83 };
     84 #endif
     85