Initial commit.
[pdfium.git] / core / src / fpdfapi / fpdf_font / font_int.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4  \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 typedef void* FXFT_Library;\r
8 class CPDF_CMapManager : public CFX_Object\r
9 {\r
10 public:\r
11     CPDF_CMapManager();\r
12     ~CPDF_CMapManager();\r
13     FX_LPVOID                           GetPackage(FX_BOOL bPrompt);\r
14     CPDF_CMap*                          GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);\r
15     CPDF_CID2UnicodeMap*        GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);\r
16     void                                        ReloadAll();\r
17 private:\r
18     CPDF_CMap*                          LoadPredefinedCMap(const CFX_ByteString& name,  FX_BOOL bPrompt);\r
19     CPDF_CID2UnicodeMap*        LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);\r
20     void                                        DropAll(FX_BOOL bReload);\r
21 #ifndef _FPDFAPI_MINI_\r
22     FX_BOOL                                     m_bPrompted;\r
23     FX_LPVOID                           m_pPackage;\r
24 #endif\r
25     CFX_MapByteStringToPtr      m_CMaps;\r
26     CPDF_CID2UnicodeMap*        m_CID2UnicodeMaps[6];\r
27 };\r
28 class CPDF_FontGlobals : public CFX_Object\r
29 {\r
30 public:\r
31     CPDF_FontGlobals();\r
32     ~CPDF_FontGlobals();\r
33     void                                ClearAll();\r
34     void                                Clear(void* key);\r
35     CPDF_Font*                  Find(void* key, int index);\r
36     void                                Set(void* key, int index, CPDF_Font* pFont);\r
37     CFX_MapPtrToPtr             m_pStockMap;\r
38     CPDF_CMapManager    m_CMapManager;\r
39     struct {\r
40         const struct FXCMAP_CMap*       m_pMapList;\r
41         int                             m_Count;\r
42     } m_EmbeddedCharsets[5];\r
43     struct {\r
44         const FX_WORD*  m_pMap;\r
45         int                             m_Count;\r
46     } m_EmbeddedToUnicodes[5];\r
47     FX_LPBYTE                   m_pContrastRamps;\r
48 };\r
49 struct _CMap_CodeRange {\r
50     int                 m_CharSize;\r
51     FX_BYTE             m_Lower[4];\r
52     FX_BYTE             m_Upper[4];\r
53 };\r
54 class CPDF_CMapParser : public CFX_Object\r
55 {\r
56 public:\r
57     CPDF_CMapParser();\r
58     ~CPDF_CMapParser() {}\r
59     FX_BOOL     Initialize(CPDF_CMap*);\r
60     void        ParseWord(FX_BSTR str);\r
61     CFX_BinaryBuf       m_AddMaps;\r
62 private:\r
63     CPDF_CMap*  m_pCMap;\r
64     int                         m_Status;\r
65     int                         m_CodeSeq;\r
66     FX_DWORD            m_CodePoints[4];\r
67     CFX_ArrayTemplate<_CMap_CodeRange>  m_CodeRanges;\r
68     CFX_ByteString      m_Registry, m_Ordering, m_Supplement;\r
69     CFX_ByteString      m_LastWord;\r
70 };\r
71 #define CIDCODING_UNKNOWN       0\r
72 #define CIDCODING_GB            1\r
73 #define CIDCODING_BIG5          2\r
74 #define CIDCODING_JIS           3\r
75 #define CIDCODING_KOREA         4\r
76 #define CIDCODING_UCS2          5\r
77 #define CIDCODING_CID           6\r
78 #define CIDCODING_UTF16         7\r
79 class CPDF_CMap : public CFX_Object\r
80 {\r
81 public:\r
82     CPDF_CMap();\r
83     FX_BOOL                                     LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK);\r
84     FX_BOOL                                     LoadEmbedded(FX_LPCBYTE pData, FX_DWORD dwSize);\r
85     void                                        Release();\r
86     FX_BOOL                                     IsLoaded() const\r
87     {\r
88         return m_bLoaded;\r
89     }\r
90     int                                         GetCharset()\r
91     {\r
92         return m_Charset;\r
93     }\r
94     FX_BOOL                                     IsVertWriting() const\r
95     {\r
96         return m_bVertical;\r
97     }\r
98     FX_WORD                                     CIDFromCharCode(FX_DWORD charcode) const;\r
99     FX_DWORD                            CharCodeFromCID(FX_WORD CID) const;\r
100     int                                         GetCharSize(FX_DWORD charcode) const;\r
101     FX_DWORD                            GetNextChar(const FX_CHAR* pString, int& offset) const;\r
102     int                                         CountChar(const FX_CHAR* pString, int size) const;\r
103     int                                         AppendChar(FX_LPSTR str, FX_DWORD charcode) const;\r
104     typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme;\r
105 protected:\r
106     ~CPDF_CMap();\r
107     friend class                        CPDF_CMapParser;\r
108     friend class                        CPDF_CMapManager;\r
109     friend class                        CPDF_CIDFont;\r
110 protected:\r
111     CFX_ByteString                      m_PredefinedCMap;\r
112     FX_BOOL                                     m_bVertical;\r
113     int                                         m_Charset, m_Coding;\r
114     CodingScheme                        m_CodingScheme;\r
115     int                                         m_nCodeRanges;\r
116     FX_BYTE*                            m_pLeadingBytes;\r
117     FX_WORD*                            m_pMapping;\r
118     FX_LPBYTE                           m_pAddMapping;\r
119     FX_BOOL                                     m_bLoaded;\r
120     const FXCMAP_CMap*          m_pEmbedMap;\r
121     CPDF_CMap*                          m_pUseMap;\r
122 };\r
123 class CPDF_PredefinedCMap\r
124 {\r
125 public:\r
126     FX_LPCSTR   m_pName;\r
127     int                 m_Charset;\r
128     int                 m_Coding;\r
129     CPDF_CMap::CodingScheme     m_CodingScheme;\r
130     FX_DWORD    m_LeadingSegCount;\r
131     FX_BYTE             m_LeadingSegs[4];\r
132 };\r
133 typedef struct _FileHeader {\r
134     FX_BYTE             btTag[4];\r
135     FX_BYTE             btVersion;\r
136     FX_BYTE             btFormat;\r
137     FX_BYTE             btReserved1[2];\r
138     FX_DWORD    dwStartIndex;\r
139     FX_DWORD    dwEndIndex;\r
140     FX_DWORD    dwDataSize;\r
141     FX_DWORD    dwDataOffset;\r
142     FX_DWORD    dwRecordSize;\r
143 } FXMP_FILEHEADER;\r
144 class CPDF_FXMP : public CFX_Object\r
145 {\r
146 public:\r
147     CPDF_FXMP()\r
148     {\r
149         m_pHeader = NULL;\r
150         m_pTable = NULL;\r
151     }\r
152     ~CPDF_FXMP()\r
153     {\r
154         if (m_pHeader) {\r
155             FX_Free(m_pHeader);\r
156         }\r
157     }\r
158     FX_BOOL             IsLoaded()\r
159     {\r
160         return m_pTable != NULL;\r
161     }\r
162     FX_BOOL             LoadFile(FX_LPVOID pPackage, FX_LPCSTR fileid);\r
163     FX_LPBYTE   GetRecord(FX_DWORD index);\r
164 private:\r
165     FXMP_FILEHEADER*    m_pHeader;\r
166     FX_LPBYTE   m_pTable;\r
167 };\r
168 class CPDF_CID2UnicodeMap : public CFX_Object\r
169 {\r
170 public:\r
171     CPDF_CID2UnicodeMap();\r
172     ~CPDF_CID2UnicodeMap();\r
173     FX_BOOL             Initialize();\r
174     FX_BOOL             IsLoaded();\r
175     void                Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);\r
176     FX_WCHAR    UnicodeFromCID(FX_WORD CID);\r
177 protected:\r
178     int                 m_Charset;\r
179     const FX_WORD*      m_pEmbeddedMap;\r
180     FX_DWORD    m_EmbeddedCount;\r
181 #ifndef _FPDFAPI_MINI_\r
182     CPDF_FXMP*  m_pExternalMap;\r
183 #endif\r
184 };\r
185 class CPDF_ToUnicodeMap : public CFX_Object\r
186 {\r
187 public:\r
188     void                                        Load(CPDF_Stream* pStream);\r
189     CFX_WideString                      Lookup(FX_DWORD charcode);\r
190     FX_DWORD                            ReverseLookup(FX_WCHAR unicode);\r
191 protected:\r
192     CFX_CMapDWordToDWord        m_Map;\r
193     CPDF_CID2UnicodeMap*        m_pBaseMap;\r
194     CFX_WideTextBuf                     m_MultiCharBuf;\r
195 };\r
196 class CPDF_FontCharMap : public CFX_CharMap, public CFX_Object\r
197 {\r
198 public:\r
199     CPDF_FontCharMap(CPDF_Font* pFont);\r
200     CPDF_Font*          m_pFont;\r
201 };\r