summaryrefslogtreecommitdiff
path: root/fpdfsdk/include/pdfwindow/PWL_FontMap.h
blob: e4bbbf26640f8c25a9d96356da68062cbdf71ff0 (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
138
139
// 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 "../../../public/fpdf_sysfontinfo.h"
#include "../fxedit/fx_edit.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

#ifndef PWL_CLASS

	#ifdef FX_READER_DLL
		#define PWL_CLASS		__declspec(dllexport)
	#else
		#define PWL_CLASS
	#endif
#endif

class PWL_CLASS CPWL_FontMap : public IFX_Edit_FontMap
{
public:
	CPWL_FontMap(IFX_SystemHandler* pSystemHandler);
	virtual ~CPWL_FontMap();

	virtual CPDF_Font*							GetPDFFont(int32_t nFontIndex);
	virtual CFX_ByteString						GetPDFFontAlias(int32_t nFontIndex);
	virtual int32_t							GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex);
	virtual int32_t							CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word);
	virtual int32_t							CharSetFromUnicode(FX_WORD word, int32_t nOldCharset);

public:
	virtual void								Initial(const FX_CHAR* fontname = NULL);
	void										SetSystemHandler(IFX_SystemHandler* pSystemHandler);

	int32_t									GetFontMapCount() const;
	const CPWL_FontMap_Data*					GetFontMapData(int32_t nIndex) const;

public:
	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 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 CPDF_Font*							FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset);
	virtual void								AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
	bool										KnowWord(int32_t nFontIndex, FX_WORD word);

	virtual CPDF_Document*						GetDocument();

	void										Empty();
	int32_t									GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, bool bFind);
	int32_t									GetPWLFontIndex(FX_WORD 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 PWL_CLASS CPWL_DocFontMap : public CPWL_FontMap
{
public:
	CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc);
	virtual ~CPWL_DocFontMap();

	virtual CPDF_Document*						GetDocument();

private:
	CPDF_Document*								m_pAttachedDoc;
};

#endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_