9b3a5bf7dcb6e101d3d754b6a4947c451b3725ac
[pdfium.git] / core / include / fpdfapi / fpdf_module.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 _FPDF_MODULE_
8 #define _FPDF_MODULE_
9 #ifndef _FXCRT_EXTENSION_
10 #include "../fxcrt/fx_ext.h"
11 #endif
12 class CPDF_ModuleMgr;
13 class CPDF_PageModuleDef;
14 class CPDF_RenderModuleDef;
15 class CPDF_SecurityHandler;
16 class CCodec_ModuleMgr;
17 class CPDF_Dictionary;
18 class ICodec_JpegModule;
19 class ICodec_JpxModule;
20 class ICodec_FaxModule;
21 class ICodec_Jbig2Module;
22 class ICodec_IccModule;
23 class ICodec_FlateModule;
24 #define ADDIN_NAME_CJK                  "Eastern Asian Language Support"
25 #define ADDIN_NAME_DECODER              "JPEG2000 and JBIG2 Image Decoders"
26 class CPDF_ModuleMgr 
27 {
28 public:
29
30     static void Create();
31
32     static CPDF_ModuleMgr*      Get();
33
34     static void Destroy();
35
36
37
38     void                SetCodecModule(CCodec_ModuleMgr* pModule)
39     {
40         m_pCodecModule = pModule;
41     }
42     CCodec_ModuleMgr*           GetCodecModule()
43     {
44         return m_pCodecModule;
45     }
46
47     void                InitPageModule();
48
49     void                InitRenderModule();
50
51     void                SetDownloadCallback(FX_BOOL (*callback)(FX_LPCSTR module_name));
52
53     FX_BOOL             DownloadModule(FX_LPCSTR module_name);
54
55     void                NotifyModuleAvailable(FX_LPCSTR module_name);
56
57
58
59     CPDF_RenderModuleDef*       GetRenderModule() const
60     {
61         return m_pRenderModule;
62     }
63
64     CPDF_PageModuleDef*         GetPageModule() const
65     {
66         return m_pPageModule;
67     }
68
69
70
71
72     void                                        LoadEmbeddedGB1CMaps();
73
74     void                                        LoadEmbeddedCNS1CMaps();
75
76     void                                        LoadEmbeddedJapan1CMaps();
77
78     void                                        LoadEmbeddedKorea1CMaps();
79
80     ICodec_FaxModule*           GetFaxModule();
81     ICodec_JpegModule*          GetJpegModule();
82     ICodec_JpxModule*           GetJpxModule();
83     ICodec_Jbig2Module*         GetJbig2Module();
84     ICodec_IccModule*           GetIccModule();
85     ICodec_FlateModule*         GetFlateModule();
86
87     void                                        RegisterSecurityHandler(FX_LPCSTR name, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param);
88
89     CPDF_SecurityHandler*       CreateSecurityHandler(FX_LPCSTR name);
90
91     void                                        SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);
92
93     FX_LPVOID                           GetPrivateData(FX_LPVOID module_id);
94
95     int                                         m_FileBufSize;
96 protected:
97
98     CPDF_ModuleMgr();
99
100     ~CPDF_ModuleMgr();
101     void                                        Initialize();
102
103     void                                        InitModules();
104
105
106
107     CCodec_ModuleMgr*           m_pCodecModule;
108
109     CPDF_RenderModuleDef*       m_pRenderModule;
110
111     CPDF_PageModuleDef*         m_pPageModule;
112
113
114     FX_BOOL (*m_pDownloadCallback)(FX_LPCSTR module_name);
115
116     CFX_MapByteStringToPtr      m_SecurityHandlerMap;
117
118     CFX_PrivateData                     m_privateData;
119 };
120 class CPDF_Document;
121 class CPDF_DocPageData;
122 class CPDF_FontGlobals;
123 class IPDF_FontMgr;
124 class IPDF_FontMapper;
125 class CPDF_ColorSpace;
126 class CPDF_PageModuleDef 
127 {
128 public:
129     virtual ~CPDF_PageModuleDef() {}
130
131     virtual CPDF_DocPageData*   CreateDocData(CPDF_Document* pDoc)
132     {
133         return NULL;
134     }
135
136     virtual void                                ReleaseDoc(CPDF_Document*) {}
137     virtual void                                ClearDoc(CPDF_Document*) {}
138
139     virtual CPDF_FontGlobals*   GetFontGlobals()
140     {
141         return NULL;
142     }
143
144     virtual void                                ClearStockFont(CPDF_Document* pDoc) {}
145
146     virtual void                                NotifyCJKAvailable() {}
147
148     virtual CPDF_ColorSpace*    GetStockCS(int family)
149     {
150         return NULL;
151     }
152 };
153 class CPDF_PageObjects;
154 class CFX_AffineMatrix;
155 class CPDF_RenderOptions;
156 class CPDF_Page;
157 class CPDF_DocRenderData;
158 class CPDF_PageRenderCache;
159 class CFX_BitmapDevice;
160 class CPDF_Stream;
161 class CFX_DIBSource;
162 class CPDF_RenderConfig;
163 class CPDF_Image;
164 class CPDF_RenderModuleDef 
165 {
166 public:
167     virtual ~CPDF_RenderModuleDef() {}
168
169     virtual CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc)
170     {
171         return NULL;
172     }
173
174     virtual void        DestroyDocData(CPDF_DocRenderData*) {}
175     virtual void        ClearDocData(CPDF_DocRenderData*) {}
176
177     virtual CPDF_DocRenderData* GetRenderData()
178     {
179         return NULL;
180     }
181
182     virtual CPDF_PageRenderCache*       CreatePageCache(CPDF_Page* pPage)
183     {
184         return NULL;
185     }
186
187     virtual void        DestroyPageCache(CPDF_PageRenderCache*) {}
188
189     virtual void        NotifyDecoderAvailable() {}
190
191     virtual CPDF_RenderConfig* GetConfig()
192     {
193         return NULL;
194     }
195 };
196 #endif