summaryrefslogtreecommitdiff
path: root/fpdfsdk/include/pdfwindow/PWL_FontMap.h
blob: a913571960f1b13d01158a3a9f8737723eba2cce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// 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(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;

  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:
  virtual void Initialize();
  virtual CPDF_Document* GetDocument();
  virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias,
                                         int32_t nCharset);
  virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);

  FX_BOOL KnowWord(int32_t nFontIndex, uint16_t word);

  void Empty();
  int32_t GetFontIndex(const CFX_ByteString& sFontName,
                       int32_t nCharset,
                       FX_BOOL bFind);
  int32_t GetPWLFontIndex(uint16_t 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;

 private:
  // CPWL_FontMap:
  CPDF_Document* GetDocument() override;

  CPDF_Document* m_pAttachedDoc;
};

#endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_