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