Home | History | Annotate | Download | only in pdfwindow
      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 FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_
      8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_
      9 
     10 #include "fpdfsdk/include/fxedit/fx_edit.h"
     11 #include "public/fpdf_sysfontinfo.h"
     12 
     13 class CPDF_Document;
     14 class IFX_SystemHandler;
     15 
     16 struct CPWL_FontMap_Data {
     17   CPDF_Font* pFont;
     18   int32_t nCharset;
     19   CFX_ByteString sFontName;
     20 };
     21 
     22 struct CPWL_FontMap_Native {
     23   int32_t nCharset;
     24   CFX_ByteString sFontName;
     25 };
     26 
     27 #ifndef ANSI_CHARSET
     28 
     29 #define ANSI_CHARSET 0
     30 #define DEFAULT_CHARSET 1
     31 #define SYMBOL_CHARSET 2
     32 #define SHIFTJIS_CHARSET 128
     33 #define HANGEUL_CHARSET 129
     34 #define HANGUL_CHARSET 129
     35 #define GB2312_CHARSET 134
     36 #define CHINESEBIG5_CHARSET 136
     37 #define OEM_CHARSET 255
     38 #define JOHAB_CHARSET 130
     39 #define HEBREW_CHARSET 177
     40 #define ARABIC_CHARSET 178
     41 #define GREEK_CHARSET 161
     42 #define TURKISH_CHARSET 162
     43 #define VIETNAMESE_CHARSET 163
     44 #define THAI_CHARSET 222
     45 #define EASTEUROPE_CHARSET 238
     46 #define RUSSIAN_CHARSET 204
     47 #define BALTIC_CHARSET 186
     48 
     49 #endif
     50 
     51 class CPWL_FontMap : public IFX_Edit_FontMap {
     52  public:
     53   CPWL_FontMap(IFX_SystemHandler* pSystemHandler);
     54   ~CPWL_FontMap() override;
     55 
     56   // IFX_Edit_FontMap
     57   CPDF_Font* GetPDFFont(int32_t nFontIndex) override;
     58   CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) override;
     59   int32_t GetWordFontIndex(FX_WORD word,
     60                            int32_t nCharset,
     61                            int32_t nFontIndex) override;
     62   int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) override;
     63   int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) override;
     64 
     65   void SetSystemHandler(IFX_SystemHandler* pSystemHandler);
     66   int32_t GetFontMapCount() const;
     67   const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const;
     68   static int32_t GetNativeCharset();
     69   CFX_ByteString GetNativeFontName(int32_t nCharset);
     70 
     71   static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset);
     72 
     73   CPDF_Font* AddFontToDocument(CPDF_Document* pDoc,
     74                                CFX_ByteString& sFontName,
     75                                uint8_t nCharset);
     76   static FX_BOOL IsStandardFont(const CFX_ByteString& sFontName);
     77   CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName);
     78   CPDF_Font* AddSystemFont(CPDF_Document* pDoc,
     79                            CFX_ByteString& sFontName,
     80                            uint8_t nCharset);
     81 
     82  protected:
     83   virtual void Initialize();
     84   virtual CPDF_Document* GetDocument();
     85   virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias,
     86                                          int32_t nCharset);
     87   virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
     88 
     89   FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word);
     90 
     91   void Empty();
     92   int32_t GetFontIndex(const CFX_ByteString& sFontName,
     93                        int32_t nCharset,
     94                        FX_BOOL bFind);
     95   int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset);
     96   int32_t AddFontData(CPDF_Font* pFont,
     97                       const CFX_ByteString& sFontAlias,
     98                       int32_t nCharset = DEFAULT_CHARSET);
     99 
    100   CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName,
    101                                  int32_t nCharset);
    102   CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName);
    103 
    104  private:
    105   CFX_ByteString GetFontName(int32_t nFontIndex);
    106   int32_t FindFont(const CFX_ByteString& sFontName,
    107                    int32_t nCharset = DEFAULT_CHARSET);
    108 
    109   CFX_ByteString GetNativeFont(int32_t nCharset);
    110 
    111  public:
    112   using CharsetFontMap = FPDF_CharsetFontMap;
    113   static const CharsetFontMap defaultTTFMap[];
    114 
    115  protected:
    116   CFX_ArrayTemplate<CPWL_FontMap_Data*> m_aData;
    117   CFX_ArrayTemplate<CPWL_FontMap_Native*> m_aNativeFont;
    118 
    119  private:
    120   CPDF_Document* m_pPDFDoc;
    121   IFX_SystemHandler* m_pSystemHandler;
    122 };
    123 
    124 class CPWL_DocFontMap : public CPWL_FontMap {
    125  public:
    126   CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler,
    127                   CPDF_Document* pAttachedDoc);
    128   ~CPWL_DocFontMap() override;
    129 
    130  private:
    131   // CPWL_FontMap:
    132   CPDF_Document* GetDocument() override;
    133 
    134   CPDF_Document* m_pAttachedDoc;
    135 };
    136 
    137 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_
    138