Clean up CPDF_AnnotList.
[pdfium.git] / core / src / fpdfapi / fpdf_font / font_int.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 CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
8 #define CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
9
10 #include <map>
11
12 #include "../../../include/fxcrt/fx_basic.h"
13 #include "../../../include/fpdfapi/fpdf_resource.h"
14
15 class CPDF_CID2UnicodeMap;
16 class CPDF_CMap;
17 class CPDF_Font;
18 class CPDF_Stream;
19
20 typedef void* FXFT_Library;
21
22 short TT2PDF(int m, FXFT_Face face);
23 FX_BOOL FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id);
24
25 class CPDF_CMapManager {
26  public:
27   CPDF_CMapManager();
28   ~CPDF_CMapManager();
29   void* GetPackage(FX_BOOL bPrompt);
30   CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPromptCJK);
31   CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset, FX_BOOL bPromptCJK);
32   void ReloadAll();
33
34  private:
35   CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPromptCJK);
36   CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(CIDSet charset, FX_BOOL bPromptCJK);
37
38   FX_BOOL m_bPrompted;
39   std::map<CFX_ByteString, CPDF_CMap*> m_CMaps;
40   CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6];
41 };
42 class CPDF_FontGlobals {
43  public:
44   CPDF_FontGlobals();
45   ~CPDF_FontGlobals();
46   void ClearAll();
47   void Clear(void* key);
48   CPDF_Font* Find(void* key, int index);
49   void Set(void* key, int index, CPDF_Font* pFont);
50   CPDF_CMapManager m_CMapManager;
51   struct {
52     const struct FXCMAP_CMap* m_pMapList;
53     int m_Count;
54   } m_EmbeddedCharsets[CIDSET_NUM_SETS];
55   struct {
56     const FX_WORD* m_pMap;
57     int m_Count;
58   } m_EmbeddedToUnicodes[CIDSET_NUM_SETS];
59
60  private:
61   CFX_MapPtrToPtr m_pStockMap;
62   uint8_t* m_pContrastRamps;
63 };
64
65 struct CMap_CodeRange {
66   int m_CharSize;
67   uint8_t m_Lower[4];
68   uint8_t m_Upper[4];
69 };
70
71 class CPDF_CMapParser {
72  public:
73   CPDF_CMapParser();
74   ~CPDF_CMapParser() {}
75   FX_BOOL Initialize(CPDF_CMap*);
76   void ParseWord(const CFX_ByteStringC& str);
77   CFX_BinaryBuf m_AddMaps;
78
79  private:
80   CPDF_CMap* m_pCMap;
81   int m_Status;
82   int m_CodeSeq;
83   FX_DWORD m_CodePoints[4];
84   CFX_ArrayTemplate<CMap_CodeRange> m_CodeRanges;
85   CFX_ByteString m_Registry, m_Ordering, m_Supplement;
86   CFX_ByteString m_LastWord;
87 };
88 #define CIDCODING_UNKNOWN 0
89 #define CIDCODING_GB 1
90 #define CIDCODING_BIG5 2
91 #define CIDCODING_JIS 3
92 #define CIDCODING_KOREA 4
93 #define CIDCODING_UCS2 5
94 #define CIDCODING_CID 6
95 #define CIDCODING_UTF16 7
96 class CPDF_CMap {
97  public:
98   CPDF_CMap();
99   FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr,
100                          const FX_CHAR* name,
101                          FX_BOOL bPromptCJK);
102   FX_BOOL LoadEmbedded(const uint8_t* pData, FX_DWORD dwSize);
103   void Release();
104   FX_BOOL IsLoaded() const { return m_bLoaded; }
105   FX_BOOL IsVertWriting() const { return m_bVertical; }
106   FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
107   FX_DWORD CharCodeFromCID(FX_WORD CID) const;
108   int GetCharSize(FX_DWORD charcode) const;
109   FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const;
110   int CountChar(const FX_CHAR* pString, int size) const;
111   int AppendChar(FX_CHAR* str, FX_DWORD charcode) const;
112   typedef enum {
113     OneByte,
114     TwoBytes,
115     MixedTwoBytes,
116     MixedFourBytes
117   } CodingScheme;
118
119  protected:
120   ~CPDF_CMap();
121   friend class CPDF_CMapParser;
122   friend class CPDF_CMapManager;
123   friend class CPDF_CIDFont;
124
125  protected:
126   CFX_ByteString m_PredefinedCMap;
127   FX_BOOL m_bVertical;
128   CIDSet m_Charset;
129   int m_Coding;
130   CodingScheme m_CodingScheme;
131   int m_nCodeRanges;
132   uint8_t* m_pLeadingBytes;
133   FX_WORD* m_pMapping;
134   uint8_t* m_pAddMapping;
135   FX_BOOL m_bLoaded;
136   const FXCMAP_CMap* m_pEmbedMap;
137   CPDF_CMap* m_pUseMap;
138 };
139
140 typedef struct _FileHeader {
141   uint8_t btTag[4];
142   uint8_t btVersion;
143   uint8_t btFormat;
144   uint8_t btReserved1[2];
145   FX_DWORD dwStartIndex;
146   FX_DWORD dwEndIndex;
147   FX_DWORD dwDataSize;
148   FX_DWORD dwDataOffset;
149   FX_DWORD dwRecordSize;
150 } FXMP_FILEHEADER;
151
152 class CPDF_CID2UnicodeMap {
153  public:
154   CPDF_CID2UnicodeMap();
155   ~CPDF_CID2UnicodeMap();
156   FX_BOOL Initialize();
157   FX_BOOL IsLoaded();
158   void Load(CPDF_CMapManager* pMgr, CIDSet charset, FX_BOOL bPromptCJK);
159   FX_WCHAR UnicodeFromCID(FX_WORD CID);
160
161  protected:
162   CIDSet m_Charset;
163   const FX_WORD* m_pEmbeddedMap;
164   FX_DWORD m_EmbeddedCount;
165 };
166
167 class CPDF_ToUnicodeMap {
168  public:
169   void Load(CPDF_Stream* pStream);
170   CFX_WideString Lookup(FX_DWORD charcode);
171   FX_DWORD ReverseLookup(FX_WCHAR unicode);
172
173  protected:
174   std::map<FX_DWORD, FX_DWORD> m_Map;
175   CPDF_CID2UnicodeMap* m_pBaseMap;
176   CFX_WideTextBuf m_MultiCharBuf;
177 };
178 class CPDF_FontCharMap : public CFX_CharMap {
179  public:
180   CPDF_FontCharMap(CPDF_Font* pFont);
181   CPDF_Font* m_pFont;
182 };
183
184 void FPDFAPI_LoadCID2UnicodeMap(CIDSet charset,
185                                 const FX_WORD*& pMap,
186                                 FX_DWORD& count);
187
188 #endif  // CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_