Clean up CPDF_AnnotList.
[pdfium.git] / fpdfsdk / include / pdfwindow / PWL_FontMap.h
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 "../../../public/fpdf_sysfontinfo.h"
11 #include "../fxedit/fx_edit.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   void Initial(const FX_CHAR* fontname = NULL);
84   CPDF_Document* GetDocument();
85   CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset);
86   void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
87
88   FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word);
89
90   void Empty();
91   int32_t GetFontIndex(const CFX_ByteString& sFontName,
92                        int32_t nCharset,
93                        FX_BOOL bFind);
94   int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset);
95   int32_t AddFontData(CPDF_Font* pFont,
96                       const CFX_ByteString& sFontAlias,
97                       int32_t nCharset = DEFAULT_CHARSET);
98
99   CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName,
100                                  int32_t nCharset);
101   CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName);
102
103  private:
104   CFX_ByteString GetFontName(int32_t nFontIndex);
105   int32_t FindFont(const CFX_ByteString& sFontName,
106                    int32_t nCharset = DEFAULT_CHARSET);
107
108   CFX_ByteString GetNativeFont(int32_t nCharset);
109
110  public:
111   using CharsetFontMap = FPDF_CharsetFontMap;
112   static const CharsetFontMap defaultTTFMap[];
113
114  protected:
115   CFX_ArrayTemplate<CPWL_FontMap_Data*> m_aData;
116   CFX_ArrayTemplate<CPWL_FontMap_Native*> m_aNativeFont;
117
118  private:
119   CPDF_Document* m_pPDFDoc;
120   IFX_SystemHandler* m_pSystemHandler;
121 };
122
123 class CPWL_DocFontMap : public CPWL_FontMap {
124  public:
125   CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler,
126                   CPDF_Document* pAttachedDoc);
127   ~CPWL_DocFontMap() override;
128
129   virtual CPDF_Document* GetDocument();
130
131  private:
132   CPDF_Document* m_pAttachedDoc;
133 };
134
135 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_