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